revisit 0.0.19__py2.py3-none-any.whl → 0.0.20__py2.py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
revisit/static/widget.js
CHANGED
@@ -53,4 +53,3 @@ react-dom/cjs/react-dom-client.production.js:
|
|
53
53
|
* LICENSE file in the root directory of this source tree.
|
54
54
|
*)
|
55
55
|
*/
|
56
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5wcm9kdWN0aW9uLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLWNsaWVudC5wcm9kdWN0aW9uLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2xpZW50LmpzIiwgIi4uLy4uLy4uL2pzL3dpZGdldC50c3giLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bhbnl3aWRnZXQvcmVhY3QvaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LnByb2R1Y3Rpb24uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKSxcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLFxuICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLFxuICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLFxuICBSRUFDVF9DT05TVU1FUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLFxuICBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxcbiAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxcbiAgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLFxuICBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3I7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG51bGwgPT09IG1heWJlSXRlcmFibGUgfHwgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG1heWJlSXRlcmFibGUpIHJldHVybiBudWxsO1xuICBtYXliZUl0ZXJhYmxlID1cbiAgICAoTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSkgfHxcbiAgICBtYXliZUl0ZXJhYmxlW1wiQEBpdGVyYXRvclwiXTtcbiAgcmV0dXJuIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG1heWJlSXRlcmFibGUgPyBtYXliZUl0ZXJhYmxlIDogbnVsbDtcbn1cbnZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IHtcbiAgICBpc01vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9LFxuICAgIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKCkge30sXG4gICAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKCkge30sXG4gICAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAoKSB7fVxuICB9LFxuICBhc3NpZ24gPSBPYmplY3QuYXNzaWduLFxuICBlbXB0eU9iamVjdCA9IHt9O1xuZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5Db21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB7fTtcbkNvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxsYmFjaykge1xuICBpZiAoXG4gICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIHBhcnRpYWxTdGF0ZSAmJlxuICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHBhcnRpYWxTdGF0ZSAmJlxuICAgIG51bGwgIT0gcGFydGlhbFN0YXRlXG4gIClcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwidGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCJcbiAgICApO1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssIFwic2V0U3RhdGVcIik7XG59O1xuQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGNhbGxiYWNrLCBcImZvcmNlVXBkYXRlXCIpO1xufTtcbmZ1bmN0aW9uIENvbXBvbmVudER1bW15KCkge31cbkNvbXBvbmVudER1bW15LnByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG52YXIgcHVyZUNvbXBvbmVudFByb3RvdHlwZSA9IChQdXJlQ29tcG9uZW50LnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnREdW1teSgpKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuY29uc3RydWN0b3IgPSBQdXJlQ29tcG9uZW50O1xuYXNzaWduKHB1cmVDb21wb25lbnRQcm90b3R5cGUsIENvbXBvbmVudC5wcm90b3R5cGUpO1xucHVyZUNvbXBvbmVudFByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9ICEwO1xudmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheSxcbiAgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSB7IEg6IG51bGwsIEE6IG51bGwsIFQ6IG51bGwsIFM6IG51bGwgfSxcbiAgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgc2VsZiA9IHByb3BzLnJlZjtcbiAgcmV0dXJuIHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgIHR5cGU6IHR5cGUsXG4gICAga2V5OiBrZXksXG4gICAgcmVmOiB2b2lkIDAgIT09IHNlbGYgPyBzZWxmIDogbnVsbCxcbiAgICBwcm9wczogcHJvcHNcbiAgfTtcbn1cbmZ1bmN0aW9uIGNsb25lQW5kUmVwbGFjZUtleShvbGRFbGVtZW50LCBuZXdLZXkpIHtcbiAgcmV0dXJuIFJlYWN0RWxlbWVudChcbiAgICBvbGRFbGVtZW50LnR5cGUsXG4gICAgbmV3S2V5LFxuICAgIHZvaWQgMCxcbiAgICB2b2lkIDAsXG4gICAgdm9pZCAwLFxuICAgIG9sZEVsZW1lbnQucHJvcHNcbiAgKTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvYmplY3QgJiZcbiAgICBudWxsICE9PSBvYmplY3QgJiZcbiAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxuICApO1xufVxuZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICB2YXIgZXNjYXBlckxvb2t1cCA9IHsgXCI9XCI6IFwiPTBcIiwgXCI6XCI6IFwiPTJcIiB9O1xuICByZXR1cm4gKFxuICAgIFwiJFwiICtcbiAgICBrZXkucmVwbGFjZSgvWz06XS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgICB9KVxuICApO1xufVxudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4ID0gL1xcLysvZztcbmZ1bmN0aW9uIGdldEVsZW1lbnRLZXkoZWxlbWVudCwgaW5kZXgpIHtcbiAgcmV0dXJuIFwib2JqZWN0XCIgPT09IHR5cGVvZiBlbGVtZW50ICYmIG51bGwgIT09IGVsZW1lbnQgJiYgbnVsbCAhPSBlbGVtZW50LmtleVxuICAgID8gZXNjYXBlKFwiXCIgKyBlbGVtZW50LmtleSlcbiAgICA6IGluZGV4LnRvU3RyaW5nKDM2KTtcbn1cbmZ1bmN0aW9uIG5vb3AkMSgpIHt9XG5mdW5jdGlvbiByZXNvbHZlVGhlbmFibGUodGhlbmFibGUpIHtcbiAgc3dpdGNoICh0aGVuYWJsZS5zdGF0dXMpIHtcbiAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICByZXR1cm4gdGhlbmFibGUudmFsdWU7XG4gICAgY2FzZSBcInJlamVjdGVkXCI6XG4gICAgICB0aHJvdyB0aGVuYWJsZS5yZWFzb247XG4gICAgZGVmYXVsdDpcbiAgICAgIHN3aXRjaCAoXG4gICAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgdGhlbmFibGUuc3RhdHVzXG4gICAgICAgICAgPyB0aGVuYWJsZS50aGVuKG5vb3AkMSwgbm9vcCQxKVxuICAgICAgICAgIDogKCh0aGVuYWJsZS5zdGF0dXMgPSBcInBlbmRpbmdcIiksXG4gICAgICAgICAgICB0aGVuYWJsZS50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoZnVsZmlsbGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBcInBlbmRpbmdcIiA9PT0gdGhlbmFibGUuc3RhdHVzICYmXG4gICAgICAgICAgICAgICAgICAoKHRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCIpLFxuICAgICAgICAgICAgICAgICAgKHRoZW5hYmxlLnZhbHVlID0gZnVsZmlsbGVkVmFsdWUpKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgXCJwZW5kaW5nXCIgPT09IHRoZW5hYmxlLnN0YXR1cyAmJlxuICAgICAgICAgICAgICAgICAgKCh0aGVuYWJsZS5zdGF0dXMgPSBcInJlamVjdGVkXCIpLCAodGhlbmFibGUucmVhc29uID0gZXJyb3IpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSksXG4gICAgICAgIHRoZW5hYmxlLnN0YXR1cylcbiAgICAgICkge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHRoZW5hYmxlLnZhbHVlO1xuICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICB0aHJvdyB0aGVuYWJsZS5yZWFzb247XG4gICAgICB9XG4gIH1cbiAgdGhyb3cgdGhlbmFibGU7XG59XG5mdW5jdGlvbiBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuYW1lU29GYXIsIGNhbGxiYWNrKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuICBpZiAoXCJ1bmRlZmluZWRcIiA9PT0gdHlwZSB8fCBcImJvb2xlYW5cIiA9PT0gdHlwZSkgY2hpbGRyZW4gPSBudWxsO1xuICB2YXIgaW52b2tlQ2FsbGJhY2sgPSAhMTtcbiAgaWYgKG51bGwgPT09IGNoaWxkcmVuKSBpbnZva2VDYWxsYmFjayA9ICEwO1xuICBlbHNlXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIGludm9rZUNhbGxiYWNrID0gITA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICBzd2l0Y2ggKGNoaWxkcmVuLiQkdHlwZW9mKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gITA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChpbnZva2VDYWxsYmFjayA9IGNoaWxkcmVuLl9pbml0KSxcbiAgICAgICAgICAgICAgbWFwSW50b0FycmF5KFxuICAgICAgICAgICAgICAgIGludm9rZUNhbGxiYWNrKGNoaWxkcmVuLl9wYXlsb2FkKSxcbiAgICAgICAgICAgICAgICBhcnJheSxcbiAgICAgICAgICAgICAgICBlc2NhcGVkUHJlZml4LFxuICAgICAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICBpZiAoaW52b2tlQ2FsbGJhY2spXG4gICAgcmV0dXJuIChcbiAgICAgIChjYWxsYmFjayA9IGNhbGxiYWNrKGNoaWxkcmVuKSksXG4gICAgICAoaW52b2tlQ2FsbGJhY2sgPVxuICAgICAgICBcIlwiID09PSBuYW1lU29GYXIgPyBcIi5cIiArIGdldEVsZW1lbnRLZXkoY2hpbGRyZW4sIDApIDogbmFtZVNvRmFyKSxcbiAgICAgIGlzQXJyYXlJbXBsKGNhbGxiYWNrKVxuICAgICAgICA/ICgoZXNjYXBlZFByZWZpeCA9IFwiXCIpLFxuICAgICAgICAgIG51bGwgIT0gaW52b2tlQ2FsbGJhY2sgJiZcbiAgICAgICAgICAgIChlc2NhcGVkUHJlZml4ID1cbiAgICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2sucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgXCIkJi9cIikgKyBcIi9cIiksXG4gICAgICAgICAgbWFwSW50b0FycmF5KGNhbGxiYWNrLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgXCJcIiwgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgIH0pKVxuICAgICAgICA6IG51bGwgIT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAoaXNWYWxpZEVsZW1lbnQoY2FsbGJhY2spICYmXG4gICAgICAgICAgICAoY2FsbGJhY2sgPSBjbG9uZUFuZFJlcGxhY2VLZXkoXG4gICAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgICBlc2NhcGVkUHJlZml4ICtcbiAgICAgICAgICAgICAgICAobnVsbCA9PSBjYWxsYmFjay5rZXkgfHxcbiAgICAgICAgICAgICAgICAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ua2V5ID09PSBjYWxsYmFjay5rZXkpXG4gICAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICAgIDogKFwiXCIgKyBjYWxsYmFjay5rZXkpLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsXG4gICAgICAgICAgICAgICAgICAgICAgXCIkJi9cIlxuICAgICAgICAgICAgICAgICAgICApICsgXCIvXCIpICtcbiAgICAgICAgICAgICAgICBpbnZva2VDYWxsYmFja1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgYXJyYXkucHVzaChjYWxsYmFjaykpLFxuICAgICAgMVxuICAgICk7XG4gIGludm9rZUNhbGxiYWNrID0gMDtcbiAgdmFyIG5leHROYW1lUHJlZml4ID0gXCJcIiA9PT0gbmFtZVNvRmFyID8gXCIuXCIgOiBuYW1lU29GYXIgKyBcIjpcIjtcbiAgaWYgKGlzQXJyYXlJbXBsKGNoaWxkcmVuKSlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgICAgKG5hbWVTb0ZhciA9IGNoaWxkcmVuW2ldKSxcbiAgICAgICAgKHR5cGUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkobmFtZVNvRmFyLCBpKSksXG4gICAgICAgIChpbnZva2VDYWxsYmFjayArPSBtYXBJbnRvQXJyYXkoXG4gICAgICAgICAgbmFtZVNvRmFyLFxuICAgICAgICAgIGFycmF5LFxuICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBjYWxsYmFja1xuICAgICAgICApKTtcbiAgZWxzZSBpZiAoKChpID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbikpLCBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpKSlcbiAgICBmb3IgKFxuICAgICAgY2hpbGRyZW4gPSBpLmNhbGwoY2hpbGRyZW4pLCBpID0gMDtcbiAgICAgICEobmFtZVNvRmFyID0gY2hpbGRyZW4ubmV4dCgpKS5kb25lO1xuXG4gICAgKVxuICAgICAgKG5hbWVTb0ZhciA9IG5hbWVTb0Zhci52YWx1ZSksXG4gICAgICAgICh0eXBlID0gbmV4dE5hbWVQcmVmaXggKyBnZXRFbGVtZW50S2V5KG5hbWVTb0ZhciwgaSsrKSksXG4gICAgICAgIChpbnZva2VDYWxsYmFjayArPSBtYXBJbnRvQXJyYXkoXG4gICAgICAgICAgbmFtZVNvRmFyLFxuICAgICAgICAgIGFycmF5LFxuICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBjYWxsYmFja1xuICAgICAgICApKTtcbiAgZWxzZSBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZSkge1xuICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjaGlsZHJlbi50aGVuKVxuICAgICAgcmV0dXJuIG1hcEludG9BcnJheShcbiAgICAgICAgcmVzb2x2ZVRoZW5hYmxlKGNoaWxkcmVuKSxcbiAgICAgICAgYXJyYXksXG4gICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgY2FsbGJhY2tcbiAgICAgICk7XG4gICAgYXJyYXkgPSBTdHJpbmcoY2hpbGRyZW4pO1xuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICtcbiAgICAgICAgKFwiW29iamVjdCBPYmplY3RdXCIgPT09IGFycmF5XG4gICAgICAgICAgPyBcIm9iamVjdCB3aXRoIGtleXMge1wiICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oXCIsIFwiKSArIFwifVwiXG4gICAgICAgICAgOiBhcnJheSkgK1xuICAgICAgICBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGludm9rZUNhbGxiYWNrO1xufVxuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKG51bGwgPT0gY2hpbGRyZW4pIHJldHVybiBjaGlsZHJlbjtcbiAgdmFyIHJlc3VsdCA9IFtdLFxuICAgIGNvdW50ID0gMDtcbiAgbWFwSW50b0FycmF5KGNoaWxkcmVuLCByZXN1bHQsIFwiXCIsIFwiXCIsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGNvdW50KyspO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGxhenlJbml0aWFsaXplcihwYXlsb2FkKSB7XG4gIGlmICgtMSA9PT0gcGF5bG9hZC5fc3RhdHVzKSB7XG4gICAgdmFyIGN0b3IgPSBwYXlsb2FkLl9yZXN1bHQ7XG4gICAgY3RvciA9IGN0b3IoKTtcbiAgICBjdG9yLnRoZW4oXG4gICAgICBmdW5jdGlvbiAobW9kdWxlT2JqZWN0KSB7XG4gICAgICAgIGlmICgwID09PSBwYXlsb2FkLl9zdGF0dXMgfHwgLTEgPT09IHBheWxvYWQuX3N0YXR1cylcbiAgICAgICAgICAocGF5bG9hZC5fc3RhdHVzID0gMSksIChwYXlsb2FkLl9yZXN1bHQgPSBtb2R1bGVPYmplY3QpO1xuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICBpZiAoMCA9PT0gcGF5bG9hZC5fc3RhdHVzIHx8IC0xID09PSBwYXlsb2FkLl9zdGF0dXMpXG4gICAgICAgICAgKHBheWxvYWQuX3N0YXR1cyA9IDIpLCAocGF5bG9hZC5fcmVzdWx0ID0gZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gICAgLTEgPT09IHBheWxvYWQuX3N0YXR1cyAmJiAoKHBheWxvYWQuX3N0YXR1cyA9IDApLCAocGF5bG9hZC5fcmVzdWx0ID0gY3RvcikpO1xuICB9XG4gIGlmICgxID09PSBwYXlsb2FkLl9zdGF0dXMpIHJldHVybiBwYXlsb2FkLl9yZXN1bHQuZGVmYXVsdDtcbiAgdGhyb3cgcGF5bG9hZC5fcmVzdWx0O1xufVxudmFyIHJlcG9ydEdsb2JhbEVycm9yID1cbiAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVwb3J0RXJyb3JcbiAgICA/IHJlcG9ydEVycm9yXG4gICAgOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiB3aW5kb3cgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB3aW5kb3cuRXJyb3JFdmVudFxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgZXZlbnQgPSBuZXcgd2luZG93LkVycm9yRXZlbnQoXCJlcnJvclwiLCB7XG4gICAgICAgICAgICBidWJibGVzOiAhMCxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6ICEwLFxuICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGVycm9yICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IGVycm9yICYmXG4gICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBlcnJvci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgPyBTdHJpbmcoZXJyb3IubWVzc2FnZSlcbiAgICAgICAgICAgICAgICA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoIXdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KSkgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBwcm9jZXNzICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcHJvY2Vzcy5lbWl0XG4gICAgICAgICkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdChcInVuY2F1Z2h0RXhjZXB0aW9uXCIsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9O1xuZnVuY3Rpb24gbm9vcCgpIHt9XG5leHBvcnRzLkNoaWxkcmVuID0ge1xuICBtYXA6IG1hcENoaWxkcmVuLFxuICBmb3JFYWNoOiBmdW5jdGlvbiAoY2hpbGRyZW4sIGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCkge1xuICAgIG1hcENoaWxkcmVuKFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvckVhY2hGdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgZm9yRWFjaENvbnRleHRcbiAgICApO1xuICB9LFxuICBjb3VudDogZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgdmFyIG4gPSAwO1xuICAgIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgICBuKys7XG4gICAgfSk7XG4gICAgcmV0dXJuIG47XG4gIH0sXG4gIHRvQXJyYXk6IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICAgIHJldHVybiAoXG4gICAgICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH0pIHx8IFtdXG4gICAgKTtcbiAgfSxcbiAgb25seTogZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC5cIlxuICAgICAgKTtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbn07XG5leHBvcnRzLkNvbXBvbmVudCA9IENvbXBvbmVudDtcbmV4cG9ydHMuRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xuZXhwb3J0cy5Qcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG5leHBvcnRzLlB1cmVDb21wb25lbnQgPSBQdXJlQ29tcG9uZW50O1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuZXhwb3J0cy5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUgPVxuICBSZWFjdFNoYXJlZEludGVybmFscztcbmV4cG9ydHMuYWN0ID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBFcnJvcihcImFjdCguLi4pIGlzIG5vdCBzdXBwb3J0ZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMgb2YgUmVhY3QuXCIpO1xufTtcbmV4cG9ydHMuY2FjaGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG5leHBvcnRzLmNsb25lRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIGlmIChudWxsID09PSBlbGVtZW50IHx8IHZvaWQgMCA9PT0gZWxlbWVudClcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArIGVsZW1lbnQgKyBcIi5cIlxuICAgICk7XG4gIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgZWxlbWVudC5wcm9wcyksXG4gICAga2V5ID0gZWxlbWVudC5rZXksXG4gICAgb3duZXIgPSB2b2lkIDA7XG4gIGlmIChudWxsICE9IGNvbmZpZylcbiAgICBmb3IgKHByb3BOYW1lIGluICh2b2lkIDAgIT09IGNvbmZpZy5yZWYgJiYgKG93bmVyID0gdm9pZCAwKSxcbiAgICB2b2lkIDAgIT09IGNvbmZpZy5rZXkgJiYgKGtleSA9IFwiXCIgKyBjb25maWcua2V5KSxcbiAgICBjb25maWcpKVxuICAgICAgIWhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgfHxcbiAgICAgICAgXCJrZXlcIiA9PT0gcHJvcE5hbWUgfHxcbiAgICAgICAgXCJfX3NlbGZcIiA9PT0gcHJvcE5hbWUgfHxcbiAgICAgICAgXCJfX3NvdXJjZVwiID09PSBwcm9wTmFtZSB8fFxuICAgICAgICAoXCJyZWZcIiA9PT0gcHJvcE5hbWUgJiYgdm9pZCAwID09PSBjb25maWcucmVmKSB8fFxuICAgICAgICAocHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXSk7XG4gIHZhciBwcm9wTmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICBpZiAoMSA9PT0gcHJvcE5hbWUpIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIGVsc2UgaWYgKDEgPCBwcm9wTmFtZSkge1xuICAgIGZvciAodmFyIGNoaWxkQXJyYXkgPSBBcnJheShwcm9wTmFtZSksIGkgPSAwOyBpIDwgcHJvcE5hbWU7IGkrKylcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuICByZXR1cm4gUmVhY3RFbGVtZW50KGVsZW1lbnQudHlwZSwga2V5LCB2b2lkIDAsIHZvaWQgMCwgb3duZXIsIHByb3BzKTtcbn07XG5leHBvcnRzLmNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbiAoZGVmYXVsdFZhbHVlKSB7XG4gIGRlZmF1bHRWYWx1ZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfQ09OVEVYVF9UWVBFLFxuICAgIF9jdXJyZW50VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICBfY3VycmVudFZhbHVlMjogZGVmYXVsdFZhbHVlLFxuICAgIF90aHJlYWRDb3VudDogMCxcbiAgICBQcm92aWRlcjogbnVsbCxcbiAgICBDb25zdW1lcjogbnVsbFxuICB9O1xuICBkZWZhdWx0VmFsdWUuUHJvdmlkZXIgPSBkZWZhdWx0VmFsdWU7XG4gIGRlZmF1bHRWYWx1ZS5Db25zdW1lciA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfQ09OU1VNRVJfVFlQRSxcbiAgICBfY29udGV4dDogZGVmYXVsdFZhbHVlXG4gIH07XG4gIHJldHVybiBkZWZhdWx0VmFsdWU7XG59O1xuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgdmFyIHByb3BOYW1lLFxuICAgIHByb3BzID0ge30sXG4gICAga2V5ID0gbnVsbDtcbiAgaWYgKG51bGwgIT0gY29uZmlnKVxuICAgIGZvciAocHJvcE5hbWUgaW4gKHZvaWQgMCAhPT0gY29uZmlnLmtleSAmJiAoa2V5ID0gXCJcIiArIGNvbmZpZy5rZXkpLCBjb25maWcpKVxuICAgICAgaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJlxuICAgICAgICBcImtleVwiICE9PSBwcm9wTmFtZSAmJlxuICAgICAgICBcIl9fc2VsZlwiICE9PSBwcm9wTmFtZSAmJlxuICAgICAgICBcIl9fc291cmNlXCIgIT09IHByb3BOYW1lICYmXG4gICAgICAgIChwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdKTtcbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gIGlmICgxID09PSBjaGlsZHJlbkxlbmd0aCkgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgZWxzZSBpZiAoMSA8IGNoaWxkcmVuTGVuZ3RoKSB7XG4gICAgZm9yICh2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKSwgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKVxuICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9XG4gIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKVxuICAgIGZvciAocHJvcE5hbWUgaW4gKChjaGlsZHJlbkxlbmd0aCA9IHR5cGUuZGVmYXVsdFByb3BzKSwgY2hpbGRyZW5MZW5ndGgpKVxuICAgICAgdm9pZCAwID09PSBwcm9wc1twcm9wTmFtZV0gJiZcbiAgICAgICAgKHByb3BzW3Byb3BOYW1lXSA9IGNoaWxkcmVuTGVuZ3RoW3Byb3BOYW1lXSk7XG4gIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCB2b2lkIDAsIHZvaWQgMCwgbnVsbCwgcHJvcHMpO1xufTtcbmV4cG9ydHMuY3JlYXRlUmVmID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4geyBjdXJyZW50OiBudWxsIH07XG59O1xuZXhwb3J0cy5mb3J3YXJkUmVmID0gZnVuY3Rpb24gKHJlbmRlcikge1xuICByZXR1cm4geyAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSwgcmVuZGVyOiByZW5kZXIgfTtcbn07XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5leHBvcnRzLmxhenkgPSBmdW5jdGlvbiAoY3Rvcikge1xuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9MQVpZX1RZUEUsXG4gICAgX3BheWxvYWQ6IHsgX3N0YXR1czogLTEsIF9yZXN1bHQ6IGN0b3IgfSxcbiAgICBfaW5pdDogbGF6eUluaXRpYWxpemVyXG4gIH07XG59O1xuZXhwb3J0cy5tZW1vID0gZnVuY3Rpb24gKHR5cGUsIGNvbXBhcmUpIHtcbiAgcmV0dXJuIHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTUVNT19UWVBFLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgY29tcGFyZTogdm9pZCAwID09PSBjb21wYXJlID8gbnVsbCA6IGNvbXBhcmVcbiAgfTtcbn07XG5leHBvcnRzLnN0YXJ0VHJhbnNpdGlvbiA9IGZ1bmN0aW9uIChzY29wZSkge1xuICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdFNoYXJlZEludGVybmFscy5ULFxuICAgIGN1cnJlbnRUcmFuc2l0aW9uID0ge307XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBjdXJyZW50VHJhbnNpdGlvbjtcbiAgdHJ5IHtcbiAgICB2YXIgcmV0dXJuVmFsdWUgPSBzY29wZSgpLFxuICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuICAgIG51bGwgIT09IG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoICYmXG4gICAgICBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaChjdXJyZW50VHJhbnNpdGlvbiwgcmV0dXJuVmFsdWUpO1xuICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZSAmJlxuICAgICAgbnVsbCAhPT0gcmV0dXJuVmFsdWUgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlLnRoZW4gJiZcbiAgICAgIHJldHVyblZhbHVlLnRoZW4obm9vcCwgcmVwb3J0R2xvYmFsRXJyb3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcG9ydEdsb2JhbEVycm9yKGVycm9yKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gcHJldlRyYW5zaXRpb247XG4gIH1cbn07XG5leHBvcnRzLnVuc3RhYmxlX3VzZUNhY2hlUmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkgudXNlQ2FjaGVSZWZyZXNoKCk7XG59O1xuZXhwb3J0cy51c2UgPSBmdW5jdGlvbiAodXNhYmxlKSB7XG4gIHJldHVybiBSZWFjdFNoYXJlZEludGVybmFscy5ILnVzZSh1c2FibGUpO1xufTtcbmV4cG9ydHMudXNlQWN0aW9uU3RhdGUgPSBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUsIHBlcm1hbGluaykge1xuICByZXR1cm4gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSC51c2VBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSwgcGVybWFsaW5rKTtcbn07XG5leHBvcnRzLnVzZUNhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHJldHVybiBSZWFjdFNoYXJlZEludGVybmFscy5ILnVzZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbn07XG5leHBvcnRzLnVzZUNvbnRleHQgPSBmdW5jdGlvbiAoQ29udGV4dCkge1xuICByZXR1cm4gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSC51c2VDb250ZXh0KENvbnRleHQpO1xufTtcbmV4cG9ydHMudXNlRGVidWdWYWx1ZSA9IGZ1bmN0aW9uICgpIHt9O1xuZXhwb3J0cy51c2VEZWZlcnJlZFZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgcmV0dXJuIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkgudXNlRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbn07XG5leHBvcnRzLnVzZUVmZmVjdCA9IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkgudXNlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG59O1xuZXhwb3J0cy51c2VJZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkgudXNlSWQoKTtcbn07XG5leHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkgudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG59O1xuZXhwb3J0cy51c2VJbnNlcnRpb25FZmZlY3QgPSBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiBSZWFjdFNoYXJlZEludGVybmFscy5ILnVzZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpO1xufTtcbmV4cG9ydHMudXNlTGF5b3V0RWZmZWN0ID0gZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSC51c2VMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbn07XG5leHBvcnRzLnVzZU1lbW8gPSBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiBSZWFjdFNoYXJlZEludGVybmFscy5ILnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbn07XG5leHBvcnRzLnVzZU9wdGltaXN0aWMgPSBmdW5jdGlvbiAocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgcmV0dXJuIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkgudXNlT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG59O1xuZXhwb3J0cy51c2VSZWR1Y2VyID0gZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgcmV0dXJuIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkgudXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbn07XG5leHBvcnRzLnVzZVJlZiA9IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgcmV0dXJuIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkgudXNlUmVmKGluaXRpYWxWYWx1ZSk7XG59O1xuZXhwb3J0cy51c2VTdGF0ZSA9IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkgudXNlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbn07XG5leHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlID0gZnVuY3Rpb24gKFxuICBzdWJzY3JpYmUsXG4gIGdldFNuYXBzaG90LFxuICBnZXRTZXJ2ZXJTbmFwc2hvdFxuKSB7XG4gIHJldHVybiBSZWFjdFNoYXJlZEludGVybmFscy5ILnVzZVN5bmNFeHRlcm5hbFN0b3JlKFxuICAgIHN1YnNjcmliZSxcbiAgICBnZXRTbmFwc2hvdCxcbiAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICApO1xufTtcbmV4cG9ydHMudXNlVHJhbnNpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkgudXNlVHJhbnNpdGlvbigpO1xufTtcbmV4cG9ydHMudmVyc2lvbiA9IFwiMTkuMC4wXCI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiBzY2hlZHVsZXIucHJvZHVjdGlvbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5mdW5jdGlvbiBwdXNoKGhlYXAsIG5vZGUpIHtcbiAgdmFyIGluZGV4ID0gaGVhcC5sZW5ndGg7XG4gIGhlYXAucHVzaChub2RlKTtcbiAgYTogZm9yICg7IDAgPCBpbmRleDsgKSB7XG4gICAgdmFyIHBhcmVudEluZGV4ID0gKGluZGV4IC0gMSkgPj4+IDEsXG4gICAgICBwYXJlbnQgPSBoZWFwW3BhcmVudEluZGV4XTtcbiAgICBpZiAoMCA8IGNvbXBhcmUocGFyZW50LCBub2RlKSlcbiAgICAgIChoZWFwW3BhcmVudEluZGV4XSA9IG5vZGUpLCAoaGVhcFtpbmRleF0gPSBwYXJlbnQpLCAoaW5kZXggPSBwYXJlbnRJbmRleCk7XG4gICAgZWxzZSBicmVhayBhO1xuICB9XG59XG5mdW5jdGlvbiBwZWVrKGhlYXApIHtcbiAgcmV0dXJuIDAgPT09IGhlYXAubGVuZ3RoID8gbnVsbCA6IGhlYXBbMF07XG59XG5mdW5jdGlvbiBwb3AoaGVhcCkge1xuICBpZiAoMCA9PT0gaGVhcC5sZW5ndGgpIHJldHVybiBudWxsO1xuICB2YXIgZmlyc3QgPSBoZWFwWzBdLFxuICAgIGxhc3QgPSBoZWFwLnBvcCgpO1xuICBpZiAobGFzdCAhPT0gZmlyc3QpIHtcbiAgICBoZWFwWzBdID0gbGFzdDtcbiAgICBhOiBmb3IgKFxuICAgICAgdmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gaGVhcC5sZW5ndGgsIGhhbGZMZW5ndGggPSBsZW5ndGggPj4+IDE7XG4gICAgICBpbmRleCA8IGhhbGZMZW5ndGg7XG5cbiAgICApIHtcbiAgICAgIHZhciBsZWZ0SW5kZXggPSAyICogKGluZGV4ICsgMSkgLSAxLFxuICAgICAgICBsZWZ0ID0gaGVhcFtsZWZ0SW5kZXhdLFxuICAgICAgICByaWdodEluZGV4ID0gbGVmdEluZGV4ICsgMSxcbiAgICAgICAgcmlnaHQgPSBoZWFwW3JpZ2h0SW5kZXhdO1xuICAgICAgaWYgKDAgPiBjb21wYXJlKGxlZnQsIGxhc3QpKVxuICAgICAgICByaWdodEluZGV4IDwgbGVuZ3RoICYmIDAgPiBjb21wYXJlKHJpZ2h0LCBsZWZ0KVxuICAgICAgICAgID8gKChoZWFwW2luZGV4XSA9IHJpZ2h0KSxcbiAgICAgICAgICAgIChoZWFwW3JpZ2h0SW5kZXhdID0gbGFzdCksXG4gICAgICAgICAgICAoaW5kZXggPSByaWdodEluZGV4KSlcbiAgICAgICAgICA6ICgoaGVhcFtpbmRleF0gPSBsZWZ0KSxcbiAgICAgICAgICAgIChoZWFwW2xlZnRJbmRleF0gPSBsYXN0KSxcbiAgICAgICAgICAgIChpbmRleCA9IGxlZnRJbmRleCkpO1xuICAgICAgZWxzZSBpZiAocmlnaHRJbmRleCA8IGxlbmd0aCAmJiAwID4gY29tcGFyZShyaWdodCwgbGFzdCkpXG4gICAgICAgIChoZWFwW2luZGV4XSA9IHJpZ2h0KSwgKGhlYXBbcmlnaHRJbmRleF0gPSBsYXN0KSwgKGluZGV4ID0gcmlnaHRJbmRleCk7XG4gICAgICBlbHNlIGJyZWFrIGE7XG4gICAgfVxuICB9XG4gIHJldHVybiBmaXJzdDtcbn1cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICB2YXIgZGlmZiA9IGEuc29ydEluZGV4IC0gYi5zb3J0SW5kZXg7XG4gIHJldHVybiAwICE9PSBkaWZmID8gZGlmZiA6IGEuaWQgLSBiLmlkO1xufVxuZXhwb3J0cy51bnN0YWJsZV9ub3cgPSB2b2lkIDA7XG5pZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHBlcmZvcm1hbmNlICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHBlcmZvcm1hbmNlLm5vdykge1xuICB2YXIgbG9jYWxQZXJmb3JtYW5jZSA9IHBlcmZvcm1hbmNlO1xuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxQZXJmb3JtYW5jZS5ub3coKTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBsb2NhbERhdGUgPSBEYXRlLFxuICAgIGluaXRpYWxUaW1lID0gbG9jYWxEYXRlLm5vdygpO1xuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxEYXRlLm5vdygpIC0gaW5pdGlhbFRpbWU7XG4gIH07XG59XG52YXIgdGFza1F1ZXVlID0gW10sXG4gIHRpbWVyUXVldWUgPSBbXSxcbiAgdGFza0lkQ291bnRlciA9IDEsXG4gIGN1cnJlbnRUYXNrID0gbnVsbCxcbiAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSAzLFxuICBpc1BlcmZvcm1pbmdXb3JrID0gITEsXG4gIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gITEsXG4gIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSAhMSxcbiAgbG9jYWxTZXRUaW1lb3V0ID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygc2V0VGltZW91dCA/IHNldFRpbWVvdXQgOiBudWxsLFxuICBsb2NhbENsZWFyVGltZW91dCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNsZWFyVGltZW91dCA/IGNsZWFyVGltZW91dCA6IG51bGwsXG4gIGxvY2FsU2V0SW1tZWRpYXRlID0gXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIHNldEltbWVkaWF0ZSA/IHNldEltbWVkaWF0ZSA6IG51bGw7XG5mdW5jdGlvbiBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKSB7XG4gIGZvciAodmFyIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTsgbnVsbCAhPT0gdGltZXI7ICkge1xuICAgIGlmIChudWxsID09PSB0aW1lci5jYWxsYmFjaykgcG9wKHRpbWVyUXVldWUpO1xuICAgIGVsc2UgaWYgKHRpbWVyLnN0YXJ0VGltZSA8PSBjdXJyZW50VGltZSlcbiAgICAgIHBvcCh0aW1lclF1ZXVlKSxcbiAgICAgICAgKHRpbWVyLnNvcnRJbmRleCA9IHRpbWVyLmV4cGlyYXRpb25UaW1lKSxcbiAgICAgICAgcHVzaCh0YXNrUXVldWUsIHRpbWVyKTtcbiAgICBlbHNlIGJyZWFrO1xuICAgIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcbiAgfVxufVxuZnVuY3Rpb24gaGFuZGxlVGltZW91dChjdXJyZW50VGltZSkge1xuICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gITE7XG4gIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkKVxuICAgIGlmIChudWxsICE9PSBwZWVrKHRhc2tRdWV1ZSkpXG4gICAgICAoaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSAhMCksIHJlcXVlc3RIb3N0Q2FsbGJhY2soKTtcbiAgICBlbHNlIHtcbiAgICAgIHZhciBmaXJzdFRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcbiAgICAgIG51bGwgIT09IGZpcnN0VGltZXIgJiZcbiAgICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cbn1cbnZhciBpc01lc3NhZ2VMb29wUnVubmluZyA9ICExLFxuICB0YXNrVGltZW91dElEID0gLTEsXG4gIGZyYW1lSW50ZXJ2YWwgPSA1LFxuICBzdGFydFRpbWUgPSAtMTtcbmZ1bmN0aW9uIHNob3VsZFlpZWxkVG9Ib3N0KCkge1xuICByZXR1cm4gZXhwb3J0cy51bnN0YWJsZV9ub3coKSAtIHN0YXJ0VGltZSA8IGZyYW1lSW50ZXJ2YWwgPyAhMSA6ICEwO1xufVxuZnVuY3Rpb24gcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKCkge1xuICBpZiAoaXNNZXNzYWdlTG9vcFJ1bm5pbmcpIHtcbiAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIHZhciBoYXNNb3JlV29yayA9ICEwO1xuICAgIHRyeSB7XG4gICAgICBhOiB7XG4gICAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gITE7XG4gICAgICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgJiZcbiAgICAgICAgICAoKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSAhMSksXG4gICAgICAgICAgbG9jYWxDbGVhclRpbWVvdXQodGFza1RpbWVvdXRJRCksXG4gICAgICAgICAgKHRhc2tUaW1lb3V0SUQgPSAtMSkpO1xuICAgICAgICBpc1BlcmZvcm1pbmdXb3JrID0gITA7XG4gICAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBiOiB7XG4gICAgICAgICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50VGFzayAmJlxuICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lID4gY3VycmVudFRpbWUgJiYgc2hvdWxkWWllbGRUb0hvc3QoKVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gY3VycmVudFRhc2suY2FsbGJhY2s7XG4gICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRUYXNrLnByaW9yaXR5TGV2ZWw7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRpbnVhdGlvbkNhbGxiYWNrID0gY2FsbGJhY2soXG4gICAgICAgICAgICAgICAgICBjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250aW51YXRpb25DYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgY3VycmVudFRhc2suY2FsbGJhY2sgPSBjb250aW51YXRpb25DYWxsYmFjaztcbiAgICAgICAgICAgICAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgICAgICAgICAgICAgICAgaGFzTW9yZVdvcmsgPSAhMDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXNrID09PSBwZWVrKHRhc2tRdWV1ZSkgJiYgcG9wKHRhc2tRdWV1ZSk7XG4gICAgICAgICAgICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBwb3AodGFza1F1ZXVlKTtcbiAgICAgICAgICAgICAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudFRhc2spIGhhc01vcmVXb3JrID0gITA7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuICAgICAgICAgICAgICBudWxsICE9PSBmaXJzdFRpbWVyICYmXG4gICAgICAgICAgICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KFxuICAgICAgICAgICAgICAgICAgaGFuZGxlVGltZW91dCxcbiAgICAgICAgICAgICAgICAgIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBoYXNNb3JlV29yayA9ICExO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhayBhO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIChjdXJyZW50VGFzayA9IG51bGwpLFxuICAgICAgICAgICAgKGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsKSxcbiAgICAgICAgICAgIChpc1BlcmZvcm1pbmdXb3JrID0gITEpO1xuICAgICAgICB9XG4gICAgICAgIGhhc01vcmVXb3JrID0gdm9pZCAwO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBoYXNNb3JlV29ya1xuICAgICAgICA/IHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKClcbiAgICAgICAgOiAoaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSAhMSk7XG4gICAgfVxuICB9XG59XG52YXIgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmU7XG5pZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbG9jYWxTZXRJbW1lZGlhdGUpXG4gIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgIGxvY2FsU2V0SW1tZWRpYXRlKHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSk7XG4gIH07XG5lbHNlIGlmIChcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgTWVzc2FnZUNoYW5uZWwpIHtcbiAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKSxcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmU7XG4gIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gIH07XG59IGVsc2VcbiAgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgbG9jYWxTZXRUaW1lb3V0KHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSwgMCk7XG4gIH07XG5mdW5jdGlvbiByZXF1ZXN0SG9zdENhbGxiYWNrKCkge1xuICBpc01lc3NhZ2VMb29wUnVubmluZyB8fFxuICAgICgoaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSAhMCksIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKCkpO1xufVxuZnVuY3Rpb24gcmVxdWVzdEhvc3RUaW1lb3V0KGNhbGxiYWNrLCBtcykge1xuICB0YXNrVGltZW91dElEID0gbG9jYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBjYWxsYmFjayhleHBvcnRzLnVuc3RhYmxlX25vdygpKTtcbiAgfSwgbXMpO1xufVxuZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHkgPSA1O1xuZXhwb3J0cy51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSA9IDE7XG5leHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5ID0gNDtcbmV4cG9ydHMudW5zdGFibGVfTm9ybWFsUHJpb3JpdHkgPSAzO1xuZXhwb3J0cy51bnN0YWJsZV9Qcm9maWxpbmcgPSBudWxsO1xuZXhwb3J0cy51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSA9IDI7XG5leHBvcnRzLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrID0gZnVuY3Rpb24gKHRhc2spIHtcbiAgdGFzay5jYWxsYmFjayA9IG51bGw7XG59O1xuZXhwb3J0cy51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgfHxcbiAgICBpc1BlcmZvcm1pbmdXb3JrIHx8XG4gICAgKChpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9ICEwKSwgcmVxdWVzdEhvc3RDYWxsYmFjaygpKTtcbn07XG5leHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZnVuY3Rpb24gKGZwcykge1xuICAwID4gZnBzIHx8IDEyNSA8IGZwc1xuICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWRcIlxuICAgICAgKVxuICAgIDogKGZyYW1lSW50ZXJ2YWwgPSAwIDwgZnBzID8gTWF0aC5mbG9vcigxZTMgLyBmcHMpIDogNSk7XG59O1xuZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGN1cnJlbnRQcmlvcml0eUxldmVsO1xufTtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBwZWVrKHRhc2tRdWV1ZSk7XG59O1xuZXhwb3J0cy51bnN0YWJsZV9uZXh0ID0gZnVuY3Rpb24gKGV2ZW50SGFuZGxlcikge1xuICBzd2l0Y2ggKGN1cnJlbnRQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgMjpcbiAgICBjYXNlIDM6XG4gICAgICB2YXIgcHJpb3JpdHlMZXZlbCA9IDM7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICB9XG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuICB0cnkge1xuICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgfVxufTtcbmV4cG9ydHMudW5zdGFibGVfcGF1c2VFeGVjdXRpb24gPSBmdW5jdGlvbiAoKSB7fTtcbmV4cG9ydHMudW5zdGFibGVfcmVxdWVzdFBhaW50ID0gZnVuY3Rpb24gKCkge307XG5leHBvcnRzLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSA9IGZ1bmN0aW9uIChwcmlvcml0eUxldmVsLCBldmVudEhhbmRsZXIpIHtcbiAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgMjpcbiAgICBjYXNlIDM6XG4gICAgY2FzZSA0OlxuICAgIGNhc2UgNTpcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBwcmlvcml0eUxldmVsID0gMztcbiAgfVxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gIH1cbn07XG5leHBvcnRzLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoXG4gIHByaW9yaXR5TGV2ZWwsXG4gIGNhbGxiYWNrLFxuICBvcHRpb25zXG4pIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9wdGlvbnMgJiYgbnVsbCAhPT0gb3B0aW9uc1xuICAgID8gKChvcHRpb25zID0gb3B0aW9ucy5kZWxheSksXG4gICAgICAob3B0aW9ucyA9XG4gICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBvcHRpb25zICYmIDAgPCBvcHRpb25zXG4gICAgICAgICAgPyBjdXJyZW50VGltZSArIG9wdGlvbnNcbiAgICAgICAgICA6IGN1cnJlbnRUaW1lKSlcbiAgICA6IChvcHRpb25zID0gY3VycmVudFRpbWUpO1xuICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIDE6XG4gICAgICB2YXIgdGltZW91dCA9IC0xO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdGltZW91dCA9IDI1MDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIHRpbWVvdXQgPSAxMDczNzQxODIzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgdGltZW91dCA9IDFlNDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aW1lb3V0ID0gNWUzO1xuICB9XG4gIHRpbWVvdXQgPSBvcHRpb25zICsgdGltZW91dDtcbiAgcHJpb3JpdHlMZXZlbCA9IHtcbiAgICBpZDogdGFza0lkQ291bnRlcisrLFxuICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICBwcmlvcml0eUxldmVsOiBwcmlvcml0eUxldmVsLFxuICAgIHN0YXJ0VGltZTogb3B0aW9ucyxcbiAgICBleHBpcmF0aW9uVGltZTogdGltZW91dCxcbiAgICBzb3J0SW5kZXg6IC0xXG4gIH07XG4gIG9wdGlvbnMgPiBjdXJyZW50VGltZVxuICAgID8gKChwcmlvcml0eUxldmVsLnNvcnRJbmRleCA9IG9wdGlvbnMpLFxuICAgICAgcHVzaCh0aW1lclF1ZXVlLCBwcmlvcml0eUxldmVsKSxcbiAgICAgIG51bGwgPT09IHBlZWsodGFza1F1ZXVlKSAmJlxuICAgICAgICBwcmlvcml0eUxldmVsID09PSBwZWVrKHRpbWVyUXVldWUpICYmXG4gICAgICAgIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkXG4gICAgICAgICAgPyAobG9jYWxDbGVhclRpbWVvdXQodGFza1RpbWVvdXRJRCksICh0YXNrVGltZW91dElEID0gLTEpKVxuICAgICAgICAgIDogKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSAhMCksXG4gICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBvcHRpb25zIC0gY3VycmVudFRpbWUpKSlcbiAgICA6ICgocHJpb3JpdHlMZXZlbC5zb3J0SW5kZXggPSB0aW1lb3V0KSxcbiAgICAgIHB1c2godGFza1F1ZXVlLCBwcmlvcml0eUxldmVsKSxcbiAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkIHx8XG4gICAgICAgIGlzUGVyZm9ybWluZ1dvcmsgfHxcbiAgICAgICAgKChpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9ICEwKSwgcmVxdWVzdEhvc3RDYWxsYmFjaygpKSk7XG4gIHJldHVybiBwcmlvcml0eUxldmVsO1xufTtcbmV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQgPSBzaG91bGRZaWVsZFRvSG9zdDtcbmV4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHZhciBwYXJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcGFyZW50UHJpb3JpdHlMZXZlbDtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgIH1cbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWRvbS5wcm9kdWN0aW9uLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbmZ1bmN0aW9uIGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoY29kZSkge1xuICB2YXIgdXJsID0gXCJodHRwczovL3JlYWN0LmRldi9lcnJvcnMvXCIgKyBjb2RlO1xuICBpZiAoMSA8IGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICB1cmwgKz0gXCI/YXJnc1tdPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1sxXSk7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICB1cmwgKz0gXCImYXJnc1tdPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICBcIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIiArXG4gICAgY29kZSArXG4gICAgXCI7IHZpc2l0IFwiICtcbiAgICB1cmwgK1xuICAgIFwiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIlxuICApO1xufVxuZnVuY3Rpb24gbm9vcCgpIHt9XG52YXIgSW50ZXJuYWxzID0ge1xuICAgIGQ6IHtcbiAgICAgIGY6IG5vb3AsXG4gICAgICByOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNTIyKSk7XG4gICAgICB9LFxuICAgICAgRDogbm9vcCxcbiAgICAgIEM6IG5vb3AsXG4gICAgICBMOiBub29wLFxuICAgICAgbTogbm9vcCxcbiAgICAgIFg6IG5vb3AsXG4gICAgICBTOiBub29wLFxuICAgICAgTTogbm9vcFxuICAgIH0sXG4gICAgcDogMCxcbiAgICBmaW5kRE9NTm9kZTogbnVsbFxuICB9LFxuICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIik7XG5mdW5jdGlvbiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVySW5mbywgaW1wbGVtZW50YXRpb24pIHtcbiAgdmFyIGtleSA9XG4gICAgMyA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbM10gPyBhcmd1bWVudHNbM10gOiBudWxsO1xuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9QT1JUQUxfVFlQRSxcbiAgICBrZXk6IG51bGwgPT0ga2V5ID8gbnVsbCA6IFwiXCIgKyBrZXksXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lckluZm86IGNvbnRhaW5lckluZm8sXG4gICAgaW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uXG4gIH07XG59XG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPVxuICBSZWFjdC5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREU7XG5mdW5jdGlvbiBnZXRDcm9zc09yaWdpblN0cmluZ0FzKGFzLCBpbnB1dCkge1xuICBpZiAoXCJmb250XCIgPT09IGFzKSByZXR1cm4gXCJcIjtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBpbnB1dClcbiAgICByZXR1cm4gXCJ1c2UtY3JlZGVudGlhbHNcIiA9PT0gaW5wdXQgPyBpbnB1dCA6IFwiXCI7XG59XG5leHBvcnRzLl9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSA9XG4gIEludGVybmFscztcbmV4cG9ydHMuY3JlYXRlUG9ydGFsID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBjb250YWluZXIpIHtcbiAgdmFyIGtleSA9XG4gICAgMiA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0gPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuICBpZiAoXG4gICAgIWNvbnRhaW5lciB8fFxuICAgICgxICE9PSBjb250YWluZXIubm9kZVR5cGUgJiZcbiAgICAgIDkgIT09IGNvbnRhaW5lci5ub2RlVHlwZSAmJlxuICAgICAgMTEgIT09IGNvbnRhaW5lci5ub2RlVHlwZSlcbiAgKVxuICAgIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjk5KSk7XG4gIHJldHVybiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVyLCBudWxsLCBrZXkpO1xufTtcbmV4cG9ydHMuZmx1c2hTeW5jID0gZnVuY3Rpb24gKGZuKSB7XG4gIHZhciBwcmV2aW91c1RyYW5zaXRpb24gPSBSZWFjdFNoYXJlZEludGVybmFscy5ULFxuICAgIHByZXZpb3VzVXBkYXRlUHJpb3JpdHkgPSBJbnRlcm5hbHMucDtcbiAgdHJ5IHtcbiAgICBpZiAoKChSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbCksIChJbnRlcm5hbHMucCA9IDIpLCBmbikpIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gcHJldmlvdXNUcmFuc2l0aW9uKSxcbiAgICAgIChJbnRlcm5hbHMucCA9IHByZXZpb3VzVXBkYXRlUHJpb3JpdHkpLFxuICAgICAgSW50ZXJuYWxzLmQuZigpO1xuICB9XG59O1xuZXhwb3J0cy5wcmVjb25uZWN0ID0gZnVuY3Rpb24gKGhyZWYsIG9wdGlvbnMpIHtcbiAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiZcbiAgICAob3B0aW9uc1xuICAgICAgPyAoKG9wdGlvbnMgPSBvcHRpb25zLmNyb3NzT3JpZ2luKSxcbiAgICAgICAgKG9wdGlvbnMgPVxuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zXG4gICAgICAgICAgICA/IFwidXNlLWNyZWRlbnRpYWxzXCIgPT09IG9wdGlvbnNcbiAgICAgICAgICAgICAgPyBvcHRpb25zXG4gICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgOiB2b2lkIDApKVxuICAgICAgOiAob3B0aW9ucyA9IG51bGwpLFxuICAgIEludGVybmFscy5kLkMoaHJlZiwgb3B0aW9ucykpO1xufTtcbmV4cG9ydHMucHJlZmV0Y2hETlMgPSBmdW5jdGlvbiAoaHJlZikge1xuICBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBJbnRlcm5hbHMuZC5EKGhyZWYpO1xufTtcbmV4cG9ydHMucHJlaW5pdCA9IGZ1bmN0aW9uIChocmVmLCBvcHRpb25zKSB7XG4gIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBvcHRpb25zICYmIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmFzKSB7XG4gICAgdmFyIGFzID0gb3B0aW9ucy5hcyxcbiAgICAgIGNyb3NzT3JpZ2luID0gZ2V0Q3Jvc3NPcmlnaW5TdHJpbmdBcyhhcywgb3B0aW9ucy5jcm9zc09yaWdpbiksXG4gICAgICBpbnRlZ3JpdHkgPVxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbnRlZ3JpdHkgPyBvcHRpb25zLmludGVncml0eSA6IHZvaWQgMCxcbiAgICAgIGZldGNoUHJpb3JpdHkgPVxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5mZXRjaFByaW9yaXR5XG4gICAgICAgICAgPyBvcHRpb25zLmZldGNoUHJpb3JpdHlcbiAgICAgICAgICA6IHZvaWQgMDtcbiAgICBcInN0eWxlXCIgPT09IGFzXG4gICAgICA/IEludGVybmFscy5kLlMoXG4gICAgICAgICAgaHJlZixcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5wcmVjZWRlbmNlID8gb3B0aW9ucy5wcmVjZWRlbmNlIDogdm9pZCAwLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBjcm9zc09yaWdpbixcbiAgICAgICAgICAgIGludGVncml0eTogaW50ZWdyaXR5LFxuICAgICAgICAgICAgZmV0Y2hQcmlvcml0eTogZmV0Y2hQcmlvcml0eVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgOiBcInNjcmlwdFwiID09PSBhcyAmJlxuICAgICAgICBJbnRlcm5hbHMuZC5YKGhyZWYsIHtcbiAgICAgICAgICBjcm9zc09yaWdpbjogY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgaW50ZWdyaXR5OiBpbnRlZ3JpdHksXG4gICAgICAgICAgZmV0Y2hQcmlvcml0eTogZmV0Y2hQcmlvcml0eSxcbiAgICAgICAgICBub25jZTogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMubm9uY2UgPyBvcHRpb25zLm5vbmNlIDogdm9pZCAwXG4gICAgICAgIH0pO1xuICB9XG59O1xuZXhwb3J0cy5wcmVpbml0TW9kdWxlID0gZnVuY3Rpb24gKGhyZWYsIG9wdGlvbnMpIHtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmKVxuICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2Ygb3B0aW9ucyAmJiBudWxsICE9PSBvcHRpb25zKSB7XG4gICAgICBpZiAobnVsbCA9PSBvcHRpb25zLmFzIHx8IFwic2NyaXB0XCIgPT09IG9wdGlvbnMuYXMpIHtcbiAgICAgICAgdmFyIGNyb3NzT3JpZ2luID0gZ2V0Q3Jvc3NPcmlnaW5TdHJpbmdBcyhcbiAgICAgICAgICBvcHRpb25zLmFzLFxuICAgICAgICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5cbiAgICAgICAgKTtcbiAgICAgICAgSW50ZXJuYWxzLmQuTShocmVmLCB7XG4gICAgICAgICAgY3Jvc3NPcmlnaW46IGNyb3NzT3JpZ2luLFxuICAgICAgICAgIGludGVncml0eTpcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmludGVncml0eSA/IG9wdGlvbnMuaW50ZWdyaXR5IDogdm9pZCAwLFxuICAgICAgICAgIG5vbmNlOiBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5ub25jZSA/IG9wdGlvbnMubm9uY2UgOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIG51bGwgPT0gb3B0aW9ucyAmJiBJbnRlcm5hbHMuZC5NKGhyZWYpO1xufTtcbmV4cG9ydHMucHJlbG9hZCA9IGZ1bmN0aW9uIChocmVmLCBvcHRpb25zKSB7XG4gIGlmIChcbiAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJlxuICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvcHRpb25zICYmXG4gICAgbnVsbCAhPT0gb3B0aW9ucyAmJlxuICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmFzXG4gICkge1xuICAgIHZhciBhcyA9IG9wdGlvbnMuYXMsXG4gICAgICBjcm9zc09yaWdpbiA9IGdldENyb3NzT3JpZ2luU3RyaW5nQXMoYXMsIG9wdGlvbnMuY3Jvc3NPcmlnaW4pO1xuICAgIEludGVybmFscy5kLkwoaHJlZiwgYXMsIHtcbiAgICAgIGNyb3NzT3JpZ2luOiBjcm9zc09yaWdpbixcbiAgICAgIGludGVncml0eTpcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW50ZWdyaXR5ID8gb3B0aW9ucy5pbnRlZ3JpdHkgOiB2b2lkIDAsXG4gICAgICBub25jZTogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMubm9uY2UgPyBvcHRpb25zLm5vbmNlIDogdm9pZCAwLFxuICAgICAgdHlwZTogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMudHlwZSA/IG9wdGlvbnMudHlwZSA6IHZvaWQgMCxcbiAgICAgIGZldGNoUHJpb3JpdHk6XG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmZldGNoUHJpb3JpdHlcbiAgICAgICAgICA/IG9wdGlvbnMuZmV0Y2hQcmlvcml0eVxuICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgcmVmZXJyZXJQb2xpY3k6XG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLnJlZmVycmVyUG9saWN5XG4gICAgICAgICAgPyBvcHRpb25zLnJlZmVycmVyUG9saWN5XG4gICAgICAgICAgOiB2b2lkIDAsXG4gICAgICBpbWFnZVNyY1NldDpcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW1hZ2VTcmNTZXQgPyBvcHRpb25zLmltYWdlU3JjU2V0IDogdm9pZCAwLFxuICAgICAgaW1hZ2VTaXplczpcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW1hZ2VTaXplcyA/IG9wdGlvbnMuaW1hZ2VTaXplcyA6IHZvaWQgMCxcbiAgICAgIG1lZGlhOiBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5tZWRpYSA/IG9wdGlvbnMubWVkaWEgOiB2b2lkIDBcbiAgICB9KTtcbiAgfVxufTtcbmV4cG9ydHMucHJlbG9hZE1vZHVsZSA9IGZ1bmN0aW9uIChocmVmLCBvcHRpb25zKSB7XG4gIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZilcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgdmFyIGNyb3NzT3JpZ2luID0gZ2V0Q3Jvc3NPcmlnaW5TdHJpbmdBcyhvcHRpb25zLmFzLCBvcHRpb25zLmNyb3NzT3JpZ2luKTtcbiAgICAgIEludGVybmFscy5kLm0oaHJlZiwge1xuICAgICAgICBhczpcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5hcyAmJiBcInNjcmlwdFwiICE9PSBvcHRpb25zLmFzXG4gICAgICAgICAgICA/IG9wdGlvbnMuYXNcbiAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICBjcm9zc09yaWdpbjogY3Jvc3NPcmlnaW4sXG4gICAgICAgIGludGVncml0eTpcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbnRlZ3JpdHkgPyBvcHRpb25zLmludGVncml0eSA6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgfSBlbHNlIEludGVybmFscy5kLm0oaHJlZik7XG59O1xuZXhwb3J0cy5yZXF1ZXN0Rm9ybVJlc2V0ID0gZnVuY3Rpb24gKGZvcm0pIHtcbiAgSW50ZXJuYWxzLmQucihmb3JtKTtcbn07XG5leHBvcnRzLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gZnVuY3Rpb24gKGZuLCBhKSB7XG4gIHJldHVybiBmbihhKTtcbn07XG5leHBvcnRzLnVzZUZvcm1TdGF0ZSA9IGZ1bmN0aW9uIChhY3Rpb24sIGluaXRpYWxTdGF0ZSwgcGVybWFsaW5rKSB7XG4gIHJldHVybiBSZWFjdFNoYXJlZEludGVybmFscy5ILnVzZUZvcm1TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSwgcGVybWFsaW5rKTtcbn07XG5leHBvcnRzLnVzZUZvcm1TdGF0dXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBSZWFjdFNoYXJlZEludGVybmFscy5ILnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzKCk7XG59O1xuZXhwb3J0cy52ZXJzaW9uID0gXCIxOS4wLjBcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGNoZWNrRENFKCkge1xuICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gIGlmIChcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJyB8fFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkXG4gICAgLy8gaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBjb25kaXRpb24gaXMgdHJ1ZSBvbmx5IGluIGRldmVsb3BtZW50LlxuICAgIC8vIFRoZXJlZm9yZSBpZiB0aGUgYnJhbmNoIGlzIHN0aWxsIGhlcmUsIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3YXNuJ3RcbiAgICAvLyBwcm9wZXJseSBhcHBsaWVkLlxuICAgIC8vIERvbid0IGNoYW5nZSB0aGUgbWVzc2FnZS4gUmVhY3QgRGV2VG9vbHMgcmVsaWVzIG9uIGl0LiBBbHNvIG1ha2Ugc3VyZVxuICAgIC8vIHRoaXMgbWVzc2FnZSBkb2Vzbid0IG9jY3VyIGVsc2V3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLCBvciBpdCB3aWxsIGNhdXNlXG4gICAgLy8gYSBmYWxzZSBwb3NpdGl2ZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ15fXicpO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvZGUgYWJvdmUgaGFzIGJlZW4gZGVhZCBjb2RlIGVsaW1pbmF0ZWQgKERDRSdkKS5cbiAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoY2hlY2tEQ0UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBEZXZUb29scyBzaG91bGRuJ3QgY3Jhc2ggUmVhY3QsIG5vIG1hdHRlciB3aGF0LlxuICAgIC8vIFdlIHNob3VsZCBzdGlsbCByZXBvcnQgaW4gY2FzZSB3ZSBicmVhayB0aGlzIGNvZGUuXG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIERDRSBjaGVjayBzaG91bGQgaGFwcGVuIGJlZm9yZSBSZWFjdERPTSBidW5kbGUgZXhlY3V0ZXMgc28gdGhhdFxuICAvLyBEZXZUb29scyBjYW4gcmVwb3J0IGJhZCBtaW5pZmljYXRpb24gZHVyaW5nIGluamVjdGlvbi5cbiAgY2hlY2tEQ0UoKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1kb20tY2xpZW50LnByb2R1Y3Rpb24uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbi8qXG4gTW9kZXJuaXpyIDMuMC4wcHJlIChDdXN0b20gQnVpbGQpIHwgTUlUXG4qL1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgU2NoZWR1bGVyID0gcmVxdWlyZShcInNjaGVkdWxlclwiKSxcbiAgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIiksXG4gIFJlYWN0RE9NID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTtcbmZ1bmN0aW9uIGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoY29kZSkge1xuICB2YXIgdXJsID0gXCJodHRwczovL3JlYWN0LmRldi9lcnJvcnMvXCIgKyBjb2RlO1xuICBpZiAoMSA8IGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICB1cmwgKz0gXCI/YXJnc1tdPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1sxXSk7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICB1cmwgKz0gXCImYXJnc1tdPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICBcIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIiArXG4gICAgY29kZSArXG4gICAgXCI7IHZpc2l0IFwiICtcbiAgICB1cmwgK1xuICAgIFwiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIlxuICApO1xufVxuZnVuY3Rpb24gaXNWYWxpZENvbnRhaW5lcihub2RlKSB7XG4gIHJldHVybiAhKFxuICAgICFub2RlIHx8XG4gICAgKDEgIT09IG5vZGUubm9kZVR5cGUgJiYgOSAhPT0gbm9kZS5ub2RlVHlwZSAmJiAxMSAhPT0gbm9kZS5ub2RlVHlwZSlcbiAgKTtcbn1cbnZhciBSRUFDVF9MRUdBQ1lfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIiksXG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKSxcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLFxuICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLFxuICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLFxuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpLFxuICBSRUFDVF9DT05TVU1FUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLFxuICBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxcbiAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksXG4gIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLFxuICBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKTtcblN5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKTtcblN5bWJvbC5mb3IoXCJyZWFjdC5kZWJ1Z190cmFjZV9tb2RlXCIpO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm9mZnNjcmVlblwiKTtcblN5bWJvbC5mb3IoXCJyZWFjdC5sZWdhY3lfaGlkZGVuXCIpO1xuU3ltYm9sLmZvcihcInJlYWN0LnRyYWNpbmdfbWFya2VyXCIpO1xudmFyIFJFQUNUX01FTU9fQ0FDSEVfU0VOVElORUwgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKSxcbiAgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChudWxsID09PSBtYXliZUl0ZXJhYmxlIHx8IFwib2JqZWN0XCIgIT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlKSByZXR1cm4gbnVsbDtcbiAgbWF5YmVJdGVyYWJsZSA9XG4gICAgKE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0pIHx8XG4gICAgbWF5YmVJdGVyYWJsZVtcIkBAaXRlcmF0b3JcIl07XG4gIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlID8gbWF5YmVJdGVyYWJsZSA6IG51bGw7XG59XG52YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpO1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKG51bGwgPT0gdHlwZSkgcmV0dXJuIG51bGw7XG4gIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgIHJldHVybiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFXG4gICAgICA/IG51bGxcbiAgICAgIDogdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKSByZXR1cm4gdHlwZTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuIFwiRnJhZ21lbnRcIjtcbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuIFwiUG9ydGFsXCI7XG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gXCJTdHJpY3RNb2RlXCI7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICB9XG4gIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICByZXR1cm4gKHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuUHJvdmlkZXJcIjtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgcmV0dXJuICh0eXBlLl9jb250ZXh0LmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLkNvbnN1bWVyXCI7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHZhciBpbm5lclR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgdHlwZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgIHR5cGUgfHxcbiAgICAgICAgICAoKHR5cGUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgKHR5cGUgPSBcIlwiICE9PSB0eXBlID8gXCJGb3J3YXJkUmVmKFwiICsgdHlwZSArIFwiKVwiIDogXCJGb3J3YXJkUmVmXCIpKTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoaW5uZXJUeXBlID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsKSxcbiAgICAgICAgICBudWxsICE9PSBpbm5lclR5cGVcbiAgICAgICAgICAgID8gaW5uZXJUeXBlXG4gICAgICAgICAgICA6IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8IFwiTWVtb1wiXG4gICAgICAgICk7XG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgaW5uZXJUeXBlID0gdHlwZS5fcGF5bG9hZDtcbiAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKGlubmVyVHlwZSkpO1xuICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgIH1cbiAgcmV0dXJuIG51bGw7XG59XG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPVxuICAgIFJlYWN0Ll9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxcbiAgYXNzaWduID0gT2JqZWN0LmFzc2lnbixcbiAgcHJlZml4LFxuICBzdWZmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSB7XG4gIGlmICh2b2lkIDAgPT09IHByZWZpeClcbiAgICB0cnkge1xuICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICB9IGNhdGNoICh4KSB7XG4gICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgcHJlZml4ID0gKG1hdGNoICYmIG1hdGNoWzFdKSB8fCBcIlwiO1xuICAgICAgc3VmZml4ID1cbiAgICAgICAgLTEgPCB4LnN0YWNrLmluZGV4T2YoXCJcXG4gICAgYXRcIilcbiAgICAgICAgICA/IFwiICg8YW5vbnltb3VzPilcIlxuICAgICAgICAgIDogLTEgPCB4LnN0YWNrLmluZGV4T2YoXCJAXCIpXG4gICAgICAgICAgICA/IFwiQHVua25vd246MDowXCJcbiAgICAgICAgICAgIDogXCJcIjtcbiAgICB9XG4gIHJldHVybiBcIlxcblwiICsgcHJlZml4ICsgbmFtZSArIHN1ZmZpeDtcbn1cbnZhciByZWVudHJ5ID0gITE7XG5mdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgaWYgKCFmbiB8fCByZWVudHJ5KSByZXR1cm4gXCJcIjtcbiAgcmVlbnRyeSA9ICEwO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHZvaWQgMDtcbiAgdHJ5IHtcbiAgICB2YXIgUnVuSW5Sb290RnJhbWUgPSB7XG4gICAgICBEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsIFwicHJvcHNcIiwge1xuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgUmVmbGVjdCAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIHZhciBjb250cm9sID0geDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoeCQwKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbCA9IHgkMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgkMSkge1xuICAgICAgICAgICAgICBjb250cm9sID0geCQxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKEZha2UgPSBmbigpKSAmJlxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBGYWtlLmNhdGNoICYmXG4gICAgICAgICAgICAgIEZha2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIFwic3RyaW5nXCIgPT09IHR5cGVvZiBzYW1wbGUuc3RhY2spXG4gICAgICAgICAgICByZXR1cm4gW3NhbXBsZS5zdGFjaywgY29udHJvbC5zdGFja107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgICAgIH1cbiAgICB9O1xuICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdC5kaXNwbGF5TmFtZSA9XG4gICAgICBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiO1xuICAgIHZhciBuYW1lUHJvcERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LFxuICAgICAgXCJuYW1lXCJcbiAgICApO1xuICAgIG5hbWVQcm9wRGVzY3JpcHRvciAmJlxuICAgICAgbmFtZVByb3BEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSAmJlxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QsXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICB7IHZhbHVlOiBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiIH1cbiAgICAgICk7XG4gICAgdmFyIF9SdW5JblJvb3RGcmFtZSREZXRlciA9IFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCgpLFxuICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICBjb250cm9sU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMV07XG4gICAgaWYgKHNhbXBsZVN0YWNrICYmIGNvbnRyb2xTdGFjaykge1xuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlU3RhY2suc3BsaXQoXCJcXG5cIiksXG4gICAgICAgIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2xTdGFjay5zcGxpdChcIlxcblwiKTtcbiAgICAgIGZvciAoXG4gICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvciA9IFJ1bkluUm9vdEZyYW1lID0gMDtcbiAgICAgICAgUnVuSW5Sb290RnJhbWUgPCBzYW1wbGVMaW5lcy5sZW5ndGggJiZcbiAgICAgICAgIXNhbXBsZUxpbmVzW1J1bkluUm9vdEZyYW1lXS5pbmNsdWRlcyhcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiKTtcblxuICAgICAgKVxuICAgICAgICBSdW5JblJvb3RGcmFtZSsrO1xuICAgICAgZm9yIChcbiAgICAgICAgO1xuICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgPCBjb250cm9sTGluZXMubGVuZ3RoICYmXG4gICAgICAgICFjb250cm9sTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXS5pbmNsdWRlcyhcbiAgICAgICAgICBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiXG4gICAgICAgICk7XG5cbiAgICAgIClcbiAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yKys7XG4gICAgICBpZiAoXG4gICAgICAgIFJ1bkluUm9vdEZyYW1lID09PSBzYW1wbGVMaW5lcy5sZW5ndGggfHxcbiAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yID09PSBjb250cm9sTGluZXMubGVuZ3RoXG4gICAgICApXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgUnVuSW5Sb290RnJhbWUgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxLFxuICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgMSA8PSBSdW5JblJvb3RGcmFtZSAmJlxuICAgICAgICAgIDAgPD0gbmFtZVByb3BEZXNjcmlwdG9yICYmXG4gICAgICAgICAgc2FtcGxlTGluZXNbUnVuSW5Sb290RnJhbWVdICE9PSBjb250cm9sTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXTtcblxuICAgICAgICApXG4gICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yLS07XG4gICAgICBmb3IgKFxuICAgICAgICA7XG4gICAgICAgIDEgPD0gUnVuSW5Sb290RnJhbWUgJiYgMCA8PSBuYW1lUHJvcERlc2NyaXB0b3I7XG4gICAgICAgIFJ1bkluUm9vdEZyYW1lLS0sIG5hbWVQcm9wRGVzY3JpcHRvci0tXG4gICAgICApXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tSdW5JblJvb3RGcmFtZV0gIT09IGNvbnRyb2xMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdKSB7XG4gICAgICAgICAgaWYgKDEgIT09IFJ1bkluUm9vdEZyYW1lIHx8IDEgIT09IG5hbWVQcm9wRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgZG9cbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChSdW5JblJvb3RGcmFtZS0tLFxuICAgICAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvci0tLFxuICAgICAgICAgICAgICAgIDAgPiBuYW1lUHJvcERlc2NyaXB0b3IgfHxcbiAgICAgICAgICAgICAgICAgIHNhbXBsZUxpbmVzW1J1bkluUm9vdEZyYW1lXSAhPT1cbiAgICAgICAgICAgICAgICAgICAgY29udHJvbExpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0pXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBmcmFtZSA9XG4gICAgICAgICAgICAgICAgICBcIlxcblwiICtcbiAgICAgICAgICAgICAgICAgIHNhbXBsZUxpbmVzW1J1bkluUm9vdEZyYW1lXS5yZXBsYWNlKFwiIGF0IG5ldyBcIiwgXCIgYXQgXCIpO1xuICAgICAgICAgICAgICAgIGZuLmRpc3BsYXlOYW1lICYmXG4gICAgICAgICAgICAgICAgICBmcmFtZS5pbmNsdWRlcyhcIjxhbm9ueW1vdXM+XCIpICYmXG4gICAgICAgICAgICAgICAgICAoZnJhbWUgPSBmcmFtZS5yZXBsYWNlKFwiPGFub255bW91cz5cIiwgZm4uZGlzcGxheU5hbWUpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlICgxIDw9IFJ1bkluUm9vdEZyYW1lICYmIDAgPD0gbmFtZVByb3BEZXNjcmlwdG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgKHJlZW50cnkgPSAhMSksIChFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UpO1xuICB9XG4gIHJldHVybiAocHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6IFwiXCIpXG4gICAgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlKVxuICAgIDogXCJcIjtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRmliZXIoZmliZXIpIHtcbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIDI2OlxuICAgIGNhc2UgMjc6XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuICAgIGNhc2UgMTY6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJMYXp5XCIpO1xuICAgIGNhc2UgMTM6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJTdXNwZW5zZVwiKTtcbiAgICBjYXNlIDE5OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VMaXN0XCIpO1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIDE1OlxuICAgICAgcmV0dXJuIChmaWJlciA9IGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSwgITEpKSwgZmliZXI7XG4gICAgY2FzZSAxMTpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChmaWJlciA9IGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5yZW5kZXIsICExKSksIGZpYmVyXG4gICAgICApO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiAoZmliZXIgPSBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUsICEwKSksIGZpYmVyO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHdvcmtJblByb2dyZXNzKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBcIlwiO1xuICAgIGRvXG4gICAgICAoaW5mbyArPSBkZXNjcmliZUZpYmVyKHdvcmtJblByb2dyZXNzKSksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLnJldHVybik7XG4gICAgd2hpbGUgKHdvcmtJblByb2dyZXNzKTtcbiAgICByZXR1cm4gaW5mbztcbiAgfSBjYXRjaCAoeCkge1xuICAgIHJldHVybiBcIlxcbkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6IFwiICsgeC5tZXNzYWdlICsgXCJcXG5cIiArIHguc3RhY2s7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpIHtcbiAgdmFyIG5vZGUgPSBmaWJlcixcbiAgICBuZWFyZXN0TW91bnRlZCA9IGZpYmVyO1xuICBpZiAoZmliZXIuYWx0ZXJuYXRlKSBmb3IgKDsgbm9kZS5yZXR1cm47ICkgbm9kZSA9IG5vZGUucmV0dXJuO1xuICBlbHNlIHtcbiAgICBmaWJlciA9IG5vZGU7XG4gICAgZG9cbiAgICAgIChub2RlID0gZmliZXIpLFxuICAgICAgICAwICE9PSAobm9kZS5mbGFncyAmIDQwOTgpICYmIChuZWFyZXN0TW91bnRlZCA9IG5vZGUucmV0dXJuKSxcbiAgICAgICAgKGZpYmVyID0gbm9kZS5yZXR1cm4pO1xuICAgIHdoaWxlIChmaWJlcik7XG4gIH1cbiAgcmV0dXJuIDMgPT09IG5vZGUudGFnID8gbmVhcmVzdE1vdW50ZWQgOiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihmaWJlcikge1xuICBpZiAoMTMgPT09IGZpYmVyLnRhZykge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICBudWxsID09PSBzdXNwZW5zZVN0YXRlICYmXG4gICAgICAoKGZpYmVyID0gZmliZXIuYWx0ZXJuYXRlKSxcbiAgICAgIG51bGwgIT09IGZpYmVyICYmIChzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZSkpO1xuICAgIGlmIChudWxsICE9PSBzdXNwZW5zZVN0YXRlKSByZXR1cm4gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gYXNzZXJ0SXNNb3VudGVkKGZpYmVyKSB7XG4gIGlmIChnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSAhPT0gZmliZXIpXG4gICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxODgpKTtcbn1cbmZ1bmN0aW9uIGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKGZpYmVyKSB7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gIGlmICghYWx0ZXJuYXRlKSB7XG4gICAgYWx0ZXJuYXRlID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcik7XG4gICAgaWYgKG51bGwgPT09IGFsdGVybmF0ZSkgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxODgpKTtcbiAgICByZXR1cm4gYWx0ZXJuYXRlICE9PSBmaWJlciA/IG51bGwgOiBmaWJlcjtcbiAgfVxuICBmb3IgKHZhciBhID0gZmliZXIsIGIgPSBhbHRlcm5hdGU7IDsgKSB7XG4gICAgdmFyIHBhcmVudEEgPSBhLnJldHVybjtcbiAgICBpZiAobnVsbCA9PT0gcGFyZW50QSkgYnJlYWs7XG4gICAgdmFyIHBhcmVudEIgPSBwYXJlbnRBLmFsdGVybmF0ZTtcbiAgICBpZiAobnVsbCA9PT0gcGFyZW50Qikge1xuICAgICAgYiA9IHBhcmVudEEucmV0dXJuO1xuICAgICAgaWYgKG51bGwgIT09IGIpIHtcbiAgICAgICAgYSA9IGI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChwYXJlbnRBLmNoaWxkID09PSBwYXJlbnRCLmNoaWxkKSB7XG4gICAgICBmb3IgKHBhcmVudEIgPSBwYXJlbnRBLmNoaWxkOyBwYXJlbnRCOyApIHtcbiAgICAgICAgaWYgKHBhcmVudEIgPT09IGEpIHJldHVybiBhc3NlcnRJc01vdW50ZWQocGFyZW50QSksIGZpYmVyO1xuICAgICAgICBpZiAocGFyZW50QiA9PT0gYikgcmV0dXJuIGFzc2VydElzTW91bnRlZChwYXJlbnRBKSwgYWx0ZXJuYXRlO1xuICAgICAgICBwYXJlbnRCID0gcGFyZW50Qi5zaWJsaW5nO1xuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxODgpKTtcbiAgICB9XG4gICAgaWYgKGEucmV0dXJuICE9PSBiLnJldHVybikgKGEgPSBwYXJlbnRBKSwgKGIgPSBwYXJlbnRCKTtcbiAgICBlbHNlIHtcbiAgICAgIGZvciAodmFyIGRpZEZpbmRDaGlsZCA9ICExLCBjaGlsZCQyID0gcGFyZW50QS5jaGlsZDsgY2hpbGQkMjsgKSB7XG4gICAgICAgIGlmIChjaGlsZCQyID09PSBhKSB7XG4gICAgICAgICAgZGlkRmluZENoaWxkID0gITA7XG4gICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkJDIgPT09IGIpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSAhMDtcbiAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjaGlsZCQyID0gY2hpbGQkMi5zaWJsaW5nO1xuICAgICAgfVxuICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgZm9yIChjaGlsZCQyID0gcGFyZW50Qi5jaGlsZDsgY2hpbGQkMjsgKSB7XG4gICAgICAgICAgaWYgKGNoaWxkJDIgPT09IGEpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9ICEwO1xuICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hpbGQkMiA9PT0gYikge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gITA7XG4gICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoaWxkJDIgPSBjaGlsZCQyLnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTg5KSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhLmFsdGVybmF0ZSAhPT0gYikgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxOTApKTtcbiAgfVxuICBpZiAoMyAhPT0gYS50YWcpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTg4KSk7XG4gIHJldHVybiBhLnN0YXRlTm9kZS5jdXJyZW50ID09PSBhID8gZmliZXIgOiBhbHRlcm5hdGU7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlckltcGwobm9kZSkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIGlmICg1ID09PSB0YWcgfHwgMjYgPT09IHRhZyB8fCAyNyA9PT0gdGFnIHx8IDYgPT09IHRhZykgcmV0dXJuIG5vZGU7XG4gIGZvciAobm9kZSA9IG5vZGUuY2hpbGQ7IG51bGwgIT09IG5vZGU7ICkge1xuICAgIHRhZyA9IGZpbmRDdXJyZW50SG9zdEZpYmVySW1wbChub2RlKTtcbiAgICBpZiAobnVsbCAhPT0gdGFnKSByZXR1cm4gdGFnO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG52YXIgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5LFxuICBSZWFjdERPTVNoYXJlZEludGVybmFscyA9XG4gICAgUmVhY3RET00uX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLFxuICBzaGFyZWROb3RQZW5kaW5nT2JqZWN0ID0ge1xuICAgIHBlbmRpbmc6ICExLFxuICAgIGRhdGE6IG51bGwsXG4gICAgbWV0aG9kOiBudWxsLFxuICAgIGFjdGlvbjogbnVsbFxuICB9LFxuICB2YWx1ZVN0YWNrID0gW10sXG4gIGluZGV4ID0gLTE7XG5mdW5jdGlvbiBjcmVhdGVDdXJzb3IoZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiB7IGN1cnJlbnQ6IGRlZmF1bHRWYWx1ZSB9O1xufVxuZnVuY3Rpb24gcG9wKGN1cnNvcikge1xuICAwID4gaW5kZXggfHxcbiAgICAoKGN1cnNvci5jdXJyZW50ID0gdmFsdWVTdGFja1tpbmRleF0pLCAodmFsdWVTdGFja1tpbmRleF0gPSBudWxsKSwgaW5kZXgtLSk7XG59XG5mdW5jdGlvbiBwdXNoKGN1cnNvciwgdmFsdWUpIHtcbiAgaW5kZXgrKztcbiAgdmFsdWVTdGFja1tpbmRleF0gPSBjdXJzb3IuY3VycmVudDtcbiAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZTtcbn1cbnZhciBjb250ZXh0U3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCksXG4gIGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICByb290SW5zdGFuY2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgaG9zdFRyYW5zaXRpb25Qcm92aWRlckN1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKTtcbmZ1bmN0aW9uIHB1c2hIb3N0Q29udGFpbmVyKGZpYmVyLCBuZXh0Um9vdEluc3RhbmNlKSB7XG4gIHB1c2gocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IsIG5leHRSb290SW5zdGFuY2UpO1xuICBwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBudWxsKTtcbiAgZmliZXIgPSBuZXh0Um9vdEluc3RhbmNlLm5vZGVUeXBlO1xuICBzd2l0Y2ggKGZpYmVyKSB7XG4gICAgY2FzZSA5OlxuICAgIGNhc2UgMTE6XG4gICAgICBuZXh0Um9vdEluc3RhbmNlID0gKG5leHRSb290SW5zdGFuY2UgPSBuZXh0Um9vdEluc3RhbmNlLmRvY3VtZW50RWxlbWVudClcbiAgICAgICAgPyAobmV4dFJvb3RJbnN0YW5jZSA9IG5leHRSb290SW5zdGFuY2UubmFtZXNwYWNlVVJJKVxuICAgICAgICAgID8gZ2V0T3duSG9zdENvbnRleHQobmV4dFJvb3RJbnN0YW5jZSlcbiAgICAgICAgICA6IDBcbiAgICAgICAgOiAwO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChcbiAgICAgICAgKChmaWJlciA9IDggPT09IGZpYmVyID8gbmV4dFJvb3RJbnN0YW5jZS5wYXJlbnROb2RlIDogbmV4dFJvb3RJbnN0YW5jZSksXG4gICAgICAgIChuZXh0Um9vdEluc3RhbmNlID0gZmliZXIudGFnTmFtZSksXG4gICAgICAgIChmaWJlciA9IGZpYmVyLm5hbWVzcGFjZVVSSSkpXG4gICAgICApXG4gICAgICAgIChmaWJlciA9IGdldE93bkhvc3RDb250ZXh0KGZpYmVyKSksXG4gICAgICAgICAgKG5leHRSb290SW5zdGFuY2UgPSBnZXRDaGlsZEhvc3RDb250ZXh0UHJvZChmaWJlciwgbmV4dFJvb3RJbnN0YW5jZSkpO1xuICAgICAgZWxzZVxuICAgICAgICBzd2l0Y2ggKG5leHRSb290SW5zdGFuY2UpIHtcbiAgICAgICAgICBjYXNlIFwic3ZnXCI6XG4gICAgICAgICAgICBuZXh0Um9vdEluc3RhbmNlID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJtYXRoXCI6XG4gICAgICAgICAgICBuZXh0Um9vdEluc3RhbmNlID0gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBuZXh0Um9vdEluc3RhbmNlID0gMDtcbiAgICAgICAgfVxuICB9XG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbmV4dFJvb3RJbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBwb3BIb3N0Q29udGFpbmVyKCkge1xuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yKTtcbiAgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yKTtcbiAgcG9wKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yKTtcbn1cbmZ1bmN0aW9uIHB1c2hIb3N0Q29udGV4dChmaWJlcikge1xuICBudWxsICE9PSBmaWJlci5tZW1vaXplZFN0YXRlICYmIHB1c2goaG9zdFRyYW5zaXRpb25Qcm92aWRlckN1cnNvciwgZmliZXIpO1xuICB2YXIgY29udGV4dCA9IGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gZ2V0Q2hpbGRIb3N0Q29udGV4dFByb2QoY29udGV4dCwgZmliZXIudHlwZSk7XG4gIGNvbnRleHQgIT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCAmJlxuICAgIChwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciksXG4gICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCkpO1xufVxuZnVuY3Rpb24gcG9wSG9zdENvbnRleHQoZmliZXIpIHtcbiAgY29udGV4dEZpYmVyU3RhY2tDdXJzb3IuY3VycmVudCA9PT0gZmliZXIgJiZcbiAgICAocG9wKGNvbnRleHRTdGFja0N1cnNvciksIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvcikpO1xuICBob3N0VHJhbnNpdGlvblByb3ZpZGVyQ3Vyc29yLmN1cnJlbnQgPT09IGZpYmVyICYmXG4gICAgKHBvcChob3N0VHJhbnNpdGlvblByb3ZpZGVyQ3Vyc29yKSxcbiAgICAoSG9zdFRyYW5zaXRpb25Db250ZXh0Ll9jdXJyZW50VmFsdWUgPSBzaGFyZWROb3RQZW5kaW5nT2JqZWN0KSk7XG59XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICBzY2hlZHVsZUNhbGxiYWNrJDMgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxcbiAgY2FuY2VsQ2FsbGJhY2skMSA9IFNjaGVkdWxlci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayxcbiAgc2hvdWxkWWllbGQgPSBTY2hlZHVsZXIudW5zdGFibGVfc2hvdWxkWWllbGQsXG4gIHJlcXVlc3RQYWludCA9IFNjaGVkdWxlci51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsXG4gIG5vdyA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3csXG4gIGdldEN1cnJlbnRQcmlvcml0eUxldmVsID0gU2NoZWR1bGVyLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLFxuICBJbW1lZGlhdGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxcbiAgVXNlckJsb2NraW5nUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksXG4gIE5vcm1hbFByaW9yaXR5JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksXG4gIExvd1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0xvd1ByaW9yaXR5LFxuICBJZGxlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSWRsZVByaW9yaXR5LFxuICBsb2ckMSA9IFNjaGVkdWxlci5sb2csXG4gIHVuc3RhYmxlX3NldERpc2FibGVZaWVsZFZhbHVlID0gU2NoZWR1bGVyLnVuc3RhYmxlX3NldERpc2FibGVZaWVsZFZhbHVlLFxuICByZW5kZXJlcklEID0gbnVsbCxcbiAgaW5qZWN0ZWRIb29rID0gbnVsbDtcbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdChyb290KSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KVxuICAgIHRyeSB7XG4gICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QoXG4gICAgICAgIHJlbmRlcmVySUQsXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgMTI4ID09PSAocm9vdC5jdXJyZW50LmZsYWdzICYgMTI4KVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHt9XG59XG5mdW5jdGlvbiBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhuZXdJc1N0cmljdE1vZGUpIHtcbiAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbG9nJDEgJiYgdW5zdGFibGVfc2V0RGlzYWJsZVlpZWxkVmFsdWUobmV3SXNTdHJpY3RNb2RlKTtcbiAgaWYgKGluamVjdGVkSG9vayAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZEhvb2suc2V0U3RyaWN0TW9kZSlcbiAgICB0cnkge1xuICAgICAgaW5qZWN0ZWRIb29rLnNldFN0cmljdE1vZGUocmVuZGVyZXJJRCwgbmV3SXNTdHJpY3RNb2RlKTtcbiAgICB9IGNhdGNoIChlcnIpIHt9XG59XG52YXIgY2x6MzIgPSBNYXRoLmNsejMyID8gTWF0aC5jbHozMiA6IGNsejMyRmFsbGJhY2ssXG4gIGxvZyA9IE1hdGgubG9nLFxuICBMTjIgPSBNYXRoLkxOMjtcbmZ1bmN0aW9uIGNsejMyRmFsbGJhY2soeCkge1xuICB4ID4+Pj0gMDtcbiAgcmV0dXJuIDAgPT09IHggPyAzMiA6ICgzMSAtICgobG9nKHgpIC8gTE4yKSB8IDApKSB8IDA7XG59XG52YXIgbmV4dFRyYW5zaXRpb25MYW5lID0gMTI4LFxuICBuZXh0UmV0cnlMYW5lID0gNDE5NDMwNDtcbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gIHZhciBwZW5kaW5nU3luY0xhbmVzID0gbGFuZXMgJiA0MjtcbiAgaWYgKDAgIT09IHBlbmRpbmdTeW5jTGFuZXMpIHJldHVybiBwZW5kaW5nU3luY0xhbmVzO1xuICBzd2l0Y2ggKGxhbmVzICYgLWxhbmVzKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIDI7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIDQ7XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIDg7XG4gICAgY2FzZSAxNjpcbiAgICAgIHJldHVybiAxNjtcbiAgICBjYXNlIDMyOlxuICAgICAgcmV0dXJuIDMyO1xuICAgIGNhc2UgNjQ6XG4gICAgICByZXR1cm4gNjQ7XG4gICAgY2FzZSAxMjg6XG4gICAgY2FzZSAyNTY6XG4gICAgY2FzZSA1MTI6XG4gICAgY2FzZSAxMDI0OlxuICAgIGNhc2UgMjA0ODpcbiAgICBjYXNlIDQwOTY6XG4gICAgY2FzZSA4MTkyOlxuICAgIGNhc2UgMTYzODQ6XG4gICAgY2FzZSAzMjc2ODpcbiAgICBjYXNlIDY1NTM2OlxuICAgIGNhc2UgMTMxMDcyOlxuICAgIGNhc2UgMjYyMTQ0OlxuICAgIGNhc2UgNTI0Mjg4OlxuICAgIGNhc2UgMTA0ODU3NjpcbiAgICBjYXNlIDIwOTcxNTI6XG4gICAgICByZXR1cm4gbGFuZXMgJiA0MTk0MTc2O1xuICAgIGNhc2UgNDE5NDMwNDpcbiAgICBjYXNlIDgzODg2MDg6XG4gICAgY2FzZSAxNjc3NzIxNjpcbiAgICBjYXNlIDMzNTU0NDMyOlxuICAgICAgcmV0dXJuIGxhbmVzICYgNjI5MTQ1NjA7XG4gICAgY2FzZSA2NzEwODg2NDpcbiAgICAgIHJldHVybiA2NzEwODg2NDtcbiAgICBjYXNlIDEzNDIxNzcyODpcbiAgICAgIHJldHVybiAxMzQyMTc3Mjg7XG4gICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgICByZXR1cm4gMjY4NDM1NDU2O1xuICAgIGNhc2UgNTM2ODcwOTEyOlxuICAgICAgcmV0dXJuIDUzNjg3MDkxMjtcbiAgICBjYXNlIDEwNzM3NDE4MjQ6XG4gICAgICByZXR1cm4gMDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGxhbmVzO1xuICB9XG59XG5mdW5jdGlvbiBnZXROZXh0TGFuZXMocm9vdCwgd2lwTGFuZXMpIHtcbiAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICBpZiAoMCA9PT0gcGVuZGluZ0xhbmVzKSByZXR1cm4gMDtcbiAgdmFyIG5leHRMYW5lcyA9IDAsXG4gICAgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzLFxuICAgIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lcyxcbiAgICB3YXJtTGFuZXMgPSByb290Lndhcm1MYW5lcztcbiAgcm9vdCA9IDAgIT09IHJvb3QuZmluaXNoZWRMYW5lcztcbiAgdmFyIG5vbklkbGVQZW5kaW5nTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiAxMzQyMTc3Mjc7XG4gIDAgIT09IG5vbklkbGVQZW5kaW5nTGFuZXNcbiAgICA/ICgocGVuZGluZ0xhbmVzID0gbm9uSWRsZVBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcyksXG4gICAgICAwICE9PSBwZW5kaW5nTGFuZXNcbiAgICAgICAgPyAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGVuZGluZ0xhbmVzKSlcbiAgICAgICAgOiAoKHBpbmdlZExhbmVzICY9IG5vbklkbGVQZW5kaW5nTGFuZXMpLFxuICAgICAgICAgIDAgIT09IHBpbmdlZExhbmVzXG4gICAgICAgICAgICA/IChuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhwaW5nZWRMYW5lcykpXG4gICAgICAgICAgICA6IHJvb3QgfHxcbiAgICAgICAgICAgICAgKCh3YXJtTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgfndhcm1MYW5lcyksXG4gICAgICAgICAgICAgIDAgIT09IHdhcm1MYW5lcyAmJlxuICAgICAgICAgICAgICAgIChuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyh3YXJtTGFuZXMpKSkpKVxuICAgIDogKChub25JZGxlUGVuZGluZ0xhbmVzID0gcGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzKSxcbiAgICAgIDAgIT09IG5vbklkbGVQZW5kaW5nTGFuZXNcbiAgICAgICAgPyAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobm9uSWRsZVBlbmRpbmdMYW5lcykpXG4gICAgICAgIDogMCAhPT0gcGluZ2VkTGFuZXNcbiAgICAgICAgICA/IChuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhwaW5nZWRMYW5lcykpXG4gICAgICAgICAgOiByb290IHx8XG4gICAgICAgICAgICAoKHdhcm1MYW5lcyA9IHBlbmRpbmdMYW5lcyAmIH53YXJtTGFuZXMpLFxuICAgICAgICAgICAgMCAhPT0gd2FybUxhbmVzICYmXG4gICAgICAgICAgICAgIChuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyh3YXJtTGFuZXMpKSkpO1xuICByZXR1cm4gMCA9PT0gbmV4dExhbmVzXG4gICAgPyAwXG4gICAgOiAwICE9PSB3aXBMYW5lcyAmJlxuICAgICAgICB3aXBMYW5lcyAhPT0gbmV4dExhbmVzICYmXG4gICAgICAgIDAgPT09ICh3aXBMYW5lcyAmIHN1c3BlbmRlZExhbmVzKSAmJlxuICAgICAgICAoKHN1c3BlbmRlZExhbmVzID0gbmV4dExhbmVzICYgLW5leHRMYW5lcyksXG4gICAgICAgICh3YXJtTGFuZXMgPSB3aXBMYW5lcyAmIC13aXBMYW5lcyksXG4gICAgICAgIHN1c3BlbmRlZExhbmVzID49IHdhcm1MYW5lcyB8fFxuICAgICAgICAgICgzMiA9PT0gc3VzcGVuZGVkTGFuZXMgJiYgMCAhPT0gKHdhcm1MYW5lcyAmIDQxOTQxNzYpKSlcbiAgICAgID8gd2lwTGFuZXNcbiAgICAgIDogbmV4dExhbmVzO1xufVxuZnVuY3Rpb24gY2hlY2tJZlJvb3RJc1ByZXJlbmRlcmluZyhyb290LCByZW5kZXJMYW5lcykge1xuICByZXR1cm4gKFxuICAgIDAgPT09XG4gICAgKHJvb3QucGVuZGluZ0xhbmVzICZcbiAgICAgIH4ocm9vdC5zdXNwZW5kZWRMYW5lcyAmIH5yb290LnBpbmdlZExhbmVzKSAmXG4gICAgICByZW5kZXJMYW5lcylcbiAgKTtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSkge1xuICBzd2l0Y2ggKGxhbmUpIHtcbiAgICBjYXNlIDE6XG4gICAgY2FzZSAyOlxuICAgIGNhc2UgNDpcbiAgICBjYXNlIDg6XG4gICAgICByZXR1cm4gY3VycmVudFRpbWUgKyAyNTA7XG4gICAgY2FzZSAxNjpcbiAgICBjYXNlIDMyOlxuICAgIGNhc2UgNjQ6XG4gICAgY2FzZSAxMjg6XG4gICAgY2FzZSAyNTY6XG4gICAgY2FzZSA1MTI6XG4gICAgY2FzZSAxMDI0OlxuICAgIGNhc2UgMjA0ODpcbiAgICBjYXNlIDQwOTY6XG4gICAgY2FzZSA4MTkyOlxuICAgIGNhc2UgMTYzODQ6XG4gICAgY2FzZSAzMjc2ODpcbiAgICBjYXNlIDY1NTM2OlxuICAgIGNhc2UgMTMxMDcyOlxuICAgIGNhc2UgMjYyMTQ0OlxuICAgIGNhc2UgNTI0Mjg4OlxuICAgIGNhc2UgMTA0ODU3NjpcbiAgICBjYXNlIDIwOTcxNTI6XG4gICAgICByZXR1cm4gY3VycmVudFRpbWUgKyA1ZTM7XG4gICAgY2FzZSA0MTk0MzA0OlxuICAgIGNhc2UgODM4ODYwODpcbiAgICBjYXNlIDE2Nzc3MjE2OlxuICAgIGNhc2UgMzM1NTQ0MzI6XG4gICAgICByZXR1cm4gLTE7XG4gICAgY2FzZSA2NzEwODg2NDpcbiAgICBjYXNlIDEzNDIxNzcyODpcbiAgICBjYXNlIDI2ODQzNTQ1NjpcbiAgICBjYXNlIDUzNjg3MDkxMjpcbiAgICBjYXNlIDEwNzM3NDE4MjQ6XG4gICAgICByZXR1cm4gLTE7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAtMTtcbiAgfVxufVxuZnVuY3Rpb24gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKSB7XG4gIHZhciBsYW5lID0gbmV4dFRyYW5zaXRpb25MYW5lO1xuICBuZXh0VHJhbnNpdGlvbkxhbmUgPDw9IDE7XG4gIDAgPT09IChuZXh0VHJhbnNpdGlvbkxhbmUgJiA0MTk0MTc2KSAmJiAobmV4dFRyYW5zaXRpb25MYW5lID0gMTI4KTtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBjbGFpbU5leHRSZXRyeUxhbmUoKSB7XG4gIHZhciBsYW5lID0gbmV4dFJldHJ5TGFuZTtcbiAgbmV4dFJldHJ5TGFuZSA8PD0gMTtcbiAgMCA9PT0gKG5leHRSZXRyeUxhbmUgJiA2MjkxNDU2MCkgJiYgKG5leHRSZXRyeUxhbmUgPSA0MTk0MzA0KTtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBjcmVhdGVMYW5lTWFwKGluaXRpYWwpIHtcbiAgZm9yICh2YXIgbGFuZU1hcCA9IFtdLCBpID0gMDsgMzEgPiBpOyBpKyspIGxhbmVNYXAucHVzaChpbml0aWFsKTtcbiAgcmV0dXJuIGxhbmVNYXA7XG59XG5mdW5jdGlvbiBtYXJrUm9vdFVwZGF0ZWQkMShyb290LCB1cGRhdGVMYW5lKSB7XG4gIHJvb3QucGVuZGluZ0xhbmVzIHw9IHVwZGF0ZUxhbmU7XG4gIDI2ODQzNTQ1NiAhPT0gdXBkYXRlTGFuZSAmJlxuICAgICgocm9vdC5zdXNwZW5kZWRMYW5lcyA9IDApLCAocm9vdC5waW5nZWRMYW5lcyA9IDApLCAocm9vdC53YXJtTGFuZXMgPSAwKSk7XG59XG5mdW5jdGlvbiBtYXJrUm9vdEZpbmlzaGVkKFxuICByb290LFxuICBmaW5pc2hlZExhbmVzLFxuICByZW1haW5pbmdMYW5lcyxcbiAgc3Bhd25lZExhbmUsXG4gIHVwZGF0ZWRMYW5lcyxcbiAgc3VzcGVuZGVkUmV0cnlMYW5lc1xuKSB7XG4gIHZhciBwcmV2aW91c2x5UGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIHJvb3QucGVuZGluZ0xhbmVzID0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgPSAwO1xuICByb290LnBpbmdlZExhbmVzID0gMDtcbiAgcm9vdC53YXJtTGFuZXMgPSAwO1xuICByb290LmV4cGlyZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5zaGVsbFN1c3BlbmRDb3VudGVyID0gMDtcbiAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHMsXG4gICAgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXMsXG4gICAgaGlkZGVuVXBkYXRlcyA9IHJvb3QuaGlkZGVuVXBkYXRlcztcbiAgZm9yIChcbiAgICByZW1haW5pbmdMYW5lcyA9IHByZXZpb3VzbHlQZW5kaW5nTGFuZXMgJiB+cmVtYWluaW5nTGFuZXM7XG4gICAgMCA8IHJlbWFpbmluZ0xhbmVzO1xuXG4gICkge1xuICAgIHZhciBpbmRleCQ3ID0gMzEgLSBjbHozMihyZW1haW5pbmdMYW5lcyksXG4gICAgICBsYW5lID0gMSA8PCBpbmRleCQ3O1xuICAgIGVudGFuZ2xlbWVudHNbaW5kZXgkN10gPSAwO1xuICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleCQ3XSA9IC0xO1xuICAgIHZhciBoaWRkZW5VcGRhdGVzRm9yTGFuZSA9IGhpZGRlblVwZGF0ZXNbaW5kZXgkN107XG4gICAgaWYgKG51bGwgIT09IGhpZGRlblVwZGF0ZXNGb3JMYW5lKVxuICAgICAgZm9yIChcbiAgICAgICAgaGlkZGVuVXBkYXRlc1tpbmRleCQ3XSA9IG51bGwsIGluZGV4JDcgPSAwO1xuICAgICAgICBpbmRleCQ3IDwgaGlkZGVuVXBkYXRlc0ZvckxhbmUubGVuZ3RoO1xuICAgICAgICBpbmRleCQ3KytcbiAgICAgICkge1xuICAgICAgICB2YXIgdXBkYXRlID0gaGlkZGVuVXBkYXRlc0ZvckxhbmVbaW5kZXgkN107XG4gICAgICAgIG51bGwgIT09IHVwZGF0ZSAmJiAodXBkYXRlLmxhbmUgJj0gLTUzNjg3MDkxMyk7XG4gICAgICB9XG4gICAgcmVtYWluaW5nTGFuZXMgJj0gfmxhbmU7XG4gIH1cbiAgMCAhPT0gc3Bhd25lZExhbmUgJiYgbWFya1NwYXduZWREZWZlcnJlZExhbmUocm9vdCwgc3Bhd25lZExhbmUsIDApO1xuICAwICE9PSBzdXNwZW5kZWRSZXRyeUxhbmVzICYmXG4gICAgMCA9PT0gdXBkYXRlZExhbmVzICYmXG4gICAgMCAhPT0gcm9vdC50YWcgJiZcbiAgICAocm9vdC5zdXNwZW5kZWRMYW5lcyB8PVxuICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lcyAmIH4ocHJldmlvdXNseVBlbmRpbmdMYW5lcyAmIH5maW5pc2hlZExhbmVzKSk7XG59XG5mdW5jdGlvbiBtYXJrU3Bhd25lZERlZmVycmVkTGFuZShyb290LCBzcGF3bmVkTGFuZSwgZW50YW5nbGVkTGFuZXMpIHtcbiAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gc3Bhd25lZExhbmU7XG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgJj0gfnNwYXduZWRMYW5lO1xuICB2YXIgc3Bhd25lZExhbmVJbmRleCA9IDMxIC0gY2x6MzIoc3Bhd25lZExhbmUpO1xuICByb290LmVudGFuZ2xlZExhbmVzIHw9IHNwYXduZWRMYW5lO1xuICByb290LmVudGFuZ2xlbWVudHNbc3Bhd25lZExhbmVJbmRleF0gPVxuICAgIHJvb3QuZW50YW5nbGVtZW50c1tzcGF3bmVkTGFuZUluZGV4XSB8XG4gICAgMTA3Mzc0MTgyNCB8XG4gICAgKGVudGFuZ2xlZExhbmVzICYgNDE5NDIxOCk7XG59XG5mdW5jdGlvbiBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBlbnRhbmdsZWRMYW5lcykge1xuICB2YXIgcm9vdEVudGFuZ2xlZExhbmVzID0gKHJvb3QuZW50YW5nbGVkTGFuZXMgfD0gZW50YW5nbGVkTGFuZXMpO1xuICBmb3IgKHJvb3QgPSByb290LmVudGFuZ2xlbWVudHM7IHJvb3RFbnRhbmdsZWRMYW5lczsgKSB7XG4gICAgdmFyIGluZGV4JDggPSAzMSAtIGNsejMyKHJvb3RFbnRhbmdsZWRMYW5lcyksXG4gICAgICBsYW5lID0gMSA8PCBpbmRleCQ4O1xuICAgIChsYW5lICYgZW50YW5nbGVkTGFuZXMpIHwgKHJvb3RbaW5kZXgkOF0gJiBlbnRhbmdsZWRMYW5lcykgJiZcbiAgICAgIChyb290W2luZGV4JDhdIHw9IGVudGFuZ2xlZExhbmVzKTtcbiAgICByb290RW50YW5nbGVkTGFuZXMgJj0gfmxhbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIGxhbmVzVG9FdmVudFByaW9yaXR5KGxhbmVzKSB7XG4gIGxhbmVzICY9IC1sYW5lcztcbiAgcmV0dXJuIDIgPCBsYW5lc1xuICAgID8gOCA8IGxhbmVzXG4gICAgICA/IDAgIT09IChsYW5lcyAmIDEzNDIxNzcyNylcbiAgICAgICAgPyAzMlxuICAgICAgICA6IDI2ODQzNTQ1NlxuICAgICAgOiA4XG4gICAgOiAyO1xufVxuZnVuY3Rpb24gcmVzb2x2ZVVwZGF0ZVByaW9yaXR5KCkge1xuICB2YXIgdXBkYXRlUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICBpZiAoMCAhPT0gdXBkYXRlUHJpb3JpdHkpIHJldHVybiB1cGRhdGVQcmlvcml0eTtcbiAgdXBkYXRlUHJpb3JpdHkgPSB3aW5kb3cuZXZlbnQ7XG4gIHJldHVybiB2b2lkIDAgPT09IHVwZGF0ZVByaW9yaXR5ID8gMzIgOiBnZXRFdmVudFByaW9yaXR5KHVwZGF0ZVByaW9yaXR5LnR5cGUpO1xufVxuZnVuY3Rpb24gcnVuV2l0aFByaW9yaXR5KHByaW9yaXR5LCBmbikge1xuICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJpb3JpdHkpLCBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmV2aW91c1ByaW9yaXR5O1xuICB9XG59XG52YXIgcmFuZG9tS2V5ID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiksXG4gIGludGVybmFsSW5zdGFuY2VLZXkgPSBcIl9fcmVhY3RGaWJlciRcIiArIHJhbmRvbUtleSxcbiAgaW50ZXJuYWxQcm9wc0tleSA9IFwiX19yZWFjdFByb3BzJFwiICsgcmFuZG9tS2V5LFxuICBpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5ID0gXCJfX3JlYWN0Q29udGFpbmVyJFwiICsgcmFuZG9tS2V5LFxuICBpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXkgPSBcIl9fcmVhY3RFdmVudHMkXCIgKyByYW5kb21LZXksXG4gIGludGVybmFsRXZlbnRIYW5kbGVyTGlzdGVuZXJzS2V5ID0gXCJfX3JlYWN0TGlzdGVuZXJzJFwiICsgcmFuZG9tS2V5LFxuICBpbnRlcm5hbEV2ZW50SGFuZGxlc1NldEtleSA9IFwiX19yZWFjdEhhbmRsZXMkXCIgKyByYW5kb21LZXksXG4gIGludGVybmFsUm9vdE5vZGVSZXNvdXJjZXNLZXkgPSBcIl9fcmVhY3RSZXNvdXJjZXMkXCIgKyByYW5kb21LZXksXG4gIGludGVybmFsSG9pc3RhYmxlTWFya2VyID0gXCJfX3JlYWN0TWFya2VyJFwiICsgcmFuZG9tS2V5O1xuZnVuY3Rpb24gZGV0YWNoRGVsZXRlZEluc3RhbmNlKG5vZGUpIHtcbiAgZGVsZXRlIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG4gIGRlbGV0ZSBub2RlW2ludGVybmFsUHJvcHNLZXldO1xuICBkZWxldGUgbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldO1xuICBkZWxldGUgbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlckxpc3RlbmVyc0tleV07XG4gIGRlbGV0ZSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVzU2V0S2V5XTtcbn1cbmZ1bmN0aW9uIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldE5vZGUpIHtcbiAgdmFyIHRhcmdldEluc3QgPSB0YXJnZXROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuICBpZiAodGFyZ2V0SW5zdCkgcmV0dXJuIHRhcmdldEluc3Q7XG4gIGZvciAodmFyIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7IHBhcmVudE5vZGU7ICkge1xuICAgIGlmIChcbiAgICAgICh0YXJnZXRJbnN0ID1cbiAgICAgICAgcGFyZW50Tm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSB8fFxuICAgICAgICBwYXJlbnROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldKVxuICAgICkge1xuICAgICAgcGFyZW50Tm9kZSA9IHRhcmdldEluc3QuYWx0ZXJuYXRlO1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSB0YXJnZXRJbnN0LmNoaWxkIHx8XG4gICAgICAgIChudWxsICE9PSBwYXJlbnROb2RlICYmIG51bGwgIT09IHBhcmVudE5vZGUuY2hpbGQpXG4gICAgICApXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdGFyZ2V0Tm9kZSA9IGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgbnVsbCAhPT0gdGFyZ2V0Tm9kZTtcblxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoKHBhcmVudE5vZGUgPSB0YXJnZXROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldKSkgcmV0dXJuIHBhcmVudE5vZGU7XG4gICAgICAgICAgdGFyZ2V0Tm9kZSA9IGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICAgIH1cbiAgICB0YXJnZXROb2RlID0gcGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0SW5zdGFuY2VGcm9tTm9kZShub2RlKSB7XG4gIGlmIChcbiAgICAobm9kZSA9IG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gfHwgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSlcbiAgKSB7XG4gICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICAgIGlmIChcbiAgICAgIDUgPT09IHRhZyB8fFxuICAgICAgNiA9PT0gdGFnIHx8XG4gICAgICAxMyA9PT0gdGFnIHx8XG4gICAgICAyNiA9PT0gdGFnIHx8XG4gICAgICAyNyA9PT0gdGFnIHx8XG4gICAgICAzID09PSB0YWdcbiAgICApXG4gICAgICByZXR1cm4gbm9kZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCkge1xuICB2YXIgdGFnID0gaW5zdC50YWc7XG4gIGlmICg1ID09PSB0YWcgfHwgMjYgPT09IHRhZyB8fCAyNyA9PT0gdGFnIHx8IDYgPT09IHRhZykgcmV0dXJuIGluc3Quc3RhdGVOb2RlO1xuICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMzKSk7XG59XG5mdW5jdGlvbiBnZXRSZXNvdXJjZXNGcm9tUm9vdChyb290KSB7XG4gIHZhciByZXNvdXJjZXMgPSByb290W2ludGVybmFsUm9vdE5vZGVSZXNvdXJjZXNLZXldO1xuICByZXNvdXJjZXMgfHxcbiAgICAocmVzb3VyY2VzID0gcm9vdFtpbnRlcm5hbFJvb3ROb2RlUmVzb3VyY2VzS2V5XSA9XG4gICAgICB7IGhvaXN0YWJsZVN0eWxlczogbmV3IE1hcCgpLCBob2lzdGFibGVTY3JpcHRzOiBuZXcgTWFwKCkgfSk7XG4gIHJldHVybiByZXNvdXJjZXM7XG59XG5mdW5jdGlvbiBtYXJrTm9kZUFzSG9pc3RhYmxlKG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbEhvaXN0YWJsZU1hcmtlcl0gPSAhMDtcbn1cbnZhciBhbGxOYXRpdmVFdmVudHMgPSBuZXcgU2V0KCksXG4gIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMgPSB7fTtcbmZ1bmN0aW9uIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUgKyBcIkNhcHR1cmVcIiwgZGVwZW5kZW5jaWVzKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBkZXBlbmRlbmNpZXM7XG4gIGZvciAoXG4gICAgcmVnaXN0cmF0aW9uTmFtZSA9IDA7XG4gICAgcmVnaXN0cmF0aW9uTmFtZSA8IGRlcGVuZGVuY2llcy5sZW5ndGg7XG4gICAgcmVnaXN0cmF0aW9uTmFtZSsrXG4gIClcbiAgICBhbGxOYXRpdmVFdmVudHMuYWRkKGRlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSk7XG59XG52YXIgY2FuVXNlRE9NID0gIShcbiAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2Ygd2luZG93IHx8XG4gICAgXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIHdpbmRvdy5kb2N1bWVudCB8fFxuICAgIFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudFxuICApLFxuICBWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWCA9IFJlZ0V4cChcbiAgICBcIl5bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRF1bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXSokXCJcbiAgKSxcbiAgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9LFxuICB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGlzQXR0cmlidXRlTmFtZVNhZmUoYXR0cmlidXRlTmFtZSkge1xuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKVxuICAgIHJldHVybiAhMDtcbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpIHJldHVybiAhMTtcbiAgaWYgKFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYLnRlc3QoYXR0cmlidXRlTmFtZSkpXG4gICAgcmV0dXJuICh2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSAhMCk7XG4gIGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSAhMDtcbiAgcmV0dXJuICExO1xufVxuZnVuY3Rpb24gc2V0VmFsdWVGb3JBdHRyaWJ1dGUobm9kZSwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKGlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpXG4gICAgaWYgKG51bGwgPT09IHZhbHVlKSBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBlbHNlIHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgdmFyIHByZWZpeCQxMCA9IG5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgwLCA1KTtcbiAgICAgICAgICBpZiAoXCJkYXRhLVwiICE9PSBwcmVmaXgkMTAgJiYgXCJhcmlhLVwiICE9PSBwcmVmaXgkMTApIHtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIFwiXCIgKyB2YWx1ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc2V0VmFsdWVGb3JLbm93bkF0dHJpYnV0ZShub2RlLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAobnVsbCA9PT0gdmFsdWUpIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCBcIlwiICsgdmFsdWUpO1xuICB9XG59XG5mdW5jdGlvbiBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUobm9kZSwgbmFtZXNwYWNlLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAobnVsbCA9PT0gdmFsdWUpIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBub2RlLnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbmFtZSwgXCJcIiArIHZhbHVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkge1xuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzQ2hlY2thYmxlKGVsZW0pIHtcbiAgdmFyIHR5cGUgPSBlbGVtLnR5cGU7XG4gIHJldHVybiAoXG4gICAgKGVsZW0gPSBlbGVtLm5vZGVOYW1lKSAmJlxuICAgIFwiaW5wdXRcIiA9PT0gZWxlbS50b0xvd2VyQ2FzZSgpICYmXG4gICAgKFwiY2hlY2tib3hcIiA9PT0gdHlwZSB8fCBcInJhZGlvXCIgPT09IHR5cGUpXG4gICk7XG59XG5mdW5jdGlvbiB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlRmllbGQgPSBpc0NoZWNrYWJsZShub2RlKSA/IFwiY2hlY2tlZFwiIDogXCJ2YWx1ZVwiLFxuICAgIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgbm9kZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsXG4gICAgICB2YWx1ZUZpZWxkXG4gICAgKSxcbiAgICBjdXJyZW50VmFsdWUgPSBcIlwiICsgbm9kZVt2YWx1ZUZpZWxkXTtcbiAgaWYgKFxuICAgICFub2RlLmhhc093blByb3BlcnR5KHZhbHVlRmllbGQpICYmXG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIGRlc2NyaXB0b3IgJiZcbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBkZXNjcmlwdG9yLmdldCAmJlxuICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGRlc2NyaXB0b3Iuc2V0XG4gICkge1xuICAgIHZhciBnZXQgPSBkZXNjcmlwdG9yLmdldCxcbiAgICAgIHNldCA9IGRlc2NyaXB0b3Iuc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXQuY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBjdXJyZW50VmFsdWUgPSBcIlwiICsgdmFsdWU7XG4gICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgICAgZW51bWVyYWJsZTogZGVzY3JpcHRvci5lbnVtZXJhYmxlXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldFZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgICB9LFxuICAgICAgc2V0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBjdXJyZW50VmFsdWUgPSBcIlwiICsgdmFsdWU7XG4gICAgICB9LFxuICAgICAgc3RvcFRyYWNraW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5vZGUuX3ZhbHVlVHJhY2tlciA9IG51bGw7XG4gICAgICAgIGRlbGV0ZSBub2RlW3ZhbHVlRmllbGRdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIHRyYWNrKG5vZGUpIHtcbiAgbm9kZS5fdmFsdWVUcmFja2VyIHx8IChub2RlLl92YWx1ZVRyYWNrZXIgPSB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKG5vZGUpIHtcbiAgaWYgKCFub2RlKSByZXR1cm4gITE7XG4gIHZhciB0cmFja2VyID0gbm9kZS5fdmFsdWVUcmFja2VyO1xuICBpZiAoIXRyYWNrZXIpIHJldHVybiAhMDtcbiAgdmFyIGxhc3RWYWx1ZSA9IHRyYWNrZXIuZ2V0VmFsdWUoKTtcbiAgdmFyIHZhbHVlID0gXCJcIjtcbiAgbm9kZSAmJlxuICAgICh2YWx1ZSA9IGlzQ2hlY2thYmxlKG5vZGUpXG4gICAgICA/IG5vZGUuY2hlY2tlZFxuICAgICAgICA/IFwidHJ1ZVwiXG4gICAgICAgIDogXCJmYWxzZVwiXG4gICAgICA6IG5vZGUudmFsdWUpO1xuICBub2RlID0gdmFsdWU7XG4gIHJldHVybiBub2RlICE9PSBsYXN0VmFsdWUgPyAodHJhY2tlci5zZXRWYWx1ZShub2RlKSwgITApIDogITE7XG59XG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50KGRvYykge1xuICBkb2MgPSBkb2MgfHwgKFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBkb2N1bWVudCA/IGRvY3VtZW50IDogdm9pZCAwKTtcbiAgaWYgKFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiBkb2MpIHJldHVybiBudWxsO1xuICB0cnkge1xuICAgIHJldHVybiBkb2MuYWN0aXZlRWxlbWVudCB8fCBkb2MuYm9keTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBkb2MuYm9keTtcbiAgfVxufVxudmFyIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXNSZWdleCA9IC9bXFxuXCJcXFxcXS9nO1xuZnVuY3Rpb24gZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3Rlcyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZShcbiAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzUmVnZXgsXG4gICAgZnVuY3Rpb24gKGNoKSB7XG4gICAgICByZXR1cm4gXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSArIFwiIFwiO1xuICAgIH1cbiAgKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUlucHV0KFxuICBlbGVtZW50LFxuICB2YWx1ZSxcbiAgZGVmYXVsdFZhbHVlLFxuICBsYXN0RGVmYXVsdFZhbHVlLFxuICBjaGVja2VkLFxuICBkZWZhdWx0Q2hlY2tlZCxcbiAgdHlwZSxcbiAgbmFtZVxuKSB7XG4gIGVsZW1lbnQubmFtZSA9IFwiXCI7XG4gIG51bGwgIT0gdHlwZSAmJlxuICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gIFwic3ltYm9sXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgdHlwZVxuICAgID8gKGVsZW1lbnQudHlwZSA9IHR5cGUpXG4gICAgOiBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInR5cGVcIik7XG4gIGlmIChudWxsICE9IHZhbHVlKVxuICAgIGlmIChcIm51bWJlclwiID09PSB0eXBlKSB7XG4gICAgICBpZiAoKDAgPT09IHZhbHVlICYmIFwiXCIgPT09IGVsZW1lbnQudmFsdWUpIHx8IGVsZW1lbnQudmFsdWUgIT0gdmFsdWUpXG4gICAgICAgIGVsZW1lbnQudmFsdWUgPSBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlXG4gICAgICBlbGVtZW50LnZhbHVlICE9PSBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkgJiZcbiAgICAgICAgKGVsZW1lbnQudmFsdWUgPSBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkpO1xuICBlbHNlXG4gICAgKFwic3VibWl0XCIgIT09IHR5cGUgJiYgXCJyZXNldFwiICE9PSB0eXBlKSB8fCBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInZhbHVlXCIpO1xuICBudWxsICE9IHZhbHVlXG4gICAgPyBzZXREZWZhdWx0VmFsdWUoZWxlbWVudCwgdHlwZSwgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkpXG4gICAgOiBudWxsICE9IGRlZmF1bHRWYWx1ZVxuICAgICAgPyBzZXREZWZhdWx0VmFsdWUoZWxlbWVudCwgdHlwZSwgZ2V0VG9TdHJpbmdWYWx1ZShkZWZhdWx0VmFsdWUpKVxuICAgICAgOiBudWxsICE9IGxhc3REZWZhdWx0VmFsdWUgJiYgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtcbiAgbnVsbCA9PSBjaGVja2VkICYmXG4gICAgbnVsbCAhPSBkZWZhdWx0Q2hlY2tlZCAmJlxuICAgIChlbGVtZW50LmRlZmF1bHRDaGVja2VkID0gISFkZWZhdWx0Q2hlY2tlZCk7XG4gIG51bGwgIT0gY2hlY2tlZCAmJlxuICAgIChlbGVtZW50LmNoZWNrZWQgPVxuICAgICAgY2hlY2tlZCAmJiBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjaGVja2VkICYmIFwic3ltYm9sXCIgIT09IHR5cGVvZiBjaGVja2VkKTtcbiAgbnVsbCAhPSBuYW1lICYmXG4gIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIG5hbWUgJiZcbiAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIG5hbWUgJiZcbiAgXCJib29sZWFuXCIgIT09IHR5cGVvZiBuYW1lXG4gICAgPyAoZWxlbWVudC5uYW1lID0gXCJcIiArIGdldFRvU3RyaW5nVmFsdWUobmFtZSkpXG4gICAgOiBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcIm5hbWVcIik7XG59XG5mdW5jdGlvbiBpbml0SW5wdXQoXG4gIGVsZW1lbnQsXG4gIHZhbHVlLFxuICBkZWZhdWx0VmFsdWUsXG4gIGNoZWNrZWQsXG4gIGRlZmF1bHRDaGVja2VkLFxuICB0eXBlLFxuICBuYW1lLFxuICBpc0h5ZHJhdGluZ1xuKSB7XG4gIG51bGwgIT0gdHlwZSAmJlxuICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgdHlwZSAmJlxuICAgIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgdHlwZSAmJlxuICAgIChlbGVtZW50LnR5cGUgPSB0eXBlKTtcbiAgaWYgKG51bGwgIT0gdmFsdWUgfHwgbnVsbCAhPSBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICAoXCJzdWJtaXRcIiAhPT0gdHlwZSAmJiBcInJlc2V0XCIgIT09IHR5cGUpIHx8XG4gICAgICAgICh2b2lkIDAgIT09IHZhbHVlICYmIG51bGwgIT09IHZhbHVlKVxuICAgICAgKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBkZWZhdWx0VmFsdWUgPVxuICAgICAgbnVsbCAhPSBkZWZhdWx0VmFsdWUgPyBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZShkZWZhdWx0VmFsdWUpIDogXCJcIjtcbiAgICB2YWx1ZSA9IG51bGwgIT0gdmFsdWUgPyBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkgOiBkZWZhdWx0VmFsdWU7XG4gICAgaXNIeWRyYXRpbmcgfHwgdmFsdWUgPT09IGVsZW1lbnQudmFsdWUgfHwgKGVsZW1lbnQudmFsdWUgPSB2YWx1ZSk7XG4gICAgZWxlbWVudC5kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBjaGVja2VkID0gbnVsbCAhPSBjaGVja2VkID8gY2hlY2tlZCA6IGRlZmF1bHRDaGVja2VkO1xuICBjaGVja2VkID1cbiAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjaGVja2VkICYmIFwic3ltYm9sXCIgIT09IHR5cGVvZiBjaGVja2VkICYmICEhY2hlY2tlZDtcbiAgZWxlbWVudC5jaGVja2VkID0gaXNIeWRyYXRpbmcgPyBlbGVtZW50LmNoZWNrZWQgOiAhIWNoZWNrZWQ7XG4gIGVsZW1lbnQuZGVmYXVsdENoZWNrZWQgPSAhIWNoZWNrZWQ7XG4gIG51bGwgIT0gbmFtZSAmJlxuICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIG5hbWUgJiZcbiAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgbmFtZSAmJlxuICAgIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgbmFtZSAmJlxuICAgIChlbGVtZW50Lm5hbWUgPSBuYW1lKTtcbn1cbmZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZShub2RlLCB0eXBlLCB2YWx1ZSkge1xuICAoXCJudW1iZXJcIiA9PT0gdHlwZSAmJiBnZXRBY3RpdmVFbGVtZW50KG5vZGUub3duZXJEb2N1bWVudCkgPT09IG5vZGUpIHx8XG4gICAgbm9kZS5kZWZhdWx0VmFsdWUgPT09IFwiXCIgKyB2YWx1ZSB8fFxuICAgIChub2RlLmRlZmF1bHRWYWx1ZSA9IFwiXCIgKyB2YWx1ZSk7XG59XG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zKG5vZGUsIG11bHRpcGxlLCBwcm9wVmFsdWUsIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICBub2RlID0gbm9kZS5vcHRpb25zO1xuICBpZiAobXVsdGlwbGUpIHtcbiAgICBtdWx0aXBsZSA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgbXVsdGlwbGVbXCIkXCIgKyBwcm9wVmFsdWVbaV1dID0gITA7XG4gICAgZm9yIChwcm9wVmFsdWUgPSAwOyBwcm9wVmFsdWUgPCBub2RlLmxlbmd0aDsgcHJvcFZhbHVlKyspXG4gICAgICAoaSA9IG11bHRpcGxlLmhhc093blByb3BlcnR5KFwiJFwiICsgbm9kZVtwcm9wVmFsdWVdLnZhbHVlKSksXG4gICAgICAgIG5vZGVbcHJvcFZhbHVlXS5zZWxlY3RlZCAhPT0gaSAmJiAobm9kZVtwcm9wVmFsdWVdLnNlbGVjdGVkID0gaSksXG4gICAgICAgIGkgJiYgc2V0RGVmYXVsdFNlbGVjdGVkICYmIChub2RlW3Byb3BWYWx1ZV0uZGVmYXVsdFNlbGVjdGVkID0gITApO1xuICB9IGVsc2Uge1xuICAgIHByb3BWYWx1ZSA9IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKHByb3BWYWx1ZSk7XG4gICAgbXVsdGlwbGUgPSBudWxsO1xuICAgIGZvciAoaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobm9kZVtpXS52YWx1ZSA9PT0gcHJvcFZhbHVlKSB7XG4gICAgICAgIG5vZGVbaV0uc2VsZWN0ZWQgPSAhMDtcbiAgICAgICAgc2V0RGVmYXVsdFNlbGVjdGVkICYmIChub2RlW2ldLmRlZmF1bHRTZWxlY3RlZCA9ICEwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbnVsbCAhPT0gbXVsdGlwbGUgfHwgbm9kZVtpXS5kaXNhYmxlZCB8fCAobXVsdGlwbGUgPSBub2RlW2ldKTtcbiAgICB9XG4gICAgbnVsbCAhPT0gbXVsdGlwbGUgJiYgKG11bHRpcGxlLnNlbGVjdGVkID0gITApO1xuICB9XG59XG5mdW5jdGlvbiB1cGRhdGVUZXh0YXJlYShlbGVtZW50LCB2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmIChcbiAgICBudWxsICE9IHZhbHVlICYmXG4gICAgKCh2YWx1ZSA9IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSksXG4gICAgdmFsdWUgIT09IGVsZW1lbnQudmFsdWUgJiYgKGVsZW1lbnQudmFsdWUgPSB2YWx1ZSksXG4gICAgbnVsbCA9PSBkZWZhdWx0VmFsdWUpXG4gICkge1xuICAgIGVsZW1lbnQuZGVmYXVsdFZhbHVlICE9PSB2YWx1ZSAmJiAoZWxlbWVudC5kZWZhdWx0VmFsdWUgPSB2YWx1ZSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVsZW1lbnQuZGVmYXVsdFZhbHVlID1cbiAgICBudWxsICE9IGRlZmF1bHRWYWx1ZSA/IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKGRlZmF1bHRWYWx1ZSkgOiBcIlwiO1xufVxuZnVuY3Rpb24gaW5pdFRleHRhcmVhKGVsZW1lbnQsIHZhbHVlLCBkZWZhdWx0VmFsdWUsIGNoaWxkcmVuKSB7XG4gIGlmIChudWxsID09IHZhbHVlKSB7XG4gICAgaWYgKG51bGwgIT0gY2hpbGRyZW4pIHtcbiAgICAgIGlmIChudWxsICE9IGRlZmF1bHRWYWx1ZSkgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg5MikpO1xuICAgICAgaWYgKGlzQXJyYXlJbXBsKGNoaWxkcmVuKSkge1xuICAgICAgICBpZiAoMSA8IGNoaWxkcmVuLmxlbmd0aCkgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg5MykpO1xuICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuWzBdO1xuICAgICAgfVxuICAgICAgZGVmYXVsdFZhbHVlID0gY2hpbGRyZW47XG4gICAgfVxuICAgIG51bGwgPT0gZGVmYXVsdFZhbHVlICYmIChkZWZhdWx0VmFsdWUgPSBcIlwiKTtcbiAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgfVxuICBkZWZhdWx0VmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKTtcbiAgZWxlbWVudC5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gIGNoaWxkcmVuID0gZWxlbWVudC50ZXh0Q29udGVudDtcbiAgY2hpbGRyZW4gPT09IGRlZmF1bHRWYWx1ZSAmJlxuICAgIFwiXCIgIT09IGNoaWxkcmVuICYmXG4gICAgbnVsbCAhPT0gY2hpbGRyZW4gJiZcbiAgICAoZWxlbWVudC52YWx1ZSA9IGNoaWxkcmVuKTtcbn1cbmZ1bmN0aW9uIHNldFRleHRDb250ZW50KG5vZGUsIHRleHQpIHtcbiAgaWYgKHRleHQpIHtcbiAgICB2YXIgZmlyc3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICBpZiAoXG4gICAgICBmaXJzdENoaWxkICYmXG4gICAgICBmaXJzdENoaWxkID09PSBub2RlLmxhc3RDaGlsZCAmJlxuICAgICAgMyA9PT0gZmlyc3RDaGlsZC5ub2RlVHlwZVxuICAgICkge1xuICAgICAgZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSB0ZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn1cbnZhciB1bml0bGVzc051bWJlcnMgPSBuZXcgU2V0KFxuICBcImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IGFzcGVjdFJhdGlvIGJvcmRlckltYWdlT3V0c2V0IGJvcmRlckltYWdlU2xpY2UgYm9yZGVySW1hZ2VXaWR0aCBib3hGbGV4IGJveEZsZXhHcm91cCBib3hPcmRpbmFsR3JvdXAgY29sdW1uQ291bnQgY29sdW1ucyBmbGV4IGZsZXhHcm93IGZsZXhQb3NpdGl2ZSBmbGV4U2hyaW5rIGZsZXhOZWdhdGl2ZSBmbGV4T3JkZXIgZ3JpZEFyZWEgZ3JpZFJvdyBncmlkUm93RW5kIGdyaWRSb3dTcGFuIGdyaWRSb3dTdGFydCBncmlkQ29sdW1uIGdyaWRDb2x1bW5FbmQgZ3JpZENvbHVtblNwYW4gZ3JpZENvbHVtblN0YXJ0IGZvbnRXZWlnaHQgbGluZUNsYW1wIGxpbmVIZWlnaHQgb3BhY2l0eSBvcmRlciBvcnBoYW5zIHNjYWxlIHRhYlNpemUgd2lkb3dzIHpJbmRleCB6b29tIGZpbGxPcGFjaXR5IGZsb29kT3BhY2l0eSBzdG9wT3BhY2l0eSBzdHJva2VEYXNoYXJyYXkgc3Ryb2tlRGFzaG9mZnNldCBzdHJva2VNaXRlcmxpbWl0IHN0cm9rZU9wYWNpdHkgc3Ryb2tlV2lkdGggTW96QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgTW96Qm94RmxleCBNb3pCb3hGbGV4R3JvdXAgTW96TGluZUNsYW1wIG1zQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgbXNGbGV4IG1zWm9vbSBtc0ZsZXhHcm93IG1zRmxleE5lZ2F0aXZlIG1zRmxleE9yZGVyIG1zRmxleFBvc2l0aXZlIG1zRmxleFNocmluayBtc0dyaWRDb2x1bW4gbXNHcmlkQ29sdW1uU3BhbiBtc0dyaWRSb3cgbXNHcmlkUm93U3BhbiBXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudCBXZWJraXRCb3hGbGV4IFdlYktpdEJveEZsZXhHcm91cCBXZWJraXRCb3hPcmRpbmFsR3JvdXAgV2Via2l0Q29sdW1uQ291bnQgV2Via2l0Q29sdW1ucyBXZWJraXRGbGV4IFdlYmtpdEZsZXhHcm93IFdlYmtpdEZsZXhQb3NpdGl2ZSBXZWJraXRGbGV4U2hyaW5rIFdlYmtpdExpbmVDbGFtcFwiLnNwbGl0KFxuICAgIFwiIFwiXG4gIClcbik7XG5mdW5jdGlvbiBzZXRWYWx1ZUZvclN0eWxlKHN0eWxlLCBzdHlsZU5hbWUsIHZhbHVlKSB7XG4gIHZhciBpc0N1c3RvbVByb3BlcnR5ID0gMCA9PT0gc3R5bGVOYW1lLmluZGV4T2YoXCItLVwiKTtcbiAgbnVsbCA9PSB2YWx1ZSB8fCBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIHZhbHVlIHx8IFwiXCIgPT09IHZhbHVlXG4gICAgPyBpc0N1c3RvbVByb3BlcnR5XG4gICAgICA/IHN0eWxlLnNldFByb3BlcnR5KHN0eWxlTmFtZSwgXCJcIilcbiAgICAgIDogXCJmbG9hdFwiID09PSBzdHlsZU5hbWVcbiAgICAgICAgPyAoc3R5bGUuY3NzRmxvYXQgPSBcIlwiKVxuICAgICAgICA6IChzdHlsZVtzdHlsZU5hbWVdID0gXCJcIilcbiAgICA6IGlzQ3VzdG9tUHJvcGVydHlcbiAgICAgID8gc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVOYW1lLCB2YWx1ZSlcbiAgICAgIDogXCJudW1iZXJcIiAhPT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgMCA9PT0gdmFsdWUgfHxcbiAgICAgICAgICB1bml0bGVzc051bWJlcnMuaGFzKHN0eWxlTmFtZSlcbiAgICAgICAgPyBcImZsb2F0XCIgPT09IHN0eWxlTmFtZVxuICAgICAgICAgID8gKHN0eWxlLmNzc0Zsb2F0ID0gdmFsdWUpXG4gICAgICAgICAgOiAoc3R5bGVbc3R5bGVOYW1lXSA9IChcIlwiICsgdmFsdWUpLnRyaW0oKSlcbiAgICAgICAgOiAoc3R5bGVbc3R5bGVOYW1lXSA9IHZhbHVlICsgXCJweFwiKTtcbn1cbmZ1bmN0aW9uIHNldFZhbHVlRm9yU3R5bGVzKG5vZGUsIHN0eWxlcywgcHJldlN0eWxlcykge1xuICBpZiAobnVsbCAhPSBzdHlsZXMgJiYgXCJvYmplY3RcIiAhPT0gdHlwZW9mIHN0eWxlcylcbiAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDYyKSk7XG4gIG5vZGUgPSBub2RlLnN0eWxlO1xuICBpZiAobnVsbCAhPSBwcmV2U3R5bGVzKSB7XG4gICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHByZXZTdHlsZXMpXG4gICAgICAhcHJldlN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpIHx8XG4gICAgICAgIChudWxsICE9IHN0eWxlcyAmJiBzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkgfHxcbiAgICAgICAgKDAgPT09IHN0eWxlTmFtZS5pbmRleE9mKFwiLS1cIilcbiAgICAgICAgICA/IG5vZGUuc2V0UHJvcGVydHkoc3R5bGVOYW1lLCBcIlwiKVxuICAgICAgICAgIDogXCJmbG9hdFwiID09PSBzdHlsZU5hbWVcbiAgICAgICAgICAgID8gKG5vZGUuY3NzRmxvYXQgPSBcIlwiKVxuICAgICAgICAgICAgOiAobm9kZVtzdHlsZU5hbWVdID0gXCJcIikpO1xuICAgIGZvciAodmFyIHN0eWxlTmFtZSQxNiBpbiBzdHlsZXMpXG4gICAgICAoc3R5bGVOYW1lID0gc3R5bGVzW3N0eWxlTmFtZSQxNl0pLFxuICAgICAgICBzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lJDE2KSAmJlxuICAgICAgICAgIHByZXZTdHlsZXNbc3R5bGVOYW1lJDE2XSAhPT0gc3R5bGVOYW1lICYmXG4gICAgICAgICAgc2V0VmFsdWVGb3JTdHlsZShub2RlLCBzdHlsZU5hbWUkMTYsIHN0eWxlTmFtZSk7XG4gIH0gZWxzZVxuICAgIGZvciAodmFyIHN0eWxlTmFtZSQxNyBpbiBzdHlsZXMpXG4gICAgICBzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lJDE3KSAmJlxuICAgICAgICBzZXRWYWx1ZUZvclN0eWxlKG5vZGUsIHN0eWxlTmFtZSQxNywgc3R5bGVzW3N0eWxlTmFtZSQxN10pO1xufVxuZnVuY3Rpb24gaXNDdXN0b21FbGVtZW50KHRhZ05hbWUpIHtcbiAgaWYgKC0xID09PSB0YWdOYW1lLmluZGV4T2YoXCItXCIpKSByZXR1cm4gITE7XG4gIHN3aXRjaCAodGFnTmFtZSkge1xuICAgIGNhc2UgXCJhbm5vdGF0aW9uLXhtbFwiOlxuICAgIGNhc2UgXCJjb2xvci1wcm9maWxlXCI6XG4gICAgY2FzZSBcImZvbnQtZmFjZVwiOlxuICAgIGNhc2UgXCJmb250LWZhY2Utc3JjXCI6XG4gICAgY2FzZSBcImZvbnQtZmFjZS11cmlcIjpcbiAgICBjYXNlIFwiZm9udC1mYWNlLWZvcm1hdFwiOlxuICAgIGNhc2UgXCJmb250LWZhY2UtbmFtZVwiOlxuICAgIGNhc2UgXCJtaXNzaW5nLWdseXBoXCI6XG4gICAgICByZXR1cm4gITE7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAhMDtcbiAgfVxufVxudmFyIGFsaWFzZXMgPSBuZXcgTWFwKFtcbiAgICBbXCJhY2NlcHRDaGFyc2V0XCIsIFwiYWNjZXB0LWNoYXJzZXRcIl0sXG4gICAgW1wiaHRtbEZvclwiLCBcImZvclwiXSxcbiAgICBbXCJodHRwRXF1aXZcIiwgXCJodHRwLWVxdWl2XCJdLFxuICAgIFtcImNyb3NzT3JpZ2luXCIsIFwiY3Jvc3NvcmlnaW5cIl0sXG4gICAgW1wiYWNjZW50SGVpZ2h0XCIsIFwiYWNjZW50LWhlaWdodFwiXSxcbiAgICBbXCJhbGlnbm1lbnRCYXNlbGluZVwiLCBcImFsaWdubWVudC1iYXNlbGluZVwiXSxcbiAgICBbXCJhcmFiaWNGb3JtXCIsIFwiYXJhYmljLWZvcm1cIl0sXG4gICAgW1wiYmFzZWxpbmVTaGlmdFwiLCBcImJhc2VsaW5lLXNoaWZ0XCJdLFxuICAgIFtcImNhcEhlaWdodFwiLCBcImNhcC1oZWlnaHRcIl0sXG4gICAgW1wiY2xpcFBhdGhcIiwgXCJjbGlwLXBhdGhcIl0sXG4gICAgW1wiY2xpcFJ1bGVcIiwgXCJjbGlwLXJ1bGVcIl0sXG4gICAgW1wiY29sb3JJbnRlcnBvbGF0aW9uXCIsIFwiY29sb3ItaW50ZXJwb2xhdGlvblwiXSxcbiAgICBbXCJjb2xvckludGVycG9sYXRpb25GaWx0ZXJzXCIsIFwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzXCJdLFxuICAgIFtcImNvbG9yUHJvZmlsZVwiLCBcImNvbG9yLXByb2ZpbGVcIl0sXG4gICAgW1wiY29sb3JSZW5kZXJpbmdcIiwgXCJjb2xvci1yZW5kZXJpbmdcIl0sXG4gICAgW1wiZG9taW5hbnRCYXNlbGluZVwiLCBcImRvbWluYW50LWJhc2VsaW5lXCJdLFxuICAgIFtcImVuYWJsZUJhY2tncm91bmRcIiwgXCJlbmFibGUtYmFja2dyb3VuZFwiXSxcbiAgICBbXCJmaWxsT3BhY2l0eVwiLCBcImZpbGwtb3BhY2l0eVwiXSxcbiAgICBbXCJmaWxsUnVsZVwiLCBcImZpbGwtcnVsZVwiXSxcbiAgICBbXCJmbG9vZENvbG9yXCIsIFwiZmxvb2QtY29sb3JcIl0sXG4gICAgW1wiZmxvb2RPcGFjaXR5XCIsIFwiZmxvb2Qtb3BhY2l0eVwiXSxcbiAgICBbXCJmb250RmFtaWx5XCIsIFwiZm9udC1mYW1pbHlcIl0sXG4gICAgW1wiZm9udFNpemVcIiwgXCJmb250LXNpemVcIl0sXG4gICAgW1wiZm9udFNpemVBZGp1c3RcIiwgXCJmb250LXNpemUtYWRqdXN0XCJdLFxuICAgIFtcImZvbnRTdHJldGNoXCIsIFwiZm9udC1zdHJldGNoXCJdLFxuICAgIFtcImZvbnRTdHlsZVwiLCBcImZvbnQtc3R5bGVcIl0sXG4gICAgW1wiZm9udFZhcmlhbnRcIiwgXCJmb250LXZhcmlhbnRcIl0sXG4gICAgW1wiZm9udFdlaWdodFwiLCBcImZvbnQtd2VpZ2h0XCJdLFxuICAgIFtcImdseXBoTmFtZVwiLCBcImdseXBoLW5hbWVcIl0sXG4gICAgW1wiZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWxcIiwgXCJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsXCJdLFxuICAgIFtcImdseXBoT3JpZW50YXRpb25WZXJ0aWNhbFwiLCBcImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsXCJdLFxuICAgIFtcImhvcml6QWR2WFwiLCBcImhvcml6LWFkdi14XCJdLFxuICAgIFtcImhvcml6T3JpZ2luWFwiLCBcImhvcml6LW9yaWdpbi14XCJdLFxuICAgIFtcImltYWdlUmVuZGVyaW5nXCIsIFwiaW1hZ2UtcmVuZGVyaW5nXCJdLFxuICAgIFtcImxldHRlclNwYWNpbmdcIiwgXCJsZXR0ZXItc3BhY2luZ1wiXSxcbiAgICBbXCJsaWdodGluZ0NvbG9yXCIsIFwibGlnaHRpbmctY29sb3JcIl0sXG4gICAgW1wibWFya2VyRW5kXCIsIFwibWFya2VyLWVuZFwiXSxcbiAgICBbXCJtYXJrZXJNaWRcIiwgXCJtYXJrZXItbWlkXCJdLFxuICAgIFtcIm1hcmtlclN0YXJ0XCIsIFwibWFya2VyLXN0YXJ0XCJdLFxuICAgIFtcIm92ZXJsaW5lUG9zaXRpb25cIiwgXCJvdmVybGluZS1wb3NpdGlvblwiXSxcbiAgICBbXCJvdmVybGluZVRoaWNrbmVzc1wiLCBcIm92ZXJsaW5lLXRoaWNrbmVzc1wiXSxcbiAgICBbXCJwYWludE9yZGVyXCIsIFwicGFpbnQtb3JkZXJcIl0sXG4gICAgW1wicGFub3NlLTFcIiwgXCJwYW5vc2UtMVwiXSxcbiAgICBbXCJwb2ludGVyRXZlbnRzXCIsIFwicG9pbnRlci1ldmVudHNcIl0sXG4gICAgW1wicmVuZGVyaW5nSW50ZW50XCIsIFwicmVuZGVyaW5nLWludGVudFwiXSxcbiAgICBbXCJzaGFwZVJlbmRlcmluZ1wiLCBcInNoYXBlLXJlbmRlcmluZ1wiXSxcbiAgICBbXCJzdG9wQ29sb3JcIiwgXCJzdG9wLWNvbG9yXCJdLFxuICAgIFtcInN0b3BPcGFjaXR5XCIsIFwic3RvcC1vcGFjaXR5XCJdLFxuICAgIFtcInN0cmlrZXRocm91Z2hQb3NpdGlvblwiLCBcInN0cmlrZXRocm91Z2gtcG9zaXRpb25cIl0sXG4gICAgW1wic3RyaWtldGhyb3VnaFRoaWNrbmVzc1wiLCBcInN0cmlrZXRocm91Z2gtdGhpY2tuZXNzXCJdLFxuICAgIFtcInN0cm9rZURhc2hhcnJheVwiLCBcInN0cm9rZS1kYXNoYXJyYXlcIl0sXG4gICAgW1wic3Ryb2tlRGFzaG9mZnNldFwiLCBcInN0cm9rZS1kYXNob2Zmc2V0XCJdLFxuICAgIFtcInN0cm9rZUxpbmVjYXBcIiwgXCJzdHJva2UtbGluZWNhcFwiXSxcbiAgICBbXCJzdHJva2VMaW5lam9pblwiLCBcInN0cm9rZS1saW5lam9pblwiXSxcbiAgICBbXCJzdHJva2VNaXRlcmxpbWl0XCIsIFwic3Ryb2tlLW1pdGVybGltaXRcIl0sXG4gICAgW1wic3Ryb2tlT3BhY2l0eVwiLCBcInN0cm9rZS1vcGFjaXR5XCJdLFxuICAgIFtcInN0cm9rZVdpZHRoXCIsIFwic3Ryb2tlLXdpZHRoXCJdLFxuICAgIFtcInRleHRBbmNob3JcIiwgXCJ0ZXh0LWFuY2hvclwiXSxcbiAgICBbXCJ0ZXh0RGVjb3JhdGlvblwiLCBcInRleHQtZGVjb3JhdGlvblwiXSxcbiAgICBbXCJ0ZXh0UmVuZGVyaW5nXCIsIFwidGV4dC1yZW5kZXJpbmdcIl0sXG4gICAgW1widHJhbnNmb3JtT3JpZ2luXCIsIFwidHJhbnNmb3JtLW9yaWdpblwiXSxcbiAgICBbXCJ1bmRlcmxpbmVQb3NpdGlvblwiLCBcInVuZGVybGluZS1wb3NpdGlvblwiXSxcbiAgICBbXCJ1bmRlcmxpbmVUaGlja25lc3NcIiwgXCJ1bmRlcmxpbmUtdGhpY2tuZXNzXCJdLFxuICAgIFtcInVuaWNvZGVCaWRpXCIsIFwidW5pY29kZS1iaWRpXCJdLFxuICAgIFtcInVuaWNvZGVSYW5nZVwiLCBcInVuaWNvZGUtcmFuZ2VcIl0sXG4gICAgW1widW5pdHNQZXJFbVwiLCBcInVuaXRzLXBlci1lbVwiXSxcbiAgICBbXCJ2QWxwaGFiZXRpY1wiLCBcInYtYWxwaGFiZXRpY1wiXSxcbiAgICBbXCJ2SGFuZ2luZ1wiLCBcInYtaGFuZ2luZ1wiXSxcbiAgICBbXCJ2SWRlb2dyYXBoaWNcIiwgXCJ2LWlkZW9ncmFwaGljXCJdLFxuICAgIFtcInZNYXRoZW1hdGljYWxcIiwgXCJ2LW1hdGhlbWF0aWNhbFwiXSxcbiAgICBbXCJ2ZWN0b3JFZmZlY3RcIiwgXCJ2ZWN0b3ItZWZmZWN0XCJdLFxuICAgIFtcInZlcnRBZHZZXCIsIFwidmVydC1hZHYteVwiXSxcbiAgICBbXCJ2ZXJ0T3JpZ2luWFwiLCBcInZlcnQtb3JpZ2luLXhcIl0sXG4gICAgW1widmVydE9yaWdpbllcIiwgXCJ2ZXJ0LW9yaWdpbi15XCJdLFxuICAgIFtcIndvcmRTcGFjaW5nXCIsIFwid29yZC1zcGFjaW5nXCJdLFxuICAgIFtcIndyaXRpbmdNb2RlXCIsIFwid3JpdGluZy1tb2RlXCJdLFxuICAgIFtcInhtbG5zWGxpbmtcIiwgXCJ4bWxuczp4bGlua1wiXSxcbiAgICBbXCJ4SGVpZ2h0XCIsIFwieC1oZWlnaHRcIl1cbiAgXSksXG4gIGlzSmF2YVNjcmlwdFByb3RvY29sID1cbiAgICAvXltcXHUwMDAwLVxcdTAwMUYgXSpqW1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnZbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qc1tcXHJcXG5cXHRdKmNbXFxyXFxuXFx0XSpyW1xcclxcblxcdF0qaVtcXHJcXG5cXHRdKnBbXFxyXFxuXFx0XSp0W1xcclxcblxcdF0qOi9pO1xuZnVuY3Rpb24gc2FuaXRpemVVUkwodXJsKSB7XG4gIHJldHVybiBpc0phdmFTY3JpcHRQcm90b2NvbC50ZXN0KFwiXCIgKyB1cmwpXG4gICAgPyBcImphdmFzY3JpcHQ6dGhyb3cgbmV3IEVycm9yKCdSZWFjdCBoYXMgYmxvY2tlZCBhIGphdmFzY3JpcHQ6IFVSTCBhcyBhIHNlY3VyaXR5IHByZWNhdXRpb24uJylcIlxuICAgIDogdXJsO1xufVxudmFyIGN1cnJlbnRSZXBsYXlpbmdFdmVudCA9IG51bGw7XG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkge1xuICBuYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50LnRhcmdldCB8fCBuYXRpdmVFdmVudC5zcmNFbGVtZW50IHx8IHdpbmRvdztcbiAgbmF0aXZlRXZlbnQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQgJiZcbiAgICAobmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCk7XG4gIHJldHVybiAzID09PSBuYXRpdmVFdmVudC5ub2RlVHlwZSA/IG5hdGl2ZUV2ZW50LnBhcmVudE5vZGUgOiBuYXRpdmVFdmVudDtcbn1cbnZhciByZXN0b3JlVGFyZ2V0ID0gbnVsbCxcbiAgcmVzdG9yZVF1ZXVlID0gbnVsbDtcbmZ1bmN0aW9uIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCkge1xuICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0KTtcbiAgaWYgKGludGVybmFsSW5zdGFuY2UgJiYgKHRhcmdldCA9IGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlKSkge1xuICAgIHZhciBwcm9wcyA9IHRhcmdldFtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xuICAgIGE6IHN3aXRjaCAoKCh0YXJnZXQgPSBpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZSksIGludGVybmFsSW5zdGFuY2UudHlwZSkpIHtcbiAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICB1cGRhdGVJbnB1dChcbiAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgcHJvcHMudmFsdWUsXG4gICAgICAgICAgcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICBwcm9wcy5jaGVja2VkLFxuICAgICAgICAgIHByb3BzLmRlZmF1bHRDaGVja2VkLFxuICAgICAgICAgIHByb3BzLnR5cGUsXG4gICAgICAgICAgcHJvcHMubmFtZVxuICAgICAgICApO1xuICAgICAgICBpbnRlcm5hbEluc3RhbmNlID0gcHJvcHMubmFtZTtcbiAgICAgICAgaWYgKFwicmFkaW9cIiA9PT0gcHJvcHMudHlwZSAmJiBudWxsICE9IGludGVybmFsSW5zdGFuY2UpIHtcbiAgICAgICAgICBmb3IgKHByb3BzID0gdGFyZ2V0OyBwcm9wcy5wYXJlbnROb2RlOyApIHByb3BzID0gcHJvcHMucGFyZW50Tm9kZTtcbiAgICAgICAgICBwcm9wcyA9IHByb3BzLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAnaW5wdXRbbmFtZT1cIicgK1xuICAgICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKFxuICAgICAgICAgICAgICAgIFwiXCIgKyBpbnRlcm5hbEluc3RhbmNlXG4gICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAnXCJdW3R5cGU9XCJyYWRpb1wiXSdcbiAgICAgICAgICApO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlID0gMDtcbiAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UgPCBwcm9wcy5sZW5ndGg7XG4gICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlKytcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBvdGhlck5vZGUgPSBwcm9wc1tpbnRlcm5hbEluc3RhbmNlXTtcbiAgICAgICAgICAgIGlmIChvdGhlck5vZGUgIT09IHRhcmdldCAmJiBvdGhlck5vZGUuZm9ybSA9PT0gdGFyZ2V0LmZvcm0pIHtcbiAgICAgICAgICAgICAgdmFyIG90aGVyUHJvcHMgPSBvdGhlck5vZGVbaW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbDtcbiAgICAgICAgICAgICAgaWYgKCFvdGhlclByb3BzKSB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDkwKSk7XG4gICAgICAgICAgICAgIHVwZGF0ZUlucHV0KFxuICAgICAgICAgICAgICAgIG90aGVyTm9kZSxcbiAgICAgICAgICAgICAgICBvdGhlclByb3BzLnZhbHVlLFxuICAgICAgICAgICAgICAgIG90aGVyUHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgIG90aGVyUHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgIG90aGVyUHJvcHMuY2hlY2tlZCxcbiAgICAgICAgICAgICAgICBvdGhlclByb3BzLmRlZmF1bHRDaGVja2VkLFxuICAgICAgICAgICAgICAgIG90aGVyUHJvcHMudHlwZSxcbiAgICAgICAgICAgICAgICBvdGhlclByb3BzLm5hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UgPSAwO1xuICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA8IHByb3BzLmxlbmd0aDtcbiAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UrK1xuICAgICAgICAgIClcbiAgICAgICAgICAgIChvdGhlck5vZGUgPSBwcm9wc1tpbnRlcm5hbEluc3RhbmNlXSksXG4gICAgICAgICAgICAgIG90aGVyTm9kZS5mb3JtID09PSB0YXJnZXQuZm9ybSAmJiB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChvdGhlck5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrIGE7XG4gICAgICBjYXNlIFwidGV4dGFyZWFcIjpcbiAgICAgICAgdXBkYXRlVGV4dGFyZWEodGFyZ2V0LCBwcm9wcy52YWx1ZSwgcHJvcHMuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgYnJlYWsgYTtcbiAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgKGludGVybmFsSW5zdGFuY2UgPSBwcm9wcy52YWx1ZSksXG4gICAgICAgICAgbnVsbCAhPSBpbnRlcm5hbEluc3RhbmNlICYmXG4gICAgICAgICAgICB1cGRhdGVPcHRpb25zKHRhcmdldCwgISFwcm9wcy5tdWx0aXBsZSwgaW50ZXJuYWxJbnN0YW5jZSwgITEpO1xuICAgIH1cbiAgfVxufVxudmFyIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gITE7XG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyQxKGZuLCBhLCBiKSB7XG4gIGlmIChpc0luc2lkZUV2ZW50SGFuZGxlcikgcmV0dXJuIGZuKGEsIGIpO1xuICBpc0luc2lkZUV2ZW50SGFuZGxlciA9ICEwO1xuICB0cnkge1xuICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBmbihhKTtcbiAgICByZXR1cm4gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0O1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChcbiAgICAgICgoaXNJbnNpZGVFdmVudEhhbmRsZXIgPSAhMSksXG4gICAgICBudWxsICE9PSByZXN0b3JlVGFyZ2V0IHx8IG51bGwgIT09IHJlc3RvcmVRdWV1ZSlcbiAgICApXG4gICAgICBpZiAoXG4gICAgICAgIChmbHVzaFN5bmNXb3JrJDEoKSxcbiAgICAgICAgcmVzdG9yZVRhcmdldCAmJlxuICAgICAgICAgICgoYSA9IHJlc3RvcmVUYXJnZXQpLFxuICAgICAgICAgIChmbiA9IHJlc3RvcmVRdWV1ZSksXG4gICAgICAgICAgKHJlc3RvcmVRdWV1ZSA9IHJlc3RvcmVUYXJnZXQgPSBudWxsKSxcbiAgICAgICAgICByZXN0b3JlU3RhdGVPZlRhcmdldChhKSxcbiAgICAgICAgICBmbikpXG4gICAgICApXG4gICAgICAgIGZvciAoYSA9IDA7IGEgPCBmbi5sZW5ndGg7IGErKykgcmVzdG9yZVN0YXRlT2ZUYXJnZXQoZm5bYV0pO1xuICB9XG59XG5mdW5jdGlvbiBnZXRMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lKSB7XG4gIHZhciBzdGF0ZU5vZGUgPSBpbnN0LnN0YXRlTm9kZTtcbiAgaWYgKG51bGwgPT09IHN0YXRlTm9kZSkgcmV0dXJuIG51bGw7XG4gIHZhciBwcm9wcyA9IHN0YXRlTm9kZVtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xuICBpZiAobnVsbCA9PT0gcHJvcHMpIHJldHVybiBudWxsO1xuICBzdGF0ZU5vZGUgPSBwcm9wc1tyZWdpc3RyYXRpb25OYW1lXTtcbiAgYTogc3dpdGNoIChyZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgY2FzZSBcIm9uQ2xpY2tcIjpcbiAgICBjYXNlIFwib25DbGlja0NhcHR1cmVcIjpcbiAgICBjYXNlIFwib25Eb3VibGVDbGlja1wiOlxuICAgIGNhc2UgXCJvbkRvdWJsZUNsaWNrQ2FwdHVyZVwiOlxuICAgIGNhc2UgXCJvbk1vdXNlRG93blwiOlxuICAgIGNhc2UgXCJvbk1vdXNlRG93bkNhcHR1cmVcIjpcbiAgICBjYXNlIFwib25Nb3VzZU1vdmVcIjpcbiAgICBjYXNlIFwib25Nb3VzZU1vdmVDYXB0dXJlXCI6XG4gICAgY2FzZSBcIm9uTW91c2VVcFwiOlxuICAgIGNhc2UgXCJvbk1vdXNlVXBDYXB0dXJlXCI6XG4gICAgY2FzZSBcIm9uTW91c2VFbnRlclwiOlxuICAgICAgKHByb3BzID0gIXByb3BzLmRpc2FibGVkKSB8fFxuICAgICAgICAoKGluc3QgPSBpbnN0LnR5cGUpLFxuICAgICAgICAocHJvcHMgPSAhKFxuICAgICAgICAgIFwiYnV0dG9uXCIgPT09IGluc3QgfHxcbiAgICAgICAgICBcImlucHV0XCIgPT09IGluc3QgfHxcbiAgICAgICAgICBcInNlbGVjdFwiID09PSBpbnN0IHx8XG4gICAgICAgICAgXCJ0ZXh0YXJlYVwiID09PSBpbnN0XG4gICAgICAgICkpKTtcbiAgICAgIGluc3QgPSAhcHJvcHM7XG4gICAgICBicmVhayBhO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpbnN0ID0gITE7XG4gIH1cbiAgaWYgKGluc3QpIHJldHVybiBudWxsO1xuICBpZiAoc3RhdGVOb2RlICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHN0YXRlTm9kZSlcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjMxLCByZWdpc3RyYXRpb25OYW1lLCB0eXBlb2Ygc3RhdGVOb2RlKVxuICAgICk7XG4gIHJldHVybiBzdGF0ZU5vZGU7XG59XG52YXIgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSAhMTtcbmlmIChjYW5Vc2VET00pXG4gIHRyeSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7fTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0aW9ucywgXCJwYXNzaXZlXCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9ICEwO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RcIiwgb3B0aW9ucywgb3B0aW9ucyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9ICExO1xuICB9XG52YXIgcm9vdCA9IG51bGwsXG4gIHN0YXJ0VGV4dCA9IG51bGwsXG4gIGZhbGxiYWNrVGV4dCA9IG51bGw7XG5mdW5jdGlvbiBnZXREYXRhKCkge1xuICBpZiAoZmFsbGJhY2tUZXh0KSByZXR1cm4gZmFsbGJhY2tUZXh0O1xuICB2YXIgc3RhcnQsXG4gICAgc3RhcnRWYWx1ZSA9IHN0YXJ0VGV4dCxcbiAgICBzdGFydExlbmd0aCA9IHN0YXJ0VmFsdWUubGVuZ3RoLFxuICAgIGVuZCxcbiAgICBlbmRWYWx1ZSA9IFwidmFsdWVcIiBpbiByb290ID8gcm9vdC52YWx1ZSA6IHJvb3QudGV4dENvbnRlbnQsXG4gICAgZW5kTGVuZ3RoID0gZW5kVmFsdWUubGVuZ3RoO1xuICBmb3IgKFxuICAgIHN0YXJ0ID0gMDtcbiAgICBzdGFydCA8IHN0YXJ0TGVuZ3RoICYmIHN0YXJ0VmFsdWVbc3RhcnRdID09PSBlbmRWYWx1ZVtzdGFydF07XG4gICAgc3RhcnQrK1xuICApO1xuICB2YXIgbWluRW5kID0gc3RhcnRMZW5ndGggLSBzdGFydDtcbiAgZm9yIChcbiAgICBlbmQgPSAxO1xuICAgIGVuZCA8PSBtaW5FbmQgJiZcbiAgICBzdGFydFZhbHVlW3N0YXJ0TGVuZ3RoIC0gZW5kXSA9PT0gZW5kVmFsdWVbZW5kTGVuZ3RoIC0gZW5kXTtcbiAgICBlbmQrK1xuICApO1xuICByZXR1cm4gKGZhbGxiYWNrVGV4dCA9IGVuZFZhbHVlLnNsaWNlKHN0YXJ0LCAxIDwgZW5kID8gMSAtIGVuZCA6IHZvaWQgMCkpO1xufVxuZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICB2YXIga2V5Q29kZSA9IG5hdGl2ZUV2ZW50LmtleUNvZGU7XG4gIFwiY2hhckNvZGVcIiBpbiBuYXRpdmVFdmVudFxuICAgID8gKChuYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50LmNoYXJDb2RlKSxcbiAgICAgIDAgPT09IG5hdGl2ZUV2ZW50ICYmIDEzID09PSBrZXlDb2RlICYmIChuYXRpdmVFdmVudCA9IDEzKSlcbiAgICA6IChuYXRpdmVFdmVudCA9IGtleUNvZGUpO1xuICAxMCA9PT0gbmF0aXZlRXZlbnQgJiYgKG5hdGl2ZUV2ZW50ID0gMTMpO1xuICByZXR1cm4gMzIgPD0gbmF0aXZlRXZlbnQgfHwgMTMgPT09IG5hdGl2ZUV2ZW50ID8gbmF0aXZlRXZlbnQgOiAwO1xufVxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUoKSB7XG4gIHJldHVybiAhMDtcbn1cbmZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSgpIHtcbiAgcmV0dXJuICExO1xufVxuZnVuY3Rpb24gY3JlYXRlU3ludGhldGljRXZlbnQoSW50ZXJmYWNlKSB7XG4gIGZ1bmN0aW9uIFN5bnRoZXRpY0Jhc2VFdmVudChcbiAgICByZWFjdE5hbWUsXG4gICAgcmVhY3RFdmVudFR5cGUsXG4gICAgdGFyZ2V0SW5zdCxcbiAgICBuYXRpdmVFdmVudCxcbiAgICBuYXRpdmVFdmVudFRhcmdldFxuICApIHtcbiAgICB0aGlzLl9yZWFjdE5hbWUgPSByZWFjdE5hbWU7XG4gICAgdGhpcy5fdGFyZ2V0SW5zdCA9IHRhcmdldEluc3Q7XG4gICAgdGhpcy50eXBlID0gcmVhY3RFdmVudFR5cGU7XG4gICAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgIHRoaXMudGFyZ2V0ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBJbnRlcmZhY2UpXG4gICAgICBJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpICYmXG4gICAgICAgICgocmVhY3ROYW1lID0gSW50ZXJmYWNlW3Byb3BOYW1lXSksXG4gICAgICAgICh0aGlzW3Byb3BOYW1lXSA9IHJlYWN0TmFtZVxuICAgICAgICAgID8gcmVhY3ROYW1lKG5hdGl2ZUV2ZW50KVxuICAgICAgICAgIDogbmF0aXZlRXZlbnRbcHJvcE5hbWVdKSk7XG4gICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSAoXG4gICAgICBudWxsICE9IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWRcbiAgICAgICAgPyBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkXG4gICAgICAgIDogITEgPT09IG5hdGl2ZUV2ZW50LnJldHVyblZhbHVlXG4gICAgKVxuICAgICAgPyBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZVxuICAgICAgOiBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhc3NpZ24oU3ludGhldGljQmFzZUV2ZW50LnByb3RvdHlwZSwge1xuICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSAhMDtcbiAgICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgICBldmVudCAmJlxuICAgICAgICAoZXZlbnQucHJldmVudERlZmF1bHRcbiAgICAgICAgICA/IGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICA6IFwidW5rbm93blwiICE9PSB0eXBlb2YgZXZlbnQucmV0dXJuVmFsdWUgJiYgKGV2ZW50LnJldHVyblZhbHVlID0gITEpLFxuICAgICAgICAodGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSkpO1xuICAgIH0sXG4gICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuICAgICAgZXZlbnQgJiZcbiAgICAgICAgKGV2ZW50LnN0b3BQcm9wYWdhdGlvblxuICAgICAgICAgID8gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICA6IFwidW5rbm93blwiICE9PSB0eXBlb2YgZXZlbnQuY2FuY2VsQnViYmxlICYmXG4gICAgICAgICAgICAoZXZlbnQuY2FuY2VsQnViYmxlID0gITApLFxuICAgICAgICAodGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlKSk7XG4gICAgfSxcbiAgICBwZXJzaXN0OiBmdW5jdGlvbiAoKSB7fSxcbiAgICBpc1BlcnNpc3RlbnQ6IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlXG4gIH0pO1xuICByZXR1cm4gU3ludGhldGljQmFzZUV2ZW50O1xufVxudmFyIEV2ZW50SW50ZXJmYWNlID0ge1xuICAgIGV2ZW50UGhhc2U6IDAsXG4gICAgYnViYmxlczogMCxcbiAgICBjYW5jZWxhYmxlOiAwLFxuICAgIHRpbWVTdGFtcDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gICAgfSxcbiAgICBkZWZhdWx0UHJldmVudGVkOiAwLFxuICAgIGlzVHJ1c3RlZDogMFxuICB9LFxuICBTeW50aGV0aWNFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEV2ZW50SW50ZXJmYWNlKSxcbiAgVUlFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHsgdmlldzogMCwgZGV0YWlsOiAwIH0pLFxuICBTeW50aGV0aWNVSUV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVUlFdmVudEludGVyZmFjZSksXG4gIGxhc3RNb3ZlbWVudFgsXG4gIGxhc3RNb3ZlbWVudFksXG4gIGxhc3RNb3VzZUV2ZW50LFxuICBNb3VzZUV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gICAgc2NyZWVuWDogMCxcbiAgICBzY3JlZW5ZOiAwLFxuICAgIGNsaWVudFg6IDAsXG4gICAgY2xpZW50WTogMCxcbiAgICBwYWdlWDogMCxcbiAgICBwYWdlWTogMCxcbiAgICBjdHJsS2V5OiAwLFxuICAgIHNoaWZ0S2V5OiAwLFxuICAgIGFsdEtleTogMCxcbiAgICBtZXRhS2V5OiAwLFxuICAgIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgICBidXR0b246IDAsXG4gICAgYnV0dG9uczogMCxcbiAgICByZWxhdGVkVGFyZ2V0OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHJldHVybiB2b2lkIDAgPT09IGV2ZW50LnJlbGF0ZWRUYXJnZXRcbiAgICAgICAgPyBldmVudC5mcm9tRWxlbWVudCA9PT0gZXZlbnQuc3JjRWxlbWVudFxuICAgICAgICAgID8gZXZlbnQudG9FbGVtZW50XG4gICAgICAgICAgOiBldmVudC5mcm9tRWxlbWVudFxuICAgICAgICA6IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgfSxcbiAgICBtb3ZlbWVudFg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKFwibW92ZW1lbnRYXCIgaW4gZXZlbnQpIHJldHVybiBldmVudC5tb3ZlbWVudFg7XG4gICAgICBldmVudCAhPT0gbGFzdE1vdXNlRXZlbnQgJiZcbiAgICAgICAgKGxhc3RNb3VzZUV2ZW50ICYmIFwibW91c2Vtb3ZlXCIgPT09IGV2ZW50LnR5cGVcbiAgICAgICAgICA/ICgobGFzdE1vdmVtZW50WCA9IGV2ZW50LnNjcmVlblggLSBsYXN0TW91c2VFdmVudC5zY3JlZW5YKSxcbiAgICAgICAgICAgIChsYXN0TW92ZW1lbnRZID0gZXZlbnQuc2NyZWVuWSAtIGxhc3RNb3VzZUV2ZW50LnNjcmVlblkpKVxuICAgICAgICAgIDogKGxhc3RNb3ZlbWVudFkgPSBsYXN0TW92ZW1lbnRYID0gMCksXG4gICAgICAgIChsYXN0TW91c2VFdmVudCA9IGV2ZW50KSk7XG4gICAgICByZXR1cm4gbGFzdE1vdmVtZW50WDtcbiAgICB9LFxuICAgIG1vdmVtZW50WTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICByZXR1cm4gXCJtb3ZlbWVudFlcIiBpbiBldmVudCA/IGV2ZW50Lm1vdmVtZW50WSA6IGxhc3RNb3ZlbWVudFk7XG4gICAgfVxuICB9KSxcbiAgU3ludGhldGljTW91c2VFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KE1vdXNlRXZlbnRJbnRlcmZhY2UpLFxuICBEcmFnRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHsgZGF0YVRyYW5zZmVyOiAwIH0pLFxuICBTeW50aGV0aWNEcmFnRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChEcmFnRXZlbnRJbnRlcmZhY2UpLFxuICBGb2N1c0V2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7IHJlbGF0ZWRUYXJnZXQ6IDAgfSksXG4gIFN5bnRoZXRpY0ZvY3VzRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChGb2N1c0V2ZW50SW50ZXJmYWNlKSxcbiAgQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gICAgYW5pbWF0aW9uTmFtZTogMCxcbiAgICBlbGFwc2VkVGltZTogMCxcbiAgICBwc2V1ZG9FbGVtZW50OiAwXG4gIH0pLFxuICBTeW50aGV0aWNBbmltYXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlKSxcbiAgQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gICAgY2xpcGJvYXJkRGF0YTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICByZXR1cm4gXCJjbGlwYm9hcmREYXRhXCIgaW4gZXZlbnRcbiAgICAgICAgPyBldmVudC5jbGlwYm9hcmREYXRhXG4gICAgICAgIDogd2luZG93LmNsaXBib2FyZERhdGE7XG4gICAgfVxuICB9KSxcbiAgU3ludGhldGljQ2xpcGJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDbGlwYm9hcmRFdmVudEludGVyZmFjZSksXG4gIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7IGRhdGE6IDAgfSksXG4gIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlKSxcbiAgbm9ybWFsaXplS2V5ID0ge1xuICAgIEVzYzogXCJFc2NhcGVcIixcbiAgICBTcGFjZWJhcjogXCIgXCIsXG4gICAgTGVmdDogXCJBcnJvd0xlZnRcIixcbiAgICBVcDogXCJBcnJvd1VwXCIsXG4gICAgUmlnaHQ6IFwiQXJyb3dSaWdodFwiLFxuICAgIERvd246IFwiQXJyb3dEb3duXCIsXG4gICAgRGVsOiBcIkRlbGV0ZVwiLFxuICAgIFdpbjogXCJPU1wiLFxuICAgIE1lbnU6IFwiQ29udGV4dE1lbnVcIixcbiAgICBBcHBzOiBcIkNvbnRleHRNZW51XCIsXG4gICAgU2Nyb2xsOiBcIlNjcm9sbExvY2tcIixcbiAgICBNb3pQcmludGFibGVLZXk6IFwiVW5pZGVudGlmaWVkXCJcbiAgfSxcbiAgdHJhbnNsYXRlVG9LZXkgPSB7XG4gICAgODogXCJCYWNrc3BhY2VcIixcbiAgICA5OiBcIlRhYlwiLFxuICAgIDEyOiBcIkNsZWFyXCIsXG4gICAgMTM6IFwiRW50ZXJcIixcbiAgICAxNjogXCJTaGlmdFwiLFxuICAgIDE3OiBcIkNvbnRyb2xcIixcbiAgICAxODogXCJBbHRcIixcbiAgICAxOTogXCJQYXVzZVwiLFxuICAgIDIwOiBcIkNhcHNMb2NrXCIsXG4gICAgMjc6IFwiRXNjYXBlXCIsXG4gICAgMzI6IFwiIFwiLFxuICAgIDMzOiBcIlBhZ2VVcFwiLFxuICAgIDM0OiBcIlBhZ2VEb3duXCIsXG4gICAgMzU6IFwiRW5kXCIsXG4gICAgMzY6IFwiSG9tZVwiLFxuICAgIDM3OiBcIkFycm93TGVmdFwiLFxuICAgIDM4OiBcIkFycm93VXBcIixcbiAgICAzOTogXCJBcnJvd1JpZ2h0XCIsXG4gICAgNDA6IFwiQXJyb3dEb3duXCIsXG4gICAgNDU6IFwiSW5zZXJ0XCIsXG4gICAgNDY6IFwiRGVsZXRlXCIsXG4gICAgMTEyOiBcIkYxXCIsXG4gICAgMTEzOiBcIkYyXCIsXG4gICAgMTE0OiBcIkYzXCIsXG4gICAgMTE1OiBcIkY0XCIsXG4gICAgMTE2OiBcIkY1XCIsXG4gICAgMTE3OiBcIkY2XCIsXG4gICAgMTE4OiBcIkY3XCIsXG4gICAgMTE5OiBcIkY4XCIsXG4gICAgMTIwOiBcIkY5XCIsXG4gICAgMTIxOiBcIkYxMFwiLFxuICAgIDEyMjogXCJGMTFcIixcbiAgICAxMjM6IFwiRjEyXCIsXG4gICAgMTQ0OiBcIk51bUxvY2tcIixcbiAgICAxNDU6IFwiU2Nyb2xsTG9ja1wiLFxuICAgIDIyNDogXCJNZXRhXCJcbiAgfSxcbiAgbW9kaWZpZXJLZXlUb1Byb3AgPSB7XG4gICAgQWx0OiBcImFsdEtleVwiLFxuICAgIENvbnRyb2w6IFwiY3RybEtleVwiLFxuICAgIE1ldGE6IFwibWV0YUtleVwiLFxuICAgIFNoaWZ0OiBcInNoaWZ0S2V5XCJcbiAgfTtcbmZ1bmN0aW9uIG1vZGlmaWVyU3RhdGVHZXR0ZXIoa2V5QXJnKSB7XG4gIHZhciBuYXRpdmVFdmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG4gIHJldHVybiBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlXG4gICAgPyBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKGtleUFyZylcbiAgICA6IChrZXlBcmcgPSBtb2RpZmllcktleVRvUHJvcFtrZXlBcmddKVxuICAgICAgPyAhIW5hdGl2ZUV2ZW50W2tleUFyZ11cbiAgICAgIDogITE7XG59XG5mdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUoKSB7XG4gIHJldHVybiBtb2RpZmllclN0YXRlR2V0dGVyO1xufVxudmFyIEtleWJvYXJkRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgICBrZXk6IGZ1bmN0aW9uIChuYXRpdmVFdmVudCkge1xuICAgICAgaWYgKG5hdGl2ZUV2ZW50LmtleSkge1xuICAgICAgICB2YXIga2V5ID0gbm9ybWFsaXplS2V5W25hdGl2ZUV2ZW50LmtleV0gfHwgbmF0aXZlRXZlbnQua2V5O1xuICAgICAgICBpZiAoXCJVbmlkZW50aWZpZWRcIiAhPT0ga2V5KSByZXR1cm4ga2V5O1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwia2V5cHJlc3NcIiA9PT0gbmF0aXZlRXZlbnQudHlwZVxuICAgICAgICA/ICgobmF0aXZlRXZlbnQgPSBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSksXG4gICAgICAgICAgMTMgPT09IG5hdGl2ZUV2ZW50ID8gXCJFbnRlclwiIDogU3RyaW5nLmZyb21DaGFyQ29kZShuYXRpdmVFdmVudCkpXG4gICAgICAgIDogXCJrZXlkb3duXCIgPT09IG5hdGl2ZUV2ZW50LnR5cGUgfHwgXCJrZXl1cFwiID09PSBuYXRpdmVFdmVudC50eXBlXG4gICAgICAgICAgPyB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCBcIlVuaWRlbnRpZmllZFwiXG4gICAgICAgICAgOiBcIlwiO1xuICAgIH0sXG4gICAgY29kZTogMCxcbiAgICBsb2NhdGlvbjogMCxcbiAgICBjdHJsS2V5OiAwLFxuICAgIHNoaWZ0S2V5OiAwLFxuICAgIGFsdEtleTogMCxcbiAgICBtZXRhS2V5OiAwLFxuICAgIHJlcGVhdDogMCxcbiAgICBsb2NhbGU6IDAsXG4gICAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAgIGNoYXJDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHJldHVybiBcImtleXByZXNzXCIgPT09IGV2ZW50LnR5cGUgPyBnZXRFdmVudENoYXJDb2RlKGV2ZW50KSA6IDA7XG4gICAgfSxcbiAgICBrZXlDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHJldHVybiBcImtleWRvd25cIiA9PT0gZXZlbnQudHlwZSB8fCBcImtleXVwXCIgPT09IGV2ZW50LnR5cGVcbiAgICAgICAgPyBldmVudC5rZXlDb2RlXG4gICAgICAgIDogMDtcbiAgICB9LFxuICAgIHdoaWNoOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHJldHVybiBcImtleXByZXNzXCIgPT09IGV2ZW50LnR5cGVcbiAgICAgICAgPyBnZXRFdmVudENoYXJDb2RlKGV2ZW50KVxuICAgICAgICA6IFwia2V5ZG93blwiID09PSBldmVudC50eXBlIHx8IFwia2V5dXBcIiA9PT0gZXZlbnQudHlwZVxuICAgICAgICAgID8gZXZlbnQua2V5Q29kZVxuICAgICAgICAgIDogMDtcbiAgICB9XG4gIH0pLFxuICBTeW50aGV0aWNLZXlib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoS2V5Ym9hcmRFdmVudEludGVyZmFjZSksXG4gIFBvaW50ZXJFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICAgIHBvaW50ZXJJZDogMCxcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDAsXG4gICAgcHJlc3N1cmU6IDAsXG4gICAgdGFuZ2VudGlhbFByZXNzdXJlOiAwLFxuICAgIHRpbHRYOiAwLFxuICAgIHRpbHRZOiAwLFxuICAgIHR3aXN0OiAwLFxuICAgIHBvaW50ZXJUeXBlOiAwLFxuICAgIGlzUHJpbWFyeTogMFxuICB9KSxcbiAgU3ludGhldGljUG9pbnRlckV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoUG9pbnRlckV2ZW50SW50ZXJmYWNlKSxcbiAgVG91Y2hFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICAgIHRvdWNoZXM6IDAsXG4gICAgdGFyZ2V0VG91Y2hlczogMCxcbiAgICBjaGFuZ2VkVG91Y2hlczogMCxcbiAgICBhbHRLZXk6IDAsXG4gICAgbWV0YUtleTogMCxcbiAgICBjdHJsS2V5OiAwLFxuICAgIHNoaWZ0S2V5OiAwLFxuICAgIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZVxuICB9KSxcbiAgU3ludGhldGljVG91Y2hFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRvdWNoRXZlbnRJbnRlcmZhY2UpLFxuICBUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gICAgcHJvcGVydHlOYW1lOiAwLFxuICAgIGVsYXBzZWRUaW1lOiAwLFxuICAgIHBzZXVkb0VsZW1lbnQ6IDBcbiAgfSksXG4gIFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRyYW5zaXRpb25FdmVudEludGVyZmFjZSksXG4gIFdoZWVsRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgICBkZWx0YVg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgcmV0dXJuIFwiZGVsdGFYXCIgaW4gZXZlbnRcbiAgICAgICAgPyBldmVudC5kZWx0YVhcbiAgICAgICAgOiBcIndoZWVsRGVsdGFYXCIgaW4gZXZlbnRcbiAgICAgICAgICA/IC1ldmVudC53aGVlbERlbHRhWFxuICAgICAgICAgIDogMDtcbiAgICB9LFxuICAgIGRlbHRhWTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICByZXR1cm4gXCJkZWx0YVlcIiBpbiBldmVudFxuICAgICAgICA/IGV2ZW50LmRlbHRhWVxuICAgICAgICA6IFwid2hlZWxEZWx0YVlcIiBpbiBldmVudFxuICAgICAgICAgID8gLWV2ZW50LndoZWVsRGVsdGFZXG4gICAgICAgICAgOiBcIndoZWVsRGVsdGFcIiBpbiBldmVudFxuICAgICAgICAgICAgPyAtZXZlbnQud2hlZWxEZWx0YVxuICAgICAgICAgICAgOiAwO1xuICAgIH0sXG4gICAgZGVsdGFaOiAwLFxuICAgIGRlbHRhTW9kZTogMFxuICB9KSxcbiAgU3ludGhldGljV2hlZWxFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFdoZWVsRXZlbnRJbnRlcmZhY2UpLFxuICBUb2dnbGVFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgICBuZXdTdGF0ZTogMCxcbiAgICBvbGRTdGF0ZTogMFxuICB9KSxcbiAgU3ludGhldGljVG9nZ2xlRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChUb2dnbGVFdmVudEludGVyZmFjZSksXG4gIEVORF9LRVlDT0RFUyA9IFs5LCAxMywgMjcsIDMyXSxcbiAgY2FuVXNlQ29tcG9zaXRpb25FdmVudCA9IGNhblVzZURPTSAmJiBcIkNvbXBvc2l0aW9uRXZlbnRcIiBpbiB3aW5kb3csXG4gIGRvY3VtZW50TW9kZSA9IG51bGw7XG5jYW5Vc2VET00gJiZcbiAgXCJkb2N1bWVudE1vZGVcIiBpbiBkb2N1bWVudCAmJlxuICAoZG9jdW1lbnRNb2RlID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTtcbnZhciBjYW5Vc2VUZXh0SW5wdXRFdmVudCA9IGNhblVzZURPTSAmJiBcIlRleHRFdmVudFwiIGluIHdpbmRvdyAmJiAhZG9jdW1lbnRNb2RlLFxuICB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA9XG4gICAgY2FuVXNlRE9NICYmXG4gICAgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50IHx8XG4gICAgICAoZG9jdW1lbnRNb2RlICYmIDggPCBkb2N1bWVudE1vZGUgJiYgMTEgPj0gZG9jdW1lbnRNb2RlKSksXG4gIFNQQUNFQkFSX0NIQVIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDMyKSxcbiAgaGFzU3BhY2VLZXlwcmVzcyA9ICExO1xuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlIFwia2V5dXBcIjpcbiAgICAgIHJldHVybiAtMSAhPT0gRU5EX0tFWUNPREVTLmluZGV4T2YobmF0aXZlRXZlbnQua2V5Q29kZSk7XG4gICAgY2FzZSBcImtleWRvd25cIjpcbiAgICAgIHJldHVybiAyMjkgIT09IG5hdGl2ZUV2ZW50LmtleUNvZGU7XG4gICAgY2FzZSBcImtleXByZXNzXCI6XG4gICAgY2FzZSBcIm1vdXNlZG93blwiOlxuICAgIGNhc2UgXCJmb2N1c291dFwiOlxuICAgICAgcmV0dXJuICEwO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gITE7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgbmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudC5kZXRhaWw7XG4gIHJldHVybiBcIm9iamVjdFwiID09PSB0eXBlb2YgbmF0aXZlRXZlbnQgJiYgXCJkYXRhXCIgaW4gbmF0aXZlRXZlbnRcbiAgICA/IG5hdGl2ZUV2ZW50LmRhdGFcbiAgICA6IG51bGw7XG59XG52YXIgaXNDb21wb3NpbmcgPSAhMTtcbmZ1bmN0aW9uIGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgXCJjb21wb3NpdGlvbmVuZFwiOlxuICAgICAgcmV0dXJuIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuICAgIGNhc2UgXCJrZXlwcmVzc1wiOlxuICAgICAgaWYgKDMyICE9PSBuYXRpdmVFdmVudC53aGljaCkgcmV0dXJuIG51bGw7XG4gICAgICBoYXNTcGFjZUtleXByZXNzID0gITA7XG4gICAgICByZXR1cm4gU1BBQ0VCQVJfQ0hBUjtcbiAgICBjYXNlIFwidGV4dElucHV0XCI6XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoZG9tRXZlbnROYW1lID0gbmF0aXZlRXZlbnQuZGF0YSksXG4gICAgICAgIGRvbUV2ZW50TmFtZSA9PT0gU1BBQ0VCQVJfQ0hBUiAmJiBoYXNTcGFjZUtleXByZXNzID8gbnVsbCA6IGRvbUV2ZW50TmFtZVxuICAgICAgKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChpc0NvbXBvc2luZylcbiAgICByZXR1cm4gXCJjb21wb3NpdGlvbmVuZFwiID09PSBkb21FdmVudE5hbWUgfHxcbiAgICAgICghY2FuVXNlQ29tcG9zaXRpb25FdmVudCAmJlxuICAgICAgICBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpXG4gICAgICA/ICgoZG9tRXZlbnROYW1lID0gZ2V0RGF0YSgpKSxcbiAgICAgICAgKGZhbGxiYWNrVGV4dCA9IHN0YXJ0VGV4dCA9IHJvb3QgPSBudWxsKSxcbiAgICAgICAgKGlzQ29tcG9zaW5nID0gITEpLFxuICAgICAgICBkb21FdmVudE5hbWUpXG4gICAgICA6IG51bGw7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSBcInBhc3RlXCI6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIFwia2V5cHJlc3NcIjpcbiAgICAgIGlmIChcbiAgICAgICAgIShuYXRpdmVFdmVudC5jdHJsS2V5IHx8IG5hdGl2ZUV2ZW50LmFsdEtleSB8fCBuYXRpdmVFdmVudC5tZXRhS2V5KSB8fFxuICAgICAgICAobmF0aXZlRXZlbnQuY3RybEtleSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpXG4gICAgICApIHtcbiAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmNoYXIgJiYgMSA8IG5hdGl2ZUV2ZW50LmNoYXIubGVuZ3RoKVxuICAgICAgICAgIHJldHVybiBuYXRpdmVFdmVudC5jaGFyO1xuICAgICAgICBpZiAobmF0aXZlRXZlbnQud2hpY2gpIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50LndoaWNoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgXCJjb21wb3NpdGlvbmVuZFwiOlxuICAgICAgcmV0dXJuIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmIFwia29cIiAhPT0gbmF0aXZlRXZlbnQubG9jYWxlXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IG5hdGl2ZUV2ZW50LmRhdGE7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG52YXIgc3VwcG9ydGVkSW5wdXRUeXBlcyA9IHtcbiAgY29sb3I6ICEwLFxuICBkYXRlOiAhMCxcbiAgZGF0ZXRpbWU6ICEwLFxuICBcImRhdGV0aW1lLWxvY2FsXCI6ICEwLFxuICBlbWFpbDogITAsXG4gIG1vbnRoOiAhMCxcbiAgbnVtYmVyOiAhMCxcbiAgcGFzc3dvcmQ6ICEwLFxuICByYW5nZTogITAsXG4gIHNlYXJjaDogITAsXG4gIHRlbDogITAsXG4gIHRleHQ6ICEwLFxuICB0aW1lOiAhMCxcbiAgdXJsOiAhMCxcbiAgd2VlazogITBcbn07XG5mdW5jdGlvbiBpc1RleHRJbnB1dEVsZW1lbnQoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gXCJpbnB1dFwiID09PSBub2RlTmFtZVxuICAgID8gISFzdXBwb3J0ZWRJbnB1dFR5cGVzW2VsZW0udHlwZV1cbiAgICA6IFwidGV4dGFyZWFcIiA9PT0gbm9kZU5hbWVcbiAgICAgID8gITBcbiAgICAgIDogITE7XG59XG5mdW5jdGlvbiBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoXG4gIGRpc3BhdGNoUXVldWUsXG4gIGluc3QsXG4gIG5hdGl2ZUV2ZW50LFxuICB0YXJnZXRcbikge1xuICByZXN0b3JlVGFyZ2V0XG4gICAgPyByZXN0b3JlUXVldWVcbiAgICAgID8gcmVzdG9yZVF1ZXVlLnB1c2godGFyZ2V0KVxuICAgICAgOiAocmVzdG9yZVF1ZXVlID0gW3RhcmdldF0pXG4gICAgOiAocmVzdG9yZVRhcmdldCA9IHRhcmdldCk7XG4gIGluc3QgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoaW5zdCwgXCJvbkNoYW5nZVwiKTtcbiAgMCA8IGluc3QubGVuZ3RoICYmXG4gICAgKChuYXRpdmVFdmVudCA9IG5ldyBTeW50aGV0aWNFdmVudChcbiAgICAgIFwib25DaGFuZ2VcIixcbiAgICAgIFwiY2hhbmdlXCIsXG4gICAgICBudWxsLFxuICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICB0YXJnZXRcbiAgICApKSxcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goeyBldmVudDogbmF0aXZlRXZlbnQsIGxpc3RlbmVyczogaW5zdCB9KSk7XG59XG52YXIgYWN0aXZlRWxlbWVudCQxID0gbnVsbCxcbiAgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGw7XG5mdW5jdGlvbiBydW5FdmVudEluQmF0Y2goZGlzcGF0Y2hRdWV1ZSkge1xuICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCAwKTtcbn1cbmZ1bmN0aW9uIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KSB7XG4gIHZhciB0YXJnZXROb2RlID0gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KTtcbiAgaWYgKHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKHRhcmdldE5vZGUpKSByZXR1cm4gdGFyZ2V0SW5zdDtcbn1cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKFwiY2hhbmdlXCIgPT09IGRvbUV2ZW50TmFtZSkgcmV0dXJuIHRhcmdldEluc3Q7XG59XG52YXIgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gITE7XG5pZiAoY2FuVXNlRE9NKSB7XG4gIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDI4MztcbiAgaWYgKGNhblVzZURPTSkge1xuICAgIHZhciBpc1N1cHBvcnRlZCRqc2NvbXAkaW5saW5lXzQxOCA9IFwib25pbnB1dFwiIGluIGRvY3VtZW50O1xuICAgIGlmICghaXNTdXBwb3J0ZWQkanNjb21wJGlubGluZV80MTgpIHtcbiAgICAgIHZhciBlbGVtZW50JGpzY29tcCRpbmxpbmVfNDE5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGVsZW1lbnQkanNjb21wJGlubGluZV80MTkuc2V0QXR0cmlidXRlKFwib25pbnB1dFwiLCBcInJldHVybjtcIik7XG4gICAgICBpc1N1cHBvcnRlZCRqc2NvbXAkaW5saW5lXzQxOCA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGVsZW1lbnQkanNjb21wJGlubGluZV80MTkub25pbnB1dDtcbiAgICB9XG4gICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQyODMgPSBpc1N1cHBvcnRlZCRqc2NvbXAkaW5saW5lXzQxODtcbiAgfSBlbHNlIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMjgzID0gITE7XG4gIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9XG4gICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQyODMgJiZcbiAgICAoIWRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCA5IDwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTtcbn1cbmZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCkge1xuICBhY3RpdmVFbGVtZW50JDEgJiZcbiAgICAoYWN0aXZlRWxlbWVudCQxLmRldGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSksXG4gICAgKGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSBhY3RpdmVFbGVtZW50JDEgPSBudWxsKSk7XG59XG5mdW5jdGlvbiBoYW5kbGVQcm9wZXJ0eUNoYW5nZShuYXRpdmVFdmVudCkge1xuICBpZiAoXG4gICAgXCJ2YWx1ZVwiID09PSBuYXRpdmVFdmVudC5wcm9wZXJ0eU5hbWUgJiZcbiAgICBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QkMSlcbiAgKSB7XG4gICAgdmFyIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoXG4gICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgYWN0aXZlRWxlbWVudEluc3QkMSxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpXG4gICAgKTtcbiAgICBiYXRjaGVkVXBkYXRlcyQxKHJ1bkV2ZW50SW5CYXRjaCwgZGlzcGF0Y2hRdWV1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbChkb21FdmVudE5hbWUsIHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBcImZvY3VzaW5cIiA9PT0gZG9tRXZlbnROYW1lXG4gICAgPyAoc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKSxcbiAgICAgIChhY3RpdmVFbGVtZW50JDEgPSB0YXJnZXQpLFxuICAgICAgKGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSB0YXJnZXRJbnN0KSxcbiAgICAgIGFjdGl2ZUVsZW1lbnQkMS5hdHRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIiwgaGFuZGxlUHJvcGVydHlDaGFuZ2UpKVxuICAgIDogXCJmb2N1c291dFwiID09PSBkb21FdmVudE5hbWUgJiYgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbn1cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGwoZG9tRXZlbnROYW1lKSB7XG4gIGlmIChcbiAgICBcInNlbGVjdGlvbmNoYW5nZVwiID09PSBkb21FdmVudE5hbWUgfHxcbiAgICBcImtleXVwXCIgPT09IGRvbUV2ZW50TmFtZSB8fFxuICAgIFwia2V5ZG93blwiID09PSBkb21FdmVudE5hbWVcbiAgKVxuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QkMSk7XG59XG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKFwiY2xpY2tcIiA9PT0gZG9tRXZlbnROYW1lKSByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xufVxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKFwiaW5wdXRcIiA9PT0gZG9tRXZlbnROYW1lIHx8IFwiY2hhbmdlXCIgPT09IGRvbUV2ZW50TmFtZSlcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xufVxuZnVuY3Rpb24gaXMoeCwgeSkge1xuICByZXR1cm4gKHggPT09IHkgJiYgKDAgIT09IHggfHwgMSAvIHggPT09IDEgLyB5KSkgfHwgKHggIT09IHggJiYgeSAhPT0geSk7XG59XG52YXIgb2JqZWN0SXMgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBPYmplY3QuaXMgPyBPYmplY3QuaXMgOiBpcztcbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XG4gIGlmIChvYmplY3RJcyhvYmpBLCBvYmpCKSkgcmV0dXJuICEwO1xuICBpZiAoXG4gICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9iakEgfHxcbiAgICBudWxsID09PSBvYmpBIHx8XG4gICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9iakIgfHxcbiAgICBudWxsID09PSBvYmpCXG4gIClcbiAgICByZXR1cm4gITE7XG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpLFxuICAgIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkgcmV0dXJuICExO1xuICBmb3IgKGtleXNCID0gMDsga2V5c0IgPCBrZXlzQS5sZW5ndGg7IGtleXNCKyspIHtcbiAgICB2YXIgY3VycmVudEtleSA9IGtleXNBW2tleXNCXTtcbiAgICBpZiAoXG4gICAgICAhaGFzT3duUHJvcGVydHkuY2FsbChvYmpCLCBjdXJyZW50S2V5KSB8fFxuICAgICAgIW9iamVjdElzKG9iakFbY3VycmVudEtleV0sIG9iakJbY3VycmVudEtleV0pXG4gICAgKVxuICAgICAgcmV0dXJuICExO1xuICB9XG4gIHJldHVybiAhMDtcbn1cbmZ1bmN0aW9uIGdldExlYWZOb2RlKG5vZGUpIHtcbiAgZm9yICg7IG5vZGUgJiYgbm9kZS5maXJzdENoaWxkOyApIG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChyb290LCBvZmZzZXQpIHtcbiAgdmFyIG5vZGUgPSBnZXRMZWFmTm9kZShyb290KTtcbiAgcm9vdCA9IDA7XG4gIGZvciAodmFyIG5vZGVFbmQ7IG5vZGU7ICkge1xuICAgIGlmICgzID09PSBub2RlLm5vZGVUeXBlKSB7XG4gICAgICBub2RlRW5kID0gcm9vdCArIG5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuICAgICAgaWYgKHJvb3QgPD0gb2Zmc2V0ICYmIG5vZGVFbmQgPj0gb2Zmc2V0KVxuICAgICAgICByZXR1cm4geyBub2RlOiBub2RlLCBvZmZzZXQ6IG9mZnNldCAtIHJvb3QgfTtcbiAgICAgIHJvb3QgPSBub2RlRW5kO1xuICAgIH1cbiAgICBhOiB7XG4gICAgICBmb3IgKDsgbm9kZTsgKSB7XG4gICAgICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgbm9kZSA9IHZvaWQgMDtcbiAgICB9XG4gICAgbm9kZSA9IGdldExlYWZOb2RlKG5vZGUpO1xuICB9XG59XG5mdW5jdGlvbiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUpIHtcbiAgcmV0dXJuIG91dGVyTm9kZSAmJiBpbm5lck5vZGVcbiAgICA/IG91dGVyTm9kZSA9PT0gaW5uZXJOb2RlXG4gICAgICA/ICEwXG4gICAgICA6IG91dGVyTm9kZSAmJiAzID09PSBvdXRlck5vZGUubm9kZVR5cGVcbiAgICAgICAgPyAhMVxuICAgICAgICA6IGlubmVyTm9kZSAmJiAzID09PSBpbm5lck5vZGUubm9kZVR5cGVcbiAgICAgICAgICA/IGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZS5wYXJlbnROb2RlKVxuICAgICAgICAgIDogXCJjb250YWluc1wiIGluIG91dGVyTm9kZVxuICAgICAgICAgICAgPyBvdXRlck5vZGUuY29udGFpbnMoaW5uZXJOb2RlKVxuICAgICAgICAgICAgOiBvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb25cbiAgICAgICAgICAgICAgPyAhIShvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaW5uZXJOb2RlKSAmIDE2KVxuICAgICAgICAgICAgICA6ICExXG4gICAgOiAhMTtcbn1cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnREZWVwKGNvbnRhaW5lckluZm8pIHtcbiAgY29udGFpbmVySW5mbyA9XG4gICAgbnVsbCAhPSBjb250YWluZXJJbmZvICYmXG4gICAgbnVsbCAhPSBjb250YWluZXJJbmZvLm93bmVyRG9jdW1lbnQgJiZcbiAgICBudWxsICE9IGNvbnRhaW5lckluZm8ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld1xuICAgICAgPyBjb250YWluZXJJbmZvLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXdcbiAgICAgIDogd2luZG93O1xuICBmb3IgKFxuICAgIHZhciBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChjb250YWluZXJJbmZvLmRvY3VtZW50KTtcbiAgICBlbGVtZW50IGluc3RhbmNlb2YgY29udGFpbmVySW5mby5IVE1MSUZyYW1lRWxlbWVudDtcblxuICApIHtcbiAgICB0cnkge1xuICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9XG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBlbGVtZW50LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICExO1xuICAgIH1cbiAgICBpZiAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KSBjb250YWluZXJJbmZvID0gZWxlbWVudC5jb250ZW50V2luZG93O1xuICAgIGVsc2UgYnJlYWs7XG4gICAgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoY29udGFpbmVySW5mby5kb2N1bWVudCk7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5mdW5jdGlvbiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKFxuICAgIG5vZGVOYW1lICYmXG4gICAgKChcImlucHV0XCIgPT09IG5vZGVOYW1lICYmXG4gICAgICAoXCJ0ZXh0XCIgPT09IGVsZW0udHlwZSB8fFxuICAgICAgICBcInNlYXJjaFwiID09PSBlbGVtLnR5cGUgfHxcbiAgICAgICAgXCJ0ZWxcIiA9PT0gZWxlbS50eXBlIHx8XG4gICAgICAgIFwidXJsXCIgPT09IGVsZW0udHlwZSB8fFxuICAgICAgICBcInBhc3N3b3JkXCIgPT09IGVsZW0udHlwZSkpIHx8XG4gICAgICBcInRleHRhcmVhXCIgPT09IG5vZGVOYW1lIHx8XG4gICAgICBcInRydWVcIiA9PT0gZWxlbS5jb250ZW50RWRpdGFibGUpXG4gICk7XG59XG5mdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24sIGNvbnRhaW5lckluZm8pIHtcbiAgdmFyIGN1ckZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoY29udGFpbmVySW5mbyk7XG4gIGNvbnRhaW5lckluZm8gPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLmZvY3VzZWRFbGVtO1xuICB2YXIgcHJpb3JTZWxlY3Rpb25SYW5nZSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uc2VsZWN0aW9uUmFuZ2U7XG4gIGlmIChcbiAgICBjdXJGb2N1c2VkRWxlbSAhPT0gY29udGFpbmVySW5mbyAmJlxuICAgIGNvbnRhaW5lckluZm8gJiZcbiAgICBjb250YWluZXJJbmZvLm93bmVyRG9jdW1lbnQgJiZcbiAgICBjb250YWluc05vZGUoY29udGFpbmVySW5mby5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgY29udGFpbmVySW5mbylcbiAgKSB7XG4gICAgaWYgKG51bGwgIT09IHByaW9yU2VsZWN0aW9uUmFuZ2UgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGNvbnRhaW5lckluZm8pKVxuICAgICAgaWYgKFxuICAgICAgICAoKHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24gPSBwcmlvclNlbGVjdGlvblJhbmdlLnN0YXJ0KSxcbiAgICAgICAgKGN1ckZvY3VzZWRFbGVtID0gcHJpb3JTZWxlY3Rpb25SYW5nZS5lbmQpLFxuICAgICAgICB2b2lkIDAgPT09IGN1ckZvY3VzZWRFbGVtICYmXG4gICAgICAgICAgKGN1ckZvY3VzZWRFbGVtID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbiksXG4gICAgICAgIFwic2VsZWN0aW9uU3RhcnRcIiBpbiBjb250YWluZXJJbmZvKVxuICAgICAgKVxuICAgICAgICAoY29udGFpbmVySW5mby5zZWxlY3Rpb25TdGFydCA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24pLFxuICAgICAgICAgIChjb250YWluZXJJbmZvLnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKFxuICAgICAgICAgICAgY3VyRm9jdXNlZEVsZW0sXG4gICAgICAgICAgICBjb250YWluZXJJbmZvLnZhbHVlLmxlbmd0aFxuICAgICAgICAgICkpO1xuICAgICAgZWxzZSBpZiAoXG4gICAgICAgICgoY3VyRm9jdXNlZEVsZW0gPVxuICAgICAgICAgICgocHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbiA9XG4gICAgICAgICAgICBjb250YWluZXJJbmZvLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQpICYmXG4gICAgICAgICAgICBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLmRlZmF1bHRWaWV3KSB8fFxuICAgICAgICAgIHdpbmRvdyksXG4gICAgICAgIGN1ckZvY3VzZWRFbGVtLmdldFNlbGVjdGlvbilcbiAgICAgICkge1xuICAgICAgICBjdXJGb2N1c2VkRWxlbSA9IGN1ckZvY3VzZWRFbGVtLmdldFNlbGVjdGlvbigpO1xuICAgICAgICB2YXIgbGVuZ3RoID0gY29udGFpbmVySW5mby50ZXh0Q29udGVudC5sZW5ndGgsXG4gICAgICAgICAgc3RhcnQgPSBNYXRoLm1pbihwcmlvclNlbGVjdGlvblJhbmdlLnN0YXJ0LCBsZW5ndGgpO1xuICAgICAgICBwcmlvclNlbGVjdGlvblJhbmdlID1cbiAgICAgICAgICB2b2lkIDAgPT09IHByaW9yU2VsZWN0aW9uUmFuZ2UuZW5kXG4gICAgICAgICAgICA/IHN0YXJ0XG4gICAgICAgICAgICA6IE1hdGgubWluKHByaW9yU2VsZWN0aW9uUmFuZ2UuZW5kLCBsZW5ndGgpO1xuICAgICAgICAhY3VyRm9jdXNlZEVsZW0uZXh0ZW5kICYmXG4gICAgICAgICAgc3RhcnQgPiBwcmlvclNlbGVjdGlvblJhbmdlICYmXG4gICAgICAgICAgKChsZW5ndGggPSBwcmlvclNlbGVjdGlvblJhbmdlKSxcbiAgICAgICAgICAocHJpb3JTZWxlY3Rpb25SYW5nZSA9IHN0YXJ0KSxcbiAgICAgICAgICAoc3RhcnQgPSBsZW5ndGgpKTtcbiAgICAgICAgbGVuZ3RoID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChjb250YWluZXJJbmZvLCBzdGFydCk7XG4gICAgICAgIHZhciBlbmRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KFxuICAgICAgICAgIGNvbnRhaW5lckluZm8sXG4gICAgICAgICAgcHJpb3JTZWxlY3Rpb25SYW5nZVxuICAgICAgICApO1xuICAgICAgICBsZW5ndGggJiZcbiAgICAgICAgICBlbmRNYXJrZXIgJiZcbiAgICAgICAgICAoMSAhPT0gY3VyRm9jdXNlZEVsZW0ucmFuZ2VDb3VudCB8fFxuICAgICAgICAgICAgY3VyRm9jdXNlZEVsZW0uYW5jaG9yTm9kZSAhPT0gbGVuZ3RoLm5vZGUgfHxcbiAgICAgICAgICAgIGN1ckZvY3VzZWRFbGVtLmFuY2hvck9mZnNldCAhPT0gbGVuZ3RoLm9mZnNldCB8fFxuICAgICAgICAgICAgY3VyRm9jdXNlZEVsZW0uZm9jdXNOb2RlICE9PSBlbmRNYXJrZXIubm9kZSB8fFxuICAgICAgICAgICAgY3VyRm9jdXNlZEVsZW0uZm9jdXNPZmZzZXQgIT09IGVuZE1hcmtlci5vZmZzZXQpICYmXG4gICAgICAgICAgKChwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uID1cbiAgICAgICAgICAgIHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uY3JlYXRlUmFuZ2UoKSksXG4gICAgICAgICAgcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5zZXRTdGFydChsZW5ndGgubm9kZSwgbGVuZ3RoLm9mZnNldCksXG4gICAgICAgICAgY3VyRm9jdXNlZEVsZW0ucmVtb3ZlQWxsUmFuZ2VzKCksXG4gICAgICAgICAgc3RhcnQgPiBwcmlvclNlbGVjdGlvblJhbmdlXG4gICAgICAgICAgICA/IChjdXJGb2N1c2VkRWxlbS5hZGRSYW5nZShwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uKSxcbiAgICAgICAgICAgICAgY3VyRm9jdXNlZEVsZW0uZXh0ZW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KSlcbiAgICAgICAgICAgIDogKHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uc2V0RW5kKFxuICAgICAgICAgICAgICAgIGVuZE1hcmtlci5ub2RlLFxuICAgICAgICAgICAgICAgIGVuZE1hcmtlci5vZmZzZXRcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgY3VyRm9jdXNlZEVsZW0uYWRkUmFuZ2UocHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbikpKTtcbiAgICAgIH1cbiAgICBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uID0gW107XG4gICAgZm9yIChcbiAgICAgIGN1ckZvY3VzZWRFbGVtID0gY29udGFpbmVySW5mbztcbiAgICAgIChjdXJGb2N1c2VkRWxlbSA9IGN1ckZvY3VzZWRFbGVtLnBhcmVudE5vZGUpO1xuXG4gICAgKVxuICAgICAgMSA9PT0gY3VyRm9jdXNlZEVsZW0ubm9kZVR5cGUgJiZcbiAgICAgICAgcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5wdXNoKHtcbiAgICAgICAgICBlbGVtZW50OiBjdXJGb2N1c2VkRWxlbSxcbiAgICAgICAgICBsZWZ0OiBjdXJGb2N1c2VkRWxlbS5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHRvcDogY3VyRm9jdXNlZEVsZW0uc2Nyb2xsVG9wXG4gICAgICAgIH0pO1xuICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNvbnRhaW5lckluZm8uZm9jdXMgJiYgY29udGFpbmVySW5mby5mb2N1cygpO1xuICAgIGZvciAoXG4gICAgICBjb250YWluZXJJbmZvID0gMDtcbiAgICAgIGNvbnRhaW5lckluZm8gPCBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLmxlbmd0aDtcbiAgICAgIGNvbnRhaW5lckluZm8rK1xuICAgIClcbiAgICAgIChjdXJGb2N1c2VkRWxlbSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb25bY29udGFpbmVySW5mb10pLFxuICAgICAgICAoY3VyRm9jdXNlZEVsZW0uZWxlbWVudC5zY3JvbGxMZWZ0ID0gY3VyRm9jdXNlZEVsZW0ubGVmdCksXG4gICAgICAgIChjdXJGb2N1c2VkRWxlbS5lbGVtZW50LnNjcm9sbFRvcCA9IGN1ckZvY3VzZWRFbGVtLnRvcCk7XG4gIH1cbn1cbnZhciBza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQgPVxuICAgIGNhblVzZURPTSAmJiBcImRvY3VtZW50TW9kZVwiIGluIGRvY3VtZW50ICYmIDExID49IGRvY3VtZW50LmRvY3VtZW50TW9kZSxcbiAgYWN0aXZlRWxlbWVudCA9IG51bGwsXG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbCxcbiAgbGFzdFNlbGVjdGlvbiA9IG51bGwsXG4gIG1vdXNlRG93biA9ICExO1xuZnVuY3Rpb24gY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBkb2MgPVxuICAgIG5hdGl2ZUV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgID8gbmF0aXZlRXZlbnRUYXJnZXQuZG9jdW1lbnRcbiAgICAgIDogOSA9PT0gbmF0aXZlRXZlbnRUYXJnZXQubm9kZVR5cGVcbiAgICAgICAgPyBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICA6IG5hdGl2ZUV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG4gIG1vdXNlRG93biB8fFxuICAgIG51bGwgPT0gYWN0aXZlRWxlbWVudCB8fFxuICAgIGFjdGl2ZUVsZW1lbnQgIT09IGdldEFjdGl2ZUVsZW1lbnQoZG9jKSB8fFxuICAgICgoZG9jID0gYWN0aXZlRWxlbWVudCksXG4gICAgXCJzZWxlY3Rpb25TdGFydFwiIGluIGRvYyAmJiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZG9jKVxuICAgICAgPyAoZG9jID0geyBzdGFydDogZG9jLnNlbGVjdGlvblN0YXJ0LCBlbmQ6IGRvYy5zZWxlY3Rpb25FbmQgfSlcbiAgICAgIDogKChkb2MgPSAoXG4gICAgICAgICAgKGRvYy5vd25lckRvY3VtZW50ICYmIGRvYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fFxuICAgICAgICAgIHdpbmRvd1xuICAgICAgICApLmdldFNlbGVjdGlvbigpKSxcbiAgICAgICAgKGRvYyA9IHtcbiAgICAgICAgICBhbmNob3JOb2RlOiBkb2MuYW5jaG9yTm9kZSxcbiAgICAgICAgICBhbmNob3JPZmZzZXQ6IGRvYy5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgZm9jdXNOb2RlOiBkb2MuZm9jdXNOb2RlLFxuICAgICAgICAgIGZvY3VzT2Zmc2V0OiBkb2MuZm9jdXNPZmZzZXRcbiAgICAgICAgfSkpLFxuICAgIChsYXN0U2VsZWN0aW9uICYmIHNoYWxsb3dFcXVhbChsYXN0U2VsZWN0aW9uLCBkb2MpKSB8fFxuICAgICAgKChsYXN0U2VsZWN0aW9uID0gZG9jKSxcbiAgICAgIChkb2MgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoYWN0aXZlRWxlbWVudEluc3QsIFwib25TZWxlY3RcIikpLFxuICAgICAgMCA8IGRvYy5sZW5ndGggJiZcbiAgICAgICAgKChuYXRpdmVFdmVudCA9IG5ldyBTeW50aGV0aWNFdmVudChcbiAgICAgICAgICBcIm9uU2VsZWN0XCIsXG4gICAgICAgICAgXCJzZWxlY3RcIixcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICkpLFxuICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goeyBldmVudDogbmF0aXZlRXZlbnQsIGxpc3RlbmVyczogZG9jIH0pLFxuICAgICAgICAobmF0aXZlRXZlbnQudGFyZ2V0ID0gYWN0aXZlRWxlbWVudCkpKSk7XG59XG5mdW5jdGlvbiBtYWtlUHJlZml4TWFwKHN0eWxlUHJvcCwgZXZlbnROYW1lKSB7XG4gIHZhciBwcmVmaXhlcyA9IHt9O1xuICBwcmVmaXhlc1tzdHlsZVByb3AudG9Mb3dlckNhc2UoKV0gPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcHJlZml4ZXNbXCJXZWJraXRcIiArIHN0eWxlUHJvcF0gPSBcIndlYmtpdFwiICsgZXZlbnROYW1lO1xuICBwcmVmaXhlc1tcIk1velwiICsgc3R5bGVQcm9wXSA9IFwibW96XCIgKyBldmVudE5hbWU7XG4gIHJldHVybiBwcmVmaXhlcztcbn1cbnZhciB2ZW5kb3JQcmVmaXhlcyA9IHtcbiAgICBhbmltYXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoXCJBbmltYXRpb25cIiwgXCJBbmltYXRpb25FbmRcIiksXG4gICAgYW5pbWF0aW9uaXRlcmF0aW9uOiBtYWtlUHJlZml4TWFwKFwiQW5pbWF0aW9uXCIsIFwiQW5pbWF0aW9uSXRlcmF0aW9uXCIpLFxuICAgIGFuaW1hdGlvbnN0YXJ0OiBtYWtlUHJlZml4TWFwKFwiQW5pbWF0aW9uXCIsIFwiQW5pbWF0aW9uU3RhcnRcIiksXG4gICAgdHJhbnNpdGlvbnJ1bjogbWFrZVByZWZpeE1hcChcIlRyYW5zaXRpb25cIiwgXCJUcmFuc2l0aW9uUnVuXCIpLFxuICAgIHRyYW5zaXRpb25zdGFydDogbWFrZVByZWZpeE1hcChcIlRyYW5zaXRpb25cIiwgXCJUcmFuc2l0aW9uU3RhcnRcIiksXG4gICAgdHJhbnNpdGlvbmNhbmNlbDogbWFrZVByZWZpeE1hcChcIlRyYW5zaXRpb25cIiwgXCJUcmFuc2l0aW9uQ2FuY2VsXCIpLFxuICAgIHRyYW5zaXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoXCJUcmFuc2l0aW9uXCIsIFwiVHJhbnNpdGlvbkVuZFwiKVxuICB9LFxuICBwcmVmaXhlZEV2ZW50TmFtZXMgPSB7fSxcbiAgc3R5bGUgPSB7fTtcbmNhblVzZURPTSAmJlxuICAoKHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5zdHlsZSksXG4gIFwiQW5pbWF0aW9uRXZlbnRcIiBpbiB3aW5kb3cgfHxcbiAgICAoZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sXG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sXG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksXG4gIFwiVHJhbnNpdGlvbkV2ZW50XCIgaW4gd2luZG93IHx8XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7XG5mdW5jdGlvbiBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgaWYgKHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdKSByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV07XG4gIGlmICghdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXSkgcmV0dXJuIGV2ZW50TmFtZTtcbiAgdmFyIHByZWZpeE1hcCA9IHZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV0sXG4gICAgc3R5bGVQcm9wO1xuICBmb3IgKHN0eWxlUHJvcCBpbiBwcmVmaXhNYXApXG4gICAgaWYgKHByZWZpeE1hcC5oYXNPd25Qcm9wZXJ0eShzdHlsZVByb3ApICYmIHN0eWxlUHJvcCBpbiBzdHlsZSlcbiAgICAgIHJldHVybiAocHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0gPSBwcmVmaXhNYXBbc3R5bGVQcm9wXSk7XG4gIHJldHVybiBldmVudE5hbWU7XG59XG52YXIgQU5JTUFUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwiYW5pbWF0aW9uZW5kXCIpLFxuICBBTklNQVRJT05fSVRFUkFUSU9OID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJhbmltYXRpb25pdGVyYXRpb25cIiksXG4gIEFOSU1BVElPTl9TVEFSVCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwiYW5pbWF0aW9uc3RhcnRcIiksXG4gIFRSQU5TSVRJT05fUlVOID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJ0cmFuc2l0aW9ucnVuXCIpLFxuICBUUkFOU0lUSU9OX1NUQVJUID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJ0cmFuc2l0aW9uc3RhcnRcIiksXG4gIFRSQU5TSVRJT05fQ0FOQ0VMID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJ0cmFuc2l0aW9uY2FuY2VsXCIpLFxuICBUUkFOU0lUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwidHJhbnNpdGlvbmVuZFwiKSxcbiAgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKCksXG4gIHNpbXBsZUV2ZW50UGx1Z2luRXZlbnRzID1cbiAgICBcImFib3J0IGF1eENsaWNrIGJlZm9yZVRvZ2dsZSBjYW5jZWwgY2FuUGxheSBjYW5QbGF5VGhyb3VnaCBjbGljayBjbG9zZSBjb250ZXh0TWVudSBjb3B5IGN1dCBkcmFnIGRyYWdFbmQgZHJhZ0VudGVyIGRyYWdFeGl0IGRyYWdMZWF2ZSBkcmFnT3ZlciBkcmFnU3RhcnQgZHJvcCBkdXJhdGlvbkNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBnb3RQb2ludGVyQ2FwdHVyZSBpbnB1dCBpbnZhbGlkIGtleURvd24ga2V5UHJlc3Mga2V5VXAgbG9hZCBsb2FkZWREYXRhIGxvYWRlZE1ldGFkYXRhIGxvYWRTdGFydCBsb3N0UG9pbnRlckNhcHR1cmUgbW91c2VEb3duIG1vdXNlTW92ZSBtb3VzZU91dCBtb3VzZU92ZXIgbW91c2VVcCBwYXN0ZSBwYXVzZSBwbGF5IHBsYXlpbmcgcG9pbnRlckNhbmNlbCBwb2ludGVyRG93biBwb2ludGVyTW92ZSBwb2ludGVyT3V0IHBvaW50ZXJPdmVyIHBvaW50ZXJVcCBwcm9ncmVzcyByYXRlQ2hhbmdlIHJlc2V0IHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1Ym1pdCBzdXNwZW5kIHRpbWVVcGRhdGUgdG91Y2hDYW5jZWwgdG91Y2hFbmQgdG91Y2hTdGFydCB2b2x1bWVDaGFuZ2Ugc2Nyb2xsIHNjcm9sbEVuZCB0b2dnbGUgdG91Y2hNb3ZlIHdhaXRpbmcgd2hlZWxcIi5zcGxpdChcbiAgICAgIFwiIFwiXG4gICAgKTtcbmZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlRXZlbnQoZG9tRXZlbnROYW1lLCByZWFjdE5hbWUpIHtcbiAgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuc2V0KGRvbUV2ZW50TmFtZSwgcmVhY3ROYW1lKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KHJlYWN0TmFtZSwgW2RvbUV2ZW50TmFtZV0pO1xufVxudmFyIGNvbmN1cnJlbnRRdWV1ZXMgPSBbXSxcbiAgY29uY3VycmVudFF1ZXVlc0luZGV4ID0gMCxcbiAgY29uY3VycmVudGx5VXBkYXRlZExhbmVzID0gMDtcbmZ1bmN0aW9uIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKSB7XG4gIGZvciAoXG4gICAgdmFyIGVuZEluZGV4ID0gY29uY3VycmVudFF1ZXVlc0luZGV4LFxuICAgICAgaSA9IChjb25jdXJyZW50bHlVcGRhdGVkTGFuZXMgPSBjb25jdXJyZW50UXVldWVzSW5kZXggPSAwKTtcbiAgICBpIDwgZW5kSW5kZXg7XG5cbiAgKSB7XG4gICAgdmFyIGZpYmVyID0gY29uY3VycmVudFF1ZXVlc1tpXTtcbiAgICBjb25jdXJyZW50UXVldWVzW2krK10gPSBudWxsO1xuICAgIHZhciBxdWV1ZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICB2YXIgdXBkYXRlID0gY29uY3VycmVudFF1ZXVlc1tpXTtcbiAgICBjb25jdXJyZW50UXVldWVzW2krK10gPSBudWxsO1xuICAgIHZhciBsYW5lID0gY29uY3VycmVudFF1ZXVlc1tpXTtcbiAgICBjb25jdXJyZW50UXVldWVzW2krK10gPSBudWxsO1xuICAgIGlmIChudWxsICE9PSBxdWV1ZSAmJiBudWxsICE9PSB1cGRhdGUpIHtcbiAgICAgIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcbiAgICAgIG51bGwgPT09IHBlbmRpbmdcbiAgICAgICAgPyAodXBkYXRlLm5leHQgPSB1cGRhdGUpXG4gICAgICAgIDogKCh1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dCksIChwZW5kaW5nLm5leHQgPSB1cGRhdGUpKTtcbiAgICAgIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG4gICAgfVxuICAgIDAgIT09IGxhbmUgJiYgbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIHVwZGF0ZSwgbGFuZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVucXVldWVVcGRhdGUkMShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSkge1xuICBjb25jdXJyZW50UXVldWVzW2NvbmN1cnJlbnRRdWV1ZXNJbmRleCsrXSA9IGZpYmVyO1xuICBjb25jdXJyZW50UXVldWVzW2NvbmN1cnJlbnRRdWV1ZXNJbmRleCsrXSA9IHF1ZXVlO1xuICBjb25jdXJyZW50UXVldWVzW2NvbmN1cnJlbnRRdWV1ZXNJbmRleCsrXSA9IHVwZGF0ZTtcbiAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSBsYW5lO1xuICBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXMgfD0gbGFuZTtcbiAgZmliZXIubGFuZXMgfD0gbGFuZTtcbiAgZmliZXIgPSBmaWJlci5hbHRlcm5hdGU7XG4gIG51bGwgIT09IGZpYmVyICYmIChmaWJlci5sYW5lcyB8PSBsYW5lKTtcbn1cbmZ1bmN0aW9uIGVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSkge1xuICBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpO1xuICByZXR1cm4gZ2V0Um9vdEZvclVwZGF0ZWRGaWJlcihmaWJlcik7XG59XG5mdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIGxhbmUpIHtcbiAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBudWxsLCBudWxsLCBsYW5lKTtcbiAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xufVxuZnVuY3Rpb24gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qoc291cmNlRmliZXIsIHVwZGF0ZSwgbGFuZSkge1xuICBzb3VyY2VGaWJlci5sYW5lcyB8PSBsYW5lO1xuICB2YXIgYWx0ZXJuYXRlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5sYW5lcyB8PSBsYW5lKTtcbiAgZm9yICh2YXIgaXNIaWRkZW4gPSAhMSwgcGFyZW50ID0gc291cmNlRmliZXIucmV0dXJuOyBudWxsICE9PSBwYXJlbnQ7IClcbiAgICAocGFyZW50LmNoaWxkTGFuZXMgfD0gbGFuZSksXG4gICAgICAoYWx0ZXJuYXRlID0gcGFyZW50LmFsdGVybmF0ZSksXG4gICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5jaGlsZExhbmVzIHw9IGxhbmUpLFxuICAgICAgMjIgPT09IHBhcmVudC50YWcgJiZcbiAgICAgICAgKChzb3VyY2VGaWJlciA9IHBhcmVudC5zdGF0ZU5vZGUpLFxuICAgICAgICBudWxsID09PSBzb3VyY2VGaWJlciB8fCBzb3VyY2VGaWJlci5fdmlzaWJpbGl0eSAmIDEgfHwgKGlzSGlkZGVuID0gITApKSxcbiAgICAgIChzb3VyY2VGaWJlciA9IHBhcmVudCksXG4gICAgICAocGFyZW50ID0gcGFyZW50LnJldHVybik7XG4gIGlzSGlkZGVuICYmXG4gICAgbnVsbCAhPT0gdXBkYXRlICYmXG4gICAgMyA9PT0gc291cmNlRmliZXIudGFnICYmXG4gICAgKChwYXJlbnQgPSBzb3VyY2VGaWJlci5zdGF0ZU5vZGUpLFxuICAgIChpc0hpZGRlbiA9IDMxIC0gY2x6MzIobGFuZSkpLFxuICAgIChwYXJlbnQgPSBwYXJlbnQuaGlkZGVuVXBkYXRlcyksXG4gICAgKHNvdXJjZUZpYmVyID0gcGFyZW50W2lzSGlkZGVuXSksXG4gICAgbnVsbCA9PT0gc291cmNlRmliZXJcbiAgICAgID8gKHBhcmVudFtpc0hpZGRlbl0gPSBbdXBkYXRlXSlcbiAgICAgIDogc291cmNlRmliZXIucHVzaCh1cGRhdGUpLFxuICAgICh1cGRhdGUubGFuZSA9IGxhbmUgfCA1MzY4NzA5MTIpKTtcbn1cbmZ1bmN0aW9uIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoc291cmNlRmliZXIpIHtcbiAgaWYgKDUwIDwgbmVzdGVkVXBkYXRlQ291bnQpXG4gICAgdGhyb3cgKFxuICAgICAgKChuZXN0ZWRVcGRhdGVDb3VudCA9IDApLFxuICAgICAgKHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGwpLFxuICAgICAgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxODUpKSlcbiAgICApO1xuICBmb3IgKHZhciBwYXJlbnQgPSBzb3VyY2VGaWJlci5yZXR1cm47IG51bGwgIT09IHBhcmVudDsgKVxuICAgIChzb3VyY2VGaWJlciA9IHBhcmVudCksIChwYXJlbnQgPSBzb3VyY2VGaWJlci5yZXR1cm4pO1xuICByZXR1cm4gMyA9PT0gc291cmNlRmliZXIudGFnID8gc291cmNlRmliZXIuc3RhdGVOb2RlIDogbnVsbDtcbn1cbnZhciBlbXB0eUNvbnRleHRPYmplY3QgPSB7fSxcbiAgQ2FwdHVyZWRTdGFja3MgPSBuZXcgV2Vha01hcCgpO1xuZnVuY3Rpb24gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodmFsdWUsIHNvdXJjZSkge1xuICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHZhbHVlICYmIG51bGwgIT09IHZhbHVlKSB7XG4gICAgdmFyIGV4aXN0aW5nID0gQ2FwdHVyZWRTdGFja3MuZ2V0KHZhbHVlKTtcbiAgICBpZiAodm9pZCAwICE9PSBleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuICAgIHNvdXJjZSA9IHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgc3RhY2s6IGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChzb3VyY2UpXG4gICAgfTtcbiAgICBDYXB0dXJlZFN0YWNrcy5zZXQodmFsdWUsIHNvdXJjZSk7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICBzdGFjazogZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHNvdXJjZSlcbiAgfTtcbn1cbnZhciBmb3JrU3RhY2sgPSBbXSxcbiAgZm9ya1N0YWNrSW5kZXggPSAwLFxuICB0cmVlRm9ya1Byb3ZpZGVyID0gbnVsbCxcbiAgdHJlZUZvcmtDb3VudCA9IDAsXG4gIGlkU3RhY2sgPSBbXSxcbiAgaWRTdGFja0luZGV4ID0gMCxcbiAgdHJlZUNvbnRleHRQcm92aWRlciA9IG51bGwsXG4gIHRyZWVDb250ZXh0SWQgPSAxLFxuICB0cmVlQ29udGV4dE92ZXJmbG93ID0gXCJcIjtcbmZ1bmN0aW9uIHB1c2hUcmVlRm9yayh3b3JrSW5Qcm9ncmVzcywgdG90YWxDaGlsZHJlbikge1xuICBmb3JrU3RhY2tbZm9ya1N0YWNrSW5kZXgrK10gPSB0cmVlRm9ya0NvdW50O1xuICBmb3JrU3RhY2tbZm9ya1N0YWNrSW5kZXgrK10gPSB0cmVlRm9ya1Byb3ZpZGVyO1xuICB0cmVlRm9ya1Byb3ZpZGVyID0gd29ya0luUHJvZ3Jlc3M7XG4gIHRyZWVGb3JrQ291bnQgPSB0b3RhbENoaWxkcmVuO1xufVxuZnVuY3Rpb24gcHVzaFRyZWVJZCh3b3JrSW5Qcm9ncmVzcywgdG90YWxDaGlsZHJlbiwgaW5kZXgpIHtcbiAgaWRTdGFja1tpZFN0YWNrSW5kZXgrK10gPSB0cmVlQ29udGV4dElkO1xuICBpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0T3ZlcmZsb3c7XG4gIGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRQcm92aWRlcjtcbiAgdHJlZUNvbnRleHRQcm92aWRlciA9IHdvcmtJblByb2dyZXNzO1xuICB2YXIgYmFzZUlkV2l0aExlYWRpbmdCaXQgPSB0cmVlQ29udGV4dElkO1xuICB3b3JrSW5Qcm9ncmVzcyA9IHRyZWVDb250ZXh0T3ZlcmZsb3c7XG4gIHZhciBiYXNlTGVuZ3RoID0gMzIgLSBjbHozMihiYXNlSWRXaXRoTGVhZGluZ0JpdCkgLSAxO1xuICBiYXNlSWRXaXRoTGVhZGluZ0JpdCAmPSB+KDEgPDwgYmFzZUxlbmd0aCk7XG4gIGluZGV4ICs9IDE7XG4gIHZhciBsZW5ndGggPSAzMiAtIGNsejMyKHRvdGFsQ2hpbGRyZW4pICsgYmFzZUxlbmd0aDtcbiAgaWYgKDMwIDwgbGVuZ3RoKSB7XG4gICAgdmFyIG51bWJlck9mT3ZlcmZsb3dCaXRzID0gYmFzZUxlbmd0aCAtIChiYXNlTGVuZ3RoICUgNSk7XG4gICAgbGVuZ3RoID0gKFxuICAgICAgYmFzZUlkV2l0aExlYWRpbmdCaXQgJlxuICAgICAgKCgxIDw8IG51bWJlck9mT3ZlcmZsb3dCaXRzKSAtIDEpXG4gICAgKS50b1N0cmluZygzMik7XG4gICAgYmFzZUlkV2l0aExlYWRpbmdCaXQgPj49IG51bWJlck9mT3ZlcmZsb3dCaXRzO1xuICAgIGJhc2VMZW5ndGggLT0gbnVtYmVyT2ZPdmVyZmxvd0JpdHM7XG4gICAgdHJlZUNvbnRleHRJZCA9XG4gICAgICAoMSA8PCAoMzIgLSBjbHozMih0b3RhbENoaWxkcmVuKSArIGJhc2VMZW5ndGgpKSB8XG4gICAgICAoaW5kZXggPDwgYmFzZUxlbmd0aCkgfFxuICAgICAgYmFzZUlkV2l0aExlYWRpbmdCaXQ7XG4gICAgdHJlZUNvbnRleHRPdmVyZmxvdyA9IGxlbmd0aCArIHdvcmtJblByb2dyZXNzO1xuICB9IGVsc2VcbiAgICAodHJlZUNvbnRleHRJZCA9XG4gICAgICAoMSA8PCBsZW5ndGgpIHwgKGluZGV4IDw8IGJhc2VMZW5ndGgpIHwgYmFzZUlkV2l0aExlYWRpbmdCaXQpLFxuICAgICAgKHRyZWVDb250ZXh0T3ZlcmZsb3cgPSB3b3JrSW5Qcm9ncmVzcyk7XG59XG5mdW5jdGlvbiBwdXNoTWF0ZXJpYWxpemVkVHJlZUlkKHdvcmtJblByb2dyZXNzKSB7XG4gIG51bGwgIT09IHdvcmtJblByb2dyZXNzLnJldHVybiAmJlxuICAgIChwdXNoVHJlZUZvcmsod29ya0luUHJvZ3Jlc3MsIDEpLCBwdXNoVHJlZUlkKHdvcmtJblByb2dyZXNzLCAxLCAwKSk7XG59XG5mdW5jdGlvbiBwb3BUcmVlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICBmb3IgKDsgd29ya0luUHJvZ3Jlc3MgPT09IHRyZWVGb3JrUHJvdmlkZXI7IClcbiAgICAodHJlZUZvcmtQcm92aWRlciA9IGZvcmtTdGFja1stLWZvcmtTdGFja0luZGV4XSksXG4gICAgICAoZm9ya1N0YWNrW2ZvcmtTdGFja0luZGV4XSA9IG51bGwpLFxuICAgICAgKHRyZWVGb3JrQ291bnQgPSBmb3JrU3RhY2tbLS1mb3JrU3RhY2tJbmRleF0pLFxuICAgICAgKGZvcmtTdGFja1tmb3JrU3RhY2tJbmRleF0gPSBudWxsKTtcbiAgZm9yICg7IHdvcmtJblByb2dyZXNzID09PSB0cmVlQ29udGV4dFByb3ZpZGVyOyApXG4gICAgKHRyZWVDb250ZXh0UHJvdmlkZXIgPSBpZFN0YWNrWy0taWRTdGFja0luZGV4XSksXG4gICAgICAoaWRTdGFja1tpZFN0YWNrSW5kZXhdID0gbnVsbCksXG4gICAgICAodHJlZUNvbnRleHRPdmVyZmxvdyA9IGlkU3RhY2tbLS1pZFN0YWNrSW5kZXhdKSxcbiAgICAgIChpZFN0YWNrW2lkU3RhY2tJbmRleF0gPSBudWxsKSxcbiAgICAgICh0cmVlQ29udGV4dElkID0gaWRTdGFja1stLWlkU3RhY2tJbmRleF0pLFxuICAgICAgKGlkU3RhY2tbaWRTdGFja0luZGV4XSA9IG51bGwpO1xufVxudmFyIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbCxcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGwsXG4gIGlzSHlkcmF0aW5nID0gITEsXG4gIGh5ZHJhdGlvbkVycm9ycyA9IG51bGwsXG4gIHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMSxcbiAgSHlkcmF0aW9uTWlzbWF0Y2hFeGNlcHRpb24gPSBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDUxOSkpO1xuZnVuY3Rpb24gdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKGZpYmVyKSB7XG4gIHZhciBlcnJvciA9IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDE4LCBcIlwiKSk7XG4gIHF1ZXVlSHlkcmF0aW9uRXJyb3IoY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoZXJyb3IsIGZpYmVyKSk7XG4gIHRocm93IEh5ZHJhdGlvbk1pc21hdGNoRXhjZXB0aW9uO1xufVxuZnVuY3Rpb24gcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZShmaWJlcikge1xuICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGUsXG4gICAgdHlwZSA9IGZpYmVyLnR5cGUsXG4gICAgcHJvcHMgPSBmaWJlci5tZW1vaXplZFByb3BzO1xuICBpbnN0YW5jZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGZpYmVyO1xuICBpbnN0YW5jZVtpbnRlcm5hbFByb3BzS2V5XSA9IHByb3BzO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwiZGlhbG9nXCI6XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiY2FuY2VsXCIsIGluc3RhbmNlKTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJjbG9zZVwiLCBpbnN0YW5jZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiaWZyYW1lXCI6XG4gICAgY2FzZSBcIm9iamVjdFwiOlxuICAgIGNhc2UgXCJlbWJlZFwiOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImxvYWRcIiwgaW5zdGFuY2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInZpZGVvXCI6XG4gICAgY2FzZSBcImF1ZGlvXCI6XG4gICAgICBmb3IgKHR5cGUgPSAwOyB0eXBlIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgdHlwZSsrKVxuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1t0eXBlXSwgaW5zdGFuY2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNvdXJjZVwiOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImVycm9yXCIsIGluc3RhbmNlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJpbWdcIjpcbiAgICBjYXNlIFwiaW1hZ2VcIjpcbiAgICBjYXNlIFwibGlua1wiOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImVycm9yXCIsIGluc3RhbmNlKTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJsb2FkXCIsIGluc3RhbmNlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkZXRhaWxzXCI6XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwidG9nZ2xlXCIsIGluc3RhbmNlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImludmFsaWRcIiwgaW5zdGFuY2UpO1xuICAgICAgaW5pdElucHV0KFxuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgcHJvcHMudmFsdWUsXG4gICAgICAgIHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgcHJvcHMuY2hlY2tlZCxcbiAgICAgICAgcHJvcHMuZGVmYXVsdENoZWNrZWQsXG4gICAgICAgIHByb3BzLnR5cGUsXG4gICAgICAgIHByb3BzLm5hbWUsXG4gICAgICAgICEwXG4gICAgICApO1xuICAgICAgdHJhY2soaW5zdGFuY2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImludmFsaWRcIiwgaW5zdGFuY2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiaW52YWxpZFwiLCBpbnN0YW5jZSksXG4gICAgICAgIGluaXRUZXh0YXJlYShpbnN0YW5jZSwgcHJvcHMudmFsdWUsIHByb3BzLmRlZmF1bHRWYWx1ZSwgcHJvcHMuY2hpbGRyZW4pLFxuICAgICAgICB0cmFjayhpbnN0YW5jZSk7XG4gIH1cbiAgdHlwZSA9IHByb3BzLmNoaWxkcmVuO1xuICAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICBcIm51bWJlclwiICE9PSB0eXBlb2YgdHlwZSAmJlxuICAgIFwiYmlnaW50XCIgIT09IHR5cGVvZiB0eXBlKSB8fFxuICBpbnN0YW5jZS50ZXh0Q29udGVudCA9PT0gXCJcIiArIHR5cGUgfHxcbiAgITAgPT09IHByb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyB8fFxuICBjaGVja0ZvclVubWF0Y2hlZFRleHQoaW5zdGFuY2UudGV4dENvbnRlbnQsIHR5cGUpXG4gICAgPyAobnVsbCAhPSBwcm9wcy5wb3BvdmVyICYmXG4gICAgICAgIChsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiYmVmb3JldG9nZ2xlXCIsIGluc3RhbmNlKSxcbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInRvZ2dsZVwiLCBpbnN0YW5jZSkpLFxuICAgICAgbnVsbCAhPSBwcm9wcy5vblNjcm9sbCAmJiBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwic2Nyb2xsXCIsIGluc3RhbmNlKSxcbiAgICAgIG51bGwgIT0gcHJvcHMub25TY3JvbGxFbmQgJiZcbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInNjcm9sbGVuZFwiLCBpbnN0YW5jZSksXG4gICAgICBudWxsICE9IHByb3BzLm9uQ2xpY2sgJiYgKGluc3RhbmNlLm9uY2xpY2sgPSBub29wJDEpLFxuICAgICAgKGluc3RhbmNlID0gITApKVxuICAgIDogKGluc3RhbmNlID0gITEpO1xuICBpbnN0YW5jZSB8fCB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2goZmliZXIpO1xufVxuZnVuY3Rpb24gcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcikge1xuICBmb3IgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXIucmV0dXJuOyBoeWRyYXRpb25QYXJlbnRGaWJlcjsgKVxuICAgIHN3aXRjaCAoaHlkcmF0aW9uUGFyZW50RmliZXIudGFnKSB7XG4gICAgICBjYXNlIDM6XG4gICAgICBjYXNlIDI3OlxuICAgICAgICByb290T3JTaW5nbGV0b25Db250ZXh0ID0gITA7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgNTpcbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBoeWRyYXRpb25QYXJlbnRGaWJlci5yZXR1cm47XG4gICAgfVxufVxuZnVuY3Rpb24gcG9wSHlkcmF0aW9uU3RhdGUoZmliZXIpIHtcbiAgaWYgKGZpYmVyICE9PSBoeWRyYXRpb25QYXJlbnRGaWJlcikgcmV0dXJuICExO1xuICBpZiAoIWlzSHlkcmF0aW5nKSByZXR1cm4gcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlciksIChpc0h5ZHJhdGluZyA9ICEwKSwgITE7XG4gIHZhciBzaG91bGRDbGVhciA9ICExLFxuICAgIEpTQ29tcGlsZXJfdGVtcDtcbiAgaWYgKChKU0NvbXBpbGVyX3RlbXAgPSAzICE9PSBmaWJlci50YWcgJiYgMjcgIT09IGZpYmVyLnRhZykpIHtcbiAgICBpZiAoKEpTQ29tcGlsZXJfdGVtcCA9IDUgPT09IGZpYmVyLnRhZykpXG4gICAgICAoSlNDb21waWxlcl90ZW1wID0gZmliZXIudHlwZSksXG4gICAgICAgIChKU0NvbXBpbGVyX3RlbXAgPVxuICAgICAgICAgICEoXCJmb3JtXCIgIT09IEpTQ29tcGlsZXJfdGVtcCAmJiBcImJ1dHRvblwiICE9PSBKU0NvbXBpbGVyX3RlbXApIHx8XG4gICAgICAgICAgc2hvdWxkU2V0VGV4dENvbnRlbnQoZmliZXIudHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcykpO1xuICAgIEpTQ29tcGlsZXJfdGVtcCA9ICFKU0NvbXBpbGVyX3RlbXA7XG4gIH1cbiAgSlNDb21waWxlcl90ZW1wICYmIChzaG91bGRDbGVhciA9ICEwKTtcbiAgc2hvdWxkQ2xlYXIgJiYgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSAmJiB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2goZmliZXIpO1xuICBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKTtcbiAgaWYgKDEzID09PSBmaWJlci50YWcpIHtcbiAgICBmaWJlciA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG4gICAgZmliZXIgPSBudWxsICE9PSBmaWJlciA/IGZpYmVyLmRlaHlkcmF0ZWQgOiBudWxsO1xuICAgIGlmICghZmliZXIpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMzE3KSk7XG4gICAgYToge1xuICAgICAgZmliZXIgPSBmaWJlci5uZXh0U2libGluZztcbiAgICAgIGZvciAoc2hvdWxkQ2xlYXIgPSAwOyBmaWJlcjsgKSB7XG4gICAgICAgIGlmICg4ID09PSBmaWJlci5ub2RlVHlwZSlcbiAgICAgICAgICBpZiAoKChKU0NvbXBpbGVyX3RlbXAgPSBmaWJlci5kYXRhKSwgXCIvJFwiID09PSBKU0NvbXBpbGVyX3RlbXApKSB7XG4gICAgICAgICAgICBpZiAoMCA9PT0gc2hvdWxkQ2xlYXIpIHtcbiAgICAgICAgICAgICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKGZpYmVyLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNob3VsZENsZWFyLS07XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAoXCIkXCIgIT09IEpTQ29tcGlsZXJfdGVtcCAmJlxuICAgICAgICAgICAgICBcIiQhXCIgIT09IEpTQ29tcGlsZXJfdGVtcCAmJlxuICAgICAgICAgICAgICBcIiQ/XCIgIT09IEpTQ29tcGlsZXJfdGVtcCkgfHxcbiAgICAgICAgICAgICAgc2hvdWxkQ2xlYXIrKztcbiAgICAgICAgZmliZXIgPSBmaWJlci5uZXh0U2libGluZztcbiAgICAgIH1cbiAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsO1xuICAgIH1cbiAgfSBlbHNlXG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGh5ZHJhdGlvblBhcmVudEZpYmVyXG4gICAgICA/IGdldE5leHRIeWRyYXRhYmxlKGZpYmVyLnN0YXRlTm9kZS5uZXh0U2libGluZylcbiAgICAgIDogbnVsbDtcbiAgcmV0dXJuICEwO1xufVxuZnVuY3Rpb24gcmVzZXRIeWRyYXRpb25TdGF0ZSgpIHtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbDtcbiAgaXNIeWRyYXRpbmcgPSAhMTtcbn1cbmZ1bmN0aW9uIHF1ZXVlSHlkcmF0aW9uRXJyb3IoZXJyb3IpIHtcbiAgbnVsbCA9PT0gaHlkcmF0aW9uRXJyb3JzXG4gICAgPyAoaHlkcmF0aW9uRXJyb3JzID0gW2Vycm9yXSlcbiAgICA6IGh5ZHJhdGlvbkVycm9ycy5wdXNoKGVycm9yKTtcbn1cbnZhciBTdXNwZW5zZUV4Y2VwdGlvbiA9IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDYwKSksXG4gIFN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvbiA9IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDc0KSksXG4gIG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZSA9IHsgdGhlbjogZnVuY3Rpb24gKCkge30gfTtcbmZ1bmN0aW9uIGlzVGhlbmFibGVSZXNvbHZlZCh0aGVuYWJsZSkge1xuICB0aGVuYWJsZSA9IHRoZW5hYmxlLnN0YXR1cztcbiAgcmV0dXJuIFwiZnVsZmlsbGVkXCIgPT09IHRoZW5hYmxlIHx8IFwicmVqZWN0ZWRcIiA9PT0gdGhlbmFibGU7XG59XG5mdW5jdGlvbiBub29wJDMoKSB7fVxuZnVuY3Rpb24gdHJhY2tVc2VkVGhlbmFibGUodGhlbmFibGVTdGF0ZSwgdGhlbmFibGUsIGluZGV4KSB7XG4gIGluZGV4ID0gdGhlbmFibGVTdGF0ZVtpbmRleF07XG4gIHZvaWQgMCA9PT0gaW5kZXhcbiAgICA/IHRoZW5hYmxlU3RhdGUucHVzaCh0aGVuYWJsZSlcbiAgICA6IGluZGV4ICE9PSB0aGVuYWJsZSAmJiAodGhlbmFibGUudGhlbihub29wJDMsIG5vb3AkMyksICh0aGVuYWJsZSA9IGluZGV4KSk7XG4gIHN3aXRjaCAodGhlbmFibGUuc3RhdHVzKSB7XG4gICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgcmV0dXJuIHRoZW5hYmxlLnZhbHVlO1xuICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgdGhlbmFibGVTdGF0ZSA9IHRoZW5hYmxlLnJlYXNvbjtcbiAgICAgIGlmICh0aGVuYWJsZVN0YXRlID09PSBTdXNwZW5zZUV4Y2VwdGlvbilcbiAgICAgICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg0ODMpKTtcbiAgICAgIHRocm93IHRoZW5hYmxlU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdGhlbmFibGUuc3RhdHVzKSB0aGVuYWJsZS50aGVuKG5vb3AkMywgbm9vcCQzKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGVuYWJsZVN0YXRlID0gd29ya0luUHJvZ3Jlc3NSb290O1xuICAgICAgICBpZiAobnVsbCAhPT0gdGhlbmFibGVTdGF0ZSAmJiAxMDAgPCB0aGVuYWJsZVN0YXRlLnNoZWxsU3VzcGVuZENvdW50ZXIpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg0ODIpKTtcbiAgICAgICAgdGhlbmFibGVTdGF0ZSA9IHRoZW5hYmxlO1xuICAgICAgICB0aGVuYWJsZVN0YXRlLnN0YXR1cyA9IFwicGVuZGluZ1wiO1xuICAgICAgICB0aGVuYWJsZVN0YXRlLnRoZW4oXG4gICAgICAgICAgZnVuY3Rpb24gKGZ1bGZpbGxlZFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoXCJwZW5kaW5nXCIgPT09IHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICAgICAgICB2YXIgZnVsZmlsbGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgICAgZnVsZmlsbGVkVGhlbmFibGUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgICAgICAgZnVsZmlsbGVkVGhlbmFibGUudmFsdWUgPSBmdWxmaWxsZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgdmFyIHJlamVjdGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgICAgcmVqZWN0ZWRUaGVuYWJsZS5zdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgICAgIHJlamVjdGVkVGhlbmFibGUucmVhc29uID0gZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh0aGVuYWJsZS5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgICAgIHJldHVybiB0aGVuYWJsZS52YWx1ZTtcbiAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6XG4gICAgICAgICAgdGhlbmFibGVTdGF0ZSA9IHRoZW5hYmxlLnJlYXNvbjtcbiAgICAgICAgICBpZiAodGhlbmFibGVTdGF0ZSA9PT0gU3VzcGVuc2VFeGNlcHRpb24pXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQ4MykpO1xuICAgICAgICAgIHRocm93IHRoZW5hYmxlU3RhdGU7XG4gICAgICB9XG4gICAgICBzdXNwZW5kZWRUaGVuYWJsZSA9IHRoZW5hYmxlO1xuICAgICAgdGhyb3cgU3VzcGVuc2VFeGNlcHRpb247XG4gIH1cbn1cbnZhciBzdXNwZW5kZWRUaGVuYWJsZSA9IG51bGw7XG5mdW5jdGlvbiBnZXRTdXNwZW5kZWRUaGVuYWJsZSgpIHtcbiAgaWYgKG51bGwgPT09IHN1c3BlbmRlZFRoZW5hYmxlKSB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQ1OSkpO1xuICB2YXIgdGhlbmFibGUgPSBzdXNwZW5kZWRUaGVuYWJsZTtcbiAgc3VzcGVuZGVkVGhlbmFibGUgPSBudWxsO1xuICByZXR1cm4gdGhlbmFibGU7XG59XG52YXIgdGhlbmFibGVTdGF0ZSQxID0gbnVsbCxcbiAgdGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDA7XG5mdW5jdGlvbiB1bndyYXBUaGVuYWJsZSh0aGVuYWJsZSkge1xuICB2YXIgaW5kZXggPSB0aGVuYWJsZUluZGV4Q291bnRlciQxO1xuICB0aGVuYWJsZUluZGV4Q291bnRlciQxICs9IDE7XG4gIG51bGwgPT09IHRoZW5hYmxlU3RhdGUkMSAmJiAodGhlbmFibGVTdGF0ZSQxID0gW10pO1xuICByZXR1cm4gdHJhY2tVc2VkVGhlbmFibGUodGhlbmFibGVTdGF0ZSQxLCB0aGVuYWJsZSwgaW5kZXgpO1xufVxuZnVuY3Rpb24gY29lcmNlUmVmKHdvcmtJblByb2dyZXNzLCBlbGVtZW50KSB7XG4gIGVsZW1lbnQgPSBlbGVtZW50LnByb3BzLnJlZjtcbiAgd29ya0luUHJvZ3Jlc3MucmVmID0gdm9pZCAwICE9PSBlbGVtZW50ID8gZWxlbWVudCA6IG51bGw7XG59XG5mdW5jdGlvbiB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKSB7XG4gIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfTEVHQUNZX0VMRU1FTlRfVFlQRSlcbiAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDUyNSkpO1xuICByZXR1cm5GaWJlciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXdDaGlsZCk7XG4gIHRocm93IEVycm9yKFxuICAgIGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoXG4gICAgICAzMSxcbiAgICAgIFwiW29iamVjdCBPYmplY3RdXCIgPT09IHJldHVybkZpYmVyXG4gICAgICAgID8gXCJvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKG5ld0NoaWxkKS5qb2luKFwiLCBcIikgKyBcIn1cIlxuICAgICAgICA6IHJldHVybkZpYmVyXG4gICAgKVxuICApO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUxhenkobGF6eVR5cGUpIHtcbiAgdmFyIGluaXQgPSBsYXp5VHlwZS5faW5pdDtcbiAgcmV0dXJuIGluaXQobGF6eVR5cGUuX3BheWxvYWQpO1xufVxuZnVuY3Rpb24gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgZnVuY3Rpb24gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkVG9EZWxldGUpIHtcbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgdmFyIGRlbGV0aW9ucyA9IHJldHVybkZpYmVyLmRlbGV0aW9ucztcbiAgICAgIG51bGwgPT09IGRlbGV0aW9uc1xuICAgICAgICA/ICgocmV0dXJuRmliZXIuZGVsZXRpb25zID0gW2NoaWxkVG9EZWxldGVdKSwgKHJldHVybkZpYmVyLmZsYWdzIHw9IDE2KSlcbiAgICAgICAgOiBkZWxldGlvbnMucHVzaChjaGlsZFRvRGVsZXRlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKDsgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQ7IClcbiAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCksXG4gICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIG1hcFJlbWFpbmluZ0NoaWxkcmVuKGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgZm9yICh2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG5ldyBNYXAoKTsgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQ7IClcbiAgICAgIG51bGwgIT09IGN1cnJlbnRGaXJzdENoaWxkLmtleVxuICAgICAgICA/IGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGN1cnJlbnRGaXJzdENoaWxkLmtleSwgY3VycmVudEZpcnN0Q2hpbGQpXG4gICAgICAgIDogZXhpc3RpbmdDaGlsZHJlbi5zZXQoY3VycmVudEZpcnN0Q2hpbGQuaW5kZXgsIGN1cnJlbnRGaXJzdENoaWxkKSxcbiAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQuc2libGluZyk7XG4gICAgcmV0dXJuIGV4aXN0aW5nQ2hpbGRyZW47XG4gIH1cbiAgZnVuY3Rpb24gdXNlRmliZXIoZmliZXIsIHBlbmRpbmdQcm9wcykge1xuICAgIGZpYmVyID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoZmliZXIsIHBlbmRpbmdQcm9wcyk7XG4gICAgZmliZXIuaW5kZXggPSAwO1xuICAgIGZpYmVyLnNpYmxpbmcgPSBudWxsO1xuICAgIHJldHVybiBmaWJlcjtcbiAgfVxuICBmdW5jdGlvbiBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0luZGV4KSB7XG4gICAgbmV3RmliZXIuaW5kZXggPSBuZXdJbmRleDtcbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpXG4gICAgICByZXR1cm4gKG5ld0ZpYmVyLmZsYWdzIHw9IDEwNDg1NzYpLCBsYXN0UGxhY2VkSW5kZXg7XG4gICAgbmV3SW5kZXggPSBuZXdGaWJlci5hbHRlcm5hdGU7XG4gICAgaWYgKG51bGwgIT09IG5ld0luZGV4KVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKG5ld0luZGV4ID0gbmV3SW5kZXguaW5kZXgpLFxuICAgICAgICBuZXdJbmRleCA8IGxhc3RQbGFjZWRJbmRleFxuICAgICAgICAgID8gKChuZXdGaWJlci5mbGFncyB8PSAzMzU1NDQzNCksIGxhc3RQbGFjZWRJbmRleClcbiAgICAgICAgICA6IG5ld0luZGV4XG4gICAgICApO1xuICAgIG5ld0ZpYmVyLmZsYWdzIHw9IDMzNTU0NDM0O1xuICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gIH1cbiAgZnVuY3Rpb24gcGxhY2VTaW5nbGVDaGlsZChuZXdGaWJlcikge1xuICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgIG51bGwgPT09IG5ld0ZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgKG5ld0ZpYmVyLmZsYWdzIHw9IDMzNTU0NDM0KTtcbiAgICByZXR1cm4gbmV3RmliZXI7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgIGlmIChudWxsID09PSBjdXJyZW50IHx8IDYgIT09IGN1cnJlbnQudGFnKVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGN1cnJlbnQgPSBjcmVhdGVGaWJlckZyb21UZXh0KHRleHRDb250ZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcykpLFxuICAgICAgICAoY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgIGN1cnJlbnRcbiAgICAgICk7XG4gICAgY3VycmVudCA9IHVzZUZpYmVyKGN1cnJlbnQsIHRleHRDb250ZW50KTtcbiAgICBjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG4gIGZ1bmN0aW9uIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQsIGxhbmVzKSB7XG4gICAgdmFyIGVsZW1lbnRUeXBlID0gZWxlbWVudC50eXBlO1xuICAgIGlmIChlbGVtZW50VHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSlcbiAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGxhbmVzLFxuICAgICAgICBlbGVtZW50LmtleVxuICAgICAgKTtcbiAgICBpZiAoXG4gICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAoY3VycmVudC5lbGVtZW50VHlwZSA9PT0gZWxlbWVudFR5cGUgfHxcbiAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBlbGVtZW50VHlwZSAmJlxuICAgICAgICAgIG51bGwgIT09IGVsZW1lbnRUeXBlICYmXG4gICAgICAgICAgZWxlbWVudFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgIHJlc29sdmVMYXp5KGVsZW1lbnRUeXBlKSA9PT0gY3VycmVudC50eXBlKSlcbiAgICApXG4gICAgICByZXR1cm4gKFxuICAgICAgICAoY3VycmVudCA9IHVzZUZpYmVyKGN1cnJlbnQsIGVsZW1lbnQucHJvcHMpKSxcbiAgICAgICAgY29lcmNlUmVmKGN1cnJlbnQsIGVsZW1lbnQpLFxuICAgICAgICAoY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgIGN1cnJlbnRcbiAgICAgICk7XG4gICAgY3VycmVudCA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgIGVsZW1lbnQudHlwZSxcbiAgICAgIGVsZW1lbnQua2V5LFxuICAgICAgZWxlbWVudC5wcm9wcyxcbiAgICAgIG51bGwsXG4gICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgbGFuZXNcbiAgICApO1xuICAgIGNvZXJjZVJlZihjdXJyZW50LCBlbGVtZW50KTtcbiAgICBjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG4gIGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudCwgcG9ydGFsLCBsYW5lcykge1xuICAgIGlmIChcbiAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgIDQgIT09IGN1cnJlbnQudGFnIHx8XG4gICAgICBjdXJyZW50LnN0YXRlTm9kZS5jb250YWluZXJJbmZvICE9PSBwb3J0YWwuY29udGFpbmVySW5mbyB8fFxuICAgICAgY3VycmVudC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gIT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvblxuICAgIClcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChjdXJyZW50ID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpKSxcbiAgICAgICAgKGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICBjdXJyZW50XG4gICAgICApO1xuICAgIGN1cnJlbnQgPSB1c2VGaWJlcihjdXJyZW50LCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgIGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGZyYWdtZW50LCBsYW5lcywga2V5KSB7XG4gICAgaWYgKG51bGwgPT09IGN1cnJlbnQgfHwgNyAhPT0gY3VycmVudC50YWcpXG4gICAgICByZXR1cm4gKFxuICAgICAgICAoY3VycmVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgIGZyYWdtZW50LFxuICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgbGFuZXMsXG4gICAgICAgICAga2V5XG4gICAgICAgICkpLFxuICAgICAgICAoY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgIGN1cnJlbnRcbiAgICAgICk7XG4gICAgY3VycmVudCA9IHVzZUZpYmVyKGN1cnJlbnQsIGZyYWdtZW50KTtcbiAgICBjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAoXG4gICAgICAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIFwiXCIgIT09IG5ld0NoaWxkKSB8fFxuICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIG5ld0NoaWxkIHx8XG4gICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgbmV3Q2hpbGRcbiAgICApXG4gICAgICByZXR1cm4gKFxuICAgICAgICAobmV3Q2hpbGQgPSBjcmVhdGVGaWJlckZyb21UZXh0KFxuICAgICAgICAgIFwiXCIgKyBuZXdDaGlsZCxcbiAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICkpLFxuICAgICAgICAobmV3Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICBuZXdDaGlsZFxuICAgICAgKTtcbiAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIG51bGwgIT09IG5ld0NoaWxkKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobGFuZXMgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICAgICAgICAgIG5ld0NoaWxkLnR5cGUsXG4gICAgICAgICAgICAgIG5ld0NoaWxkLmtleSxcbiAgICAgICAgICAgICAgbmV3Q2hpbGQucHJvcHMsXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIGNvZXJjZVJlZihsYW5lcywgbmV3Q2hpbGQpLFxuICAgICAgICAgICAgKGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKG5ld0NoaWxkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKFxuICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKG5ld0NoaWxkLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIG5ld0NoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgdmFyIGluaXQgPSBuZXdDaGlsZC5faW5pdDtcbiAgICAgICAgICBuZXdDaGlsZCA9IGluaXQobmV3Q2hpbGQuX3BheWxvYWQpO1xuICAgICAgICAgIHJldHVybiBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5SW1wbChuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKG5ld0NoaWxkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApKSxcbiAgICAgICAgICAobmV3Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgIG5ld0NoaWxkXG4gICAgICAgICk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQudGhlbilcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCB1bndyYXBUaGVuYWJsZShuZXdDaGlsZCksIGxhbmVzKTtcbiAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKVxuICAgICAgICByZXR1cm4gY3JlYXRlQ2hpbGQoXG4gICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGlhdGlvbihyZXR1cm5GaWJlciwgbmV3Q2hpbGQpLFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICk7XG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIHZhciBrZXkgPSBudWxsICE9PSBvbGRGaWJlciA/IG9sZEZpYmVyLmtleSA6IG51bGw7XG4gICAgaWYgKFxuICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBcIlwiICE9PSBuZXdDaGlsZCkgfHxcbiAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBuZXdDaGlsZCB8fFxuICAgICAgXCJiaWdpbnRcIiA9PT0gdHlwZW9mIG5ld0NoaWxkXG4gICAgKVxuICAgICAgcmV0dXJuIG51bGwgIT09IGtleVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgb2xkRmliZXIsIFwiXCIgKyBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgbnVsbCAhPT0gbmV3Q2hpbGQpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIG5ld0NoaWxkLmtleSA9PT0ga2V5XG4gICAgICAgICAgICA/IHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIG5ld0NoaWxkLmtleSA9PT0ga2V5XG4gICAgICAgICAgICA/IHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcylcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChrZXkgPSBuZXdDaGlsZC5faW5pdCksXG4gICAgICAgICAgICAobmV3Q2hpbGQgPSBrZXkobmV3Q2hpbGQuX3BheWxvYWQpKSxcbiAgICAgICAgICAgIHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5SW1wbChuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpXG4gICAgICAgIHJldHVybiBudWxsICE9PSBrZXlcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzLCBudWxsKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZC50aGVuKVxuICAgICAgICByZXR1cm4gdXBkYXRlU2xvdChcbiAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICB1bndyYXBUaGVuYWJsZShuZXdDaGlsZCksXG4gICAgICAgICAgbGFuZXNcbiAgICAgICAgKTtcbiAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKVxuICAgICAgICByZXR1cm4gdXBkYXRlU2xvdChcbiAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsaWF0aW9uKHJldHVybkZpYmVyLCBuZXdDaGlsZCksXG4gICAgICAgICAgbGFuZXNcbiAgICAgICAgKTtcbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVGcm9tTWFwKFxuICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgcmV0dXJuRmliZXIsXG4gICAgbmV3SWR4LFxuICAgIG5ld0NoaWxkLFxuICAgIGxhbmVzXG4gICkge1xuICAgIGlmIChcbiAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgXCJcIiAhPT0gbmV3Q2hpbGQpIHx8XG4gICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgbmV3Q2hpbGQgfHxcbiAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBuZXdDaGlsZFxuICAgIClcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChleGlzdGluZ0NoaWxkcmVuID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsKSxcbiAgICAgICAgdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIGV4aXN0aW5nQ2hpbGRyZW4sIFwiXCIgKyBuZXdDaGlsZCwgbGFuZXMpXG4gICAgICApO1xuICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgbnVsbCAhPT0gbmV3Q2hpbGQpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChleGlzdGluZ0NoaWxkcmVuID1cbiAgICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5nZXQoXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gbmV3Q2hpbGQua2V5ID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5XG4gICAgICAgICAgICAgICkgfHwgbnVsbCksXG4gICAgICAgICAgICB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBleGlzdGluZ0NoaWxkcmVuLCBuZXdDaGlsZCwgbGFuZXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGV4aXN0aW5nQ2hpbGRyZW4gPVxuICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmdldChcbiAgICAgICAgICAgICAgICBudWxsID09PSBuZXdDaGlsZC5rZXkgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXlcbiAgICAgICAgICAgICAgKSB8fCBudWxsKSxcbiAgICAgICAgICAgIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgZXhpc3RpbmdDaGlsZHJlbiwgbmV3Q2hpbGQsIGxhbmVzKVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgIHZhciBpbml0ID0gbmV3Q2hpbGQuX2luaXQ7XG4gICAgICAgICAgbmV3Q2hpbGQgPSBpbml0KG5ld0NoaWxkLl9wYXlsb2FkKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXlJbXBsKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoZXhpc3RpbmdDaGlsZHJlbiA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbCksXG4gICAgICAgICAgdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGV4aXN0aW5nQ2hpbGRyZW4sIG5ld0NoaWxkLCBsYW5lcywgbnVsbClcbiAgICAgICAgKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZC50aGVuKVxuICAgICAgICByZXR1cm4gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICB1bndyYXBUaGVuYWJsZShuZXdDaGlsZCksXG4gICAgICAgICAgbGFuZXNcbiAgICAgICAgKTtcbiAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKVxuICAgICAgICByZXR1cm4gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsaWF0aW9uKHJldHVybkZpYmVyLCBuZXdDaGlsZCksXG4gICAgICAgICAgbGFuZXNcbiAgICAgICAgKTtcbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KFxuICAgIHJldHVybkZpYmVyLFxuICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgIG5ld0NoaWxkcmVuLFxuICAgIGxhbmVzXG4gICkge1xuICAgIGZvciAoXG4gICAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGwsXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBudWxsLFxuICAgICAgICBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdJZHggPSAoY3VycmVudEZpcnN0Q2hpbGQgPSAwKSxcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gbnVsbDtcbiAgICAgIG51bGwgIT09IG9sZEZpYmVyICYmIG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDtcbiAgICAgIG5ld0lkeCsrXG4gICAgKSB7XG4gICAgICBvbGRGaWJlci5pbmRleCA+IG5ld0lkeFxuICAgICAgICA/ICgobmV4dE9sZEZpYmVyID0gb2xkRmliZXIpLCAob2xkRmliZXIgPSBudWxsKSlcbiAgICAgICAgOiAobmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZyk7XG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgb2xkRmliZXIsXG4gICAgICAgIG5ld0NoaWxkcmVuW25ld0lkeF0sXG4gICAgICAgIGxhbmVzXG4gICAgICApO1xuICAgICAgaWYgKG51bGwgPT09IG5ld0ZpYmVyKSB7XG4gICAgICAgIG51bGwgPT09IG9sZEZpYmVyICYmIChvbGRGaWJlciA9IG5leHRPbGRGaWJlcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICBvbGRGaWJlciAmJlxuICAgICAgICBudWxsID09PSBuZXdGaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgIGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChuZXdGaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0lkeCk7XG4gICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgID8gKHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcilcbiAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXIpO1xuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuICAgIGlmIChuZXdJZHggPT09IG5ld0NoaWxkcmVuLmxlbmd0aClcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlciksXG4gICAgICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KSxcbiAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZFxuICAgICAgKTtcbiAgICBpZiAobnVsbCA9PT0gb2xkRmliZXIpIHtcbiAgICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKVxuICAgICAgICAob2xkRmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpKSxcbiAgICAgICAgICBudWxsICE9PSBvbGRGaWJlciAmJlxuICAgICAgICAgICAgKChjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQoXG4gICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgbmV3SWR4XG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzTmV3RmliZXJcbiAgICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IG9sZEZpYmVyKVxuICAgICAgICAgICAgICA6IChwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBvbGRGaWJlciksXG4gICAgICAgICAgICAocHJldmlvdXNOZXdGaWJlciA9IG9sZEZpYmVyKSk7XG4gICAgICBpc0h5ZHJhdGluZyAmJiBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG5ld0lkeCk7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG4gICAgZm9yIChcbiAgICAgIG9sZEZpYmVyID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ob2xkRmliZXIpO1xuICAgICAgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgbmV3SWR4KytcbiAgICApXG4gICAgICAobmV4dE9sZEZpYmVyID0gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgb2xkRmliZXIsXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICBuZXdJZHgsXG4gICAgICAgIG5ld0NoaWxkcmVuW25ld0lkeF0sXG4gICAgICAgIGxhbmVzXG4gICAgICApKSxcbiAgICAgICAgbnVsbCAhPT0gbmV4dE9sZEZpYmVyICYmXG4gICAgICAgICAgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICAgIG51bGwgIT09IG5leHRPbGRGaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgIG9sZEZpYmVyLmRlbGV0ZShcbiAgICAgICAgICAgICAgbnVsbCA9PT0gbmV4dE9sZEZpYmVyLmtleSA/IG5ld0lkeCA6IG5leHRPbGRGaWJlci5rZXlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChcbiAgICAgICAgICAgIG5leHRPbGRGaWJlcixcbiAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgbmV3SWR4XG4gICAgICAgICAgKSksXG4gICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5leHRPbGRGaWJlcilcbiAgICAgICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5leHRPbGRGaWJlciksXG4gICAgICAgICAgKHByZXZpb3VzTmV3RmliZXIgPSBuZXh0T2xkRmliZXIpKTtcbiAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICBvbGRGaWJlci5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KTtcbiAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgfVxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKFxuICAgIHJldHVybkZpYmVyLFxuICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgIG5ld0NoaWxkcmVuLFxuICAgIGxhbmVzXG4gICkge1xuICAgIGlmIChudWxsID09IG5ld0NoaWxkcmVuKSB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE1MSkpO1xuICAgIGZvciAoXG4gICAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGwsXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBudWxsLFxuICAgICAgICBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdJZHggPSAoY3VycmVudEZpcnN0Q2hpbGQgPSAwKSxcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gbnVsbCxcbiAgICAgICAgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKTtcbiAgICAgIG51bGwgIT09IG9sZEZpYmVyICYmICFzdGVwLmRvbmU7XG4gICAgICBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKVxuICAgICkge1xuICAgICAgb2xkRmliZXIuaW5kZXggPiBuZXdJZHhcbiAgICAgICAgPyAoKG5leHRPbGRGaWJlciA9IG9sZEZpYmVyKSwgKG9sZEZpYmVyID0gbnVsbCkpXG4gICAgICAgIDogKG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmcpO1xuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcbiAgICAgIGlmIChudWxsID09PSBuZXdGaWJlcikge1xuICAgICAgICBudWxsID09PSBvbGRGaWJlciAmJiAob2xkRmliZXIgPSBuZXh0T2xkRmliZXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgb2xkRmliZXIgJiZcbiAgICAgICAgbnVsbCA9PT0gbmV3RmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICBjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdJZHgpO1xuICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXIpXG4gICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyKTtcbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cbiAgICBpZiAoc3RlcC5kb25lKVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKSxcbiAgICAgICAgaXNIeWRyYXRpbmcgJiYgcHVzaFRyZWVGb3JrKHJldHVybkZpYmVyLCBuZXdJZHgpLFxuICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkXG4gICAgICApO1xuICAgIGlmIChudWxsID09PSBvbGRGaWJlcikge1xuICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKVxuICAgICAgICAoc3RlcCA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcykpLFxuICAgICAgICAgIG51bGwgIT09IHN0ZXAgJiZcbiAgICAgICAgICAgICgoY3VycmVudEZpcnN0Q2hpbGQgPSBwbGFjZUNoaWxkKHN0ZXAsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdJZHgpKSxcbiAgICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzTmV3RmliZXJcbiAgICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IHN0ZXApXG4gICAgICAgICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IHN0ZXApLFxuICAgICAgICAgICAgKHByZXZpb3VzTmV3RmliZXIgPSBzdGVwKSk7XG4gICAgICBpc0h5ZHJhdGluZyAmJiBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG5ld0lkeCk7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG4gICAgZm9yIChcbiAgICAgIG9sZEZpYmVyID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ob2xkRmliZXIpO1xuICAgICAgIXN0ZXAuZG9uZTtcbiAgICAgIG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpXG4gICAgKVxuICAgICAgKHN0ZXAgPSB1cGRhdGVGcm9tTWFwKG9sZEZpYmVyLCByZXR1cm5GaWJlciwgbmV3SWR4LCBzdGVwLnZhbHVlLCBsYW5lcykpLFxuICAgICAgICBudWxsICE9PSBzdGVwICYmXG4gICAgICAgICAgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICAgIG51bGwgIT09IHN0ZXAuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICBvbGRGaWJlci5kZWxldGUobnVsbCA9PT0gc3RlcC5rZXkgPyBuZXdJZHggOiBzdGVwLmtleSksXG4gICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChzdGVwLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3SWR4KSksXG4gICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IHN0ZXApXG4gICAgICAgICAgICA6IChwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBzdGVwKSxcbiAgICAgICAgICAocHJldmlvdXNOZXdGaWJlciA9IHN0ZXApKTtcbiAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICBvbGRGaWJlci5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KTtcbiAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgfVxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgcmV0dXJuRmliZXIsXG4gICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgbmV3Q2hpbGQsXG4gICAgbGFuZXNcbiAgKSB7XG4gICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmXG4gICAgICBudWxsICE9PSBuZXdDaGlsZCAmJlxuICAgICAgbmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSAmJlxuICAgICAgbnVsbCA9PT0gbmV3Q2hpbGQua2V5ICYmXG4gICAgICAobmV3Q2hpbGQgPSBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBudWxsICE9PSBuZXdDaGlsZCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgPSBuZXdDaGlsZC5rZXk7IG51bGwgIT09IGN1cnJlbnRGaXJzdENoaWxkOyApIHtcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaXJzdENoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgICAga2V5ID0gbmV3Q2hpbGQudHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoNyA9PT0gY3VycmVudEZpcnN0Q2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgbGFuZXMgPSB1c2VGaWJlcihcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlblxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBsYW5lcztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuZWxlbWVudFR5cGUgPT09IGtleSB8fFxuICAgICAgICAgICAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBrZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0ga2V5ICYmXG4gICAgICAgICAgICAgICAgICAgIGtleS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFICYmXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVMYXp5KGtleSkgPT09IGN1cnJlbnRGaXJzdENoaWxkLnR5cGUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmdcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBsYW5lcyA9IHVzZUZpYmVyKGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZC5wcm9wcyk7XG4gICAgICAgICAgICAgICAgICBjb2VyY2VSZWYobGFuZXMsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgICAgICAgIGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBsYW5lcztcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH0gZWxzZSBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFXG4gICAgICAgICAgICAgID8gKChsYW5lcyA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZC5rZXlcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IGxhbmVzKSlcbiAgICAgICAgICAgICAgOiAoKGxhbmVzID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQudHlwZSxcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLmtleSxcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLnByb3BzLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIGNvZXJjZVJlZihsYW5lcywgbmV3Q2hpbGQpLFxuICAgICAgICAgICAgICAgIChsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gbGFuZXMpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmV0dXJuRmliZXIpO1xuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIGZvciAoa2V5ID0gbmV3Q2hpbGQua2V5OyBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZDsgKSB7XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50Rmlyc3RDaGlsZC5rZXkgPT09IGtleSlcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICA0ID09PSBjdXJyZW50Rmlyc3RDaGlsZC50YWcgJiZcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvID09PVxuICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZC5jb250YWluZXJJbmZvICYmXG4gICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gPT09XG4gICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLmltcGxlbWVudGF0aW9uXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmdcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBsYW5lcyA9IHVzZUZpYmVyKGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICAgICAgICAgICAgICBsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyID0gbGFuZXM7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQuc2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhbmVzID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICAgICAgICBsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybkZpYmVyID0gbGFuZXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJldHVybkZpYmVyKTtcbiAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChrZXkgPSBuZXdDaGlsZC5faW5pdCksXG4gICAgICAgICAgICAobmV3Q2hpbGQgPSBrZXkobmV3Q2hpbGQuX3BheWxvYWQpKSxcbiAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXlJbXBsKG5ld0NoaWxkKSlcbiAgICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkoXG4gICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgbGFuZXNcbiAgICAgICAgKTtcbiAgICAgIGlmIChnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICBrZXkgPSBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKTtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGtleSkgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNTApKTtcbiAgICAgICAgbmV3Q2hpbGQgPSBrZXkuY2FsbChuZXdDaGlsZCk7XG4gICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQudGhlbilcbiAgICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChcbiAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICB1bndyYXBUaGVuYWJsZShuZXdDaGlsZCksXG4gICAgICAgICAgbGFuZXNcbiAgICAgICAgKTtcbiAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKVxuICAgICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxpYXRpb24ocmV0dXJuRmliZXIsIG5ld0NoaWxkKSxcbiAgICAgICAgICBsYW5lc1xuICAgICAgICApO1xuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuICAgIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIFwiXCIgIT09IG5ld0NoaWxkKSB8fFxuICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIG5ld0NoaWxkIHx8XG4gICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgbmV3Q2hpbGRcbiAgICAgID8gKChuZXdDaGlsZCA9IFwiXCIgKyBuZXdDaGlsZCksXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnRGaXJzdENoaWxkICYmIDYgPT09IGN1cnJlbnRGaXJzdENoaWxkLnRhZ1xuICAgICAgICAgID8gKGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nKSxcbiAgICAgICAgICAgIChsYW5lcyA9IHVzZUZpYmVyKGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCkpLFxuICAgICAgICAgICAgKGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IGxhbmVzKSlcbiAgICAgICAgICA6IChkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpLFxuICAgICAgICAgICAgKGxhbmVzID0gY3JlYXRlRmliZXJGcm9tVGV4dChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpKSxcbiAgICAgICAgICAgIChsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSBsYW5lcykpLFxuICAgICAgICBwbGFjZVNpbmdsZUNoaWxkKHJldHVybkZpYmVyKSlcbiAgICAgIDogZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgPSAwO1xuICAgICAgdmFyIGZpcnN0Q2hpbGRGaWJlciA9IHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgbGFuZXNcbiAgICAgICk7XG4gICAgICB0aGVuYWJsZVN0YXRlJDEgPSBudWxsO1xuICAgICAgcmV0dXJuIGZpcnN0Q2hpbGRGaWJlcjtcbiAgICB9IGNhdGNoICh4KSB7XG4gICAgICBpZiAoeCA9PT0gU3VzcGVuc2VFeGNlcHRpb24pIHRocm93IHg7XG4gICAgICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlckltcGxDbGFzcygyOSwgeCwgbnVsbCwgcmV0dXJuRmliZXIubW9kZSk7XG4gICAgICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICAgICAgZmliZXIucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZmliZXI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICB9XG4gIH07XG59XG52YXIgcmVjb25jaWxlQ2hpbGRGaWJlcnMgPSBjcmVhdGVDaGlsZFJlY29uY2lsZXIoITApLFxuICBtb3VudENoaWxkRmliZXJzID0gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKCExKSxcbiAgY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgcHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKDApO1xuZnVuY3Rpb24gcHVzaEhpZGRlbkNvbnRleHQoZmliZXIsIGNvbnRleHQpIHtcbiAgZmliZXIgPSBlbnRhbmdsZWRSZW5kZXJMYW5lcztcbiAgcHVzaChwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IsIGZpYmVyKTtcbiAgcHVzaChjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLCBjb250ZXh0KTtcbiAgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSBmaWJlciB8IGNvbnRleHQuYmFzZUxhbmVzO1xufVxuZnVuY3Rpb24gcmV1c2VIaWRkZW5Db250ZXh0T25TdGFjaygpIHtcbiAgcHVzaChwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IsIGVudGFuZ2xlZFJlbmRlckxhbmVzKTtcbiAgcHVzaChjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLCBjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xufVxuZnVuY3Rpb24gcG9wSGlkZGVuQ29udGV4dCgpIHtcbiAgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSBwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IuY3VycmVudDtcbiAgcG9wKGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IpO1xuICBwb3AocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yKTtcbn1cbnZhciBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgc2hlbGxCb3VuZGFyeSA9IG51bGw7XG5mdW5jdGlvbiBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIoaGFuZGxlcikge1xuICB2YXIgY3VycmVudCA9IGhhbmRsZXIuYWx0ZXJuYXRlO1xuICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCAmIDEpO1xuICBwdXNoKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBoYW5kbGVyKTtcbiAgbnVsbCA9PT0gc2hlbGxCb3VuZGFyeSAmJlxuICAgIChudWxsID09PSBjdXJyZW50IHx8IG51bGwgIT09IGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IuY3VycmVudFxuICAgICAgPyAoc2hlbGxCb3VuZGFyeSA9IGhhbmRsZXIpXG4gICAgICA6IG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJiAoc2hlbGxCb3VuZGFyeSA9IGhhbmRsZXIpKTtcbn1cbmZ1bmN0aW9uIHB1c2hPZmZzY3JlZW5TdXNwZW5zZUhhbmRsZXIoZmliZXIpIHtcbiAgaWYgKDIyID09PSBmaWJlci50YWcpIHtcbiAgICBpZiAoXG4gICAgICAocHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpLFxuICAgICAgcHVzaChzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvciwgZmliZXIpLFxuICAgICAgbnVsbCA9PT0gc2hlbGxCb3VuZGFyeSlcbiAgICApIHtcbiAgICAgIHZhciBjdXJyZW50ID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgKHNoZWxsQm91bmRhcnkgPSBmaWJlcik7XG4gICAgfVxuICB9IGVsc2UgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKGZpYmVyKTtcbn1cbmZ1bmN0aW9uIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjaygpIHtcbiAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICBwdXNoKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50KTtcbn1cbmZ1bmN0aW9uIHBvcFN1c3BlbnNlSGFuZGxlcihmaWJlcikge1xuICBwb3Aoc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IpO1xuICBzaGVsbEJvdW5kYXJ5ID09PSBmaWJlciAmJiAoc2hlbGxCb3VuZGFyeSA9IG51bGwpO1xuICBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvcik7XG59XG52YXIgc3VzcGVuc2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcigwKTtcbmZ1bmN0aW9uIGZpbmRGaXJzdFN1c3BlbmRlZChyb3cpIHtcbiAgZm9yICh2YXIgbm9kZSA9IHJvdzsgbnVsbCAhPT0gbm9kZTsgKSB7XG4gICAgaWYgKDEzID09PSBub2RlLnRhZykge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSBzdGF0ZSAmJlxuICAgICAgICAoKHN0YXRlID0gc3RhdGUuZGVoeWRyYXRlZCksXG4gICAgICAgIG51bGwgPT09IHN0YXRlIHx8IFwiJD9cIiA9PT0gc3RhdGUuZGF0YSB8fCBcIiQhXCIgPT09IHN0YXRlLmRhdGEpXG4gICAgICApXG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0gZWxzZSBpZiAoMTkgPT09IG5vZGUudGFnICYmIHZvaWQgMCAhPT0gbm9kZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyKSB7XG4gICAgICBpZiAoMCAhPT0gKG5vZGUuZmxhZ3MgJiAxMjgpKSByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKG51bGwgIT09IG5vZGUuY2hpbGQpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChub2RlID09PSByb3cpIGJyZWFrO1xuICAgIGZvciAoOyBudWxsID09PSBub2RlLnNpYmxpbmc7ICkge1xuICAgICAgaWYgKG51bGwgPT09IG5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSByb3cpIHJldHVybiBudWxsO1xuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbnZhciBBYm9ydENvbnRyb2xsZXJMb2NhbCA9XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIEFib3J0Q29udHJvbGxlclxuICAgICAgPyBBYm9ydENvbnRyb2xsZXJcbiAgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXSxcbiAgICAgICAgICAgIHNpZ25hbCA9ICh0aGlzLnNpZ25hbCA9IHtcbiAgICAgICAgICAgICAgYWJvcnRlZDogITEsXG4gICAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNpZ25hbC5hYm9ydGVkID0gITA7XG4gICAgICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGxpc3RlbmVyKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICBzY2hlZHVsZUNhbGxiYWNrJDIgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxcbiAgTm9ybWFsUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksXG4gIENhY2hlQ29udGV4dCA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfQ09OVEVYVF9UWVBFLFxuICAgIENvbnN1bWVyOiBudWxsLFxuICAgIFByb3ZpZGVyOiBudWxsLFxuICAgIF9jdXJyZW50VmFsdWU6IG51bGwsXG4gICAgX2N1cnJlbnRWYWx1ZTI6IG51bGwsXG4gICAgX3RocmVhZENvdW50OiAwXG4gIH07XG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBjb250cm9sbGVyOiBuZXcgQWJvcnRDb250cm9sbGVyTG9jYWwoKSxcbiAgICBkYXRhOiBuZXcgTWFwKCksXG4gICAgcmVmQ291bnQ6IDBcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlbGVhc2VDYWNoZShjYWNoZSkge1xuICBjYWNoZS5yZWZDb3VudC0tO1xuICAwID09PSBjYWNoZS5yZWZDb3VudCAmJlxuICAgIHNjaGVkdWxlQ2FsbGJhY2skMihOb3JtYWxQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgY2FjaGUuY29udHJvbGxlci5hYm9ydCgpO1xuICAgIH0pO1xufVxudmFyIGN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnMgPSBudWxsLFxuICBjdXJyZW50RW50YW5nbGVkUGVuZGluZ0NvdW50ID0gMCxcbiAgY3VycmVudEVudGFuZ2xlZExhbmUgPSAwLFxuICBjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGUgPSBudWxsO1xuZnVuY3Rpb24gZW50YW5nbGVBc3luY0FjdGlvbih0cmFuc2l0aW9uLCB0aGVuYWJsZSkge1xuICBpZiAobnVsbCA9PT0gY3VycmVudEVudGFuZ2xlZExpc3RlbmVycykge1xuICAgIHZhciBlbnRhbmdsZWRMaXN0ZW5lcnMgPSAoY3VycmVudEVudGFuZ2xlZExpc3RlbmVycyA9IFtdKTtcbiAgICBjdXJyZW50RW50YW5nbGVkUGVuZGluZ0NvdW50ID0gMDtcbiAgICBjdXJyZW50RW50YW5nbGVkTGFuZSA9IHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpO1xuICAgIGN1cnJlbnRFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSA9IHtcbiAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICB2YWx1ZTogdm9pZCAwLFxuICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgZW50YW5nbGVkTGlzdGVuZXJzLnB1c2gocmVzb2x2ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBjdXJyZW50RW50YW5nbGVkUGVuZGluZ0NvdW50Kys7XG4gIHRoZW5hYmxlLnRoZW4ocGluZ0VuZ3RhbmdsZWRBY3Rpb25TY29wZSwgcGluZ0VuZ3RhbmdsZWRBY3Rpb25TY29wZSk7XG4gIHJldHVybiB0aGVuYWJsZTtcbn1cbmZ1bmN0aW9uIHBpbmdFbmd0YW5nbGVkQWN0aW9uU2NvcGUoKSB7XG4gIGlmIChcbiAgICAwID09PSAtLWN1cnJlbnRFbnRhbmdsZWRQZW5kaW5nQ291bnQgJiZcbiAgICBudWxsICE9PSBjdXJyZW50RW50YW5nbGVkTGlzdGVuZXJzXG4gICkge1xuICAgIG51bGwgIT09IGN1cnJlbnRFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSAmJlxuICAgICAgKGN1cnJlbnRFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiKTtcbiAgICB2YXIgbGlzdGVuZXJzID0gY3VycmVudEVudGFuZ2xlZExpc3RlbmVycztcbiAgICBjdXJyZW50RW50YW5nbGVkTGlzdGVuZXJzID0gbnVsbDtcbiAgICBjdXJyZW50RW50YW5nbGVkTGFuZSA9IDA7XG4gICAgY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlID0gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykgKDAsIGxpc3RlbmVyc1tpXSkoKTtcbiAgfVxufVxuZnVuY3Rpb24gY2hhaW5UaGVuYWJsZVZhbHVlKHRoZW5hYmxlLCByZXN1bHQpIHtcbiAgdmFyIGxpc3RlbmVycyA9IFtdLFxuICAgIHRoZW5hYmxlV2l0aE92ZXJyaWRlID0ge1xuICAgICAgc3RhdHVzOiBcInBlbmRpbmdcIixcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgcmVhc29uOiBudWxsLFxuICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2gocmVzb2x2ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgdGhlbmFibGUudGhlbihcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuYWJsZVdpdGhPdmVycmlkZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiO1xuICAgICAgdGhlbmFibGVXaXRoT3ZlcnJpZGUudmFsdWUgPSByZXN1bHQ7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykgKDAsIGxpc3RlbmVyc1tpXSkocmVzdWx0KTtcbiAgICB9LFxuICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgdGhlbmFibGVXaXRoT3ZlcnJpZGUuc3RhdHVzID0gXCJyZWplY3RlZFwiO1xuICAgICAgdGhlbmFibGVXaXRoT3ZlcnJpZGUucmVhc29uID0gZXJyb3I7XG4gICAgICBmb3IgKGVycm9yID0gMDsgZXJyb3IgPCBsaXN0ZW5lcnMubGVuZ3RoOyBlcnJvcisrKVxuICAgICAgICAoMCwgbGlzdGVuZXJzW2Vycm9yXSkodm9pZCAwKTtcbiAgICB9XG4gICk7XG4gIHJldHVybiB0aGVuYWJsZVdpdGhPdmVycmlkZTtcbn1cbnZhciBwcmV2T25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuUmVhY3RTaGFyZWRJbnRlcm5hbHMuUyA9IGZ1bmN0aW9uICh0cmFuc2l0aW9uLCByZXR1cm5WYWx1ZSkge1xuICBcIm9iamVjdFwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUgJiZcbiAgICBudWxsICE9PSByZXR1cm5WYWx1ZSAmJlxuICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlLnRoZW4gJiZcbiAgICBlbnRhbmdsZUFzeW5jQWN0aW9uKHRyYW5zaXRpb24sIHJldHVyblZhbHVlKTtcbiAgbnVsbCAhPT0gcHJldk9uU3RhcnRUcmFuc2l0aW9uRmluaXNoICYmXG4gICAgcHJldk9uU3RhcnRUcmFuc2l0aW9uRmluaXNoKHRyYW5zaXRpb24sIHJldHVyblZhbHVlKTtcbn07XG52YXIgcmVzdW1lZENhY2hlID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xuZnVuY3Rpb24gcGVla0NhY2hlRnJvbVBvb2woKSB7XG4gIHZhciBjYWNoZVJlc3VtZWRGcm9tUHJldmlvdXNSZW5kZXIgPSByZXN1bWVkQ2FjaGUuY3VycmVudDtcbiAgcmV0dXJuIG51bGwgIT09IGNhY2hlUmVzdW1lZEZyb21QcmV2aW91c1JlbmRlclxuICAgID8gY2FjaGVSZXN1bWVkRnJvbVByZXZpb3VzUmVuZGVyXG4gICAgOiB3b3JrSW5Qcm9ncmVzc1Jvb3QucG9vbGVkQ2FjaGU7XG59XG5mdW5jdGlvbiBwdXNoVHJhbnNpdGlvbihvZmZzY3JlZW5Xb3JrSW5Qcm9ncmVzcywgcHJldkNhY2hlUG9vbCkge1xuICBudWxsID09PSBwcmV2Q2FjaGVQb29sXG4gICAgPyBwdXNoKHJlc3VtZWRDYWNoZSwgcmVzdW1lZENhY2hlLmN1cnJlbnQpXG4gICAgOiBwdXNoKHJlc3VtZWRDYWNoZSwgcHJldkNhY2hlUG9vbC5wb29sKTtcbn1cbmZ1bmN0aW9uIGdldFN1c3BlbmRlZENhY2hlKCkge1xuICB2YXIgY2FjaGVGcm9tUG9vbCA9IHBlZWtDYWNoZUZyb21Qb29sKCk7XG4gIHJldHVybiBudWxsID09PSBjYWNoZUZyb21Qb29sXG4gICAgPyBudWxsXG4gICAgOiB7IHBhcmVudDogQ2FjaGVDb250ZXh0Ll9jdXJyZW50VmFsdWUsIHBvb2w6IGNhY2hlRnJvbVBvb2wgfTtcbn1cbnZhciByZW5kZXJMYW5lcyA9IDAsXG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsLFxuICBjdXJyZW50SG9vayA9IG51bGwsXG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGwsXG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSAhMSxcbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gITEsXG4gIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWID0gITEsXG4gIGxvY2FsSWRDb3VudGVyID0gMCxcbiAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwLFxuICB0aGVuYWJsZVN0YXRlID0gbnVsbCxcbiAgZ2xvYmFsQ2xpZW50SWRDb3VudGVyID0gMDtcbmZ1bmN0aW9uIHRocm93SW52YWxpZEhvb2tFcnJvcigpIHtcbiAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzMjEpKTtcbn1cbmZ1bmN0aW9uIGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpIHtcbiAgaWYgKG51bGwgPT09IHByZXZEZXBzKSByZXR1cm4gITE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldkRlcHMubGVuZ3RoICYmIGkgPCBuZXh0RGVwcy5sZW5ndGg7IGkrKylcbiAgICBpZiAoIW9iamVjdElzKG5leHREZXBzW2ldLCBwcmV2RGVwc1tpXSkpIHJldHVybiAhMTtcbiAgcmV0dXJuICEwO1xufVxuZnVuY3Rpb24gcmVuZGVyV2l0aEhvb2tzKFxuICBjdXJyZW50LFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgQ29tcG9uZW50LFxuICBwcm9wcyxcbiAgc2Vjb25kQXJnLFxuICBuZXh0UmVuZGVyTGFuZXNcbikge1xuICByZW5kZXJMYW5lcyA9IG5leHRSZW5kZXJMYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IHdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDA7XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPVxuICAgIG51bGwgPT09IGN1cnJlbnQgfHwgbnVsbCA9PT0gY3VycmVudC5tZW1vaXplZFN0YXRlXG4gICAgICA/IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRcbiAgICAgIDogSG9va3NEaXNwYXRjaGVyT25VcGRhdGU7XG4gIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWID0gITE7XG4gIG5leHRSZW5kZXJMYW5lcyA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTtcbiAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgPSAhMTtcbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzICYmXG4gICAgKG5leHRSZW5kZXJMYW5lcyA9IHJlbmRlcldpdGhIb29rc0FnYWluKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBwcm9wcyxcbiAgICAgIHNlY29uZEFyZ1xuICAgICkpO1xuICBmaW5pc2hSZW5kZXJpbmdIb29rcyhjdXJyZW50KTtcbiAgcmV0dXJuIG5leHRSZW5kZXJMYW5lcztcbn1cbmZ1bmN0aW9uIGZpbmlzaFJlbmRlcmluZ0hvb2tzKGN1cnJlbnQpIHtcbiAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgdmFyIGRpZFJlbmRlclRvb0Zld0hvb2tzID0gbnVsbCAhPT0gY3VycmVudEhvb2sgJiYgbnVsbCAhPT0gY3VycmVudEhvb2submV4dDtcbiAgcmVuZGVyTGFuZXMgPSAwO1xuICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBjdXJyZW50SG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gITE7XG4gIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMDtcbiAgdGhlbmFibGVTdGF0ZSA9IG51bGw7XG4gIGlmIChkaWRSZW5kZXJUb29GZXdIb29rcykgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzMDApKTtcbiAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgIGRpZFJlY2VpdmVVcGRhdGUgfHxcbiAgICAoKGN1cnJlbnQgPSBjdXJyZW50LmRlcGVuZGVuY2llcyksXG4gICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgY2hlY2tJZkNvbnRleHRDaGFuZ2VkKGN1cnJlbnQpICYmXG4gICAgICAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKSk7XG59XG5mdW5jdGlvbiByZW5kZXJXaXRoSG9va3NBZ2Fpbih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnKSB7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcbiAgdmFyIG51bWJlck9mUmVSZW5kZXJzID0gMDtcbiAgZG8ge1xuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyAmJiAodGhlbmFibGVTdGF0ZSA9IG51bGwpO1xuICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMDtcbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSAhMTtcbiAgICBpZiAoMjUgPD0gbnVtYmVyT2ZSZVJlbmRlcnMpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMzAxKSk7XG4gICAgbnVtYmVyT2ZSZVJlbmRlcnMgKz0gMTtcbiAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBjdXJyZW50SG9vayA9IG51bGw7XG4gICAgaWYgKG51bGwgIT0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgICAgY2hpbGRyZW4ubGFzdEVmZmVjdCA9IG51bGw7XG4gICAgICBjaGlsZHJlbi5ldmVudHMgPSBudWxsO1xuICAgICAgY2hpbGRyZW4uc3RvcmVzID0gbnVsbDtcbiAgICAgIG51bGwgIT0gY2hpbGRyZW4ubWVtb0NhY2hlICYmIChjaGlsZHJlbi5tZW1vQ2FjaGUuaW5kZXggPSAwKTtcbiAgICB9XG4gICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXI7XG4gICAgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7XG4gIH0gd2hpbGUgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn1cbmZ1bmN0aW9uIFRyYW5zaXRpb25Bd2FyZUhvc3RDb21wb25lbnQoKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCxcbiAgICBtYXliZVRoZW5hYmxlID0gZGlzcGF0Y2hlci51c2VTdGF0ZSgpWzBdO1xuICBtYXliZVRoZW5hYmxlID1cbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBtYXliZVRoZW5hYmxlLnRoZW5cbiAgICAgID8gdXNlVGhlbmFibGUobWF5YmVUaGVuYWJsZSlcbiAgICAgIDogbWF5YmVUaGVuYWJsZTtcbiAgZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXIudXNlU3RhdGUoKVswXTtcbiAgKG51bGwgIT09IGN1cnJlbnRIb29rID8gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSA6IG51bGwpICE9PSBkaXNwYXRjaGVyICYmXG4gICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gMTAyNCk7XG4gIHJldHVybiBtYXliZVRoZW5hYmxlO1xufVxuZnVuY3Rpb24gY2hlY2tEaWRSZW5kZXJJZEhvb2soKSB7XG4gIHZhciBkaWRSZW5kZXJJZEhvb2sgPSAwICE9PSBsb2NhbElkQ291bnRlcjtcbiAgbG9jYWxJZENvdW50ZXIgPSAwO1xuICByZXR1cm4gZGlkUmVuZGVySWRIb29rO1xufVxuZnVuY3Rpb24gYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0yMDUzO1xuICBjdXJyZW50LmxhbmVzICY9IH5sYW5lcztcbn1cbmZ1bmN0aW9uIHJlc2V0SG9va3NPblVud2luZCh3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSkge1xuICAgIGZvciAoXG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcztcblxuICAgICkge1xuICAgICAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MucXVldWU7XG4gICAgICBudWxsICE9PSBxdWV1ZSAmJiAocXVldWUucGVuZGluZyA9IG51bGwpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5uZXh0O1xuICAgIH1cbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gITE7XG4gIH1cbiAgcmVuZGVyTGFuZXMgPSAwO1xuICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBjdXJyZW50SG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSAhMTtcbiAgdGhlbmFibGVJbmRleENvdW50ZXIgPSBsb2NhbElkQ291bnRlciA9IDA7XG4gIHRoZW5hYmxlU3RhdGUgPSBudWxsO1xufVxuZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gIHZhciBob29rID0ge1xuICAgIG1lbW9pemVkU3RhdGU6IG51bGwsXG4gICAgYmFzZVN0YXRlOiBudWxsLFxuICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICBxdWV1ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIG51bGwgPT09IHdvcmtJblByb2dyZXNzSG9va1xuICAgID8gKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9IGhvb2spXG4gICAgOiAod29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBob29rKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbn1cbmZ1bmN0aW9uIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgaWYgKG51bGwgPT09IGN1cnJlbnRIb29rKSB7XG4gICAgdmFyIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlO1xuICAgIG5leHRDdXJyZW50SG9vayA9XG4gICAgICBudWxsICE9PSBuZXh0Q3VycmVudEhvb2sgPyBuZXh0Q3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSA6IG51bGw7XG4gIH0gZWxzZSBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50SG9vay5uZXh0O1xuICB2YXIgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9XG4gICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NIb29rXG4gICAgICA/IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZVxuICAgICAgOiB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgaWYgKG51bGwgIT09IG5leHRXb3JrSW5Qcm9ncmVzc0hvb2spXG4gICAgKHdvcmtJblByb2dyZXNzSG9vayA9IG5leHRXb3JrSW5Qcm9ncmVzc0hvb2spLFxuICAgICAgKGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rKTtcbiAgZWxzZSB7XG4gICAgaWYgKG51bGwgPT09IG5leHRDdXJyZW50SG9vaykge1xuICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlKVxuICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQ2NykpO1xuICAgICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzMTApKTtcbiAgICB9XG4gICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG4gICAgbmV4dEN1cnJlbnRIb29rID0ge1xuICAgICAgbWVtb2l6ZWRTdGF0ZTogY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudEhvb2suYmFzZVN0YXRlLFxuICAgICAgYmFzZVF1ZXVlOiBjdXJyZW50SG9vay5iYXNlUXVldWUsXG4gICAgICBxdWV1ZTogY3VycmVudEhvb2sucXVldWUsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcbiAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc0hvb2tcbiAgICAgID8gKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9XG4gICAgICAgICAgbmV4dEN1cnJlbnRIb29rKVxuICAgICAgOiAod29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBuZXh0Q3VycmVudEhvb2spO1xuICB9XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG52YXIgY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZTtcbmNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7IGxhc3RFZmZlY3Q6IG51bGwsIGV2ZW50czogbnVsbCwgc3RvcmVzOiBudWxsLCBtZW1vQ2FjaGU6IG51bGwgfTtcbn07XG5mdW5jdGlvbiB1c2VUaGVuYWJsZSh0aGVuYWJsZSkge1xuICB2YXIgaW5kZXggPSB0aGVuYWJsZUluZGV4Q291bnRlcjtcbiAgdGhlbmFibGVJbmRleENvdW50ZXIgKz0gMTtcbiAgbnVsbCA9PT0gdGhlbmFibGVTdGF0ZSAmJiAodGhlbmFibGVTdGF0ZSA9IFtdKTtcbiAgdGhlbmFibGUgPSB0cmFja1VzZWRUaGVuYWJsZSh0aGVuYWJsZVN0YXRlLCB0aGVuYWJsZSwgaW5kZXgpO1xuICBpbmRleCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG4gIG51bGwgPT09XG4gICAgKG51bGwgPT09IHdvcmtJblByb2dyZXNzSG9va1xuICAgICAgPyBpbmRleC5tZW1vaXplZFN0YXRlXG4gICAgICA6IHdvcmtJblByb2dyZXNzSG9vay5uZXh0KSAmJlxuICAgICgoaW5kZXggPSBpbmRleC5hbHRlcm5hdGUpLFxuICAgIChSZWFjdFNoYXJlZEludGVybmFscy5IID1cbiAgICAgIG51bGwgPT09IGluZGV4IHx8IG51bGwgPT09IGluZGV4Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgPyBIb29rc0Rpc3BhdGNoZXJPbk1vdW50XG4gICAgICAgIDogSG9va3NEaXNwYXRjaGVyT25VcGRhdGUpKTtcbiAgcmV0dXJuIHRoZW5hYmxlO1xufVxuZnVuY3Rpb24gdXNlKHVzYWJsZSkge1xuICBpZiAobnVsbCAhPT0gdXNhYmxlICYmIFwib2JqZWN0XCIgPT09IHR5cGVvZiB1c2FibGUpIHtcbiAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdXNhYmxlLnRoZW4pIHJldHVybiB1c2VUaGVuYWJsZSh1c2FibGUpO1xuICAgIGlmICh1c2FibGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSkgcmV0dXJuIHJlYWRDb250ZXh0KHVzYWJsZSk7XG4gIH1cbiAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg0MzgsIFN0cmluZyh1c2FibGUpKSk7XG59XG5mdW5jdGlvbiB1c2VNZW1vQ2FjaGUoc2l6ZSkge1xuICB2YXIgbWVtb0NhY2hlID0gbnVsbCxcbiAgICB1cGRhdGVRdWV1ZSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWU7XG4gIG51bGwgIT09IHVwZGF0ZVF1ZXVlICYmIChtZW1vQ2FjaGUgPSB1cGRhdGVRdWV1ZS5tZW1vQ2FjaGUpO1xuICBpZiAobnVsbCA9PSBtZW1vQ2FjaGUpIHtcbiAgICB2YXIgY3VycmVudCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlO1xuICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICgoY3VycmVudCA9IGN1cnJlbnQudXBkYXRlUXVldWUpLFxuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAoKGN1cnJlbnQgPSBjdXJyZW50Lm1lbW9DYWNoZSksXG4gICAgICAgIG51bGwgIT0gY3VycmVudCAmJlxuICAgICAgICAgIChtZW1vQ2FjaGUgPSB7XG4gICAgICAgICAgICBkYXRhOiBjdXJyZW50LmRhdGEubWFwKGZ1bmN0aW9uIChhcnJheSkge1xuICAgICAgICAgICAgICByZXR1cm4gYXJyYXkuc2xpY2UoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgaW5kZXg6IDBcbiAgICAgICAgICB9KSkpO1xuICB9XG4gIG51bGwgPT0gbWVtb0NhY2hlICYmIChtZW1vQ2FjaGUgPSB7IGRhdGE6IFtdLCBpbmRleDogMCB9KTtcbiAgbnVsbCA9PT0gdXBkYXRlUXVldWUgJiZcbiAgICAoKHVwZGF0ZVF1ZXVlID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpKSxcbiAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlKSk7XG4gIHVwZGF0ZVF1ZXVlLm1lbW9DYWNoZSA9IG1lbW9DYWNoZTtcbiAgdXBkYXRlUXVldWUgPSBtZW1vQ2FjaGUuZGF0YVttZW1vQ2FjaGUuaW5kZXhdO1xuICBpZiAodm9pZCAwID09PSB1cGRhdGVRdWV1ZSlcbiAgICBmb3IgKFxuICAgICAgdXBkYXRlUXVldWUgPSBtZW1vQ2FjaGUuZGF0YVttZW1vQ2FjaGUuaW5kZXhdID0gQXJyYXkoc2l6ZSksIGN1cnJlbnQgPSAwO1xuICAgICAgY3VycmVudCA8IHNpemU7XG4gICAgICBjdXJyZW50KytcbiAgICApXG4gICAgICB1cGRhdGVRdWV1ZVtjdXJyZW50XSA9IFJFQUNUX01FTU9fQ0FDSEVfU0VOVElORUw7XG4gIG1lbW9DYWNoZS5pbmRleCsrO1xuICByZXR1cm4gdXBkYXRlUXVldWU7XG59XG5mdW5jdGlvbiBiYXNpY1N0YXRlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhY3Rpb24gPyBhY3Rpb24oc3RhdGUpIDogYWN0aW9uO1xufVxuZnVuY3Rpb24gdXBkYXRlUmVkdWNlcihyZWR1Y2VyKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHJldHVybiB1cGRhdGVSZWR1Y2VySW1wbChob29rLCBjdXJyZW50SG9vaywgcmVkdWNlcik7XG59XG5mdW5jdGlvbiB1cGRhdGVSZWR1Y2VySW1wbChob29rLCBjdXJyZW50LCByZWR1Y2VyKSB7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG4gIGlmIChudWxsID09PSBxdWV1ZSkgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzMTEpKTtcbiAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7XG4gIHZhciBiYXNlUXVldWUgPSBob29rLmJhc2VRdWV1ZSxcbiAgICBwZW5kaW5nUXVldWUgPSBxdWV1ZS5wZW5kaW5nO1xuICBpZiAobnVsbCAhPT0gcGVuZGluZ1F1ZXVlKSB7XG4gICAgaWYgKG51bGwgIT09IGJhc2VRdWV1ZSkge1xuICAgICAgdmFyIGJhc2VGaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgICAgYmFzZVF1ZXVlLm5leHQgPSBwZW5kaW5nUXVldWUubmV4dDtcbiAgICAgIHBlbmRpbmdRdWV1ZS5uZXh0ID0gYmFzZUZpcnN0O1xuICAgIH1cbiAgICBjdXJyZW50LmJhc2VRdWV1ZSA9IGJhc2VRdWV1ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgfVxuICBwZW5kaW5nUXVldWUgPSBob29rLmJhc2VTdGF0ZTtcbiAgaWYgKG51bGwgPT09IGJhc2VRdWV1ZSkgaG9vay5tZW1vaXplZFN0YXRlID0gcGVuZGluZ1F1ZXVlO1xuICBlbHNlIHtcbiAgICBjdXJyZW50ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgdmFyIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gKGJhc2VGaXJzdCA9IG51bGwpLFxuICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG51bGwsXG4gICAgICB1cGRhdGUgPSBjdXJyZW50LFxuICAgICAgZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiQ1NCA9ICExO1xuICAgIGRvIHtcbiAgICAgIHZhciB1cGRhdGVMYW5lID0gdXBkYXRlLmxhbmUgJiAtNTM2ODcwOTEzO1xuICAgICAgaWYgKFxuICAgICAgICB1cGRhdGVMYW5lICE9PSB1cGRhdGUubGFuZVxuICAgICAgICAgID8gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgdXBkYXRlTGFuZSkgPT09IHVwZGF0ZUxhbmVcbiAgICAgICAgICA6IChyZW5kZXJMYW5lcyAmIHVwZGF0ZUxhbmUpID09PSB1cGRhdGVMYW5lXG4gICAgICApIHtcbiAgICAgICAgdmFyIHJldmVydExhbmUgPSB1cGRhdGUucmV2ZXJ0TGFuZTtcbiAgICAgICAgaWYgKDAgPT09IHJldmVydExhbmUpXG4gICAgICAgICAgbnVsbCAhPT0gbmV3QmFzZVF1ZXVlTGFzdCAmJlxuICAgICAgICAgICAgKG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPVxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFuZTogMCxcbiAgICAgICAgICAgICAgICByZXZlcnRMYW5lOiAwLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICAgICAgICBoYXNFYWdlclN0YXRlOiB1cGRhdGUuaGFzRWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdXBkYXRlTGFuZSA9PT0gY3VycmVudEVudGFuZ2xlZExhbmUgJiZcbiAgICAgICAgICAgICAgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24kNTQgPSAhMCk7XG4gICAgICAgIGVsc2UgaWYgKChyZW5kZXJMYW5lcyAmIHJldmVydExhbmUpID09PSByZXZlcnRMYW5lKSB7XG4gICAgICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgICAgICAgcmV2ZXJ0TGFuZSA9PT0gY3VycmVudEVudGFuZ2xlZExhbmUgJiZcbiAgICAgICAgICAgIChkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uJDU0ID0gITApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICAodXBkYXRlTGFuZSA9IHtcbiAgICAgICAgICAgIGxhbmU6IDAsXG4gICAgICAgICAgICByZXZlcnRMYW5lOiB1cGRhdGUucmV2ZXJ0TGFuZSxcbiAgICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICAgIGhhc0VhZ2VyU3RhdGU6IHVwZGF0ZS5oYXNFYWdlclN0YXRlLFxuICAgICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgICBudWxsID09PSBuZXdCYXNlUXVldWVMYXN0XG4gICAgICAgICAgICAgID8gKChuZXdCYXNlUXVldWVGaXJzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QgPSB1cGRhdGVMYW5lKSxcbiAgICAgICAgICAgICAgICAoYmFzZUZpcnN0ID0gcGVuZGluZ1F1ZXVlKSlcbiAgICAgICAgICAgICAgOiAobmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IHVwZGF0ZUxhbmUpLFxuICAgICAgICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgfD0gcmV2ZXJ0TGFuZSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IHJldmVydExhbmUpO1xuICAgICAgICB1cGRhdGVMYW5lID0gdXBkYXRlLmFjdGlvbjtcbiAgICAgICAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgJiZcbiAgICAgICAgICByZWR1Y2VyKHBlbmRpbmdRdWV1ZSwgdXBkYXRlTGFuZSk7XG4gICAgICAgIHBlbmRpbmdRdWV1ZSA9IHVwZGF0ZS5oYXNFYWdlclN0YXRlXG4gICAgICAgICAgPyB1cGRhdGUuZWFnZXJTdGF0ZVxuICAgICAgICAgIDogcmVkdWNlcihwZW5kaW5nUXVldWUsIHVwZGF0ZUxhbmUpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIChyZXZlcnRMYW5lID0ge1xuICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgcmV2ZXJ0TGFuZTogdXBkYXRlLnJldmVydExhbmUsXG4gICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgIGhhc0VhZ2VyU3RhdGU6IHVwZGF0ZS5oYXNFYWdlclN0YXRlLFxuICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfSksXG4gICAgICAgICAgbnVsbCA9PT0gbmV3QmFzZVF1ZXVlTGFzdFxuICAgICAgICAgICAgPyAoKG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbmV3QmFzZVF1ZXVlTGFzdCA9IHJldmVydExhbmUpLFxuICAgICAgICAgICAgICAoYmFzZUZpcnN0ID0gcGVuZGluZ1F1ZXVlKSlcbiAgICAgICAgICAgIDogKG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSByZXZlcnRMYW5lKSxcbiAgICAgICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyB8PSB1cGRhdGVMYW5lKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IHVwZGF0ZUxhbmUpO1xuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgfSB3aGlsZSAobnVsbCAhPT0gdXBkYXRlICYmIHVwZGF0ZSAhPT0gY3VycmVudCk7XG4gICAgbnVsbCA9PT0gbmV3QmFzZVF1ZXVlTGFzdFxuICAgICAgPyAoYmFzZUZpcnN0ID0gcGVuZGluZ1F1ZXVlKVxuICAgICAgOiAobmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gbmV3QmFzZVF1ZXVlRmlyc3QpO1xuICAgIGlmIChcbiAgICAgICFvYmplY3RJcyhwZW5kaW5nUXVldWUsIGhvb2subWVtb2l6ZWRTdGF0ZSkgJiZcbiAgICAgICgoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKSxcbiAgICAgIGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24kNTQgJiZcbiAgICAgICAgKChyZWR1Y2VyID0gY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlKSwgbnVsbCAhPT0gcmVkdWNlcikpXG4gICAgKVxuICAgICAgdGhyb3cgcmVkdWNlcjtcbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBwZW5kaW5nUXVldWU7XG4gICAgaG9vay5iYXNlU3RhdGUgPSBiYXNlRmlyc3Q7XG4gICAgaG9vay5iYXNlUXVldWUgPSBuZXdCYXNlUXVldWVMYXN0O1xuICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gcGVuZGluZ1F1ZXVlO1xuICB9XG4gIG51bGwgPT09IGJhc2VRdWV1ZSAmJiAocXVldWUubGFuZXMgPSAwKTtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIHF1ZXVlLmRpc3BhdGNoXTtcbn1cbmZ1bmN0aW9uIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCksXG4gICAgcXVldWUgPSBob29rLnF1ZXVlO1xuICBpZiAobnVsbCA9PT0gcXVldWUpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMzExKSk7XG4gIHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIgPSByZWR1Y2VyO1xuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaCxcbiAgICBsYXN0UmVuZGVyUGhhc2VVcGRhdGUgPSBxdWV1ZS5wZW5kaW5nLFxuICAgIG5ld1N0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICBpZiAobnVsbCAhPT0gbGFzdFJlbmRlclBoYXNlVXBkYXRlKSB7XG4gICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IChsYXN0UmVuZGVyUGhhc2VVcGRhdGUgPSBsYXN0UmVuZGVyUGhhc2VVcGRhdGUubmV4dCk7XG4gICAgZG8gKG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgdXBkYXRlLmFjdGlvbikpLCAodXBkYXRlID0gdXBkYXRlLm5leHQpO1xuICAgIHdoaWxlICh1cGRhdGUgIT09IGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSk7XG4gICAgb2JqZWN0SXMobmV3U3RhdGUsIGhvb2subWVtb2l6ZWRTdGF0ZSkgfHwgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCk7XG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgbnVsbCA9PT0gaG9vay5iYXNlUXVldWUgJiYgKGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGUpO1xuICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cbiAgcmV0dXJuIFtuZXdTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuZnVuY3Rpb24gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHtcbiAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSxcbiAgICBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCksXG4gICAgaXNIeWRyYXRpbmckanNjb21wJDAgPSBpc0h5ZHJhdGluZztcbiAgaWYgKGlzSHlkcmF0aW5nJGpzY29tcCQwKSB7XG4gICAgaWYgKHZvaWQgMCA9PT0gZ2V0U2VydmVyU25hcHNob3QpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDA3KSk7XG4gICAgZ2V0U2VydmVyU25hcHNob3QgPSBnZXRTZXJ2ZXJTbmFwc2hvdCgpO1xuICB9IGVsc2UgZ2V0U2VydmVyU25hcHNob3QgPSBnZXRTbmFwc2hvdCgpO1xuICB2YXIgc25hcHNob3RDaGFuZ2VkID0gIW9iamVjdElzKFxuICAgIChjdXJyZW50SG9vayB8fCBob29rKS5tZW1vaXplZFN0YXRlLFxuICAgIGdldFNlcnZlclNuYXBzaG90XG4gICk7XG4gIHNuYXBzaG90Q2hhbmdlZCAmJlxuICAgICgoaG9vay5tZW1vaXplZFN0YXRlID0gZ2V0U2VydmVyU25hcHNob3QpLCAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKSk7XG4gIGhvb2sgPSBob29rLnF1ZXVlO1xuICB1cGRhdGVFZmZlY3Qoc3Vic2NyaWJlVG9TdG9yZS5iaW5kKG51bGwsIGZpYmVyLCBob29rLCBzdWJzY3JpYmUpLCBbXG4gICAgc3Vic2NyaWJlXG4gIF0pO1xuICBpZiAoXG4gICAgaG9vay5nZXRTbmFwc2hvdCAhPT0gZ2V0U25hcHNob3QgfHxcbiAgICBzbmFwc2hvdENoYW5nZWQgfHxcbiAgICAobnVsbCAhPT0gd29ya0luUHJvZ3Jlc3NIb29rICYmIHdvcmtJblByb2dyZXNzSG9vay5tZW1vaXplZFN0YXRlLnRhZyAmIDEpXG4gICkge1xuICAgIGZpYmVyLmZsYWdzIHw9IDIwNDg7XG4gICAgcHVzaEVmZmVjdChcbiAgICAgIDksXG4gICAgICB1cGRhdGVTdG9yZUluc3RhbmNlLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGZpYmVyLFxuICAgICAgICBob29rLFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdCxcbiAgICAgICAgZ2V0U25hcHNob3RcbiAgICAgICksXG4gICAgICB7IGRlc3Ryb3k6IHZvaWQgMCB9LFxuICAgICAgbnVsbFxuICAgICk7XG4gICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdCkgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzNDkpKTtcbiAgICBpc0h5ZHJhdGluZyRqc2NvbXAkMCB8fFxuICAgICAgMCAhPT0gKHJlbmRlckxhbmVzICYgNjApIHx8XG4gICAgICBwdXNoU3RvcmVDb25zaXN0ZW5jeUNoZWNrKGZpYmVyLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpO1xuICB9XG4gIHJldHVybiBnZXRTZXJ2ZXJTbmFwc2hvdDtcbn1cbmZ1bmN0aW9uIHB1c2hTdG9yZUNvbnNpc3RlbmN5Q2hlY2soZmliZXIsIGdldFNuYXBzaG90LCByZW5kZXJlZFNuYXBzaG90KSB7XG4gIGZpYmVyLmZsYWdzIHw9IDE2Mzg0O1xuICBmaWJlciA9IHsgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90LCB2YWx1ZTogcmVuZGVyZWRTbmFwc2hvdCB9O1xuICBnZXRTbmFwc2hvdCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWU7XG4gIG51bGwgPT09IGdldFNuYXBzaG90XG4gICAgPyAoKGdldFNuYXBzaG90ID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpKSxcbiAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlID0gZ2V0U25hcHNob3QpLFxuICAgICAgKGdldFNuYXBzaG90LnN0b3JlcyA9IFtmaWJlcl0pKVxuICAgIDogKChyZW5kZXJlZFNuYXBzaG90ID0gZ2V0U25hcHNob3Quc3RvcmVzKSxcbiAgICAgIG51bGwgPT09IHJlbmRlcmVkU25hcHNob3RcbiAgICAgICAgPyAoZ2V0U25hcHNob3Quc3RvcmVzID0gW2ZpYmVyXSlcbiAgICAgICAgOiByZW5kZXJlZFNuYXBzaG90LnB1c2goZmliZXIpKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVN0b3JlSW5zdGFuY2UoZmliZXIsIGluc3QsIG5leHRTbmFwc2hvdCwgZ2V0U25hcHNob3QpIHtcbiAgaW5zdC52YWx1ZSA9IG5leHRTbmFwc2hvdDtcbiAgaW5zdC5nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90O1xuICBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpICYmIGZvcmNlU3RvcmVSZXJlbmRlcihmaWJlcik7XG59XG5mdW5jdGlvbiBzdWJzY3JpYmVUb1N0b3JlKGZpYmVyLCBpbnN0LCBzdWJzY3JpYmUpIHtcbiAgcmV0dXJuIHN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSAmJiBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkge1xuICB2YXIgbGF0ZXN0R2V0U25hcHNob3QgPSBpbnN0LmdldFNuYXBzaG90O1xuICBpbnN0ID0gaW5zdC52YWx1ZTtcbiAgdHJ5IHtcbiAgICB2YXIgbmV4dFZhbHVlID0gbGF0ZXN0R2V0U25hcHNob3QoKTtcbiAgICByZXR1cm4gIW9iamVjdElzKGluc3QsIG5leHRWYWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICEwO1xuICB9XG59XG5mdW5jdGlvbiBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpIHtcbiAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpO1xuICBudWxsICE9PSByb290ICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgMik7XG59XG5mdW5jdGlvbiBtb3VudFN0YXRlSW1wbChpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5pdGlhbFN0YXRlKSB7XG4gICAgdmFyIGluaXRpYWxTdGF0ZUluaXRpYWxpemVyID0gaW5pdGlhbFN0YXRlO1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxTdGF0ZUluaXRpYWxpemVyKCk7XG4gICAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICB0cnkge1xuICAgICAgICBpbml0aWFsU3RhdGVJbml0aWFsaXplcigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgaG9vay5xdWV1ZSA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGxhbmVzOiAwLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgcmV0dXJuIGhvb2s7XG59XG5mdW5jdGlvbiB1cGRhdGVPcHRpbWlzdGljSW1wbChob29rLCBjdXJyZW50LCBwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICBob29rLmJhc2VTdGF0ZSA9IHBhc3N0aHJvdWdoO1xuICByZXR1cm4gdXBkYXRlUmVkdWNlckltcGwoXG4gICAgaG9vayxcbiAgICBjdXJyZW50SG9vayxcbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZWR1Y2VyID8gcmVkdWNlciA6IGJhc2ljU3RhdGVSZWR1Y2VyXG4gICk7XG59XG5mdW5jdGlvbiBkaXNwYXRjaEFjdGlvblN0YXRlKFxuICBmaWJlcixcbiAgYWN0aW9uUXVldWUsXG4gIHNldFBlbmRpbmdTdGF0ZSxcbiAgc2V0U3RhdGUsXG4gIHBheWxvYWRcbikge1xuICBpZiAoaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcikpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDg1KSk7XG4gIGZpYmVyID0gYWN0aW9uUXVldWUuYWN0aW9uO1xuICBpZiAobnVsbCAhPT0gZmliZXIpIHtcbiAgICB2YXIgYWN0aW9uTm9kZSA9IHtcbiAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICBhY3Rpb246IGZpYmVyLFxuICAgICAgbmV4dDogbnVsbCxcbiAgICAgIGlzVHJhbnNpdGlvbjogITAsXG4gICAgICBzdGF0dXM6IFwicGVuZGluZ1wiLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICByZWFzb246IG51bGwsXG4gICAgICBsaXN0ZW5lcnM6IFtdLFxuICAgICAgdGhlbjogZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgIGFjdGlvbk5vZGUubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH07XG4gICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVFxuICAgICAgPyBzZXRQZW5kaW5nU3RhdGUoITApXG4gICAgICA6IChhY3Rpb25Ob2RlLmlzVHJhbnNpdGlvbiA9ICExKTtcbiAgICBzZXRTdGF0ZShhY3Rpb25Ob2RlKTtcbiAgICBzZXRQZW5kaW5nU3RhdGUgPSBhY3Rpb25RdWV1ZS5wZW5kaW5nO1xuICAgIG51bGwgPT09IHNldFBlbmRpbmdTdGF0ZVxuICAgICAgPyAoKGFjdGlvbk5vZGUubmV4dCA9IGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBhY3Rpb25Ob2RlKSxcbiAgICAgICAgcnVuQWN0aW9uU3RhdGVBY3Rpb24oYWN0aW9uUXVldWUsIGFjdGlvbk5vZGUpKVxuICAgICAgOiAoKGFjdGlvbk5vZGUubmV4dCA9IHNldFBlbmRpbmdTdGF0ZS5uZXh0KSxcbiAgICAgICAgKGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBzZXRQZW5kaW5nU3RhdGUubmV4dCA9IGFjdGlvbk5vZGUpKTtcbiAgfVxufVxuZnVuY3Rpb24gcnVuQWN0aW9uU3RhdGVBY3Rpb24oYWN0aW9uUXVldWUsIG5vZGUpIHtcbiAgdmFyIGFjdGlvbiA9IG5vZGUuYWN0aW9uLFxuICAgIHBheWxvYWQgPSBub2RlLnBheWxvYWQsXG4gICAgcHJldlN0YXRlID0gYWN0aW9uUXVldWUuc3RhdGU7XG4gIGlmIChub2RlLmlzVHJhbnNpdGlvbikge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQsXG4gICAgICBjdXJyZW50VHJhbnNpdGlvbiA9IHt9O1xuICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBjdXJyZW50VHJhbnNpdGlvbjtcbiAgICB0cnkge1xuICAgICAgdmFyIHJldHVyblZhbHVlID0gYWN0aW9uKHByZXZTdGF0ZSwgcGF5bG9hZCksXG4gICAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUztcbiAgICAgIG51bGwgIT09IG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoICYmXG4gICAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoKGN1cnJlbnRUcmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgICBoYW5kbGVBY3Rpb25SZXR1cm5WYWx1ZShhY3Rpb25RdWV1ZSwgbm9kZSwgcmV0dXJuVmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkFjdGlvbkVycm9yKGFjdGlvblF1ZXVlLCBub2RlLCBlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbjtcbiAgICB9XG4gIH0gZWxzZVxuICAgIHRyeSB7XG4gICAgICAocHJldlRyYW5zaXRpb24gPSBhY3Rpb24ocHJldlN0YXRlLCBwYXlsb2FkKSksXG4gICAgICAgIGhhbmRsZUFjdGlvblJldHVyblZhbHVlKGFjdGlvblF1ZXVlLCBub2RlLCBwcmV2VHJhbnNpdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IkNjApIHtcbiAgICAgIG9uQWN0aW9uRXJyb3IoYWN0aW9uUXVldWUsIG5vZGUsIGVycm9yJDYwKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVBY3Rpb25SZXR1cm5WYWx1ZShhY3Rpb25RdWV1ZSwgbm9kZSwgcmV0dXJuVmFsdWUpIHtcbiAgbnVsbCAhPT0gcmV0dXJuVmFsdWUgJiZcbiAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlICYmXG4gIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlLnRoZW5cbiAgICA/IHJldHVyblZhbHVlLnRoZW4oXG4gICAgICAgIGZ1bmN0aW9uIChuZXh0U3RhdGUpIHtcbiAgICAgICAgICBvbkFjdGlvblN1Y2Nlc3MoYWN0aW9uUXVldWUsIG5vZGUsIG5leHRTdGF0ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBvbkFjdGlvbkVycm9yKGFjdGlvblF1ZXVlLCBub2RlLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICA6IG9uQWN0aW9uU3VjY2VzcyhhY3Rpb25RdWV1ZSwgbm9kZSwgcmV0dXJuVmFsdWUpO1xufVxuZnVuY3Rpb24gb25BY3Rpb25TdWNjZXNzKGFjdGlvblF1ZXVlLCBhY3Rpb25Ob2RlLCBuZXh0U3RhdGUpIHtcbiAgYWN0aW9uTm9kZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiO1xuICBhY3Rpb25Ob2RlLnZhbHVlID0gbmV4dFN0YXRlO1xuICBub3RpZnlBY3Rpb25MaXN0ZW5lcnMoYWN0aW9uTm9kZSk7XG4gIGFjdGlvblF1ZXVlLnN0YXRlID0gbmV4dFN0YXRlO1xuICBhY3Rpb25Ob2RlID0gYWN0aW9uUXVldWUucGVuZGluZztcbiAgbnVsbCAhPT0gYWN0aW9uTm9kZSAmJlxuICAgICgobmV4dFN0YXRlID0gYWN0aW9uTm9kZS5uZXh0KSxcbiAgICBuZXh0U3RhdGUgPT09IGFjdGlvbk5vZGVcbiAgICAgID8gKGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBudWxsKVxuICAgICAgOiAoKG5leHRTdGF0ZSA9IG5leHRTdGF0ZS5uZXh0KSxcbiAgICAgICAgKGFjdGlvbk5vZGUubmV4dCA9IG5leHRTdGF0ZSksXG4gICAgICAgIHJ1bkFjdGlvblN0YXRlQWN0aW9uKGFjdGlvblF1ZXVlLCBuZXh0U3RhdGUpKSk7XG59XG5mdW5jdGlvbiBvbkFjdGlvbkVycm9yKGFjdGlvblF1ZXVlLCBhY3Rpb25Ob2RlLCBlcnJvcikge1xuICB2YXIgbGFzdCA9IGFjdGlvblF1ZXVlLnBlbmRpbmc7XG4gIGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICBpZiAobnVsbCAhPT0gbGFzdCkge1xuICAgIGxhc3QgPSBsYXN0Lm5leHQ7XG4gICAgZG9cbiAgICAgIChhY3Rpb25Ob2RlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIiksXG4gICAgICAgIChhY3Rpb25Ob2RlLnJlYXNvbiA9IGVycm9yKSxcbiAgICAgICAgbm90aWZ5QWN0aW9uTGlzdGVuZXJzKGFjdGlvbk5vZGUpLFxuICAgICAgICAoYWN0aW9uTm9kZSA9IGFjdGlvbk5vZGUubmV4dCk7XG4gICAgd2hpbGUgKGFjdGlvbk5vZGUgIT09IGxhc3QpO1xuICB9XG4gIGFjdGlvblF1ZXVlLmFjdGlvbiA9IG51bGw7XG59XG5mdW5jdGlvbiBub3RpZnlBY3Rpb25MaXN0ZW5lcnMoYWN0aW9uTm9kZSkge1xuICBhY3Rpb25Ob2RlID0gYWN0aW9uTm9kZS5saXN0ZW5lcnM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9uTm9kZS5sZW5ndGg7IGkrKykgKDAsIGFjdGlvbk5vZGVbaV0pKCk7XG59XG5mdW5jdGlvbiBhY3Rpb25TdGF0ZVJlZHVjZXIob2xkU3RhdGUsIG5ld1N0YXRlKSB7XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cbmZ1bmN0aW9uIG1vdW50QWN0aW9uU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGVQcm9wKSB7XG4gIGlmIChpc0h5ZHJhdGluZykge1xuICAgIHZhciBzc3JGb3JtU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc1Jvb3QuZm9ybVN0YXRlO1xuICAgIGlmIChudWxsICE9PSBzc3JGb3JtU3RhdGUpIHtcbiAgICAgIGE6IHtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG4gICAgICAgIGlmIChpc0h5ZHJhdGluZykge1xuICAgICAgICAgIGlmIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlKSB7XG4gICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDAgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIHZhciBpblJvb3RPclNpbmdsZXRvbiA9IHJvb3RPclNpbmdsZXRvbkNvbnRleHQ7XG4gICAgICAgICAgICAgICAgOCAhPT0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwLm5vZGVUeXBlO1xuXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmICghaW5Sb290T3JTaW5nbGV0b24pIHtcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDAgPSBnZXROZXh0SHlkcmF0YWJsZShcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMC5uZXh0U2libGluZ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMCkge1xuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGluUm9vdE9yU2luZ2xldG9uID0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwLmRhdGE7XG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMCA9XG4gICAgICAgICAgICAgICAgXCJGIVwiID09PSBpblJvb3RPclNpbmdsZXRvbiB8fCBcIkZcIiA9PT0gaW5Sb290T3JTaW5nbGV0b25cbiAgICAgICAgICAgICAgICAgID8gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwKSB7XG4gICAgICAgICAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDAubmV4dFNpYmxpbmdcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICAgICAgICAgICAgICBcIkYhXCIgPT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMC5kYXRhO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2goSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMTtcbiAgICAgIH1cbiAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCAmJiAoaW5pdGlhbFN0YXRlUHJvcCA9IHNzckZvcm1TdGF0ZVswXSk7XG4gICAgfVxuICB9XG4gIHNzckZvcm1TdGF0ZSA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHNzckZvcm1TdGF0ZS5tZW1vaXplZFN0YXRlID0gc3NyRm9ybVN0YXRlLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZVByb3A7XG4gIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGxhbmVzOiAwLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGFjdGlvblN0YXRlUmVkdWNlcixcbiAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlUHJvcFxuICB9O1xuICBzc3JGb3JtU3RhdGUucXVldWUgPSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gIHNzckZvcm1TdGF0ZSA9IGRpc3BhdGNoU2V0U3RhdGUuYmluZChcbiAgICBudWxsLFxuICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsXG4gICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICk7XG4gIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5kaXNwYXRjaCA9IHNzckZvcm1TdGF0ZTtcbiAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gbW91bnRTdGF0ZUltcGwoITEpO1xuICBpblJvb3RPclNpbmdsZXRvbiA9IGRpc3BhdGNoT3B0aW1pc3RpY1NldFN0YXRlLmJpbmQoXG4gICAgbnVsbCxcbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLFxuICAgICExLFxuICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5xdWV1ZVxuICApO1xuICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDAgPSB7XG4gICAgc3RhdGU6IGluaXRpYWxTdGF0ZVByb3AsXG4gICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgcGVuZGluZzogbnVsbFxuICB9O1xuICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQucXVldWUgPSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDA7XG4gIHNzckZvcm1TdGF0ZSA9IGRpc3BhdGNoQWN0aW9uU3RhdGUuYmluZChcbiAgICBudWxsLFxuICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsXG4gICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwLFxuICAgIGluUm9vdE9yU2luZ2xldG9uLFxuICAgIHNzckZvcm1TdGF0ZVxuICApO1xuICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDAuZGlzcGF0Y2ggPSBzc3JGb3JtU3RhdGU7XG4gIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5tZW1vaXplZFN0YXRlID0gYWN0aW9uO1xuICByZXR1cm4gW2luaXRpYWxTdGF0ZVByb3AsIHNzckZvcm1TdGF0ZSwgITFdO1xufVxuZnVuY3Rpb24gdXBkYXRlQWN0aW9uU3RhdGUoYWN0aW9uKSB7XG4gIHZhciBzdGF0ZUhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIHVwZGF0ZUFjdGlvblN0YXRlSW1wbChzdGF0ZUhvb2ssIGN1cnJlbnRIb29rLCBhY3Rpb24pO1xufVxuZnVuY3Rpb24gdXBkYXRlQWN0aW9uU3RhdGVJbXBsKHN0YXRlSG9vaywgY3VycmVudFN0YXRlSG9vaywgYWN0aW9uKSB7XG4gIGN1cnJlbnRTdGF0ZUhvb2sgPSB1cGRhdGVSZWR1Y2VySW1wbChcbiAgICBzdGF0ZUhvb2ssXG4gICAgY3VycmVudFN0YXRlSG9vayxcbiAgICBhY3Rpb25TdGF0ZVJlZHVjZXJcbiAgKVswXTtcbiAgc3RhdGVIb29rID0gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcilbMF07XG4gIGN1cnJlbnRTdGF0ZUhvb2sgPVxuICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBjdXJyZW50U3RhdGVIb29rICYmXG4gICAgbnVsbCAhPT0gY3VycmVudFN0YXRlSG9vayAmJlxuICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGN1cnJlbnRTdGF0ZUhvb2sudGhlblxuICAgICAgPyB1c2VUaGVuYWJsZShjdXJyZW50U3RhdGVIb29rKVxuICAgICAgOiBjdXJyZW50U3RhdGVIb29rO1xuICB2YXIgYWN0aW9uUXVldWVIb29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCksXG4gICAgYWN0aW9uUXVldWUgPSBhY3Rpb25RdWV1ZUhvb2sucXVldWUsXG4gICAgZGlzcGF0Y2ggPSBhY3Rpb25RdWV1ZS5kaXNwYXRjaDtcbiAgYWN0aW9uICE9PSBhY3Rpb25RdWV1ZUhvb2subWVtb2l6ZWRTdGF0ZSAmJlxuICAgICgoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSAyMDQ4KSxcbiAgICBwdXNoRWZmZWN0KFxuICAgICAgOSxcbiAgICAgIGFjdGlvblN0YXRlQWN0aW9uRWZmZWN0LmJpbmQobnVsbCwgYWN0aW9uUXVldWUsIGFjdGlvbiksXG4gICAgICB7IGRlc3Ryb3k6IHZvaWQgMCB9LFxuICAgICAgbnVsbFxuICAgICkpO1xuICByZXR1cm4gW2N1cnJlbnRTdGF0ZUhvb2ssIGRpc3BhdGNoLCBzdGF0ZUhvb2tdO1xufVxuZnVuY3Rpb24gYWN0aW9uU3RhdGVBY3Rpb25FZmZlY3QoYWN0aW9uUXVldWUsIGFjdGlvbikge1xuICBhY3Rpb25RdWV1ZS5hY3Rpb24gPSBhY3Rpb247XG59XG5mdW5jdGlvbiByZXJlbmRlckFjdGlvblN0YXRlKGFjdGlvbikge1xuICB2YXIgc3RhdGVIb29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCksXG4gICAgY3VycmVudFN0YXRlSG9vayA9IGN1cnJlbnRIb29rO1xuICBpZiAobnVsbCAhPT0gY3VycmVudFN0YXRlSG9vaylcbiAgICByZXR1cm4gdXBkYXRlQWN0aW9uU3RhdGVJbXBsKHN0YXRlSG9vaywgY3VycmVudFN0YXRlSG9vaywgYWN0aW9uKTtcbiAgdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHN0YXRlSG9vayA9IHN0YXRlSG9vay5tZW1vaXplZFN0YXRlO1xuICBjdXJyZW50U3RhdGVIb29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBkaXNwYXRjaCA9IGN1cnJlbnRTdGF0ZUhvb2sucXVldWUuZGlzcGF0Y2g7XG4gIGN1cnJlbnRTdGF0ZUhvb2subWVtb2l6ZWRTdGF0ZSA9IGFjdGlvbjtcbiAgcmV0dXJuIFtzdGF0ZUhvb2ssIGRpc3BhdGNoLCAhMV07XG59XG5mdW5jdGlvbiBwdXNoRWZmZWN0KHRhZywgY3JlYXRlLCBpbnN0LCBkZXBzKSB7XG4gIHRhZyA9IHsgdGFnOiB0YWcsIGNyZWF0ZTogY3JlYXRlLCBpbnN0OiBpbnN0LCBkZXBzOiBkZXBzLCBuZXh0OiBudWxsIH07XG4gIGNyZWF0ZSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWU7XG4gIG51bGwgPT09IGNyZWF0ZSAmJlxuICAgICgoY3JlYXRlID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpKSxcbiAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZSA9IGNyZWF0ZSkpO1xuICBpbnN0ID0gY3JlYXRlLmxhc3RFZmZlY3Q7XG4gIG51bGwgPT09IGluc3RcbiAgICA/IChjcmVhdGUubGFzdEVmZmVjdCA9IHRhZy5uZXh0ID0gdGFnKVxuICAgIDogKChkZXBzID0gaW5zdC5uZXh0KSxcbiAgICAgIChpbnN0Lm5leHQgPSB0YWcpLFxuICAgICAgKHRhZy5uZXh0ID0gZGVwcyksXG4gICAgICAoY3JlYXRlLmxhc3RFZmZlY3QgPSB0YWcpKTtcbiAgcmV0dXJuIHRhZztcbn1cbmZ1bmN0aW9uIHVwZGF0ZVJlZigpIHtcbiAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG59XG5mdW5jdGlvbiBtb3VudEVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoXG4gICAgMSB8IGhvb2tGbGFncyxcbiAgICBjcmVhdGUsXG4gICAgeyBkZXN0cm95OiB2b2lkIDAgfSxcbiAgICB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwc1xuICApO1xufVxuZnVuY3Rpb24gdXBkYXRlRWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gIHZhciBpbnN0ID0gaG9vay5tZW1vaXplZFN0YXRlLmluc3Q7XG4gIG51bGwgIT09IGN1cnJlbnRIb29rICYmXG4gIG51bGwgIT09IGRlcHMgJiZcbiAgYXJlSG9va0lucHV0c0VxdWFsKGRlcHMsIGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUuZGVwcylcbiAgICA/IChob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KGhvb2tGbGFncywgY3JlYXRlLCBpbnN0LCBkZXBzKSlcbiAgICA6ICgoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzKSxcbiAgICAgIChob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KDEgfCBob29rRmxhZ3MsIGNyZWF0ZSwgaW5zdCwgZGVwcykpKTtcbn1cbmZ1bmN0aW9uIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICBtb3VudEVmZmVjdEltcGwoODM5MDY1NiwgOCwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdXBkYXRlRWZmZWN0SW1wbCgyMDQ4LCA4LCBjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXBkYXRlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCAyLCBjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCA0LCBjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdChjcmVhdGUsIHJlZikge1xuICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmKSB7XG4gICAgY3JlYXRlID0gY3JlYXRlKCk7XG4gICAgdmFyIHJlZkNsZWFudXAgPSByZWYoY3JlYXRlKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmQ2xlYW51cCA/IHJlZkNsZWFudXAoKSA6IHJlZihudWxsKTtcbiAgICB9O1xuICB9XG4gIGlmIChudWxsICE9PSByZWYgJiYgdm9pZCAwICE9PSByZWYpXG4gICAgcmV0dXJuIChcbiAgICAgIChjcmVhdGUgPSBjcmVhdGUoKSksXG4gICAgICAocmVmLmN1cnJlbnQgPSBjcmVhdGUpLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgZGVwcyA9IG51bGwgIT09IGRlcHMgJiYgdm9pZCAwICE9PSBkZXBzID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgdXBkYXRlRWZmZWN0SW1wbCg0LCA0LCBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIG1vdW50RGVidWdWYWx1ZSgpIHt9XG5mdW5jdGlvbiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gIGlmIChudWxsICE9PSBkZXBzICYmIGFyZUhvb2tJbnB1dHNFcXVhbChkZXBzLCBwcmV2U3RhdGVbMV0pKVxuICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgZGVwc107XG4gIHJldHVybiBjYWxsYmFjaztcbn1cbmZ1bmN0aW9uIHVwZGF0ZU1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gIGlmIChudWxsICE9PSBkZXBzICYmIGFyZUhvb2tJbnB1dHNFcXVhbChkZXBzLCBwcmV2U3RhdGVbMV0pKVxuICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gIHByZXZTdGF0ZSA9IG5leHRDcmVhdGUoKTtcbiAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgIHRyeSB7XG4gICAgICBuZXh0Q3JlYXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICB9XG4gIH1cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW3ByZXZTdGF0ZSwgZGVwc107XG4gIHJldHVybiBwcmV2U3RhdGU7XG59XG5mdW5jdGlvbiBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gaW5pdGlhbFZhbHVlIHx8IDAgIT09IChyZW5kZXJMYW5lcyAmIDEwNzM3NDE4MjQpKVxuICAgIHJldHVybiAoaG9vay5tZW1vaXplZFN0YXRlID0gdmFsdWUpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBpbml0aWFsVmFsdWU7XG4gIGhvb2sgPSByZXF1ZXN0RGVmZXJyZWRMYW5lKCk7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgfD0gaG9vaztcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IGhvb2s7XG4gIHJldHVybiBpbml0aWFsVmFsdWU7XG59XG5mdW5jdGlvbiB1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbChob29rLCBwcmV2VmFsdWUsIHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgaWYgKG9iamVjdElzKHZhbHVlLCBwcmV2VmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIGlmIChudWxsICE9PSBjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLmN1cnJlbnQpXG4gICAgcmV0dXJuIChcbiAgICAgIChob29rID0gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKSksXG4gICAgICBvYmplY3RJcyhob29rLCBwcmV2VmFsdWUpIHx8IChkaWRSZWNlaXZlVXBkYXRlID0gITApLFxuICAgICAgaG9va1xuICAgICk7XG4gIGlmICgwID09PSAocmVuZGVyTGFuZXMgJiA0MikpXG4gICAgcmV0dXJuIChkaWRSZWNlaXZlVXBkYXRlID0gITApLCAoaG9vay5tZW1vaXplZFN0YXRlID0gdmFsdWUpO1xuICBob29rID0gcmVxdWVzdERlZmVycmVkTGFuZSgpO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzIHw9IGhvb2s7XG4gIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyB8PSBob29rO1xuICByZXR1cm4gcHJldlZhbHVlO1xufVxuZnVuY3Rpb24gc3RhcnRUcmFuc2l0aW9uKGZpYmVyLCBxdWV1ZSwgcGVuZGluZ1N0YXRlLCBmaW5pc2hlZFN0YXRlLCBjYWxsYmFjaykge1xuICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPVxuICAgIDAgIT09IHByZXZpb3VzUHJpb3JpdHkgJiYgOCA+IHByZXZpb3VzUHJpb3JpdHkgPyBwcmV2aW91c1ByaW9yaXR5IDogODtcbiAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCxcbiAgICBjdXJyZW50VHJhbnNpdGlvbiA9IHt9O1xuICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gY3VycmVudFRyYW5zaXRpb247XG4gIGRpc3BhdGNoT3B0aW1pc3RpY1NldFN0YXRlKGZpYmVyLCAhMSwgcXVldWUsIHBlbmRpbmdTdGF0ZSk7XG4gIHRyeSB7XG4gICAgdmFyIHJldHVyblZhbHVlID0gY2FsbGJhY2soKSxcbiAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUztcbiAgICBudWxsICE9PSBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCAmJlxuICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2goY3VycmVudFRyYW5zaXRpb24sIHJldHVyblZhbHVlKTtcbiAgICBpZiAoXG4gICAgICBudWxsICE9PSByZXR1cm5WYWx1ZSAmJlxuICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZS50aGVuXG4gICAgKSB7XG4gICAgICB2YXIgdGhlbmFibGVGb3JGaW5pc2hlZFN0YXRlID0gY2hhaW5UaGVuYWJsZVZhbHVlKFxuICAgICAgICByZXR1cm5WYWx1ZSxcbiAgICAgICAgZmluaXNoZWRTdGF0ZVxuICAgICAgKTtcbiAgICAgIGRpc3BhdGNoU2V0U3RhdGVJbnRlcm5hbChcbiAgICAgICAgZmliZXIsXG4gICAgICAgIHF1ZXVlLFxuICAgICAgICB0aGVuYWJsZUZvckZpbmlzaGVkU3RhdGUsXG4gICAgICAgIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKVxuICAgICAgKTtcbiAgICB9IGVsc2VcbiAgICAgIGRpc3BhdGNoU2V0U3RhdGVJbnRlcm5hbChcbiAgICAgICAgZmliZXIsXG4gICAgICAgIHF1ZXVlLFxuICAgICAgICBmaW5pc2hlZFN0YXRlLFxuICAgICAgICByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcilcbiAgICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsKFxuICAgICAgZmliZXIsXG4gICAgICBxdWV1ZSxcbiAgICAgIHsgdGhlbjogZnVuY3Rpb24gKCkge30sIHN0YXR1czogXCJyZWplY3RlZFwiLCByZWFzb246IGVycm9yIH0sXG4gICAgICByZXF1ZXN0VXBkYXRlTGFuZSgpXG4gICAgKTtcbiAgfSBmaW5hbGx5IHtcbiAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByZXZpb3VzUHJpb3JpdHkpLFxuICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbik7XG4gIH1cbn1cbmZ1bmN0aW9uIG5vb3AkMigpIHt9XG5mdW5jdGlvbiBzdGFydEhvc3RUcmFuc2l0aW9uKGZvcm1GaWJlciwgcGVuZGluZ1N0YXRlLCBhY3Rpb24sIGZvcm1EYXRhKSB7XG4gIGlmICg1ICE9PSBmb3JtRmliZXIudGFnKSB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQ3NikpO1xuICB2YXIgcXVldWUgPSBlbnN1cmVGb3JtQ29tcG9uZW50SXNTdGF0ZWZ1bChmb3JtRmliZXIpLnF1ZXVlO1xuICBzdGFydFRyYW5zaXRpb24oXG4gICAgZm9ybUZpYmVyLFxuICAgIHF1ZXVlLFxuICAgIHBlbmRpbmdTdGF0ZSxcbiAgICBzaGFyZWROb3RQZW5kaW5nT2JqZWN0LFxuICAgIG51bGwgPT09IGFjdGlvblxuICAgICAgPyBub29wJDJcbiAgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJlcXVlc3RGb3JtUmVzZXQkMShmb3JtRmliZXIpO1xuICAgICAgICAgIHJldHVybiBhY3Rpb24oZm9ybURhdGEpO1xuICAgICAgICB9XG4gICk7XG59XG5mdW5jdGlvbiBlbnN1cmVGb3JtQ29tcG9uZW50SXNTdGF0ZWZ1bChmb3JtRmliZXIpIHtcbiAgdmFyIGV4aXN0aW5nU3RhdGVIb29rID0gZm9ybUZpYmVyLm1lbW9pemVkU3RhdGU7XG4gIGlmIChudWxsICE9PSBleGlzdGluZ1N0YXRlSG9vaykgcmV0dXJuIGV4aXN0aW5nU3RhdGVIb29rO1xuICBleGlzdGluZ1N0YXRlSG9vayA9IHtcbiAgICBtZW1vaXplZFN0YXRlOiBzaGFyZWROb3RQZW5kaW5nT2JqZWN0LFxuICAgIGJhc2VTdGF0ZTogc2hhcmVkTm90UGVuZGluZ09iamVjdCxcbiAgICBiYXNlUXVldWU6IG51bGwsXG4gICAgcXVldWU6IHtcbiAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICBsYW5lczogMCxcbiAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogc2hhcmVkTm90UGVuZGluZ09iamVjdFxuICAgIH0sXG4gICAgbmV4dDogbnVsbFxuICB9O1xuICB2YXIgaW5pdGlhbFJlc2V0U3RhdGUgPSB7fTtcbiAgZXhpc3RpbmdTdGF0ZUhvb2submV4dCA9IHtcbiAgICBtZW1vaXplZFN0YXRlOiBpbml0aWFsUmVzZXRTdGF0ZSxcbiAgICBiYXNlU3RhdGU6IGluaXRpYWxSZXNldFN0YXRlLFxuICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICBxdWV1ZToge1xuICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgIGxhbmVzOiAwLFxuICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsUmVzZXRTdGF0ZVxuICAgIH0sXG4gICAgbmV4dDogbnVsbFxuICB9O1xuICBmb3JtRmliZXIubWVtb2l6ZWRTdGF0ZSA9IGV4aXN0aW5nU3RhdGVIb29rO1xuICBmb3JtRmliZXIgPSBmb3JtRmliZXIuYWx0ZXJuYXRlO1xuICBudWxsICE9PSBmb3JtRmliZXIgJiYgKGZvcm1GaWJlci5tZW1vaXplZFN0YXRlID0gZXhpc3RpbmdTdGF0ZUhvb2spO1xuICByZXR1cm4gZXhpc3RpbmdTdGF0ZUhvb2s7XG59XG5mdW5jdGlvbiByZXF1ZXN0Rm9ybVJlc2V0JDEoZm9ybUZpYmVyKSB7XG4gIHZhciByZXNldFN0YXRlUXVldWUgPSBlbnN1cmVGb3JtQ29tcG9uZW50SXNTdGF0ZWZ1bChmb3JtRmliZXIpLm5leHQucXVldWU7XG4gIGRpc3BhdGNoU2V0U3RhdGVJbnRlcm5hbChmb3JtRmliZXIsIHJlc2V0U3RhdGVRdWV1ZSwge30sIHJlcXVlc3RVcGRhdGVMYW5lKCkpO1xufVxuZnVuY3Rpb24gdXNlSG9zdFRyYW5zaXRpb25TdGF0dXMoKSB7XG4gIHJldHVybiByZWFkQ29udGV4dChIb3N0VHJhbnNpdGlvbkNvbnRleHQpO1xufVxuZnVuY3Rpb24gdXBkYXRlSWQoKSB7XG4gIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xufVxuZnVuY3Rpb24gdXBkYXRlUmVmcmVzaCgpIHtcbiAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG59XG5mdW5jdGlvbiByZWZyZXNoQ2FjaGUoZmliZXIpIHtcbiAgZm9yICh2YXIgcHJvdmlkZXIgPSBmaWJlci5yZXR1cm47IG51bGwgIT09IHByb3ZpZGVyOyApIHtcbiAgICBzd2l0Y2ggKHByb3ZpZGVyLnRhZykge1xuICAgICAgY2FzZSAyNDpcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZSgpO1xuICAgICAgICBmaWJlciA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgICAgdmFyIHJvb3QkNjMgPSBlbnF1ZXVlVXBkYXRlKHByb3ZpZGVyLCBmaWJlciwgbGFuZSk7XG4gICAgICAgIG51bGwgIT09IHJvb3QkNjMgJiZcbiAgICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QkNjMsIHByb3ZpZGVyLCBsYW5lKSxcbiAgICAgICAgICBlbnRhbmdsZVRyYW5zaXRpb25zKHJvb3QkNjMsIHByb3ZpZGVyLCBsYW5lKSk7XG4gICAgICAgIHByb3ZpZGVyID0geyBjYWNoZTogY3JlYXRlQ2FjaGUoKSB9O1xuICAgICAgICBmaWJlci5wYXlsb2FkID0gcHJvdmlkZXI7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcHJvdmlkZXIgPSBwcm92aWRlci5yZXR1cm47XG4gIH1cbn1cbmZ1bmN0aW9uIGRpc3BhdGNoUmVkdWNlckFjdGlvbihmaWJlciwgcXVldWUsIGFjdGlvbikge1xuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKCk7XG4gIGFjdGlvbiA9IHtcbiAgICBsYW5lOiBsYW5lLFxuICAgIHJldmVydExhbmU6IDAsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgaGFzRWFnZXJTdGF0ZTogITEsXG4gICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpXG4gICAgPyBlbnF1ZXVlUmVuZGVyUGhhc2VVcGRhdGUocXVldWUsIGFjdGlvbilcbiAgICA6ICgoYWN0aW9uID0gZW5xdWV1ZUNvbmN1cnJlbnRIb29rVXBkYXRlKGZpYmVyLCBxdWV1ZSwgYWN0aW9uLCBsYW5lKSksXG4gICAgICBudWxsICE9PSBhY3Rpb24gJiZcbiAgICAgICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcihhY3Rpb24sIGZpYmVyLCBsYW5lKSxcbiAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9uVXBkYXRlKGFjdGlvbiwgcXVldWUsIGxhbmUpKSk7XG59XG5mdW5jdGlvbiBkaXNwYXRjaFNldFN0YXRlKGZpYmVyLCBxdWV1ZSwgYWN0aW9uKSB7XG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoKTtcbiAgZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsKGZpYmVyLCBxdWV1ZSwgYWN0aW9uLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIGRpc3BhdGNoU2V0U3RhdGVJbnRlcm5hbChmaWJlciwgcXVldWUsIGFjdGlvbiwgbGFuZSkge1xuICB2YXIgdXBkYXRlID0ge1xuICAgIGxhbmU6IGxhbmUsXG4gICAgcmV2ZXJ0TGFuZTogMCxcbiAgICBhY3Rpb246IGFjdGlvbixcbiAgICBoYXNFYWdlclN0YXRlOiAhMSxcbiAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcbiAgaWYgKGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpKSBlbnF1ZXVlUmVuZGVyUGhhc2VVcGRhdGUocXVldWUsIHVwZGF0ZSk7XG4gIGVsc2Uge1xuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgaWYgKFxuICAgICAgMCA9PT0gZmliZXIubGFuZXMgJiZcbiAgICAgIChudWxsID09PSBhbHRlcm5hdGUgfHwgMCA9PT0gYWx0ZXJuYXRlLmxhbmVzKSAmJlxuICAgICAgKChhbHRlcm5hdGUgPSBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyKSwgbnVsbCAhPT0gYWx0ZXJuYXRlKVxuICAgIClcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSxcbiAgICAgICAgICBlYWdlclN0YXRlID0gYWx0ZXJuYXRlKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgdXBkYXRlLmhhc0VhZ2VyU3RhdGUgPSAhMDtcbiAgICAgICAgdXBkYXRlLmVhZ2VyU3RhdGUgPSBlYWdlclN0YXRlO1xuICAgICAgICBpZiAob2JqZWN0SXMoZWFnZXJTdGF0ZSwgY3VycmVudFN0YXRlKSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCAwKSxcbiAgICAgICAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJiBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCksXG4gICAgICAgICAgICAhMVxuICAgICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgIH1cbiAgICBhY3Rpb24gPSBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpO1xuICAgIGlmIChudWxsICE9PSBhY3Rpb24pXG4gICAgICByZXR1cm4gKFxuICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoYWN0aW9uLCBmaWJlciwgbGFuZSksXG4gICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZShhY3Rpb24sIHF1ZXVlLCBsYW5lKSxcbiAgICAgICAgITBcbiAgICAgICk7XG4gIH1cbiAgcmV0dXJuICExO1xufVxuZnVuY3Rpb24gZGlzcGF0Y2hPcHRpbWlzdGljU2V0U3RhdGUoZmliZXIsIHRocm93SWZEdXJpbmdSZW5kZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAgYWN0aW9uID0ge1xuICAgIGxhbmU6IDIsXG4gICAgcmV2ZXJ0TGFuZTogcmVxdWVzdFRyYW5zaXRpb25MYW5lKCksXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgaGFzRWFnZXJTdGF0ZTogITEsXG4gICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIGlmIChpc1JlbmRlclBoYXNlVXBkYXRlKGZpYmVyKSkge1xuICAgIGlmICh0aHJvd0lmRHVyaW5nUmVuZGVyKSB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQ3OSkpO1xuICB9IGVsc2VcbiAgICAodGhyb3dJZkR1cmluZ1JlbmRlciA9IGVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZShcbiAgICAgIGZpYmVyLFxuICAgICAgcXVldWUsXG4gICAgICBhY3Rpb24sXG4gICAgICAyXG4gICAgKSksXG4gICAgICBudWxsICE9PSB0aHJvd0lmRHVyaW5nUmVuZGVyICYmXG4gICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcih0aHJvd0lmRHVyaW5nUmVuZGVyLCBmaWJlciwgMik7XG59XG5mdW5jdGlvbiBpc1JlbmRlclBoYXNlVXBkYXRlKGZpYmVyKSB7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gIHJldHVybiAoXG4gICAgZmliZXIgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgfHxcbiAgICAobnVsbCAhPT0gYWx0ZXJuYXRlICYmIGFsdGVybmF0ZSA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSlcbiAgKTtcbn1cbmZ1bmN0aW9uIGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKSB7XG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPVxuICAgICEwO1xuICB2YXIgcGVuZGluZyA9IHF1ZXVlLnBlbmRpbmc7XG4gIG51bGwgPT09IHBlbmRpbmdcbiAgICA/ICh1cGRhdGUubmV4dCA9IHVwZGF0ZSlcbiAgICA6ICgodXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQpLCAocGVuZGluZy5uZXh0ID0gdXBkYXRlKSk7XG4gIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG59XG5mdW5jdGlvbiBlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUocm9vdCwgcXVldWUsIGxhbmUpIHtcbiAgaWYgKDAgIT09IChsYW5lICYgNDE5NDE3NikpIHtcbiAgICB2YXIgcXVldWVMYW5lcyA9IHF1ZXVlLmxhbmVzO1xuICAgIHF1ZXVlTGFuZXMgJj0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgbGFuZSB8PSBxdWV1ZUxhbmVzO1xuICAgIHF1ZXVlLmxhbmVzID0gbGFuZTtcbiAgICBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBsYW5lKTtcbiAgfVxufVxudmFyIENvbnRleHRPbmx5RGlzcGF0Y2hlciA9IHtcbiAgcmVhZENvbnRleHQ6IHJlYWRDb250ZXh0LFxuICB1c2U6IHVzZSxcbiAgdXNlQ2FsbGJhY2s6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlQ29udGV4dDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VMYXlvdXRFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU1lbW86IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlUmVkdWNlcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VSZWY6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlU3RhdGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRGVidWdWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VEZWZlcnJlZFZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVRyYW5zaXRpb246IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlU3luY0V4dGVybmFsU3RvcmU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlSWQ6IHRocm93SW52YWxpZEhvb2tFcnJvclxufTtcbkNvbnRleHRPbmx5RGlzcGF0Y2hlci51c2VDYWNoZVJlZnJlc2ggPSB0aHJvd0ludmFsaWRIb29rRXJyb3I7XG5Db250ZXh0T25seURpc3BhdGNoZXIudXNlTWVtb0NhY2hlID0gdGhyb3dJbnZhbGlkSG9va0Vycm9yO1xuQ29udGV4dE9ubHlEaXNwYXRjaGVyLnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzID0gdGhyb3dJbnZhbGlkSG9va0Vycm9yO1xuQ29udGV4dE9ubHlEaXNwYXRjaGVyLnVzZUZvcm1TdGF0ZSA9IHRocm93SW52YWxpZEhvb2tFcnJvcjtcbkNvbnRleHRPbmx5RGlzcGF0Y2hlci51c2VBY3Rpb25TdGF0ZSA9IHRocm93SW52YWxpZEhvb2tFcnJvcjtcbkNvbnRleHRPbmx5RGlzcGF0Y2hlci51c2VPcHRpbWlzdGljID0gdGhyb3dJbnZhbGlkSG9va0Vycm9yO1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnQgPSB7XG4gIHJlYWRDb250ZXh0OiByZWFkQ29udGV4dCxcbiAgdXNlOiB1c2UsXG4gIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGUgPSBbXG4gICAgICBjYWxsYmFjayxcbiAgICAgIHZvaWQgMCA9PT0gZGVwcyA/IG51bGwgOiBkZXBzXG4gICAgXTtcbiAgICByZXR1cm4gY2FsbGJhY2s7XG4gIH0sXG4gIHVzZUNvbnRleHQ6IHJlYWRDb250ZXh0LFxuICB1c2VFZmZlY3Q6IG1vdW50RWZmZWN0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICBkZXBzID0gbnVsbCAhPT0gZGVwcyAmJiB2b2lkIDAgIT09IGRlcHMgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICAgIG1vdW50RWZmZWN0SW1wbChcbiAgICAgIDQxOTQzMDgsXG4gICAgICA0LFxuICAgICAgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSxcbiAgICAgIGRlcHNcbiAgICApO1xuICB9LFxuICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKDQxOTQzMDgsIDQsIGNyZWF0ZSwgZGVwcyk7XG4gIH0sXG4gIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgIG1vdW50RWZmZWN0SW1wbCg0LCAyLCBjcmVhdGUsIGRlcHMpO1xuICB9LFxuICB1c2VNZW1vOiBmdW5jdGlvbiAobmV4dENyZWF0ZSwgZGVwcykge1xuICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gICAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgICBpZiAoc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYpIHtcbiAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5leHRDcmVhdGUoKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgZGVwc107XG4gICAgcmV0dXJuIG5leHRWYWx1ZTtcbiAgfSxcbiAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgaWYgKHZvaWQgMCAhPT0gaW5pdCkge1xuICAgICAgdmFyIGluaXRpYWxTdGF0ZSA9IGluaXQoaW5pdGlhbEFyZyk7XG4gICAgICBpZiAoc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYpIHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGluaXQoaW5pdGlhbEFyZyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxBcmc7XG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgcmVkdWNlciA9IHtcbiAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICBsYW5lczogMCxcbiAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogcmVkdWNlcixcbiAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgICB9O1xuICAgIGhvb2sucXVldWUgPSByZWR1Y2VyO1xuICAgIHJlZHVjZXIgPSByZWR1Y2VyLmRpc3BhdGNoID0gZGlzcGF0Y2hSZWR1Y2VyQWN0aW9uLmJpbmQoXG4gICAgICBudWxsLFxuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSxcbiAgICAgIHJlZHVjZXJcbiAgICApO1xuICAgIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCByZWR1Y2VyXTtcbiAgfSxcbiAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgIGluaXRpYWxWYWx1ZSA9IHsgY3VycmVudDogaW5pdGlhbFZhbHVlIH07XG4gICAgcmV0dXJuIChob29rLm1lbW9pemVkU3RhdGUgPSBpbml0aWFsVmFsdWUpO1xuICB9LFxuICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgIGluaXRpYWxTdGF0ZSA9IG1vdW50U3RhdGVJbXBsKGluaXRpYWxTdGF0ZSk7XG4gICAgdmFyIHF1ZXVlID0gaW5pdGlhbFN0YXRlLnF1ZXVlLFxuICAgICAgZGlzcGF0Y2ggPSBkaXNwYXRjaFNldFN0YXRlLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgcXVldWUpO1xuICAgIHF1ZXVlLmRpc3BhdGNoID0gZGlzcGF0Y2g7XG4gICAgcmV0dXJuIFtpbml0aWFsU3RhdGUubWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xuICB9LFxuICB1c2VEZWJ1Z1ZhbHVlOiBtb3VudERlYnVnVmFsdWUsXG4gIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICB9LFxuICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YXRlSG9vayA9IG1vdW50U3RhdGVJbXBsKCExKTtcbiAgICBzdGF0ZUhvb2sgPSBzdGFydFRyYW5zaXRpb24uYmluZChcbiAgICAgIG51bGwsXG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLFxuICAgICAgc3RhdGVIb29rLnF1ZXVlLFxuICAgICAgITAsXG4gICAgICAhMVxuICAgICk7XG4gICAgbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlID0gc3RhdGVIb29rO1xuICAgIHJldHVybiBbITEsIHN0YXRlSG9va107XG4gIH0sXG4gIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHtcbiAgICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLFxuICAgICAgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgICBpZiAodm9pZCAwID09PSBnZXRTZXJ2ZXJTbmFwc2hvdClcbiAgICAgICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg0MDcpKTtcbiAgICAgIGdldFNlcnZlclNuYXBzaG90ID0gZ2V0U2VydmVyU25hcHNob3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0U2VydmVyU25hcHNob3QgPSBnZXRTbmFwc2hvdCgpO1xuICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdCkgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzNDkpKTtcbiAgICAgIDAgIT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIDYwKSB8fFxuICAgICAgICBwdXNoU3RvcmVDb25zaXN0ZW5jeUNoZWNrKGZpYmVyLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpO1xuICAgIH1cbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBnZXRTZXJ2ZXJTbmFwc2hvdDtcbiAgICB2YXIgaW5zdCA9IHsgdmFsdWU6IGdldFNlcnZlclNuYXBzaG90LCBnZXRTbmFwc2hvdDogZ2V0U25hcHNob3QgfTtcbiAgICBob29rLnF1ZXVlID0gaW5zdDtcbiAgICBtb3VudEVmZmVjdChzdWJzY3JpYmVUb1N0b3JlLmJpbmQobnVsbCwgZmliZXIsIGluc3QsIHN1YnNjcmliZSksIFtcbiAgICAgIHN1YnNjcmliZVxuICAgIF0pO1xuICAgIGZpYmVyLmZsYWdzIHw9IDIwNDg7XG4gICAgcHVzaEVmZmVjdChcbiAgICAgIDksXG4gICAgICB1cGRhdGVTdG9yZUluc3RhbmNlLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGZpYmVyLFxuICAgICAgICBpbnN0LFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdCxcbiAgICAgICAgZ2V0U25hcHNob3RcbiAgICAgICksXG4gICAgICB7IGRlc3Ryb3k6IHZvaWQgMCB9LFxuICAgICAgbnVsbFxuICAgICk7XG4gICAgcmV0dXJuIGdldFNlcnZlclNuYXBzaG90O1xuICB9LFxuICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKSxcbiAgICAgIGlkZW50aWZpZXJQcmVmaXggPSB3b3JrSW5Qcm9ncmVzc1Jvb3QuaWRlbnRpZmllclByZWZpeDtcbiAgICBpZiAoaXNIeWRyYXRpbmcpIHtcbiAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSB0cmVlQ29udGV4dE92ZXJmbG93O1xuICAgICAgdmFyIGlkV2l0aExlYWRpbmdCaXQgPSB0cmVlQ29udGV4dElkO1xuICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICAgICAgKFxuICAgICAgICAgIGlkV2l0aExlYWRpbmdCaXQgJiB+KDEgPDwgKDMyIC0gY2x6MzIoaWRXaXRoTGVhZGluZ0JpdCkgLSAxKSlcbiAgICAgICAgKS50b1N0cmluZygzMikgKyBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgICBpZGVudGlmaWVyUHJlZml4ID1cbiAgICAgICAgXCI6XCIgKyBpZGVudGlmaWVyUHJlZml4ICsgXCJSXCIgKyBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBsb2NhbElkQ291bnRlcisrO1xuICAgICAgMCA8IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCAmJlxuICAgICAgICAoaWRlbnRpZmllclByZWZpeCArPSBcIkhcIiArIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC50b1N0cmluZygzMikpO1xuICAgICAgaWRlbnRpZmllclByZWZpeCArPSBcIjpcIjtcbiAgICB9IGVsc2VcbiAgICAgIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBnbG9iYWxDbGllbnRJZENvdW50ZXIrKyksXG4gICAgICAgIChpZGVudGlmaWVyUHJlZml4ID1cbiAgICAgICAgICBcIjpcIiArXG4gICAgICAgICAgaWRlbnRpZmllclByZWZpeCArXG4gICAgICAgICAgXCJyXCIgK1xuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC50b1N0cmluZygzMikgK1xuICAgICAgICAgIFwiOlwiKTtcbiAgICByZXR1cm4gKGhvb2subWVtb2l6ZWRTdGF0ZSA9IGlkZW50aWZpZXJQcmVmaXgpO1xuICB9LFxuICB1c2VDYWNoZVJlZnJlc2g6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZSA9IHJlZnJlc2hDYWNoZS5iaW5kKFxuICAgICAgbnVsbCxcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDFcbiAgICApKTtcbiAgfVxufTtcbkhvb2tzRGlzcGF0Y2hlck9uTW91bnQudXNlTWVtb0NhY2hlID0gdXNlTWVtb0NhY2hlO1xuSG9va3NEaXNwYXRjaGVyT25Nb3VudC51c2VIb3N0VHJhbnNpdGlvblN0YXR1cyA9IHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzO1xuSG9va3NEaXNwYXRjaGVyT25Nb3VudC51c2VGb3JtU3RhdGUgPSBtb3VudEFjdGlvblN0YXRlO1xuSG9va3NEaXNwYXRjaGVyT25Nb3VudC51c2VBY3Rpb25TdGF0ZSA9IG1vdW50QWN0aW9uU3RhdGU7XG5Ib29rc0Rpc3BhdGNoZXJPbk1vdW50LnVzZU9wdGltaXN0aWMgPSBmdW5jdGlvbiAocGFzc3Rocm91Z2gpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IHBhc3N0aHJvdWdoO1xuICB2YXIgcXVldWUgPSB7XG4gICAgcGVuZGluZzogbnVsbCxcbiAgICBsYW5lczogMCxcbiAgICBkaXNwYXRjaDogbnVsbCxcbiAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBudWxsXG4gIH07XG4gIGhvb2sucXVldWUgPSBxdWV1ZTtcbiAgaG9vayA9IGRpc3BhdGNoT3B0aW1pc3RpY1NldFN0YXRlLmJpbmQoXG4gICAgbnVsbCxcbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLFxuICAgICEwLFxuICAgIHF1ZXVlXG4gICk7XG4gIHF1ZXVlLmRpc3BhdGNoID0gaG9vaztcbiAgcmV0dXJuIFtwYXNzdGhyb3VnaCwgaG9va107XG59O1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlID0ge1xuICByZWFkQ29udGV4dDogcmVhZENvbnRleHQsXG4gIHVzZTogdXNlLFxuICB1c2VDYWxsYmFjazogdXBkYXRlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQ6IHJlYWRDb250ZXh0LFxuICB1c2VFZmZlY3Q6IHVwZGF0ZUVmZmVjdCxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0OiB1cGRhdGVJbnNlcnRpb25FZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdDogdXBkYXRlTGF5b3V0RWZmZWN0LFxuICB1c2VNZW1vOiB1cGRhdGVNZW1vLFxuICB1c2VSZWR1Y2VyOiB1cGRhdGVSZWR1Y2VyLFxuICB1c2VSZWY6IHVwZGF0ZVJlZixcbiAgdXNlU3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gIH0sXG4gIHVzZURlYnVnVmFsdWU6IG1vdW50RGVidWdWYWx1ZSxcbiAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbChcbiAgICAgIGhvb2ssXG4gICAgICBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLFxuICAgICAgdmFsdWUsXG4gICAgICBpbml0aWFsVmFsdWVcbiAgICApO1xuICB9LFxuICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGJvb2xlYW5PclRoZW5hYmxlID0gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcilbMF0sXG4gICAgICBzdGFydCA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgcmV0dXJuIFtcbiAgICAgIFwiYm9vbGVhblwiID09PSB0eXBlb2YgYm9vbGVhbk9yVGhlbmFibGVcbiAgICAgICAgPyBib29sZWFuT3JUaGVuYWJsZVxuICAgICAgICA6IHVzZVRoZW5hYmxlKGJvb2xlYW5PclRoZW5hYmxlKSxcbiAgICAgIHN0YXJ0XG4gICAgXTtcbiAgfSxcbiAgdXNlU3luY0V4dGVybmFsU3RvcmU6IHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlLFxuICB1c2VJZDogdXBkYXRlSWRcbn07XG5Ib29rc0Rpc3BhdGNoZXJPblVwZGF0ZS51c2VDYWNoZVJlZnJlc2ggPSB1cGRhdGVSZWZyZXNoO1xuSG9va3NEaXNwYXRjaGVyT25VcGRhdGUudXNlTWVtb0NhY2hlID0gdXNlTWVtb0NhY2hlO1xuSG9va3NEaXNwYXRjaGVyT25VcGRhdGUudXNlSG9zdFRyYW5zaXRpb25TdGF0dXMgPSB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cztcbkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlLnVzZUZvcm1TdGF0ZSA9IHVwZGF0ZUFjdGlvblN0YXRlO1xuSG9va3NEaXNwYXRjaGVyT25VcGRhdGUudXNlQWN0aW9uU3RhdGUgPSB1cGRhdGVBY3Rpb25TdGF0ZTtcbkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlLnVzZU9wdGltaXN0aWMgPSBmdW5jdGlvbiAocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIHVwZGF0ZU9wdGltaXN0aWNJbXBsKGhvb2ssIGN1cnJlbnRIb29rLCBwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG59O1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXIgPSB7XG4gIHJlYWRDb250ZXh0OiByZWFkQ29udGV4dCxcbiAgdXNlOiB1c2UsXG4gIHVzZUNhbGxiYWNrOiB1cGRhdGVDYWxsYmFjayxcbiAgdXNlQ29udGV4dDogcmVhZENvbnRleHQsXG4gIHVzZUVmZmVjdDogdXBkYXRlRWZmZWN0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VJbnNlcnRpb25FZmZlY3Q6IHVwZGF0ZUluc2VydGlvbkVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0OiB1cGRhdGVMYXlvdXRFZmZlY3QsXG4gIHVzZU1lbW86IHVwZGF0ZU1lbW8sXG4gIHVzZVJlZHVjZXI6IHJlcmVuZGVyUmVkdWNlcixcbiAgdXNlUmVmOiB1cGRhdGVSZWYsXG4gIHVzZVN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gIH0sXG4gIHVzZURlYnVnVmFsdWU6IG1vdW50RGVidWdWYWx1ZSxcbiAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgIHJldHVybiBudWxsID09PSBjdXJyZW50SG9va1xuICAgICAgPyBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlLCBpbml0aWFsVmFsdWUpXG4gICAgICA6IHVwZGF0ZURlZmVycmVkVmFsdWVJbXBsKFxuICAgICAgICAgIGhvb2ssXG4gICAgICAgICAgY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBpbml0aWFsVmFsdWVcbiAgICAgICAgKTtcbiAgfSxcbiAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBib29sZWFuT3JUaGVuYWJsZSA9IHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcilbMF0sXG4gICAgICBzdGFydCA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgcmV0dXJuIFtcbiAgICAgIFwiYm9vbGVhblwiID09PSB0eXBlb2YgYm9vbGVhbk9yVGhlbmFibGVcbiAgICAgICAgPyBib29sZWFuT3JUaGVuYWJsZVxuICAgICAgICA6IHVzZVRoZW5hYmxlKGJvb2xlYW5PclRoZW5hYmxlKSxcbiAgICAgIHN0YXJ0XG4gICAgXTtcbiAgfSxcbiAgdXNlU3luY0V4dGVybmFsU3RvcmU6IHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlLFxuICB1c2VJZDogdXBkYXRlSWRcbn07XG5Ib29rc0Rpc3BhdGNoZXJPblJlcmVuZGVyLnVzZUNhY2hlUmVmcmVzaCA9IHVwZGF0ZVJlZnJlc2g7XG5Ib29rc0Rpc3BhdGNoZXJPblJlcmVuZGVyLnVzZU1lbW9DYWNoZSA9IHVzZU1lbW9DYWNoZTtcbkhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXIudXNlSG9zdFRyYW5zaXRpb25TdGF0dXMgPSB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cztcbkhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXIudXNlRm9ybVN0YXRlID0gcmVyZW5kZXJBY3Rpb25TdGF0ZTtcbkhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXIudXNlQWN0aW9uU3RhdGUgPSByZXJlbmRlckFjdGlvblN0YXRlO1xuSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlci51c2VPcHRpbWlzdGljID0gZnVuY3Rpb24gKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIGlmIChudWxsICE9PSBjdXJyZW50SG9vaylcbiAgICByZXR1cm4gdXBkYXRlT3B0aW1pc3RpY0ltcGwoaG9vaywgY3VycmVudEhvb2ssIHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbiAgaG9vay5iYXNlU3RhdGUgPSBwYXNzdGhyb3VnaDtcbiAgcmV0dXJuIFtwYXNzdGhyb3VnaCwgaG9vay5xdWV1ZS5kaXNwYXRjaF07XG59O1xuZnVuY3Rpb24gYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gIHdvcmtJblByb2dyZXNzLFxuICBjdG9yLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsXG4gIG5leHRQcm9wc1xuKSB7XG4gIGN0b3IgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBjdG9yKTtcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID1cbiAgICBudWxsID09PSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgfHwgdm9pZCAwID09PSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcbiAgICAgID8gY3RvclxuICAgICAgOiBhc3NpZ24oe30sIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyk7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIDAgPT09IHdvcmtJblByb2dyZXNzLmxhbmVzICYmXG4gICAgKHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyk7XG59XG52YXIgY2xhc3NDb21wb25lbnRVcGRhdGVyID0ge1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChjb21wb25lbnQpIHtcbiAgICByZXR1cm4gKGNvbXBvbmVudCA9IGNvbXBvbmVudC5fcmVhY3RJbnRlcm5hbHMpXG4gICAgICA/IGdldE5lYXJlc3RNb3VudGVkRmliZXIoY29tcG9uZW50KSA9PT0gY29tcG9uZW50XG4gICAgICA6ICExO1xuICB9LFxuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIGluc3QgPSBpbnN0Ll9yZWFjdEludGVybmFscztcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKCksXG4gICAgICB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuICAgIHZvaWQgMCAhPT0gY2FsbGJhY2sgJiYgbnVsbCAhPT0gY2FsbGJhY2sgJiYgKHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrKTtcbiAgICBwYXlsb2FkID0gZW5xdWV1ZVVwZGF0ZShpbnN0LCB1cGRhdGUsIGxhbmUpO1xuICAgIG51bGwgIT09IHBheWxvYWQgJiZcbiAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIocGF5bG9hZCwgaW5zdCwgbGFuZSksXG4gICAgICBlbnRhbmdsZVRyYW5zaXRpb25zKHBheWxvYWQsIGluc3QsIGxhbmUpKTtcbiAgfSxcbiAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgaW5zdCA9IGluc3QuX3JlYWN0SW50ZXJuYWxzO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoKSxcbiAgICAgIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICB1cGRhdGUudGFnID0gMTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgdm9pZCAwICE9PSBjYWxsYmFjayAmJiBudWxsICE9PSBjYWxsYmFjayAmJiAodXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2spO1xuICAgIHBheWxvYWQgPSBlbnF1ZXVlVXBkYXRlKGluc3QsIHVwZGF0ZSwgbGFuZSk7XG4gICAgbnVsbCAhPT0gcGF5bG9hZCAmJlxuICAgICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcihwYXlsb2FkLCBpbnN0LCBsYW5lKSxcbiAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocGF5bG9hZCwgaW5zdCwgbGFuZSkpO1xuICB9LFxuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChpbnN0LCBjYWxsYmFjaykge1xuICAgIGluc3QgPSBpbnN0Ll9yZWFjdEludGVybmFscztcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKCksXG4gICAgICB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgdXBkYXRlLnRhZyA9IDI7XG4gICAgdm9pZCAwICE9PSBjYWxsYmFjayAmJiBudWxsICE9PSBjYWxsYmFjayAmJiAodXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2spO1xuICAgIGNhbGxiYWNrID0gZW5xdWV1ZVVwZGF0ZShpbnN0LCB1cGRhdGUsIGxhbmUpO1xuICAgIG51bGwgIT09IGNhbGxiYWNrICYmXG4gICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGNhbGxiYWNrLCBpbnN0LCBsYW5lKSxcbiAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMoY2FsbGJhY2ssIGluc3QsIGxhbmUpKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgY3RvcixcbiAgb2xkUHJvcHMsXG4gIG5ld1Byb3BzLFxuICBvbGRTdGF0ZSxcbiAgbmV3U3RhdGUsXG4gIG5leHRDb250ZXh0XG4pIHtcbiAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB3b3JrSW5Qcm9ncmVzcy5zaG91bGRDb21wb25lbnRVcGRhdGVcbiAgICA/IHdvcmtJblByb2dyZXNzLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KVxuICAgIDogY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnRcbiAgICAgID8gIXNoYWxsb3dFcXVhbChvbGRQcm9wcywgbmV3UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwob2xkU3RhdGUsIG5ld1N0YXRlKVxuICAgICAgOiAhMDtcbn1cbmZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgaW5zdGFuY2UsXG4gIG5ld1Byb3BzLFxuICBuZXh0Q29udGV4dFxuKSB7XG4gIHdvcmtJblByb2dyZXNzID0gaW5zdGFuY2Uuc3RhdGU7XG4gIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgaW5zdGFuY2Uuc3RhdGUgIT09IHdvcmtJblByb2dyZXNzICYmXG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKENvbXBvbmVudCwgYmFzZVByb3BzKSB7XG4gIHZhciBuZXdQcm9wcyA9IGJhc2VQcm9wcztcbiAgaWYgKFwicmVmXCIgaW4gYmFzZVByb3BzKSB7XG4gICAgbmV3UHJvcHMgPSB7fTtcbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBiYXNlUHJvcHMpXG4gICAgICBcInJlZlwiICE9PSBwcm9wTmFtZSAmJiAobmV3UHJvcHNbcHJvcE5hbWVdID0gYmFzZVByb3BzW3Byb3BOYW1lXSk7XG4gIH1cbiAgaWYgKChDb21wb25lbnQgPSBDb21wb25lbnQuZGVmYXVsdFByb3BzKSkge1xuICAgIG5ld1Byb3BzID09PSBiYXNlUHJvcHMgJiYgKG5ld1Byb3BzID0gYXNzaWduKHt9LCBuZXdQcm9wcykpO1xuICAgIGZvciAodmFyIHByb3BOYW1lJDY3IGluIENvbXBvbmVudClcbiAgICAgIHZvaWQgMCA9PT0gbmV3UHJvcHNbcHJvcE5hbWUkNjddICYmXG4gICAgICAgIChuZXdQcm9wc1twcm9wTmFtZSQ2N10gPSBDb21wb25lbnRbcHJvcE5hbWUkNjddKTtcbiAgfVxuICByZXR1cm4gbmV3UHJvcHM7XG59XG52YXIgcmVwb3J0R2xvYmFsRXJyb3IgPVxuICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXBvcnRFcnJvclxuICAgID8gcmVwb3J0RXJyb3JcbiAgICA6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHdpbmRvdyAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHdpbmRvdy5FcnJvckV2ZW50XG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBldmVudCA9IG5ldyB3aW5kb3cuRXJyb3JFdmVudChcImVycm9yXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6ICEwLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogITAsXG4gICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgZXJyb3IgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gZXJyb3IgJiZcbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICA/IFN0cmluZyhlcnJvci5tZXNzYWdlKVxuICAgICAgICAgICAgICAgIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpKSByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHByb2Nlc3MgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcm9jZXNzLmVtaXRcbiAgICAgICAgKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KFwidW5jYXVnaHRFeGNlcHRpb25cIiwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH07XG5mdW5jdGlvbiBkZWZhdWx0T25VbmNhdWdodEVycm9yKGVycm9yKSB7XG4gIHJlcG9ydEdsb2JhbEVycm9yKGVycm9yKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRPbkNhdWdodEVycm9yKGVycm9yKSB7XG4gIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xufVxuZnVuY3Rpb24gZGVmYXVsdE9uUmVjb3ZlcmFibGVFcnJvcihlcnJvcikge1xuICByZXBvcnRHbG9iYWxFcnJvcihlcnJvcik7XG59XG5mdW5jdGlvbiBsb2dVbmNhdWdodEVycm9yKHJvb3QsIGVycm9ySW5mbykge1xuICB0cnkge1xuICAgIHZhciBvblVuY2F1Z2h0RXJyb3IgPSByb290Lm9uVW5jYXVnaHRFcnJvcjtcbiAgICBvblVuY2F1Z2h0RXJyb3IoZXJyb3JJbmZvLnZhbHVlLCB7IGNvbXBvbmVudFN0YWNrOiBlcnJvckluZm8uc3RhY2sgfSk7XG4gIH0gY2F0Y2ggKGUkNjgpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGUkNjg7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGxvZ0NhdWdodEVycm9yKHJvb3QsIGJvdW5kYXJ5LCBlcnJvckluZm8pIHtcbiAgdHJ5IHtcbiAgICB2YXIgb25DYXVnaHRFcnJvciA9IHJvb3Qub25DYXVnaHRFcnJvcjtcbiAgICBvbkNhdWdodEVycm9yKGVycm9ySW5mby52YWx1ZSwge1xuICAgICAgY29tcG9uZW50U3RhY2s6IGVycm9ySW5mby5zdGFjayxcbiAgICAgIGVycm9yQm91bmRhcnk6IDEgPT09IGJvdW5kYXJ5LnRhZyA/IGJvdW5kYXJ5LnN0YXRlTm9kZSA6IG51bGxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSQ2OSkge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZSQ2OTtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHJvb3QsIGVycm9ySW5mbywgbGFuZSkge1xuICBsYW5lID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICBsYW5lLnRhZyA9IDM7XG4gIGxhbmUucGF5bG9hZCA9IHsgZWxlbWVudDogbnVsbCB9O1xuICBsYW5lLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIGxvZ1VuY2F1Z2h0RXJyb3Iocm9vdCwgZXJyb3JJbmZvKTtcbiAgfTtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGxhbmUpIHtcbiAgbGFuZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgbGFuZS50YWcgPSAzO1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGluaXRpYWxpemVDbGFzc0Vycm9yVXBkYXRlKHVwZGF0ZSwgcm9vdCwgZmliZXIsIGVycm9ySW5mbykge1xuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID0gZmliZXIudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7XG4gIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGxvZ0NhdWdodEVycm9yKHJvb3QsIGZpYmVyLCBlcnJvckluZm8pO1xuICAgIH07XG4gIH1cbiAgdmFyIGluc3QgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIG51bGwgIT09IGluc3QgJiZcbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0LmNvbXBvbmVudERpZENhdGNoICYmXG4gICAgKHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGxvZ0NhdWdodEVycm9yKHJvb3QsIGZpYmVyLCBlcnJvckluZm8pO1xuICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICYmXG4gICAgICAgIChudWxsID09PSBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZFxuICAgICAgICAgID8gKGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbmV3IFNldChbdGhpc10pKVxuICAgICAgICAgIDogbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuYWRkKHRoaXMpKTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHRoaXMuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3JJbmZvLnZhbHVlLCB7XG4gICAgICAgIGNvbXBvbmVudFN0YWNrOiBudWxsICE9PSBzdGFjayA/IHN0YWNrIDogXCJcIlxuICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aHJvd0V4Y2VwdGlvbihcbiAgcm9vdCxcbiAgcmV0dXJuRmliZXIsXG4gIHNvdXJjZUZpYmVyLFxuICB2YWx1ZSxcbiAgcm9vdFJlbmRlckxhbmVzXG4pIHtcbiAgc291cmNlRmliZXIuZmxhZ3MgfD0gMzI3Njg7XG4gIGlmIChcbiAgICBudWxsICE9PSB2YWx1ZSAmJlxuICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlLnRoZW5cbiAgKSB7XG4gICAgcmV0dXJuRmliZXIgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG4gICAgbnVsbCAhPT0gcmV0dXJuRmliZXIgJiZcbiAgICAgIHByb3BhZ2F0ZVBhcmVudENvbnRleHRDaGFuZ2VzKFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgc291cmNlRmliZXIsXG4gICAgICAgIHJvb3RSZW5kZXJMYW5lcyxcbiAgICAgICAgITBcbiAgICAgICk7XG4gICAgc291cmNlRmliZXIgPSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50O1xuICAgIGlmIChudWxsICE9PSBzb3VyY2VGaWJlcikge1xuICAgICAgc3dpdGNoIChzb3VyY2VGaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbnVsbCA9PT0gc2hlbGxCb3VuZGFyeVxuICAgICAgICAgICAgICA/IHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKVxuICAgICAgICAgICAgICA6IG51bGwgPT09IHNvdXJjZUZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAgIDAgPT09IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IDMpLFxuICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzICY9IC0yNTcpLFxuICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgIChzb3VyY2VGaWJlci5sYW5lcyA9IHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbm9vcFN1c3BlbnNleUNvbW1pdFRoZW5hYmxlXG4gICAgICAgICAgICAgID8gKHNvdXJjZUZpYmVyLmZsYWdzIHw9IDE2Mzg0KVxuICAgICAgICAgICAgICA6ICgocmV0dXJuRmliZXIgPSBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgID8gKHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gbmV3IFNldChbdmFsdWVdKSlcbiAgICAgICAgICAgICAgICAgIDogcmV0dXJuRmliZXIuYWRkKHZhbHVlKSxcbiAgICAgICAgICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgITFcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc291cmNlRmliZXIuZmxhZ3MgfD0gNjU1MzYpLFxuICAgICAgICAgICAgdmFsdWUgPT09IG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZVxuICAgICAgICAgICAgICA/IChzb3VyY2VGaWJlci5mbGFncyB8PSAxNjM4NClcbiAgICAgICAgICAgICAgOiAoKHJldHVybkZpYmVyID0gc291cmNlRmliZXIudXBkYXRlUXVldWUpLFxuICAgICAgICAgICAgICAgIG51bGwgPT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICA/ICgocmV0dXJuRmliZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2VzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIHJldHJ5UXVldWU6IG5ldyBTZXQoW3ZhbHVlXSlcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IHJldHVybkZpYmVyKSlcbiAgICAgICAgICAgICAgICAgIDogKChzb3VyY2VGaWJlciA9IHJldHVybkZpYmVyLnJldHJ5UXVldWUpLFxuICAgICAgICAgICAgICAgICAgICBudWxsID09PSBzb3VyY2VGaWJlclxuICAgICAgICAgICAgICAgICAgICAgID8gKHJldHVybkZpYmVyLnJldHJ5UXVldWUgPSBuZXcgU2V0KFt2YWx1ZV0pKVxuICAgICAgICAgICAgICAgICAgICAgIDogc291cmNlRmliZXIuYWRkKHZhbHVlKSksXG4gICAgICAgICAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgICExXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDM1LCBzb3VyY2VGaWJlci50YWcpKTtcbiAgICB9XG4gICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpO1xuICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICByZXR1cm4gITE7XG4gIH1cbiAgaWYgKGlzSHlkcmF0aW5nKVxuICAgIHJldHVybiAoXG4gICAgICAocmV0dXJuRmliZXIgPSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50KSxcbiAgICAgIG51bGwgIT09IHJldHVybkZpYmVyXG4gICAgICAgID8gKDAgPT09IChyZXR1cm5GaWJlci5mbGFncyAmIDY1NTM2KSAmJiAocmV0dXJuRmliZXIuZmxhZ3MgfD0gMjU2KSxcbiAgICAgICAgICAocmV0dXJuRmliZXIuZmxhZ3MgfD0gNjU1MzYpLFxuICAgICAgICAgIChyZXR1cm5GaWJlci5sYW5lcyA9IHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgdmFsdWUgIT09IEh5ZHJhdGlvbk1pc21hdGNoRXhjZXB0aW9uICYmXG4gICAgICAgICAgICAoKHJvb3QgPSBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQyMiksIHsgY2F1c2U6IHZhbHVlIH0pKSxcbiAgICAgICAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IoY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIocm9vdCwgc291cmNlRmliZXIpKSkpXG4gICAgICAgIDogKHZhbHVlICE9PSBIeWRyYXRpb25NaXNtYXRjaEV4Y2VwdGlvbiAmJlxuICAgICAgICAgICAgKChyZXR1cm5GaWJlciA9IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDIzKSwge1xuICAgICAgICAgICAgICBjYXVzZTogdmFsdWVcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IoXG4gICAgICAgICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHJldHVybkZpYmVyLCBzb3VyY2VGaWJlcilcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgIChyb290ID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZSksXG4gICAgICAgICAgKHJvb3QuZmxhZ3MgfD0gNjU1MzYpLFxuICAgICAgICAgIChyb290UmVuZGVyTGFuZXMgJj0gLXJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgKHJvb3QubGFuZXMgfD0gcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAodmFsdWUgPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih2YWx1ZSwgc291cmNlRmliZXIpKSxcbiAgICAgICAgICAocm9vdFJlbmRlckxhbmVzID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKFxuICAgICAgICAgICAgcm9vdC5zdGF0ZU5vZGUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHJvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICkpLFxuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZShyb290LCByb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgIDQgIT09IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgJiZcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gMikpLFxuICAgICAgITFcbiAgICApO1xuICB2YXIgd3JhcHBlckVycm9yID0gRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg1MjApLCB7IGNhdXNlOiB2YWx1ZSB9KTtcbiAgd3JhcHBlckVycm9yID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIod3JhcHBlckVycm9yLCBzb3VyY2VGaWJlcik7XG4gIG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnNcbiAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzID0gW3dyYXBwZXJFcnJvcl0pXG4gICAgOiB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzLnB1c2god3JhcHBlckVycm9yKTtcbiAgNCAhPT0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAmJiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IDIpO1xuICBpZiAobnVsbCA9PT0gcmV0dXJuRmliZXIpIHJldHVybiAhMDtcbiAgdmFsdWUgPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih2YWx1ZSwgc291cmNlRmliZXIpO1xuICBzb3VyY2VGaWJlciA9IHJldHVybkZpYmVyO1xuICBkbyB7XG4gICAgc3dpdGNoIChzb3VyY2VGaWJlci50YWcpIHtcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoc291cmNlRmliZXIuZmxhZ3MgfD0gNjU1MzYpLFxuICAgICAgICAgIChyb290ID0gcm9vdFJlbmRlckxhbmVzICYgLXJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgKHNvdXJjZUZpYmVyLmxhbmVzIHw9IHJvb3QpLFxuICAgICAgICAgIChyb290ID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHNvdXJjZUZpYmVyLnN0YXRlTm9kZSwgdmFsdWUsIHJvb3QpKSxcbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUoc291cmNlRmliZXIsIHJvb3QpLFxuICAgICAgICAgICExXG4gICAgICAgICk7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKHJldHVybkZpYmVyID0gc291cmNlRmliZXIudHlwZSksXG4gICAgICAgICAgKHdyYXBwZXJFcnJvciA9IHNvdXJjZUZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgICAgMCA9PT0gKHNvdXJjZUZpYmVyLmZsYWdzICYgMTI4KSAmJlxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJldHVybkZpYmVyLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciB8fFxuICAgICAgICAgICAgICAobnVsbCAhPT0gd3JhcHBlckVycm9yICYmXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygd3JhcHBlckVycm9yLmNvbXBvbmVudERpZENhdGNoICYmXG4gICAgICAgICAgICAgICAgKG51bGwgPT09IGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkIHx8XG4gICAgICAgICAgICAgICAgICAhbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuaGFzKHdyYXBwZXJFcnJvcikpKSkpXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgIChyb290UmVuZGVyTGFuZXMgJj0gLXJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAoc291cmNlRmliZXIubGFuZXMgfD0gcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgIChyb290UmVuZGVyTGFuZXMgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKHJvb3RSZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgaW5pdGlhbGl6ZUNsYXNzRXJyb3JVcGRhdGUoXG4gICAgICAgICAgICAgIHJvb3RSZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgc291cmNlRmliZXIsXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHNvdXJjZUZpYmVyLCByb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgITFcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBzb3VyY2VGaWJlciA9IHNvdXJjZUZpYmVyLnJldHVybjtcbiAgfSB3aGlsZSAobnVsbCAhPT0gc291cmNlRmliZXIpO1xuICByZXR1cm4gITE7XG59XG52YXIgU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uID0gRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg0NjEpKSxcbiAgZGlkUmVjZWl2ZVVwZGF0ZSA9ICExO1xuZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPVxuICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgID8gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcylcbiAgICAgIDogcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgY3VycmVudC5jaGlsZCxcbiAgICAgICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUZvcndhcmRSZWYoXG4gIGN1cnJlbnQsXG4gIHdvcmtJblByb2dyZXNzLFxuICBDb21wb25lbnQsXG4gIG5leHRQcm9wcyxcbiAgcmVuZGVyTGFuZXNcbikge1xuICBDb21wb25lbnQgPSBDb21wb25lbnQucmVuZGVyO1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICBpZiAoXCJyZWZcIiBpbiBuZXh0UHJvcHMpIHtcbiAgICB2YXIgcHJvcHNXaXRob3V0UmVmID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIG5leHRQcm9wcylcbiAgICAgIFwicmVmXCIgIT09IGtleSAmJiAocHJvcHNXaXRob3V0UmVmW2tleV0gPSBuZXh0UHJvcHNba2V5XSk7XG4gIH0gZWxzZSBwcm9wc1dpdGhvdXRSZWYgPSBuZXh0UHJvcHM7XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgbmV4dFByb3BzID0gcmVuZGVyV2l0aEhvb2tzKFxuICAgIGN1cnJlbnQsXG4gICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgQ29tcG9uZW50LFxuICAgIHByb3BzV2l0aG91dFJlZixcbiAgICByZWYsXG4gICAgcmVuZGVyTGFuZXNcbiAgKTtcbiAga2V5ID0gY2hlY2tEaWRSZW5kZXJJZEhvb2soKTtcbiAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgIWRpZFJlY2VpdmVVcGRhdGUpXG4gICAgcmV0dXJuIChcbiAgICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpLFxuICAgICAgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgKTtcbiAgaXNIeWRyYXRpbmcgJiYga2V5ICYmIHB1c2hNYXRlcmlhbGl6ZWRUcmVlSWQod29ya0luUHJvZ3Jlc3MpO1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZU1lbW9Db21wb25lbnQoXG4gIGN1cnJlbnQsXG4gIHdvcmtJblByb2dyZXNzLFxuICBDb21wb25lbnQsXG4gIG5leHRQcm9wcyxcbiAgcmVuZGVyTGFuZXNcbikge1xuICBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgIHZhciB0eXBlID0gQ29tcG9uZW50LnR5cGU7XG4gICAgaWYgKFxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgIXNob3VsZENvbnN0cnVjdCh0eXBlKSAmJlxuICAgICAgdm9pZCAwID09PSB0eXBlLmRlZmF1bHRQcm9wcyAmJlxuICAgICAgbnVsbCA9PT0gQ29tcG9uZW50LmNvbXBhcmVcbiAgICApXG4gICAgICByZXR1cm4gKFxuICAgICAgICAod29ya0luUHJvZ3Jlc3MudGFnID0gMTUpLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IHR5cGUpLFxuICAgICAgICB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICBjdXJyZW50ID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKFxuICAgICAgQ29tcG9uZW50LnR5cGUsXG4gICAgICBudWxsLFxuICAgICAgbmV4dFByb3BzLFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tb2RlLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApO1xuICAgIGN1cnJlbnQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgIGN1cnJlbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgcmV0dXJuICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQpO1xuICB9XG4gIHR5cGUgPSBjdXJyZW50LmNoaWxkO1xuICBpZiAoIWNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KGN1cnJlbnQsIHJlbmRlckxhbmVzKSkge1xuICAgIHZhciBwcmV2UHJvcHMgPSB0eXBlLm1lbW9pemVkUHJvcHM7XG4gICAgQ29tcG9uZW50ID0gQ29tcG9uZW50LmNvbXBhcmU7XG4gICAgQ29tcG9uZW50ID0gbnVsbCAhPT0gQ29tcG9uZW50ID8gQ29tcG9uZW50IDogc2hhbGxvd0VxdWFsO1xuICAgIGlmIChDb21wb25lbnQocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYpXG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE7XG4gIGN1cnJlbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyh0eXBlLCBuZXh0UHJvcHMpO1xuICBjdXJyZW50LnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgY3VycmVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcmV0dXJuICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQpO1xufVxuZnVuY3Rpb24gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChcbiAgY3VycmVudCxcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIENvbXBvbmVudCxcbiAgbmV4dFByb3BzLFxuICByZW5kZXJMYW5lc1xuKSB7XG4gIGlmIChudWxsICE9PSBjdXJyZW50KSB7XG4gICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICBpZiAoXG4gICAgICBzaGFsbG93RXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpICYmXG4gICAgICBjdXJyZW50LnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmXG4gICAgKVxuICAgICAgaWYgKFxuICAgICAgICAoKGRpZFJlY2VpdmVVcGRhdGUgPSAhMSksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgPSBuZXh0UHJvcHMgPSBwcmV2UHJvcHMpLFxuICAgICAgICBjaGVja1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dChjdXJyZW50LCByZW5kZXJMYW5lcykpXG4gICAgICApXG4gICAgICAgIDAgIT09IChjdXJyZW50LmZsYWdzICYgMTMxMDcyKSAmJiAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzKSxcbiAgICAgICAgICBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcylcbiAgICAgICAgKTtcbiAgfVxuICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgY3VycmVudCxcbiAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICBDb21wb25lbnQsXG4gICAgbmV4dFByb3BzLFxuICAgIHJlbmRlckxhbmVzXG4gICk7XG59XG5mdW5jdGlvbiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuLFxuICAgIG5leHRJc0RldGFjaGVkID0gMCAhPT0gKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5fcGVuZGluZ1Zpc2liaWxpdHkgJiAyKSxcbiAgICBwcmV2U3RhdGUgPSBudWxsICE9PSBjdXJyZW50ID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcbiAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIGlmIChcImhpZGRlblwiID09PSBuZXh0UHJvcHMubW9kZSB8fCBuZXh0SXNEZXRhY2hlZCkge1xuICAgIGlmICgwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpKSB7XG4gICAgICBuZXh0UHJvcHMgPVxuICAgICAgICBudWxsICE9PSBwcmV2U3RhdGUgPyBwcmV2U3RhdGUuYmFzZUxhbmVzIHwgcmVuZGVyTGFuZXMgOiByZW5kZXJMYW5lcztcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50KSB7XG4gICAgICAgIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgICAgICAgZm9yIChuZXh0SXNEZXRhY2hlZCA9IDA7IG51bGwgIT09IG5leHRDaGlsZHJlbjsgKVxuICAgICAgICAgIChuZXh0SXNEZXRhY2hlZCA9XG4gICAgICAgICAgICBuZXh0SXNEZXRhY2hlZCB8IG5leHRDaGlsZHJlbi5sYW5lcyB8IG5leHRDaGlsZHJlbi5jaGlsZExhbmVzKSxcbiAgICAgICAgICAgIChuZXh0Q2hpbGRyZW4gPSBuZXh0Q2hpbGRyZW4uc2libGluZyk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBuZXh0SXNEZXRhY2hlZCAmIH5uZXh0UHJvcHM7XG4gICAgICB9IGVsc2UgKHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSAwKSwgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbCk7XG4gICAgICByZXR1cm4gZGVmZXJIaWRkZW5PZmZzY3JlZW5Db21wb25lbnQoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoMCAhPT0gKHJlbmRlckxhbmVzICYgNTM2ODcwOTEyKSlcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0geyBiYXNlTGFuZXM6IDAsIGNhY2hlUG9vbDogbnVsbCB9KSxcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgIHB1c2hUcmFuc2l0aW9uKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBudWxsICE9PSBwcmV2U3RhdGUgPyBwcmV2U3RhdGUuY2FjaGVQb29sIDogbnVsbFxuICAgICAgICAgICksXG4gICAgICAgIG51bGwgIT09IHByZXZTdGF0ZVxuICAgICAgICAgID8gcHVzaEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHByZXZTdGF0ZSlcbiAgICAgICAgICA6IHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2soKSxcbiAgICAgICAgcHVzaE9mZnNjcmVlblN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IDUzNjg3MDkxMiksXG4gICAgICAgIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlID8gcHJldlN0YXRlLmJhc2VMYW5lcyB8IHJlbmRlckxhbmVzIDogcmVuZGVyTGFuZXMsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfSBlbHNlXG4gICAgbnVsbCAhPT0gcHJldlN0YXRlXG4gICAgICA/IChwdXNoVHJhbnNpdGlvbih3b3JrSW5Qcm9ncmVzcywgcHJldlN0YXRlLmNhY2hlUG9vbCksXG4gICAgICAgIHB1c2hIaWRkZW5Db250ZXh0KHdvcmtJblByb2dyZXNzLCBwcmV2U3RhdGUpLFxuICAgICAgICByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGwpKVxuICAgICAgOiAobnVsbCAhPT0gY3VycmVudCAmJiBwdXNoVHJhbnNpdGlvbih3b3JrSW5Qcm9ncmVzcywgbnVsbCksXG4gICAgICAgIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2soKSxcbiAgICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKSk7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuZnVuY3Rpb24gZGVmZXJIaWRkZW5PZmZzY3JlZW5Db21wb25lbnQoXG4gIGN1cnJlbnQsXG4gIHdvcmtJblByb2dyZXNzLFxuICBuZXh0QmFzZUxhbmVzLFxuICByZW5kZXJMYW5lc1xuKSB7XG4gIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBwZWVrQ2FjaGVGcm9tUG9vbCgpO1xuICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPVxuICAgIG51bGwgPT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdFxuICAgICAgPyBudWxsXG4gICAgICA6IHsgcGFyZW50OiBDYWNoZUNvbnRleHQuX2N1cnJlbnRWYWx1ZSwgcG9vbDogSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0IH07XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgYmFzZUxhbmVzOiBuZXh0QmFzZUxhbmVzLFxuICAgIGNhY2hlUG9vbDogSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gIH07XG4gIG51bGwgIT09IGN1cnJlbnQgJiYgcHVzaFRyYW5zaXRpb24od29ya0luUHJvZ3Jlc3MsIG51bGwpO1xuICByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKCk7XG4gIHB1c2hPZmZzY3JlZW5TdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgcHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzLCAhMCk7XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICBpZiAobnVsbCA9PT0gcmVmKVxuICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgIG51bGwgIT09IGN1cnJlbnQucmVmICYmXG4gICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMjA5NzY2NCk7XG4gIGVsc2Uge1xuICAgIGlmIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiByZWYgJiYgXCJvYmplY3RcIiAhPT0gdHlwZW9mIHJlZilcbiAgICAgIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjg0KSk7XG4gICAgaWYgKG51bGwgPT09IGN1cnJlbnQgfHwgY3VycmVudC5yZWYgIT09IHJlZilcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwOTc2NjQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KFxuICBjdXJyZW50LFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgQ29tcG9uZW50LFxuICBuZXh0UHJvcHMsXG4gIHJlbmRlckxhbmVzXG4pIHtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICBDb21wb25lbnQgPSByZW5kZXJXaXRoSG9va3MoXG4gICAgY3VycmVudCxcbiAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICBDb21wb25lbnQsXG4gICAgbmV4dFByb3BzLFxuICAgIHZvaWQgMCxcbiAgICByZW5kZXJMYW5lc1xuICApO1xuICBuZXh0UHJvcHMgPSBjaGVja0RpZFJlbmRlcklkSG9vaygpO1xuICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSlcbiAgICByZXR1cm4gKFxuICAgICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyksXG4gICAgICBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcylcbiAgICApO1xuICBpc0h5ZHJhdGluZyAmJiBuZXh0UHJvcHMgJiYgcHVzaE1hdGVyaWFsaXplZFRyZWVJZCh3b3JrSW5Qcm9ncmVzcyk7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuZnVuY3Rpb24gcmVwbGF5RnVuY3Rpb25Db21wb25lbnQoXG4gIGN1cnJlbnQsXG4gIHdvcmtJblByb2dyZXNzLFxuICBuZXh0UHJvcHMsXG4gIENvbXBvbmVudCxcbiAgc2Vjb25kQXJnLFxuICByZW5kZXJMYW5lc1xuKSB7XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICBuZXh0UHJvcHMgPSByZW5kZXJXaXRoSG9va3NBZ2FpbihcbiAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICBDb21wb25lbnQsXG4gICAgbmV4dFByb3BzLFxuICAgIHNlY29uZEFyZ1xuICApO1xuICBmaW5pc2hSZW5kZXJpbmdIb29rcyhjdXJyZW50KTtcbiAgQ29tcG9uZW50ID0gY2hlY2tEaWRSZW5kZXJJZEhvb2soKTtcbiAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgIWRpZFJlY2VpdmVVcGRhdGUpXG4gICAgcmV0dXJuIChcbiAgICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpLFxuICAgICAgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgKTtcbiAgaXNIeWRyYXRpbmcgJiYgQ29tcG9uZW50ICYmIHB1c2hNYXRlcmlhbGl6ZWRUcmVlSWQod29ya0luUHJvZ3Jlc3MpO1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzQ29tcG9uZW50KFxuICBjdXJyZW50LFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgQ29tcG9uZW50LFxuICBuZXh0UHJvcHMsXG4gIHJlbmRlckxhbmVzXG4pIHtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3QsXG4gICAgICBjb250ZXh0VHlwZSA9IENvbXBvbmVudC5jb250ZXh0VHlwZTtcbiAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgY29udGV4dFR5cGUgJiZcbiAgICAgIG51bGwgIT09IGNvbnRleHRUeXBlICYmXG4gICAgICAoY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKSk7XG4gICAgY29udGV4dCA9IG5ldyBDb21wb25lbnQobmV4dFByb3BzLCBjb250ZXh0KTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID1cbiAgICAgIG51bGwgIT09IGNvbnRleHQuc3RhdGUgJiYgdm9pZCAwICE9PSBjb250ZXh0LnN0YXRlID8gY29udGV4dC5zdGF0ZSA6IG51bGw7XG4gICAgY29udGV4dC51cGRhdGVyID0gY2xhc3NDb21wb25lbnRVcGRhdGVyO1xuICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGNvbnRleHQ7XG4gICAgY29udGV4dC5fcmVhY3RJbnRlcm5hbHMgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIGNvbnRleHQucHJvcHMgPSBuZXh0UHJvcHM7XG4gICAgY29udGV4dC5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgY29udGV4dC5yZWZzID0ge307XG4gICAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKTtcbiAgICBjb250ZXh0VHlwZSA9IENvbXBvbmVudC5jb250ZXh0VHlwZTtcbiAgICBjb250ZXh0LmNvbnRleHQgPVxuICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGNvbnRleHRUeXBlICYmIG51bGwgIT09IGNvbnRleHRUeXBlXG4gICAgICAgID8gcmVhZENvbnRleHQoY29udGV4dFR5cGUpXG4gICAgICAgIDogZW1wdHlDb250ZXh0T2JqZWN0O1xuICAgIGNvbnRleHQuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgIGNvbnRleHRUeXBlID0gQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250ZXh0VHlwZSAmJlxuICAgICAgKGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBjb250ZXh0VHlwZSxcbiAgICAgICAgbmV4dFByb3BzXG4gICAgICApLFxuICAgICAgKGNvbnRleHQuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSk7XG4gICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyB8fFxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGV4dC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSB8fFxuICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNvbnRleHQuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjb250ZXh0LmNvbXBvbmVudFdpbGxNb3VudCkgfHxcbiAgICAgICgoY29udGV4dFR5cGUgPSBjb250ZXh0LnN0YXRlKSxcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNvbnRleHQuY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgIGNvbnRleHQuY29tcG9uZW50V2lsbE1vdW50KCksXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250ZXh0LlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgY29udGV4dC5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksXG4gICAgICBjb250ZXh0VHlwZSAhPT0gY29udGV4dC5zdGF0ZSAmJlxuICAgICAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShjb250ZXh0LCBjb250ZXh0LnN0YXRlLCBudWxsKSxcbiAgICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyksXG4gICAgICBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCksXG4gICAgICAoY29udGV4dC5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpKTtcbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250ZXh0LmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDE5NDMwOCk7XG4gICAgbmV4dFByb3BzID0gITA7XG4gIH0gZWxzZSBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgdmFyIHVucmVzb2x2ZWRPbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMsXG4gICAgICBvbGRQcm9wcyA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKENvbXBvbmVudCwgdW5yZXNvbHZlZE9sZFByb3BzKTtcbiAgICBjb250ZXh0LnByb3BzID0gb2xkUHJvcHM7XG4gICAgdmFyIG9sZENvbnRleHQgPSBjb250ZXh0LmNvbnRleHQsXG4gICAgICBjb250ZXh0VHlwZSRqc2NvbXAkMCA9IENvbXBvbmVudC5jb250ZXh0VHlwZTtcbiAgICBjb250ZXh0VHlwZSA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgY29udGV4dFR5cGUkanNjb21wJDAgJiZcbiAgICAgIG51bGwgIT09IGNvbnRleHRUeXBlJGpzY29tcCQwICYmXG4gICAgICAoY29udGV4dFR5cGUgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSRqc2NvbXAkMCkpO1xuICAgIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICAgIGNvbnRleHRUeXBlJGpzY29tcCQwID1cbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyB8fFxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGV4dC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtcbiAgICB1bnJlc29sdmVkT2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgIT09IHVucmVzb2x2ZWRPbGRQcm9wcztcbiAgICBjb250ZXh0VHlwZSRqc2NvbXAkMCB8fFxuICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNvbnRleHQuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY29udGV4dC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKSB8fFxuICAgICAgKCh1bnJlc29sdmVkT2xkUHJvcHMgfHwgb2xkQ29udGV4dCAhPT0gY29udGV4dFR5cGUpICYmXG4gICAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgIGNvbnRleHRUeXBlXG4gICAgICAgICkpO1xuICAgIGhhc0ZvcmNlVXBkYXRlID0gITE7XG4gICAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICBjb250ZXh0LnN0YXRlID0gb2xkU3RhdGU7XG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCk7XG4gICAgb2xkQ29udGV4dCA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgdW5yZXNvbHZlZE9sZFByb3BzIHx8IG9sZFN0YXRlICE9PSBvbGRDb250ZXh0IHx8IGhhc0ZvcmNlVXBkYXRlXG4gICAgICA/IChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgJiZcbiAgICAgICAgICAoYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxcbiAgICAgICAgICAgIG5leHRQcm9wc1xuICAgICAgICAgICksXG4gICAgICAgICAgKG9sZENvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSksXG4gICAgICAgIChvbGRQcm9wcyA9XG4gICAgICAgICAgaGFzRm9yY2VVcGRhdGUgfHxcbiAgICAgICAgICBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgb2xkUHJvcHMsXG4gICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICBvbGRTdGF0ZSxcbiAgICAgICAgICAgIG9sZENvbnRleHQsXG4gICAgICAgICAgICBjb250ZXh0VHlwZVxuICAgICAgICAgICkpXG4gICAgICAgICAgPyAoY29udGV4dFR5cGUkanNjb21wJDAgfHxcbiAgICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNvbnRleHQuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNvbnRleHQuY29tcG9uZW50V2lsbE1vdW50KSB8fFxuICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGV4dC5jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBvbmVudFdpbGxNb3VudCgpLFxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250ZXh0LlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgICAgICBjb250ZXh0LlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250ZXh0LmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0MzA4KSlcbiAgICAgICAgICA6IChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250ZXh0LmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0MzA4KSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV4dFByb3BzKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gb2xkQ29udGV4dCkpLFxuICAgICAgICAoY29udGV4dC5wcm9wcyA9IG5leHRQcm9wcyksXG4gICAgICAgIChjb250ZXh0LnN0YXRlID0gb2xkQ29udGV4dCksXG4gICAgICAgIChjb250ZXh0LmNvbnRleHQgPSBjb250ZXh0VHlwZSksXG4gICAgICAgIChuZXh0UHJvcHMgPSBvbGRQcm9wcykpXG4gICAgICA6IChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250ZXh0LmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQxOTQzMDgpLFxuICAgICAgICAobmV4dFByb3BzID0gITEpKTtcbiAgfSBlbHNlIHtcbiAgICBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIGNvbnRleHRUeXBlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgICBjb250ZXh0VHlwZSRqc2NvbXAkMCA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKENvbXBvbmVudCwgY29udGV4dFR5cGUpO1xuICAgIGNvbnRleHQucHJvcHMgPSBjb250ZXh0VHlwZSRqc2NvbXAkMDtcbiAgICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgb2xkU3RhdGUgPSBjb250ZXh0LmNvbnRleHQ7XG4gICAgb2xkQ29udGV4dCA9IENvbXBvbmVudC5jb250ZXh0VHlwZTtcbiAgICBvbGRQcm9wcyA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygb2xkQ29udGV4dCAmJlxuICAgICAgbnVsbCAhPT0gb2xkQ29udGV4dCAmJlxuICAgICAgKG9sZFByb3BzID0gcmVhZENvbnRleHQob2xkQ29udGV4dCkpO1xuICAgIHVucmVzb2x2ZWRPbGRQcm9wcyA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gICAgKG9sZENvbnRleHQgPVxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdW5yZXNvbHZlZE9sZFByb3BzIHx8XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250ZXh0LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKSB8fFxuICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNvbnRleHQuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY29udGV4dC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKSB8fFxuICAgICAgKChjb250ZXh0VHlwZSAhPT0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIHx8IG9sZFN0YXRlICE9PSBvbGRQcm9wcykgJiZcbiAgICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgb2xkUHJvcHNcbiAgICAgICAgKSk7XG4gICAgaGFzRm9yY2VVcGRhdGUgPSAhMTtcbiAgICBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgY29udGV4dC5zdGF0ZSA9IG9sZFN0YXRlO1xuICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpO1xuICAgIHZhciBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgY29udGV4dFR5cGUgIT09IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyB8fFxuICAgIG9sZFN0YXRlICE9PSBuZXdTdGF0ZSB8fFxuICAgIGhhc0ZvcmNlVXBkYXRlIHx8XG4gICAgKG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgIG51bGwgIT09IGN1cnJlbnQuZGVwZW5kZW5jaWVzICYmXG4gICAgICBjaGVja0lmQ29udGV4dENoYW5nZWQoY3VycmVudC5kZXBlbmRlbmNpZXMpKVxuICAgICAgPyAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdW5yZXNvbHZlZE9sZFByb3BzICYmXG4gICAgICAgICAgKGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICB1bnJlc29sdmVkT2xkUHJvcHMsXG4gICAgICAgICAgICBuZXh0UHJvcHNcbiAgICAgICAgICApLFxuICAgICAgICAgIChuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpKSxcbiAgICAgICAgKGNvbnRleHRUeXBlJGpzY29tcCQwID1cbiAgICAgICAgICBoYXNGb3JjZVVwZGF0ZSB8fFxuICAgICAgICAgIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICBjb250ZXh0VHlwZSRqc2NvbXAkMCxcbiAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgIG9sZFN0YXRlLFxuICAgICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgICBvbGRQcm9wc1xuICAgICAgICAgICkgfHxcbiAgICAgICAgICAobnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5kZXBlbmRlbmNpZXMgJiZcbiAgICAgICAgICAgIGNoZWNrSWZDb250ZXh0Q2hhbmdlZChjdXJyZW50LmRlcGVuZGVuY2llcykpKVxuICAgICAgICAgID8gKG9sZENvbnRleHQgfHxcbiAgICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNvbnRleHQuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjb250ZXh0LmNvbXBvbmVudFdpbGxVcGRhdGUpIHx8XG4gICAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250ZXh0LmNvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBvbmVudFdpbGxVcGRhdGUobmV4dFByb3BzLCBuZXdTdGF0ZSwgb2xkUHJvcHMpLFxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250ZXh0LlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgICAgICAgY29udGV4dC5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShcbiAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgICAgICAgICAgb2xkUHJvcHNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNvbnRleHQuY29tcG9uZW50RGlkVXBkYXRlICYmXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KSxcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNvbnRleHQuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgJiZcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEwMjQpKVxuICAgICAgICAgIDogKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNvbnRleHQuY29tcG9uZW50RGlkVXBkYXRlIHx8XG4gICAgICAgICAgICAgIChjb250ZXh0VHlwZSA9PT0gY3VycmVudC5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICAgICAgb2xkU3RhdGUgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgfHxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY29udGV4dC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSB8fFxuICAgICAgICAgICAgICAoY29udGV4dFR5cGUgPT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgICAgIG9sZFN0YXRlID09PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHx8XG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMDI0KSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV4dFByb3BzKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGUpKSxcbiAgICAgICAgKGNvbnRleHQucHJvcHMgPSBuZXh0UHJvcHMpLFxuICAgICAgICAoY29udGV4dC5zdGF0ZSA9IG5ld1N0YXRlKSxcbiAgICAgICAgKGNvbnRleHQuY29udGV4dCA9IG9sZFByb3BzKSxcbiAgICAgICAgKG5leHRQcm9wcyA9IGNvbnRleHRUeXBlJGpzY29tcCQwKSlcbiAgICAgIDogKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNvbnRleHQuY29tcG9uZW50RGlkVXBkYXRlIHx8XG4gICAgICAgICAgKGNvbnRleHRUeXBlID09PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICAgIG9sZFN0YXRlID09PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHx8XG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjb250ZXh0LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIHx8XG4gICAgICAgICAgKGNvbnRleHRUeXBlID09PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICAgIG9sZFN0YXRlID09PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHx8XG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEwMjQpLFxuICAgICAgICAobmV4dFByb3BzID0gITEpKTtcbiAgfVxuICBjb250ZXh0ID0gbmV4dFByb3BzO1xuICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgbmV4dFByb3BzID0gMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KTtcbiAgY29udGV4dCB8fCBuZXh0UHJvcHNcbiAgICA/ICgoY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSksXG4gICAgICAoQ29tcG9uZW50ID1cbiAgICAgICAgbmV4dFByb3BzICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3JcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IGNvbnRleHQucmVuZGVyKCkpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEpLFxuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBuZXh0UHJvcHNcbiAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIGN1cnJlbnQuY2hpbGQsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKSkpXG4gICAgICAgIDogcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVuZGVyTGFuZXMpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjb250ZXh0LnN0YXRlKSxcbiAgICAgIChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpKVxuICAgIDogKGN1cnJlbnQgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICkpO1xuICByZXR1cm4gY3VycmVudDtcbn1cbmZ1bmN0aW9uIG1vdW50SG9zdFJvb3RXaXRob3V0SHlkcmF0aW5nKFxuICBjdXJyZW50LFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgbmV4dENoaWxkcmVuLFxuICByZW5kZXJMYW5lc1xuKSB7XG4gIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMjU2O1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cbnZhciBTVVNQRU5ERURfTUFSS0VSID0geyBkZWh5ZHJhdGVkOiBudWxsLCB0cmVlQ29udGV4dDogbnVsbCwgcmV0cnlMYW5lOiAwIH07XG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIHtcbiAgcmV0dXJuIHsgYmFzZUxhbmVzOiByZW5kZXJMYW5lcywgY2FjaGVQb29sOiBnZXRTdXNwZW5kZWRDYWNoZSgpIH07XG59XG5mdW5jdGlvbiBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgY3VycmVudCxcbiAgcHJpbWFyeVRyZWVEaWREZWZlcixcbiAgcmVuZGVyTGFuZXNcbikge1xuICBjdXJyZW50ID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQuY2hpbGRMYW5lcyAmIH5yZW5kZXJMYW5lcyA6IDA7XG4gIHByaW1hcnlUcmVlRGlkRGVmZXIgJiYgKGN1cnJlbnQgfD0gd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUpO1xuICByZXR1cm4gY3VycmVudDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgIHNob3dGYWxsYmFjayA9ICExLFxuICAgIGRpZFN1c3BlbmQgPSAwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpLFxuICAgIEpTQ29tcGlsZXJfdGVtcDtcbiAgKEpTQ29tcGlsZXJfdGVtcCA9IGRpZFN1c3BlbmQpIHx8XG4gICAgKEpTQ29tcGlsZXJfdGVtcCA9XG4gICAgICBudWxsICE9PSBjdXJyZW50ICYmIG51bGwgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZVxuICAgICAgICA/ICExXG4gICAgICAgIDogMCAhPT0gKHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCAmIDIpKTtcbiAgSlNDb21waWxlcl90ZW1wICYmICgoc2hvd0ZhbGxiYWNrID0gITApLCAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTEyOSkpO1xuICBKU0NvbXBpbGVyX3RlbXAgPSAwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAzMik7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0zMztcbiAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICBpZiAoaXNIeWRyYXRpbmcpIHtcbiAgICAgIHNob3dGYWxsYmFja1xuICAgICAgICA/IHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgOiByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgICAgIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlLFxuICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMDtcbiAgICAgICAgaWYgKChKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAgPSBuZXh0SW5zdGFuY2UpKSB7XG4gICAgICAgICAgYzoge1xuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wJGpzY29tcCQwID0gbmV4dEluc3RhbmNlO1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgbmV4dEluc3RhbmNlID0gcm9vdE9yU2luZ2xldG9uQ29udGV4dDtcbiAgICAgICAgICAgICAgOCAhPT0gSlNDb21waWxlcl90ZW1wJGpzY29tcCQwLm5vZGVUeXBlO1xuXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKCFuZXh0SW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBuZXh0SW5zdGFuY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrIGM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wJGpzY29tcCQwID0gZ2V0TmV4dEh5ZHJhdGFibGUoXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wJGpzY29tcCQwLm5leHRTaWJsaW5nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChudWxsID09PSBKU0NvbXBpbGVyX3RlbXAkanNjb21wJDApIHtcbiAgICAgICAgICAgICAgICBuZXh0SW5zdGFuY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrIGM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHRJbnN0YW5jZSA9IEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbnVsbCAhPT0gbmV4dEluc3RhbmNlXG4gICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICBkZWh5ZHJhdGVkOiBuZXh0SW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgdHJlZUNvbnRleHQ6XG4gICAgICAgICAgICAgICAgICBudWxsICE9PSB0cmVlQ29udGV4dFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAgID8geyBpZDogdHJlZUNvbnRleHRJZCwgb3ZlcmZsb3c6IHRyZWVDb250ZXh0T3ZlcmZsb3cgfVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgcmV0cnlMYW5lOiA1MzY4NzA5MTJcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIChKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAgPSBjcmVhdGVGaWJlckltcGxDbGFzcyhcbiAgICAgICAgICAgICAgICAxOCxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMC5zdGF0ZU5vZGUgPSBuZXh0SW5zdGFuY2UpLFxuICAgICAgICAgICAgICAoSlNDb21waWxlcl90ZW1wJGpzY29tcCQwLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gSlNDb21waWxlcl90ZW1wJGpzY29tcCQwKSxcbiAgICAgICAgICAgICAgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGwpLFxuICAgICAgICAgICAgICAoSlNDb21waWxlcl90ZW1wJGpzY29tcCQwID0gITApKVxuICAgICAgICAgICAgOiAoSlNDb21waWxlcl90ZW1wJGpzY29tcCQwID0gITEpO1xuICAgICAgICB9XG4gICAgICAgIEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMCB8fCB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2god29ya0luUHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgICAgbmV4dEluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCAhPT0gbmV4dEluc3RhbmNlICYmXG4gICAgICAgICgobmV4dEluc3RhbmNlID0gbmV4dEluc3RhbmNlLmRlaHlkcmF0ZWQpLCBudWxsICE9PSBuZXh0SW5zdGFuY2UpXG4gICAgICApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgXCIkIVwiID09PSBuZXh0SW5zdGFuY2UuZGF0YVxuICAgICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSAxNilcbiAgICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzLmxhbmVzID0gNTM2ODcwOTEyKSxcbiAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgICBuZXh0SW5zdGFuY2UgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgbmV4dFByb3BzID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgIGlmIChzaG93RmFsbGJhY2spXG4gICAgICByZXR1cm4gKFxuICAgICAgICByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAoc2hvd0ZhbGxiYWNrID0gd29ya0luUHJvZ3Jlc3MubW9kZSksXG4gICAgICAgIChuZXh0SW5zdGFuY2UgPSBtb3VudFdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoXG4gICAgICAgICAgeyBtb2RlOiBcImhpZGRlblwiLCBjaGlsZHJlbjogbmV4dEluc3RhbmNlIH0sXG4gICAgICAgICAgc2hvd0ZhbGxiYWNrXG4gICAgICAgICkpLFxuICAgICAgICAobmV4dFByb3BzID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgIHNob3dGYWxsYmFjayxcbiAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICBudWxsXG4gICAgICAgICkpLFxuICAgICAgICAobmV4dEluc3RhbmNlLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgKG5leHRQcm9wcy5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgIChuZXh0SW5zdGFuY2Uuc2libGluZyA9IG5leHRQcm9wcyksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5leHRJbnN0YW5jZSksXG4gICAgICAgIChzaG93RmFsbGJhY2sgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgIChzaG93RmFsbGJhY2subWVtb2l6ZWRTdGF0ZSA9IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykpLFxuICAgICAgICAoc2hvd0ZhbGxiYWNrLmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSKSxcbiAgICAgICAgbmV4dFByb3BzXG4gICAgICApO1xuICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRJbnN0YW5jZSk7XG4gIH1cbiAgSlNDb21waWxlcl90ZW1wJGpzY29tcCQwID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICBpZiAoXG4gICAgbnVsbCAhPT0gSlNDb21waWxlcl90ZW1wJGpzY29tcCQwICYmXG4gICAgKChuZXh0SW5zdGFuY2UgPSBKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAuZGVoeWRyYXRlZCksXG4gICAgbnVsbCAhPT0gbmV4dEluc3RhbmNlKVxuICApIHtcbiAgICBpZiAoZGlkU3VzcGVuZClcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICYgMjU2XG4gICAgICAgID8gKHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0yNTcpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApKSlcbiAgICAgICAgOiBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgPyAocmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSBudWxsKSlcbiAgICAgICAgICA6IChyZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKHNob3dGYWxsYmFjayA9IG5leHRQcm9wcy5mYWxsYmFjayksXG4gICAgICAgICAgICAobmV4dEluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3MubW9kZSksXG4gICAgICAgICAgICAobmV4dFByb3BzID0gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgICAgICAgICB7IG1vZGU6IFwidmlzaWJsZVwiLCBjaGlsZHJlbjogbmV4dFByb3BzLmNoaWxkcmVuIH0sXG4gICAgICAgICAgICAgIG5leHRJbnN0YW5jZVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAoc2hvd0ZhbGxiYWNrID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgIHNob3dGYWxsYmFjayxcbiAgICAgICAgICAgICAgbmV4dEluc3RhbmNlLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAoc2hvd0ZhbGxiYWNrLmZsYWdzIHw9IDIpLFxuICAgICAgICAgICAgKG5leHRQcm9wcy5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAoc2hvd0ZhbGxiYWNrLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChuZXh0UHJvcHMuc2libGluZyA9IHNob3dGYWxsYmFjayksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXh0UHJvcHMpLFxuICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBjdXJyZW50LmNoaWxkLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgICAgICAobmV4dFByb3BzLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgICAgICBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgIChuZXh0UHJvcHMuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUiksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSBzaG93RmFsbGJhY2spKTtcbiAgICBlbHNlIGlmIChcbiAgICAgIChwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgXCIkIVwiID09PSBuZXh0SW5zdGFuY2UuZGF0YSlcbiAgICApIHtcbiAgICAgIEpTQ29tcGlsZXJfdGVtcCA9XG4gICAgICAgIG5leHRJbnN0YW5jZS5uZXh0U2libGluZyAmJiBuZXh0SW5zdGFuY2UubmV4dFNpYmxpbmcuZGF0YXNldDtcbiAgICAgIGlmIChKU0NvbXBpbGVyX3RlbXApIHZhciBkaWdlc3QgPSBKU0NvbXBpbGVyX3RlbXAuZGdzdDtcbiAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IGRpZ2VzdDtcbiAgICAgIG5leHRQcm9wcyA9IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDE5KSk7XG4gICAgICBuZXh0UHJvcHMuc3RhY2sgPSBcIlwiO1xuICAgICAgbmV4dFByb3BzLmRpZ2VzdCA9IEpTQ29tcGlsZXJfdGVtcDtcbiAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IoeyB2YWx1ZTogbmV4dFByb3BzLCBzb3VyY2U6IG51bGwsIHN0YWNrOiBudWxsIH0pO1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAoZGlkUmVjZWl2ZVVwZGF0ZSB8fFxuICAgICAgICBwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMsICExKSxcbiAgICAgIChKU0NvbXBpbGVyX3RlbXAgPSAwICE9PSAocmVuZGVyTGFuZXMgJiBjdXJyZW50LmNoaWxkTGFuZXMpKSxcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgfHwgSlNDb21waWxlcl90ZW1wKVxuICAgICkge1xuICAgICAgSlNDb21waWxlcl90ZW1wID0gd29ya0luUHJvZ3Jlc3NSb290O1xuICAgICAgaWYgKG51bGwgIT09IEpTQ29tcGlsZXJfdGVtcCkge1xuICAgICAgICBuZXh0UHJvcHMgPSByZW5kZXJMYW5lcyAmIC1yZW5kZXJMYW5lcztcbiAgICAgICAgaWYgKDAgIT09IChuZXh0UHJvcHMgJiA0MikpIG5leHRQcm9wcyA9IDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBzd2l0Y2ggKG5leHRQcm9wcykge1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBuZXh0UHJvcHMgPSAxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgbmV4dFByb3BzID0gNDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgICBuZXh0UHJvcHMgPSAxNjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICAgIGNhc2UgMjU2OlxuICAgICAgICAgICAgY2FzZSA1MTI6XG4gICAgICAgICAgICBjYXNlIDEwMjQ6XG4gICAgICAgICAgICBjYXNlIDIwNDg6XG4gICAgICAgICAgICBjYXNlIDQwOTY6XG4gICAgICAgICAgICBjYXNlIDgxOTI6XG4gICAgICAgICAgICBjYXNlIDE2Mzg0OlxuICAgICAgICAgICAgY2FzZSAzMjc2ODpcbiAgICAgICAgICAgIGNhc2UgNjU1MzY6XG4gICAgICAgICAgICBjYXNlIDEzMTA3MjpcbiAgICAgICAgICAgIGNhc2UgMjYyMTQ0OlxuICAgICAgICAgICAgY2FzZSA1MjQyODg6XG4gICAgICAgICAgICBjYXNlIDEwNDg1NzY6XG4gICAgICAgICAgICBjYXNlIDIwOTcxNTI6XG4gICAgICAgICAgICBjYXNlIDQxOTQzMDQ6XG4gICAgICAgICAgICBjYXNlIDgzODg2MDg6XG4gICAgICAgICAgICBjYXNlIDE2Nzc3MjE2OlxuICAgICAgICAgICAgY2FzZSAzMzU1NDQzMjpcbiAgICAgICAgICAgICAgbmV4dFByb3BzID0gNjQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgICAgICAgICAgIG5leHRQcm9wcyA9IDEzNDIxNzcyODtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBuZXh0UHJvcHMgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgbmV4dFByb3BzID1cbiAgICAgICAgICAwICE9PSAobmV4dFByb3BzICYgKEpTQ29tcGlsZXJfdGVtcC5zdXNwZW5kZWRMYW5lcyB8IHJlbmRlckxhbmVzKSlcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBuZXh0UHJvcHM7XG4gICAgICAgIGlmICgwICE9PSBuZXh0UHJvcHMgJiYgbmV4dFByb3BzICE9PSBKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAucmV0cnlMYW5lKVxuICAgICAgICAgIHRocm93IChcbiAgICAgICAgICAgICgoSlNDb21waWxlcl90ZW1wJGpzY29tcCQwLnJldHJ5TGFuZSA9IG5leHRQcm9wcyksXG4gICAgICAgICAgICBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoY3VycmVudCwgbmV4dFByb3BzKSxcbiAgICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihKU0NvbXBpbGVyX3RlbXAsIGN1cnJlbnQsIG5leHRQcm9wcyksXG4gICAgICAgICAgICBTZWxlY3RpdmVIeWRyYXRpb25FeGNlcHRpb24pXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIFwiJD9cIiA9PT0gbmV4dEluc3RhbmNlLmRhdGEgfHwgcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApO1xuICAgIH0gZWxzZVxuICAgICAgXCIkP1wiID09PSBuZXh0SW5zdGFuY2UuZGF0YVxuICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSByZXRyeURlaHlkcmF0ZWRTdXNwZW5zZUJvdW5kYXJ5LmJpbmQoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgY3VycmVudFxuICAgICAgICAgICkpLFxuICAgICAgICAgIChuZXh0SW5zdGFuY2UuX3JlYWN0UmV0cnkgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gbnVsbCkpXG4gICAgICAgIDogKChjdXJyZW50ID0gSlNDb21waWxlcl90ZW1wJGpzY29tcCQwLnRyZWVDb250ZXh0KSxcbiAgICAgICAgICAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKFxuICAgICAgICAgICAgbmV4dEluc3RhbmNlLm5leHRTaWJsaW5nXG4gICAgICAgICAgKSksXG4gICAgICAgICAgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgIChpc0h5ZHJhdGluZyA9ICEwKSxcbiAgICAgICAgICAoaHlkcmF0aW9uRXJyb3JzID0gbnVsbCksXG4gICAgICAgICAgKHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMSksXG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgKChpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0SWQpLFxuICAgICAgICAgICAgKGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRPdmVyZmxvdyksXG4gICAgICAgICAgICAoaWRTdGFja1tpZFN0YWNrSW5kZXgrK10gPSB0cmVlQ29udGV4dFByb3ZpZGVyKSxcbiAgICAgICAgICAgICh0cmVlQ29udGV4dElkID0gY3VycmVudC5pZCksXG4gICAgICAgICAgICAodHJlZUNvbnRleHRPdmVyZmxvdyA9IGN1cnJlbnQub3ZlcmZsb3cpLFxuICAgICAgICAgICAgKHRyZWVDb250ZXh0UHJvdmlkZXIgPSB3b3JrSW5Qcm9ncmVzcykpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIG5leHRQcm9wcy5jaGlsZHJlblxuICAgICAgICAgICkpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MDk2KSk7XG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICB9XG4gIGlmIChzaG93RmFsbGJhY2spXG4gICAgcmV0dXJuIChcbiAgICAgIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAoc2hvd0ZhbGxiYWNrID0gbmV4dFByb3BzLmZhbGxiYWNrKSxcbiAgICAgIChuZXh0SW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlKSxcbiAgICAgIChKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAgPSBjdXJyZW50LmNoaWxkKSxcbiAgICAgIChkaWdlc3QgPSBKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAuc2libGluZyksXG4gICAgICAobmV4dFByb3BzID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoSlNDb21waWxlcl90ZW1wJGpzY29tcCQwLCB7XG4gICAgICAgIG1vZGU6IFwiaGlkZGVuXCIsXG4gICAgICAgIGNoaWxkcmVuOiBuZXh0UHJvcHMuY2hpbGRyZW5cbiAgICAgIH0pKSxcbiAgICAgIChuZXh0UHJvcHMuc3VidHJlZUZsYWdzID1cbiAgICAgICAgSlNDb21waWxlcl90ZW1wJGpzY29tcCQwLnN1YnRyZWVGbGFncyAmIDMxNDU3MjgwKSxcbiAgICAgIG51bGwgIT09IGRpZ2VzdFxuICAgICAgICA/IChzaG93RmFsbGJhY2sgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhkaWdlc3QsIHNob3dGYWxsYmFjaykpXG4gICAgICAgIDogKChzaG93RmFsbGJhY2sgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICAgIHNob3dGYWxsYmFjayxcbiAgICAgICAgICAgIG5leHRJbnN0YW5jZSxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICkpLFxuICAgICAgICAgIChzaG93RmFsbGJhY2suZmxhZ3MgfD0gMikpLFxuICAgICAgKHNob3dGYWxsYmFjay5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAobmV4dFByb3BzLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgIChuZXh0UHJvcHMuc2libGluZyA9IHNob3dGYWxsYmFjayksXG4gICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXh0UHJvcHMpLFxuICAgICAgKG5leHRQcm9wcyA9IHNob3dGYWxsYmFjayksXG4gICAgICAoc2hvd0ZhbGxiYWNrID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgKG5leHRJbnN0YW5jZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZSksXG4gICAgICBudWxsID09PSBuZXh0SW5zdGFuY2VcbiAgICAgICAgPyAobmV4dEluc3RhbmNlID0gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSlcbiAgICAgICAgOiAoKEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMCA9IG5leHRJbnN0YW5jZS5jYWNoZVBvb2wpLFxuICAgICAgICAgIG51bGwgIT09IEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMFxuICAgICAgICAgICAgPyAoKGRpZ2VzdCA9IENhY2hlQ29udGV4dC5fY3VycmVudFZhbHVlKSxcbiAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMCA9XG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wJGpzY29tcCQwLnBhcmVudCAhPT0gZGlnZXN0XG4gICAgICAgICAgICAgICAgICA/IHsgcGFyZW50OiBkaWdlc3QsIHBvb2w6IGRpZ2VzdCB9XG4gICAgICAgICAgICAgICAgICA6IEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMCkpXG4gICAgICAgICAgICA6IChKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAgPSBnZXRTdXNwZW5kZWRDYWNoZSgpKSxcbiAgICAgICAgICAobmV4dEluc3RhbmNlID0ge1xuICAgICAgICAgICAgYmFzZUxhbmVzOiBuZXh0SW5zdGFuY2UuYmFzZUxhbmVzIHwgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICBjYWNoZVBvb2w6IEpTQ29tcGlsZXJfdGVtcCRqc2NvbXAkMFxuICAgICAgICAgIH0pKSxcbiAgICAgIChzaG93RmFsbGJhY2subWVtb2l6ZWRTdGF0ZSA9IG5leHRJbnN0YW5jZSksXG4gICAgICAoc2hvd0ZhbGxiYWNrLmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgSlNDb21waWxlcl90ZW1wLFxuICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgKSksXG4gICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVIpLFxuICAgICAgbmV4dFByb3BzXG4gICAgKTtcbiAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgcmVuZGVyTGFuZXMgPSBjdXJyZW50LmNoaWxkO1xuICBjdXJyZW50ID0gcmVuZGVyTGFuZXMuc2libGluZztcbiAgcmVuZGVyTGFuZXMgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhyZW5kZXJMYW5lcywge1xuICAgIG1vZGU6IFwidmlzaWJsZVwiLFxuICAgIGNoaWxkcmVuOiBuZXh0UHJvcHMuY2hpbGRyZW5cbiAgfSk7XG4gIHJlbmRlckxhbmVzLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICByZW5kZXJMYW5lcy5zaWJsaW5nID0gbnVsbDtcbiAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICgoSlNDb21waWxlcl90ZW1wID0gd29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zKSxcbiAgICBudWxsID09PSBKU0NvbXBpbGVyX3RlbXBcbiAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMgPSBbY3VycmVudF0pLCAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTYpKVxuICAgICAgOiBKU0NvbXBpbGVyX3RlbXAucHVzaChjdXJyZW50KSk7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICByZXR1cm4gcmVuZGVyTGFuZXM7XG59XG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4pIHtcbiAgcHJpbWFyeUNoaWxkcmVuID0gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgIHsgbW9kZTogXCJ2aXNpYmxlXCIsIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW4gfSxcbiAgICB3b3JrSW5Qcm9ncmVzcy5tb2RlXG4gICk7XG4gIHByaW1hcnlDaGlsZHJlbi5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcmV0dXJuICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZHJlbik7XG59XG5mdW5jdGlvbiBtb3VudFdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIob2Zmc2NyZWVuUHJvcHMsIG1vZGUpIHtcbiAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihvZmZzY3JlZW5Qcm9wcywgbW9kZSwgMCwgbnVsbCk7XG59XG5mdW5jdGlvbiByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgY3VycmVudCxcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIHJlbmRlckxhbmVzXG4pIHtcbiAgcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgY3VycmVudCA9IG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuXG4gICk7XG4gIGN1cnJlbnQuZmxhZ3MgfD0gMjtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHJldHVybiBjdXJyZW50O1xufVxuZnVuY3Rpb24gc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKGZpYmVyLCByZW5kZXJMYW5lcywgcHJvcGFnYXRpb25Sb290KSB7XG4gIGZpYmVyLmxhbmVzIHw9IHJlbmRlckxhbmVzO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5sYW5lcyB8PSByZW5kZXJMYW5lcyk7XG4gIHNjaGVkdWxlQ29udGV4dFdvcmtPblBhcmVudFBhdGgoZmliZXIucmV0dXJuLCByZW5kZXJMYW5lcywgcHJvcGFnYXRpb25Sb290KTtcbn1cbmZ1bmN0aW9uIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIGlzQmFja3dhcmRzLFxuICB0YWlsLFxuICBsYXN0Q29udGVudFJvdyxcbiAgdGFpbE1vZGVcbikge1xuICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICBudWxsID09PSByZW5kZXJTdGF0ZVxuICAgID8gKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgIGlzQmFja3dhcmRzOiBpc0JhY2t3YXJkcyxcbiAgICAgICAgcmVuZGVyaW5nOiBudWxsLFxuICAgICAgICByZW5kZXJpbmdTdGFydFRpbWU6IDAsXG4gICAgICAgIGxhc3Q6IGxhc3RDb250ZW50Um93LFxuICAgICAgICB0YWlsOiB0YWlsLFxuICAgICAgICB0YWlsTW9kZTogdGFpbE1vZGVcbiAgICAgIH0pXG4gICAgOiAoKHJlbmRlclN0YXRlLmlzQmFja3dhcmRzID0gaXNCYWNrd2FyZHMpLFxuICAgICAgKHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGwpLFxuICAgICAgKHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IDApLFxuICAgICAgKHJlbmRlclN0YXRlLmxhc3QgPSBsYXN0Q29udGVudFJvdyksXG4gICAgICAocmVuZGVyU3RhdGUudGFpbCA9IHRhaWwpLFxuICAgICAgKHJlbmRlclN0YXRlLnRhaWxNb2RlID0gdGFpbE1vZGUpKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICByZXZlYWxPcmRlciA9IG5leHRQcm9wcy5yZXZlYWxPcmRlcixcbiAgICB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLmNoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIG5leHRQcm9wcyA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgaWYgKDAgIT09IChuZXh0UHJvcHMgJiAyKSlcbiAgICAobmV4dFByb3BzID0gKG5leHRQcm9wcyAmIDEpIHwgMiksICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpO1xuICBlbHNlIHtcbiAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiAwICE9PSAoY3VycmVudC5mbGFncyAmIDEyOCkpXG4gICAgICBhOiBmb3IgKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDsgbnVsbCAhPT0gY3VycmVudDsgKSB7XG4gICAgICAgIGlmICgxMyA9PT0gY3VycmVudC50YWcpXG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICBzY2hlZHVsZVN1c3BlbnNlV29ya09uRmliZXIoY3VycmVudCwgcmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgZWxzZSBpZiAoMTkgPT09IGN1cnJlbnQudGFnKVxuICAgICAgICAgIHNjaGVkdWxlU3VzcGVuc2VXb3JrT25GaWJlcihjdXJyZW50LCByZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBlbHNlIGlmIChudWxsICE9PSBjdXJyZW50LmNoaWxkKSB7XG4gICAgICAgICAgY3VycmVudC5jaGlsZC5yZXR1cm4gPSBjdXJyZW50O1xuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50ID09PSB3b3JrSW5Qcm9ncmVzcykgYnJlYWsgYTtcbiAgICAgICAgZm9yICg7IG51bGwgPT09IGN1cnJlbnQuc2libGluZzsgKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQucmV0dXJuIHx8IGN1cnJlbnQucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQuc2libGluZy5yZXR1cm4gPSBjdXJyZW50LnJldHVybjtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuc2libGluZztcbiAgICAgIH1cbiAgICBuZXh0UHJvcHMgJj0gMTtcbiAgfVxuICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIG5leHRQcm9wcyk7XG4gIHN3aXRjaCAocmV2ZWFsT3JkZXIpIHtcbiAgICBjYXNlIFwiZm9yd2FyZHNcIjpcbiAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBmb3IgKHJldmVhbE9yZGVyID0gbnVsbDsgbnVsbCAhPT0gcmVuZGVyTGFuZXM7IClcbiAgICAgICAgKGN1cnJlbnQgPSByZW5kZXJMYW5lcy5hbHRlcm5hdGUpLFxuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgIG51bGwgPT09IGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50KSAmJlxuICAgICAgICAgICAgKHJldmVhbE9yZGVyID0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzLnNpYmxpbmcpO1xuICAgICAgcmVuZGVyTGFuZXMgPSByZXZlYWxPcmRlcjtcbiAgICAgIG51bGwgPT09IHJlbmRlckxhbmVzXG4gICAgICAgID8gKChyZXZlYWxPcmRlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSwgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbCkpXG4gICAgICAgIDogKChyZXZlYWxPcmRlciA9IHJlbmRlckxhbmVzLnNpYmxpbmcpLCAocmVuZGVyTGFuZXMuc2libGluZyA9IG51bGwpKTtcbiAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICExLFxuICAgICAgICByZXZlYWxPcmRlcixcbiAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgIHRhaWxNb2RlXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImJhY2t3YXJkc1wiOlxuICAgICAgcmVuZGVyTGFuZXMgPSBudWxsO1xuICAgICAgcmV2ZWFsT3JkZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIGZvciAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsOyBudWxsICE9PSByZXZlYWxPcmRlcjsgKSB7XG4gICAgICAgIGN1cnJlbnQgPSByZXZlYWxPcmRlci5hbHRlcm5hdGU7XG4gICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgPT09IGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50KSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmV2ZWFsT3JkZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IHJldmVhbE9yZGVyLnNpYmxpbmc7XG4gICAgICAgIHJldmVhbE9yZGVyLnNpYmxpbmcgPSByZW5kZXJMYW5lcztcbiAgICAgICAgcmVuZGVyTGFuZXMgPSByZXZlYWxPcmRlcjtcbiAgICAgICAgcmV2ZWFsT3JkZXIgPSBjdXJyZW50O1xuICAgICAgfVxuICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgITAsXG4gICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICBudWxsLFxuICAgICAgICB0YWlsTW9kZVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ0b2dldGhlclwiOlxuICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCAhMSwgbnVsbCwgbnVsbCwgdm9pZCAwKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgfVxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5mdW5jdGlvbiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBudWxsICE9PSBjdXJyZW50ICYmICh3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcyk7XG4gIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyB8PSB3b3JrSW5Qcm9ncmVzcy5sYW5lcztcbiAgaWYgKDAgPT09IChyZW5kZXJMYW5lcyAmIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKVxuICAgIGlmIChudWxsICE9PSBjdXJyZW50KSB7XG4gICAgICBpZiAoXG4gICAgICAgIChwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICExXG4gICAgICAgICksXG4gICAgICAgIDAgPT09IChyZW5kZXJMYW5lcyAmIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgcmV0dXJuIG51bGw7XG4gIGlmIChudWxsICE9PSBjdXJyZW50ICYmIHdvcmtJblByb2dyZXNzLmNoaWxkICE9PSBjdXJyZW50LmNoaWxkKVxuICAgIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTUzKSk7XG4gIGlmIChudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCkge1xuICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICByZW5kZXJMYW5lcyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIGN1cnJlbnQucGVuZGluZ1Byb3BzKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlckxhbmVzO1xuICAgIGZvciAocmVuZGVyTGFuZXMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7IG51bGwgIT09IGN1cnJlbnQuc2libGluZzsgKVxuICAgICAgKGN1cnJlbnQgPSBjdXJyZW50LnNpYmxpbmcpLFxuICAgICAgICAocmVuZGVyTGFuZXMgPSByZW5kZXJMYW5lcy5zaWJsaW5nID1cbiAgICAgICAgICBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBjdXJyZW50LnBlbmRpbmdQcm9wcykpLFxuICAgICAgICAocmVuZGVyTGFuZXMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MpO1xuICAgIHJlbmRlckxhbmVzLnNpYmxpbmcgPSBudWxsO1xuICB9XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cbmZ1bmN0aW9uIGNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KGN1cnJlbnQsIHJlbmRlckxhbmVzKSB7XG4gIGlmICgwICE9PSAoY3VycmVudC5sYW5lcyAmIHJlbmRlckxhbmVzKSkgcmV0dXJuICEwO1xuICBjdXJyZW50ID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gIHJldHVybiBudWxsICE9PSBjdXJyZW50ICYmIGNoZWNrSWZDb250ZXh0Q2hhbmdlZChjdXJyZW50KSA/ICEwIDogITE7XG59XG5mdW5jdGlvbiBhdHRlbXB0RWFybHlCYWlsb3V0SWZOb1NjaGVkdWxlZFVwZGF0ZShcbiAgY3VycmVudCxcbiAgd29ya0luUHJvZ3Jlc3MsXG4gIHJlbmRlckxhbmVzXG4pIHtcbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIDM6XG4gICAgICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDYWNoZUNvbnRleHQsIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZSk7XG4gICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI3OlxuICAgIGNhc2UgNTpcbiAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMDpcbiAgICAgIHB1c2hQcm92aWRlcihcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMudmFsdWVcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEzOlxuICAgICAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsICE9PSBzdGF0ZSkge1xuICAgICAgICBpZiAobnVsbCAhPT0gc3RhdGUuZGVoeWRyYXRlZClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGlmICgwICE9PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZC5jaGlsZExhbmVzKSlcbiAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgY3VycmVudCA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQuc2libGluZyA6IG51bGw7XG4gICAgICB9XG4gICAgICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOTpcbiAgICAgIHZhciBkaWRTdXNwZW5kQmVmb3JlID0gMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMjgpO1xuICAgICAgc3RhdGUgPSAwICE9PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKTtcbiAgICAgIHN0YXRlIHx8XG4gICAgICAgIChwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICExXG4gICAgICAgICksXG4gICAgICAgIChzdGF0ZSA9IDAgIT09IChyZW5kZXJMYW5lcyAmIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKSk7XG4gICAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgICBpZiAoc3RhdGUpXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4O1xuICAgICAgfVxuICAgICAgZGlkU3VzcGVuZEJlZm9yZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICBudWxsICE9PSBkaWRTdXNwZW5kQmVmb3JlICYmXG4gICAgICAgICgoZGlkU3VzcGVuZEJlZm9yZS5yZW5kZXJpbmcgPSBudWxsKSxcbiAgICAgICAgKGRpZFN1c3BlbmRCZWZvcmUudGFpbCA9IG51bGwpLFxuICAgICAgICAoZGlkU3VzcGVuZEJlZm9yZS5sYXN0RWZmZWN0ID0gbnVsbCkpO1xuICAgICAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICAgICAgaWYgKHN0YXRlKSBicmVhaztcbiAgICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gICAgY2FzZSAyMjpcbiAgICBjYXNlIDIzOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gMCksXG4gICAgICAgIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgICApO1xuICAgIGNhc2UgMjQ6XG4gICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENhY2hlQ29udGV4dCwgY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlKTtcbiAgfVxuICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xufVxuZnVuY3Rpb24gYmVnaW5Xb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBpZiAobnVsbCAhPT0gY3VycmVudClcbiAgICBpZiAoY3VycmVudC5tZW1vaXplZFByb3BzICE9PSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpXG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gITA7XG4gICAgZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgICFjaGVja1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dChjdXJyZW50LCByZW5kZXJMYW5lcykgJiZcbiAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KVxuICAgICAgKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChkaWRSZWNlaXZlVXBkYXRlID0gITEpLFxuICAgICAgICAgIGF0dGVtcHRFYXJseUJhaWxvdXRJZk5vU2NoZWR1bGVkVXBkYXRlKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMzEwNzIpID8gITAgOiAhMTtcbiAgICB9XG4gIGVsc2VcbiAgICAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICExKSxcbiAgICAgIGlzSHlkcmF0aW5nICYmXG4gICAgICAgIDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEwNDg1NzYpICYmXG4gICAgICAgIHB1c2hUcmVlSWQod29ya0luUHJvZ3Jlc3MsIHRyZWVGb3JrQ291bnQsIHdvcmtJblByb2dyZXNzLmluZGV4KTtcbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSAwO1xuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgMTY6XG4gICAgICBhOiB7XG4gICAgICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUsXG4gICAgICAgICAgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG4gICAgICAgIGxhenlDb21wb25lbnQgPSBpbml0KGxhenlDb21wb25lbnQuX3BheWxvYWQpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gbGF6eUNvbXBvbmVudDtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGxhenlDb21wb25lbnQpXG4gICAgICAgICAgc2hvdWxkQ29uc3RydWN0KGxhenlDb21wb25lbnQpXG4gICAgICAgICAgICA/ICgoY3VycmVudCA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKGxhenlDb21wb25lbnQsIGN1cnJlbnQpKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnRhZyA9IDEpLFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSB1cGRhdGVDbGFzc0NvbXBvbmVudChcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIGxhenlDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApKSlcbiAgICAgICAgICAgIDogKCh3b3JrSW5Qcm9ncmVzcy50YWcgPSAwKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBsYXp5Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKSkpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodm9pZCAwICE9PSBsYXp5Q29tcG9uZW50ICYmIG51bGwgIT09IGxhenlDb21wb25lbnQpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgoaW5pdCA9IGxhenlDb21wb25lbnQuJCR0eXBlb2YpLCBpbml0ID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IDExO1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZUZvcndhcmRSZWYoXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBsYXp5Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5pdCA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IDE0O1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZU1lbW9Db21wb25lbnQoXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBsYXp5Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9XG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUobGF6eUNvbXBvbmVudCkgfHwgbGF6eUNvbXBvbmVudDtcbiAgICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMwNiwgd29ya0luUHJvZ3Jlc3MsIFwiXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGxhenlDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlKSxcbiAgICAgICAgKGluaXQgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhcbiAgICAgICAgICBsYXp5Q29tcG9uZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wc1xuICAgICAgICApKSxcbiAgICAgICAgdXBkYXRlQ2xhc3NDb21wb25lbnQoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBsYXp5Q29tcG9uZW50LFxuICAgICAgICAgIGluaXQsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICBjYXNlIDM6XG4gICAgICBhOiB7XG4gICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICk7XG4gICAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDM4NykpO1xuICAgICAgICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICBpbml0ID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgbGF6eUNvbXBvbmVudCA9IGluaXQuZWxlbWVudDtcbiAgICAgICAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICBuZXh0UHJvcHMgPSBuZXh0U3RhdGUuY2FjaGU7XG4gICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ2FjaGVDb250ZXh0LCBuZXh0UHJvcHMpO1xuICAgICAgICBuZXh0UHJvcHMgIT09IGluaXQuY2FjaGUgJiZcbiAgICAgICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgW0NhY2hlQ29udGV4dF0sXG4gICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICEwXG4gICAgICAgICAgKTtcbiAgICAgICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpO1xuICAgICAgICBuZXh0UHJvcHMgPSBuZXh0U3RhdGUuZWxlbWVudDtcbiAgICAgICAgaWYgKGluaXQuaXNEZWh5ZHJhdGVkKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICgoaW5pdCA9IHtcbiAgICAgICAgICAgICAgZWxlbWVudDogbmV4dFByb3BzLFxuICAgICAgICAgICAgICBpc0RlaHlkcmF0ZWQ6ICExLFxuICAgICAgICAgICAgICBjYWNoZTogbmV4dFN0YXRlLmNhY2hlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZS5iYXNlU3RhdGUgPSBpbml0KSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5pdCksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gbW91bnRIb3N0Um9vdFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRQcm9wcyAhPT0gbGF6eUNvbXBvbmVudCkge1xuICAgICAgICAgICAgbGF6eUNvbXBvbmVudCA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKFxuICAgICAgICAgICAgICBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQyNCkpLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IobGF6eUNvbXBvbmVudCk7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG1vdW50SG9zdFJvb3RXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8uZmlyc3RDaGlsZFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgaXNIeWRyYXRpbmcgPSAhMCxcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25FcnJvcnMgPSBudWxsLFxuICAgICAgICAgICAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMCxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyA9IG1vdW50Q2hpbGRGaWJlcnMoXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZW5kZXJMYW5lcztcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXM7XG5cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKHJlbmRlckxhbmVzLmZsYWdzID0gKHJlbmRlckxhbmVzLmZsYWdzICYgLTMpIHwgNDA5NiksXG4gICAgICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gcmVuZGVyTGFuZXMuc2libGluZyk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgICAgICBpZiAobmV4dFByb3BzID09PSBsYXp5Q29tcG9uZW50KSB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgfVxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgIGNhc2UgMjY6XG4gICAgICByZXR1cm4gKFxuICAgICAgICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgID8gKHJlbmRlckxhbmVzID0gZ2V0UmVzb3VyY2UoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgKSlcbiAgICAgICAgICAgID8gKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSByZW5kZXJMYW5lcylcbiAgICAgICAgICAgIDogaXNIeWRyYXRpbmcgfHxcbiAgICAgICAgICAgICAgKChyZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAgICAgICAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgICAgIChsYXp5Q29tcG9uZW50ID0gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKFxuICAgICAgICAgICAgICAgIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnRcbiAgICAgICAgICAgICAgKS5jcmVhdGVFbGVtZW50KHJlbmRlckxhbmVzKSksXG4gICAgICAgICAgICAgIChsYXp5Q29tcG9uZW50W2ludGVybmFsSW5zdGFuY2VLZXldID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAobGF6eUNvbXBvbmVudFtpbnRlcm5hbFByb3BzS2V5XSA9IGN1cnJlbnQpLFxuICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhsYXp5Q29tcG9uZW50LCByZW5kZXJMYW5lcywgY3VycmVudCksXG4gICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUobGF6eUNvbXBvbmVudCksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBsYXp5Q29tcG9uZW50KSlcbiAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gZ2V0UmVzb3VyY2UoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICAgICkpLFxuICAgICAgICBudWxsXG4gICAgICApO1xuICAgIGNhc2UgMjc6XG4gICAgICByZXR1cm4gKFxuICAgICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICBudWxsID09PSBjdXJyZW50ICYmXG4gICAgICAgICAgaXNIeWRyYXRpbmcgJiZcbiAgICAgICAgICAoKGxhenlDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPVxuICAgICAgICAgICAgcmVzb2x2ZVNpbmdsZXRvbkluc3RhbmNlKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnRcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgIChoeWRyYXRpb25QYXJlbnRGaWJlciA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAocm9vdE9yU2luZ2xldG9uQ29udGV4dCA9ICEwKSxcbiAgICAgICAgICAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKFxuICAgICAgICAgICAgbGF6eUNvbXBvbmVudC5maXJzdENoaWxkXG4gICAgICAgICAgKSkpLFxuICAgICAgICAobGF6eUNvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbiksXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgfHwgaXNIeWRyYXRpbmdcbiAgICAgICAgICA/IHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgbGF6eUNvbXBvbmVudCxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgbGF6eUNvbXBvbmVudCxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICkpLFxuICAgICAgICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICk7XG4gICAgY2FzZSA1OlxuICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQgJiYgaXNIeWRyYXRpbmcpIHtcbiAgICAgICAgaWYgKChpbml0ID0gbGF6eUNvbXBvbmVudCA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2UpKVxuICAgICAgICAgIChsYXp5Q29tcG9uZW50ID0gY2FuSHlkcmF0ZUluc3RhbmNlKFxuICAgICAgICAgICAgbGF6eUNvbXBvbmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICByb290T3JTaW5nbGV0b25Db250ZXh0XG4gICAgICAgICAgKSksXG4gICAgICAgICAgICBudWxsICE9PSBsYXp5Q29tcG9uZW50XG4gICAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBsYXp5Q29tcG9uZW50KSxcbiAgICAgICAgICAgICAgICAoaHlkcmF0aW9uUGFyZW50RmliZXIgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShcbiAgICAgICAgICAgICAgICAgIGxhenlDb21wb25lbnQuZmlyc3RDaGlsZFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChyb290T3JTaW5nbGV0b25Db250ZXh0ID0gITEpLFxuICAgICAgICAgICAgICAgIChpbml0ID0gITApKVxuICAgICAgICAgICAgICA6IChpbml0ID0gITEpO1xuICAgICAgICBpbml0IHx8IHRocm93T25IeWRyYXRpb25NaXNtYXRjaCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB9XG4gICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgaW5pdCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICBuZXh0U3RhdGUgPSBudWxsICE9PSBjdXJyZW50ID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbnVsbDtcbiAgICAgIGxhenlDb21wb25lbnQgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgICBzaG91bGRTZXRUZXh0Q29udGVudChpbml0LCBuZXh0UHJvcHMpXG4gICAgICAgID8gKGxhenlDb21wb25lbnQgPSBudWxsKVxuICAgICAgICA6IG51bGwgIT09IG5leHRTdGF0ZSAmJlxuICAgICAgICAgIHNob3VsZFNldFRleHRDb250ZW50KGluaXQsIG5leHRTdGF0ZSkgJiZcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMzIpO1xuICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAoKGluaXQgPSByZW5kZXJXaXRoSG9va3MoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBUcmFuc2l0aW9uQXdhcmVIb3N0Q29tcG9uZW50LFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApKSxcbiAgICAgICAgKEhvc3RUcmFuc2l0aW9uQ29udGV4dC5fY3VycmVudFZhbHVlID0gaW5pdCkpO1xuICAgICAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbGF6eUNvbXBvbmVudCwgcmVuZGVyTGFuZXMpO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIGNhc2UgNjpcbiAgICAgIGlmIChudWxsID09PSBjdXJyZW50ICYmIGlzSHlkcmF0aW5nKSB7XG4gICAgICAgIGlmICgoY3VycmVudCA9IHJlbmRlckxhbmVzID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSkpXG4gICAgICAgICAgKHJlbmRlckxhbmVzID0gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShcbiAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dFxuICAgICAgICAgICkpLFxuICAgICAgICAgICAgbnVsbCAhPT0gcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IHJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAoaHlkcmF0aW9uUGFyZW50RmliZXIgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudCA9ICEwKSlcbiAgICAgICAgICAgICAgOiAoY3VycmVudCA9ICExKTtcbiAgICAgICAgY3VycmVudCB8fCB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2god29ya0luUHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSAxMzpcbiAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICksXG4gICAgICAgIChsYXp5Q29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzKSxcbiAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgID8gKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICBsYXp5Q29tcG9uZW50LFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSlcbiAgICAgICAgICA6IHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgbGF6eUNvbXBvbmVudCxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICksXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICApO1xuICAgIGNhc2UgMTE6XG4gICAgICByZXR1cm4gdXBkYXRlRm9yd2FyZFJlZihcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgY2FzZSA3OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICk7XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICk7XG4gICAgY2FzZSAxMjpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICksXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICApO1xuICAgIGNhc2UgMTA6XG4gICAgICByZXR1cm4gKFxuICAgICAgICAobGF6eUNvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSwgbGF6eUNvbXBvbmVudC52YWx1ZSksXG4gICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgbGF6eUNvbXBvbmVudC5jaGlsZHJlbixcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgKTtcbiAgICBjYXNlIDk6XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoaW5pdCA9IHdvcmtJblByb2dyZXNzLnR5cGUuX2NvbnRleHQpLFxuICAgICAgICAobGF6eUNvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbiksXG4gICAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgKGluaXQgPSByZWFkQ29udGV4dChpbml0KSksXG4gICAgICAgIChsYXp5Q29tcG9uZW50ID0gbGF6eUNvbXBvbmVudChpbml0KSksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxKSxcbiAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGxhenlDb21wb25lbnQsIHJlbmRlckxhbmVzKSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICk7XG4gICAgY2FzZSAxNDpcbiAgICAgIHJldHVybiB1cGRhdGVNZW1vQ29tcG9uZW50KFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgKTtcbiAgICBjYXNlIDE1OlxuICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApO1xuICAgIGNhc2UgMTk6XG4gICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgY2FzZSAyMjpcbiAgICAgIHJldHVybiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICBjYXNlIDI0OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAobGF6eUNvbXBvbmVudCA9IHJlYWRDb250ZXh0KENhY2hlQ29udGV4dCkpLFxuICAgICAgICBudWxsID09PSBjdXJyZW50XG4gICAgICAgICAgPyAoKGluaXQgPSBwZWVrQ2FjaGVGcm9tUG9vbCgpKSxcbiAgICAgICAgICAgIG51bGwgPT09IGluaXQgJiZcbiAgICAgICAgICAgICAgKChpbml0ID0gd29ya0luUHJvZ3Jlc3NSb290KSxcbiAgICAgICAgICAgICAgKG5leHRQcm9wcyA9IGNyZWF0ZUNhY2hlKCkpLFxuICAgICAgICAgICAgICAoaW5pdC5wb29sZWRDYWNoZSA9IG5leHRQcm9wcyksXG4gICAgICAgICAgICAgIG5leHRQcm9wcy5yZWZDb3VudCsrLFxuICAgICAgICAgICAgICBudWxsICE9PSBuZXh0UHJvcHMgJiYgKGluaXQucG9vbGVkQ2FjaGVMYW5lcyB8PSByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIChpbml0ID0gbmV4dFByb3BzKSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgcGFyZW50OiBsYXp5Q29tcG9uZW50LFxuICAgICAgICAgICAgICBjYWNoZTogaW5pdFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDYWNoZUNvbnRleHQsIGluaXQpKVxuICAgICAgICAgIDogKDAgIT09IChjdXJyZW50LmxhbmVzICYgcmVuZGVyTGFuZXMpICYmXG4gICAgICAgICAgICAgIChjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBudWxsLCBudWxsLCByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIHN1c3BlbmRJZlVwZGF0ZVJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24oKSksXG4gICAgICAgICAgICAoaW5pdCA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICAobmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICBpbml0LnBhcmVudCAhPT0gbGF6eUNvbXBvbmVudFxuICAgICAgICAgICAgICA/ICgoaW5pdCA9IHsgcGFyZW50OiBsYXp5Q29tcG9uZW50LCBjYWNoZTogbGF6eUNvbXBvbmVudCB9KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGluaXQpLFxuICAgICAgICAgICAgICAgIDAgPT09IHdvcmtJblByb2dyZXNzLmxhbmVzICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgaW5pdCksXG4gICAgICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDYWNoZUNvbnRleHQsIGxhenlDb21wb25lbnQpKVxuICAgICAgICAgICAgICA6ICgobGF6eUNvbXBvbmVudCA9IG5leHRQcm9wcy5jYWNoZSksXG4gICAgICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDYWNoZUNvbnRleHQsIGxhenlDb21wb25lbnQpLFxuICAgICAgICAgICAgICAgIGxhenlDb21wb25lbnQgIT09IGluaXQuY2FjaGUgJiZcbiAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2VzKFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgICAgW0NhY2hlQ29udGV4dF0sXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgICAhMFxuICAgICAgICAgICAgICAgICAgKSkpLFxuICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgKTtcbiAgICBjYXNlIDI5OlxuICAgICAgdGhyb3cgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB9XG4gIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTU2LCB3b3JrSW5Qcm9ncmVzcy50YWcpKTtcbn1cbnZhciB2YWx1ZUN1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsLFxuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuZnVuY3Rpb24gcHVzaFByb3ZpZGVyKHByb3ZpZGVyRmliZXIsIGNvbnRleHQsIG5leHRWYWx1ZSkge1xuICBwdXNoKHZhbHVlQ3Vyc29yLCBjb250ZXh0Ll9jdXJyZW50VmFsdWUpO1xuICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBuZXh0VmFsdWU7XG59XG5mdW5jdGlvbiBwb3BQcm92aWRlcihjb250ZXh0KSB7XG4gIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IHZhbHVlQ3Vyc29yLmN1cnJlbnQ7XG4gIHBvcCh2YWx1ZUN1cnNvcik7XG59XG5mdW5jdGlvbiBzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoKHBhcmVudCwgcmVuZGVyTGFuZXMsIHByb3BhZ2F0aW9uUm9vdCkge1xuICBmb3IgKDsgbnVsbCAhPT0gcGFyZW50OyApIHtcbiAgICB2YXIgYWx0ZXJuYXRlID0gcGFyZW50LmFsdGVybmF0ZTtcbiAgICAocGFyZW50LmNoaWxkTGFuZXMgJiByZW5kZXJMYW5lcykgIT09IHJlbmRlckxhbmVzXG4gICAgICA/ICgocGFyZW50LmNoaWxkTGFuZXMgfD0gcmVuZGVyTGFuZXMpLFxuICAgICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5jaGlsZExhbmVzIHw9IHJlbmRlckxhbmVzKSlcbiAgICAgIDogbnVsbCAhPT0gYWx0ZXJuYXRlICYmXG4gICAgICAgIChhbHRlcm5hdGUuY2hpbGRMYW5lcyAmIHJlbmRlckxhbmVzKSAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgKGFsdGVybmF0ZS5jaGlsZExhbmVzIHw9IHJlbmRlckxhbmVzKTtcbiAgICBpZiAocGFyZW50ID09PSBwcm9wYWdhdGlvblJvb3QpIGJyZWFrO1xuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cbn1cbmZ1bmN0aW9uIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2VzKFxuICB3b3JrSW5Qcm9ncmVzcyxcbiAgY29udGV4dHMsXG4gIHJlbmRlckxhbmVzLFxuICBmb3JjZVByb3BhZ2F0ZUVudGlyZVRyZWVcbikge1xuICB2YXIgZmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgbnVsbCAhPT0gZmliZXIgJiYgKGZpYmVyLnJldHVybiA9IHdvcmtJblByb2dyZXNzKTtcbiAgZm9yICg7IG51bGwgIT09IGZpYmVyOyApIHtcbiAgICB2YXIgbGlzdCA9IGZpYmVyLmRlcGVuZGVuY2llcztcbiAgICBpZiAobnVsbCAhPT0gbGlzdCkge1xuICAgICAgdmFyIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgbGlzdCA9IGxpc3QuZmlyc3RDb250ZXh0O1xuICAgICAgYTogZm9yICg7IG51bGwgIT09IGxpc3Q7ICkge1xuICAgICAgICB2YXIgZGVwZW5kZW5jeSA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBmaWJlcjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250ZXh0cy5sZW5ndGg7IGkrKylcbiAgICAgICAgICBpZiAoZGVwZW5kZW5jeS5jb250ZXh0ID09PSBjb250ZXh0c1tpXSkge1xuICAgICAgICAgICAgbGlzdC5sYW5lcyB8PSByZW5kZXJMYW5lcztcbiAgICAgICAgICAgIGRlcGVuZGVuY3kgPSBsaXN0LmFsdGVybmF0ZTtcbiAgICAgICAgICAgIG51bGwgIT09IGRlcGVuZGVuY3kgJiYgKGRlcGVuZGVuY3kubGFuZXMgfD0gcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgICAgICAgICAgbGlzdC5yZXR1cm4sXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvcmNlUHJvcGFnYXRlRW50aXJlVHJlZSB8fCAobmV4dEZpYmVyID0gbnVsbCk7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIH1cbiAgICAgICAgbGlzdCA9IGRlcGVuZGVuY3kubmV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKDE4ID09PSBmaWJlci50YWcpIHtcbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLnJldHVybjtcbiAgICAgIGlmIChudWxsID09PSBuZXh0RmliZXIpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMzQxKSk7XG4gICAgICBuZXh0RmliZXIubGFuZXMgfD0gcmVuZGVyTGFuZXM7XG4gICAgICBsaXN0ID0gbmV4dEZpYmVyLmFsdGVybmF0ZTtcbiAgICAgIG51bGwgIT09IGxpc3QgJiYgKGxpc3QubGFuZXMgfD0gcmVuZGVyTGFuZXMpO1xuICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChuZXh0RmliZXIsIHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBuZXh0RmliZXIgPSBudWxsO1xuICAgIH0gZWxzZSBuZXh0RmliZXIgPSBmaWJlci5jaGlsZDtcbiAgICBpZiAobnVsbCAhPT0gbmV4dEZpYmVyKSBuZXh0RmliZXIucmV0dXJuID0gZmliZXI7XG4gICAgZWxzZVxuICAgICAgZm9yIChuZXh0RmliZXIgPSBmaWJlcjsgbnVsbCAhPT0gbmV4dEZpYmVyOyApIHtcbiAgICAgICAgaWYgKG5leHRGaWJlciA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICBuZXh0RmliZXIgPSBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGZpYmVyID0gbmV4dEZpYmVyLnNpYmxpbmc7XG4gICAgICAgIGlmIChudWxsICE9PSBmaWJlcikge1xuICAgICAgICAgIGZpYmVyLnJldHVybiA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgbmV4dEZpYmVyID0gZmliZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dEZpYmVyID0gbmV4dEZpYmVyLnJldHVybjtcbiAgICAgIH1cbiAgICBmaWJlciA9IG5leHRGaWJlcjtcbiAgfVxufVxuZnVuY3Rpb24gcHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoXG4gIGN1cnJlbnQsXG4gIHdvcmtJblByb2dyZXNzLFxuICByZW5kZXJMYW5lcyxcbiAgZm9yY2VQcm9wYWdhdGVFbnRpcmVUcmVlXG4pIHtcbiAgY3VycmVudCA9IG51bGw7XG4gIGZvciAoXG4gICAgdmFyIHBhcmVudCA9IHdvcmtJblByb2dyZXNzLCBpc0luc2lkZVByb3BhZ2F0aW9uQmFpbG91dCA9ICExO1xuICAgIG51bGwgIT09IHBhcmVudDtcblxuICApIHtcbiAgICBpZiAoIWlzSW5zaWRlUHJvcGFnYXRpb25CYWlsb3V0KVxuICAgICAgaWYgKDAgIT09IChwYXJlbnQuZmxhZ3MgJiA1MjQyODgpKSBpc0luc2lkZVByb3BhZ2F0aW9uQmFpbG91dCA9ICEwO1xuICAgICAgZWxzZSBpZiAoMCAhPT0gKHBhcmVudC5mbGFncyAmIDI2MjE0NCkpIGJyZWFrO1xuICAgIGlmICgxMCA9PT0gcGFyZW50LnRhZykge1xuICAgICAgdmFyIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnRQYXJlbnQpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMzg3KSk7XG4gICAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudFBhcmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgdmFyIGNvbnRleHQgPSBwYXJlbnQudHlwZTtcbiAgICAgICAgb2JqZWN0SXMocGFyZW50LnBlbmRpbmdQcm9wcy52YWx1ZSwgY3VycmVudFBhcmVudC52YWx1ZSkgfHxcbiAgICAgICAgICAobnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQucHVzaChjb250ZXh0KSA6IChjdXJyZW50ID0gW2NvbnRleHRdKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwYXJlbnQgPT09IGhvc3RUcmFuc2l0aW9uUHJvdmlkZXJDdXJzb3IuY3VycmVudCkge1xuICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudC5hbHRlcm5hdGU7XG4gICAgICBpZiAobnVsbCA9PT0gY3VycmVudFBhcmVudCkgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzODcpKTtcbiAgICAgIGN1cnJlbnRQYXJlbnQubWVtb2l6ZWRTdGF0ZS5tZW1vaXplZFN0YXRlICE9PVxuICAgICAgICBwYXJlbnQubWVtb2l6ZWRTdGF0ZS5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgIChudWxsICE9PSBjdXJyZW50XG4gICAgICAgICAgPyBjdXJyZW50LnB1c2goSG9zdFRyYW5zaXRpb25Db250ZXh0KVxuICAgICAgICAgIDogKGN1cnJlbnQgPSBbSG9zdFRyYW5zaXRpb25Db250ZXh0XSkpO1xuICAgIH1cbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG4gIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlcyhcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgY3VycmVudCxcbiAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgZm9yY2VQcm9wYWdhdGVFbnRpcmVUcmVlXG4gICAgKTtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMjYyMTQ0O1xufVxuZnVuY3Rpb24gY2hlY2tJZkNvbnRleHRDaGFuZ2VkKGN1cnJlbnREZXBlbmRlbmNpZXMpIHtcbiAgZm9yIChcbiAgICBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcy5maXJzdENvbnRleHQ7XG4gICAgbnVsbCAhPT0gY3VycmVudERlcGVuZGVuY2llcztcblxuICApIHtcbiAgICBpZiAoXG4gICAgICAhb2JqZWN0SXMoXG4gICAgICAgIGN1cnJlbnREZXBlbmRlbmNpZXMuY29udGV4dC5fY3VycmVudFZhbHVlLFxuICAgICAgICBjdXJyZW50RGVwZW5kZW5jaWVzLm1lbW9pemVkVmFsdWVcbiAgICAgIClcbiAgICApXG4gICAgICByZXR1cm4gITA7XG4gICAgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMubmV4dDtcbiAgfVxuICByZXR1cm4gITE7XG59XG5mdW5jdGlvbiBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcztcbiAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MgJiYgKHdvcmtJblByb2dyZXNzLmZpcnN0Q29udGV4dCA9IG51bGwpO1xufVxuZnVuY3Rpb24gcmVhZENvbnRleHQoY29udGV4dCkge1xuICByZXR1cm4gcmVhZENvbnRleHRGb3JDb25zdW1lcihjdXJyZW50bHlSZW5kZXJpbmdGaWJlciwgY29udGV4dCk7XG59XG5mdW5jdGlvbiByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsaWF0aW9uKGNvbnN1bWVyLCBjb250ZXh0KSB7XG4gIG51bGwgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyICYmIHByZXBhcmVUb1JlYWRDb250ZXh0KGNvbnN1bWVyKTtcbiAgcmV0dXJuIHJlYWRDb250ZXh0Rm9yQ29uc3VtZXIoY29uc3VtZXIsIGNvbnRleHQpO1xufVxuZnVuY3Rpb24gcmVhZENvbnRleHRGb3JDb25zdW1lcihjb25zdW1lciwgY29udGV4dCkge1xuICB2YXIgdmFsdWUgPSBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gIGNvbnRleHQgPSB7IGNvbnRleHQ6IGNvbnRleHQsIG1lbW9pemVkVmFsdWU6IHZhbHVlLCBuZXh0OiBudWxsIH07XG4gIGlmIChudWxsID09PSBsYXN0Q29udGV4dERlcGVuZGVuY3kpIHtcbiAgICBpZiAobnVsbCA9PT0gY29uc3VtZXIpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMzA4KSk7XG4gICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gY29udGV4dDtcbiAgICBjb25zdW1lci5kZXBlbmRlbmNpZXMgPSB7IGxhbmVzOiAwLCBmaXJzdENvbnRleHQ6IGNvbnRleHQgfTtcbiAgICBjb25zdW1lci5mbGFncyB8PSA1MjQyODg7XG4gIH0gZWxzZSBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBsYXN0Q29udGV4dERlcGVuZGVuY3kubmV4dCA9IGNvbnRleHQ7XG4gIHJldHVybiB2YWx1ZTtcbn1cbnZhciBoYXNGb3JjZVVwZGF0ZSA9ICExO1xuZnVuY3Rpb24gaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKGZpYmVyKSB7XG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0ge1xuICAgIGJhc2VTdGF0ZTogZmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICBmaXJzdEJhc2VVcGRhdGU6IG51bGwsXG4gICAgbGFzdEJhc2VVcGRhdGU6IG51bGwsXG4gICAgc2hhcmVkOiB7IHBlbmRpbmc6IG51bGwsIGxhbmVzOiAwLCBoaWRkZW5DYWxsYmFja3M6IG51bGwgfSxcbiAgICBjYWxsYmFja3M6IG51bGxcbiAgfTtcbn1cbmZ1bmN0aW9uIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgY3VycmVudCA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID09PSBjdXJyZW50ICYmXG4gICAgKHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0ge1xuICAgICAgYmFzZVN0YXRlOiBjdXJyZW50LmJhc2VTdGF0ZSxcbiAgICAgIGZpcnN0QmFzZVVwZGF0ZTogY3VycmVudC5maXJzdEJhc2VVcGRhdGUsXG4gICAgICBsYXN0QmFzZVVwZGF0ZTogY3VycmVudC5sYXN0QmFzZVVwZGF0ZSxcbiAgICAgIHNoYXJlZDogY3VycmVudC5zaGFyZWQsXG4gICAgICBjYWxsYmFja3M6IG51bGxcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVVwZGF0ZShsYW5lKSB7XG4gIHJldHVybiB7IGxhbmU6IGxhbmUsIHRhZzogMCwgcGF5bG9hZDogbnVsbCwgY2FsbGJhY2s6IG51bGwsIG5leHQ6IG51bGwgfTtcbn1cbmZ1bmN0aW9uIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSwgbGFuZSkge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaWJlci51cGRhdGVRdWV1ZTtcbiAgaWYgKG51bGwgPT09IHVwZGF0ZVF1ZXVlKSByZXR1cm4gbnVsbDtcbiAgdXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZS5zaGFyZWQ7XG4gIGlmICgwICE9PSAoZXhlY3V0aW9uQ29udGV4dCAmIDIpKSB7XG4gICAgdmFyIHBlbmRpbmcgPSB1cGRhdGVRdWV1ZS5wZW5kaW5nO1xuICAgIG51bGwgPT09IHBlbmRpbmdcbiAgICAgID8gKHVwZGF0ZS5uZXh0ID0gdXBkYXRlKVxuICAgICAgOiAoKHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0KSwgKHBlbmRpbmcubmV4dCA9IHVwZGF0ZSkpO1xuICAgIHVwZGF0ZVF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG4gICAgdXBkYXRlID0gZ2V0Um9vdEZvclVwZGF0ZWRGaWJlcihmaWJlcik7XG4gICAgbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIG51bGwsIGxhbmUpO1xuICAgIHJldHVybiB1cGRhdGU7XG4gIH1cbiAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCB1cGRhdGVRdWV1ZSwgdXBkYXRlLCBsYW5lKTtcbiAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xufVxuZnVuY3Rpb24gZW50YW5nbGVUcmFuc2l0aW9ucyhyb290LCBmaWJlciwgbGFuZSkge1xuICBmaWJlciA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuICBpZiAobnVsbCAhPT0gZmliZXIgJiYgKChmaWJlciA9IGZpYmVyLnNoYXJlZCksIDAgIT09IChsYW5lICYgNDE5NDE3NikpKSB7XG4gICAgdmFyIHF1ZXVlTGFuZXMgPSBmaWJlci5sYW5lcztcbiAgICBxdWV1ZUxhbmVzICY9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAgIGxhbmUgfD0gcXVldWVMYW5lcztcbiAgICBmaWJlci5sYW5lcyA9IGxhbmU7XG4gICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgbGFuZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY2FwdHVyZWRVcGRhdGUpIHtcbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUsXG4gICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcbiAgaWYgKFxuICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAoKGN1cnJlbnQgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSwgcXVldWUgPT09IGN1cnJlbnQpXG4gICkge1xuICAgIHZhciBuZXdGaXJzdCA9IG51bGwsXG4gICAgICBuZXdMYXN0ID0gbnVsbDtcbiAgICBxdWV1ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcbiAgICBpZiAobnVsbCAhPT0gcXVldWUpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgIGxhbmU6IHF1ZXVlLmxhbmUsXG4gICAgICAgICAgdGFnOiBxdWV1ZS50YWcsXG4gICAgICAgICAgcGF5bG9hZDogcXVldWUucGF5bG9hZCxcbiAgICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIG51bGwgPT09IG5ld0xhc3RcbiAgICAgICAgICA/IChuZXdGaXJzdCA9IG5ld0xhc3QgPSBjbG9uZSlcbiAgICAgICAgICA6IChuZXdMYXN0ID0gbmV3TGFzdC5uZXh0ID0gY2xvbmUpO1xuICAgICAgICBxdWV1ZSA9IHF1ZXVlLm5leHQ7XG4gICAgICB9IHdoaWxlIChudWxsICE9PSBxdWV1ZSk7XG4gICAgICBudWxsID09PSBuZXdMYXN0XG4gICAgICAgID8gKG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlKVxuICAgICAgICA6IChuZXdMYXN0ID0gbmV3TGFzdC5uZXh0ID0gY2FwdHVyZWRVcGRhdGUpO1xuICAgIH0gZWxzZSBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICBxdWV1ZSA9IHtcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudC5iYXNlU3RhdGUsXG4gICAgICBmaXJzdEJhc2VVcGRhdGU6IG5ld0ZpcnN0LFxuICAgICAgbGFzdEJhc2VVcGRhdGU6IG5ld0xhc3QsXG4gICAgICBzaGFyZWQ6IGN1cnJlbnQuc2hhcmVkLFxuICAgICAgY2FsbGJhY2tzOiBjdXJyZW50LmNhbGxiYWNrc1xuICAgIH07XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBxdWV1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgd29ya0luUHJvZ3Jlc3MgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZTtcbiAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NcbiAgICA/IChxdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZSlcbiAgICA6ICh3b3JrSW5Qcm9ncmVzcy5uZXh0ID0gY2FwdHVyZWRVcGRhdGUpO1xuICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xufVxudmFyIGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSAhMTtcbmZ1bmN0aW9uIHN1c3BlbmRJZlVwZGF0ZVJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24oKSB7XG4gIGlmIChkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKSB7XG4gICAgdmFyIGVudGFuZ2xlZEFjdGlvblRoZW5hYmxlID0gY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlO1xuICAgIGlmIChudWxsICE9PSBlbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSkgdGhyb3cgZW50YW5nbGVkQWN0aW9uVGhlbmFibGU7XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NVcGRhdGVRdWV1ZShcbiAgd29ya0luUHJvZ3Jlc3MkanNjb21wJDAsXG4gIHByb3BzLFxuICBpbnN0YW5jZSRqc2NvbXAkMCxcbiAgcmVuZGVyTGFuZXNcbikge1xuICBkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uID0gITE7XG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzJGpzY29tcCQwLnVwZGF0ZVF1ZXVlO1xuICBoYXNGb3JjZVVwZGF0ZSA9ICExO1xuICB2YXIgZmlyc3RCYXNlVXBkYXRlID0gcXVldWUuZmlyc3RCYXNlVXBkYXRlLFxuICAgIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGUsXG4gICAgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG4gIGlmIChudWxsICE9PSBwZW5kaW5nUXVldWUpIHtcbiAgICBxdWV1ZS5zaGFyZWQucGVuZGluZyA9IG51bGw7XG4gICAgdmFyIGxhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlLFxuICAgICAgZmlyc3RQZW5kaW5nVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICBsYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDtcbiAgICBudWxsID09PSBsYXN0QmFzZVVwZGF0ZVxuICAgICAgPyAoZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlKVxuICAgICAgOiAobGFzdEJhc2VVcGRhdGUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZSk7XG4gICAgbGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzJGpzY29tcCQwLmFsdGVybmF0ZTtcbiAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAoKGN1cnJlbnQgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgIChwZW5kaW5nUXVldWUgPSBjdXJyZW50Lmxhc3RCYXNlVXBkYXRlKSxcbiAgICAgIHBlbmRpbmdRdWV1ZSAhPT0gbGFzdEJhc2VVcGRhdGUgJiZcbiAgICAgICAgKG51bGwgPT09IHBlbmRpbmdRdWV1ZVxuICAgICAgICAgID8gKGN1cnJlbnQuZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlKVxuICAgICAgICAgIDogKHBlbmRpbmdRdWV1ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlKSxcbiAgICAgICAgKGN1cnJlbnQubGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZSkpKTtcbiAgfVxuICBpZiAobnVsbCAhPT0gZmlyc3RCYXNlVXBkYXRlKSB7XG4gICAgdmFyIG5ld1N0YXRlID0gcXVldWUuYmFzZVN0YXRlO1xuICAgIGxhc3RCYXNlVXBkYXRlID0gMDtcbiAgICBjdXJyZW50ID0gZmlyc3RQZW5kaW5nVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUgPSBudWxsO1xuICAgIHBlbmRpbmdRdWV1ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcbiAgICBkbyB7XG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHBlbmRpbmdRdWV1ZS5sYW5lICYgLTUzNjg3MDkxMyxcbiAgICAgICAgaXNIaWRkZW5VcGRhdGUgPSB1cGRhdGVMYW5lICE9PSBwZW5kaW5nUXVldWUubGFuZTtcbiAgICAgIGlmIChcbiAgICAgICAgaXNIaWRkZW5VcGRhdGVcbiAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIHVwZGF0ZUxhbmUpID09PSB1cGRhdGVMYW5lXG4gICAgICAgICAgOiAocmVuZGVyTGFuZXMgJiB1cGRhdGVMYW5lKSA9PT0gdXBkYXRlTGFuZVxuICAgICAgKSB7XG4gICAgICAgIDAgIT09IHVwZGF0ZUxhbmUgJiZcbiAgICAgICAgICB1cGRhdGVMYW5lID09PSBjdXJyZW50RW50YW5nbGVkTGFuZSAmJlxuICAgICAgICAgIChkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uID0gITApO1xuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgKGN1cnJlbnQgPSBjdXJyZW50Lm5leHQgPVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYW5lOiAwLFxuICAgICAgICAgICAgICB0YWc6IHBlbmRpbmdRdWV1ZS50YWcsXG4gICAgICAgICAgICAgIHBheWxvYWQ6IHBlbmRpbmdRdWV1ZS5wYXlsb2FkLFxuICAgICAgICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIGE6IHtcbiAgICAgICAgICB2YXIgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcyRqc2NvbXAkMCxcbiAgICAgICAgICAgIHVwZGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgICB1cGRhdGVMYW5lID0gcHJvcHM7XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gaW5zdGFuY2UkanNjb21wJDA7XG4gICAgICAgICAgc3dpdGNoICh1cGRhdGUudGFnKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gdXBkYXRlLnBheWxvYWQ7XG4gICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MuY2FsbChpbnN0YW5jZSwgbmV3U3RhdGUsIHVwZGF0ZUxhbmUpO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAtNjU1MzcpIHwgMTI4O1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZS5wYXlsb2FkO1xuICAgICAgICAgICAgICB1cGRhdGVMYW5lID1cbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICAgPyB3b3JrSW5Qcm9ncmVzcy5jYWxsKGluc3RhbmNlLCBuZXdTdGF0ZSwgdXBkYXRlTGFuZSlcbiAgICAgICAgICAgICAgICAgIDogd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIGlmIChudWxsID09PSB1cGRhdGVMYW5lIHx8IHZvaWQgMCA9PT0gdXBkYXRlTGFuZSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgbmV3U3RhdGUgPSBhc3NpZ24oe30sIG5ld1N0YXRlLCB1cGRhdGVMYW5lKTtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgaGFzRm9yY2VVcGRhdGUgPSAhMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlTGFuZSA9IHBlbmRpbmdRdWV1ZS5jYWxsYmFjaztcbiAgICAgICAgbnVsbCAhPT0gdXBkYXRlTGFuZSAmJlxuICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MkanNjb21wJDAuZmxhZ3MgfD0gNjQpLFxuICAgICAgICAgIGlzSGlkZGVuVXBkYXRlICYmICh3b3JrSW5Qcm9ncmVzcyRqc2NvbXAkMC5mbGFncyB8PSA4MTkyKSxcbiAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUgPSBxdWV1ZS5jYWxsYmFja3MpLFxuICAgICAgICAgIG51bGwgPT09IGlzSGlkZGVuVXBkYXRlXG4gICAgICAgICAgICA/IChxdWV1ZS5jYWxsYmFja3MgPSBbdXBkYXRlTGFuZV0pXG4gICAgICAgICAgICA6IGlzSGlkZGVuVXBkYXRlLnB1c2godXBkYXRlTGFuZSkpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIChpc0hpZGRlblVwZGF0ZSA9IHtcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIHRhZzogcGVuZGluZ1F1ZXVlLnRhZyxcbiAgICAgICAgICBwYXlsb2FkOiBwZW5kaW5nUXVldWUucGF5bG9hZCxcbiAgICAgICAgICBjYWxsYmFjazogcGVuZGluZ1F1ZXVlLmNhbGxiYWNrLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfSksXG4gICAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgICAgPyAoKGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGN1cnJlbnQgPSBpc0hpZGRlblVwZGF0ZSksXG4gICAgICAgICAgICAgIChsYXN0UGVuZGluZ1VwZGF0ZSA9IG5ld1N0YXRlKSlcbiAgICAgICAgICAgIDogKGN1cnJlbnQgPSBjdXJyZW50Lm5leHQgPSBpc0hpZGRlblVwZGF0ZSksXG4gICAgICAgICAgKGxhc3RCYXNlVXBkYXRlIHw9IHVwZGF0ZUxhbmUpO1xuICAgICAgcGVuZGluZ1F1ZXVlID0gcGVuZGluZ1F1ZXVlLm5leHQ7XG4gICAgICBpZiAobnVsbCA9PT0gcGVuZGluZ1F1ZXVlKVxuICAgICAgICBpZiAoKChwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZyksIG51bGwgPT09IHBlbmRpbmdRdWV1ZSkpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUgPSBwZW5kaW5nUXVldWUpLFxuICAgICAgICAgICAgKHBlbmRpbmdRdWV1ZSA9IGlzSGlkZGVuVXBkYXRlLm5leHQpLFxuICAgICAgICAgICAgKGlzSGlkZGVuVXBkYXRlLm5leHQgPSBudWxsKSxcbiAgICAgICAgICAgIChxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGlzSGlkZGVuVXBkYXRlKSxcbiAgICAgICAgICAgIChxdWV1ZS5zaGFyZWQucGVuZGluZyA9IG51bGwpO1xuICAgIH0gd2hpbGUgKDEpO1xuICAgIG51bGwgPT09IGN1cnJlbnQgJiYgKGxhc3RQZW5kaW5nVXBkYXRlID0gbmV3U3RhdGUpO1xuICAgIHF1ZXVlLmJhc2VTdGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlO1xuICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGN1cnJlbnQ7XG4gICAgbnVsbCA9PT0gZmlyc3RCYXNlVXBkYXRlICYmIChxdWV1ZS5zaGFyZWQubGFuZXMgPSAwKTtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gbGFzdEJhc2VVcGRhdGU7XG4gICAgd29ya0luUHJvZ3Jlc3MkanNjb21wJDAubGFuZXMgPSBsYXN0QmFzZVVwZGF0ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcyRqc2NvbXAkMC5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgY29udGV4dCkge1xuICBpZiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY2FsbGJhY2spXG4gICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxOTEsIGNhbGxiYWNrKSk7XG4gIGNhbGxiYWNrLmNhbGwoY29udGV4dCk7XG59XG5mdW5jdGlvbiBjb21taXRDYWxsYmFja3ModXBkYXRlUXVldWUsIGNvbnRleHQpIHtcbiAgdmFyIGNhbGxiYWNrcyA9IHVwZGF0ZVF1ZXVlLmNhbGxiYWNrcztcbiAgaWYgKG51bGwgIT09IGNhbGxiYWNrcylcbiAgICBmb3IgKFxuICAgICAgdXBkYXRlUXVldWUuY2FsbGJhY2tzID0gbnVsbCwgdXBkYXRlUXVldWUgPSAwO1xuICAgICAgdXBkYXRlUXVldWUgPCBjYWxsYmFja3MubGVuZ3RoO1xuICAgICAgdXBkYXRlUXVldWUrK1xuICAgIClcbiAgICAgIGNhbGxDYWxsYmFjayhjYWxsYmFja3NbdXBkYXRlUXVldWVdLCBjb250ZXh0KTtcbn1cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoZmxhZ3MsIGZpbmlzaGVkV29yaykge1xuICB0cnkge1xuICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSxcbiAgICAgIGxhc3RFZmZlY3QgPSBudWxsICE9PSB1cGRhdGVRdWV1ZSA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuICAgIGlmIChudWxsICE9PSBsYXN0RWZmZWN0KSB7XG4gICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICB1cGRhdGVRdWV1ZSA9IGZpcnN0RWZmZWN0O1xuICAgICAgZG8ge1xuICAgICAgICBpZiAoKHVwZGF0ZVF1ZXVlLnRhZyAmIGZsYWdzKSA9PT0gZmxhZ3MpIHtcbiAgICAgICAgICBsYXN0RWZmZWN0ID0gdm9pZCAwO1xuICAgICAgICAgIHZhciBjcmVhdGUgPSB1cGRhdGVRdWV1ZS5jcmVhdGUsXG4gICAgICAgICAgICBpbnN0ID0gdXBkYXRlUXVldWUuaW5zdDtcbiAgICAgICAgICBsYXN0RWZmZWN0ID0gY3JlYXRlKCk7XG4gICAgICAgICAgaW5zdC5kZXN0cm95ID0gbGFzdEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlLm5leHQ7XG4gICAgICB9IHdoaWxlICh1cGRhdGVRdWV1ZSAhPT0gZmlyc3RFZmZlY3QpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgfVxufVxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICBmbGFncyxcbiAgZmluaXNoZWRXb3JrLFxuICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yJGpzY29tcCQwXG4pIHtcbiAgdHJ5IHtcbiAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUsXG4gICAgICBsYXN0RWZmZWN0ID0gbnVsbCAhPT0gdXBkYXRlUXVldWUgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcbiAgICBpZiAobnVsbCAhPT0gbGFzdEVmZmVjdCkge1xuICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgdXBkYXRlUXVldWUgPSBmaXJzdEVmZmVjdDtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKCh1cGRhdGVRdWV1ZS50YWcgJiBmbGFncykgPT09IGZsYWdzKSB7XG4gICAgICAgICAgdmFyIGluc3QgPSB1cGRhdGVRdWV1ZS5pbnN0LFxuICAgICAgICAgICAgZGVzdHJveSA9IGluc3QuZGVzdHJveTtcbiAgICAgICAgICBpZiAodm9pZCAwICE9PSBkZXN0cm95KSB7XG4gICAgICAgICAgICBpbnN0LmRlc3Ryb3kgPSB2b2lkIDA7XG4gICAgICAgICAgICBsYXN0RWZmZWN0ID0gZmluaXNoZWRXb3JrO1xuICAgICAgICAgICAgdmFyIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IgPSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yJGpzY29tcCQwO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZGVzdHJveSgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoXG4gICAgICAgICAgICAgICAgbGFzdEVmZmVjdCxcbiAgICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWUubmV4dDtcbiAgICAgIH0gd2hpbGUgKHVwZGF0ZVF1ZXVlICE9PSBmaXJzdEVmZmVjdCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICB9XG59XG5mdW5jdGlvbiBjb21taXRDbGFzc0NhbGxiYWNrcyhmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICBpZiAobnVsbCAhPT0gdXBkYXRlUXVldWUpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgIHRyeSB7XG4gICAgICBjb21taXRDYWxsYmFja3ModXBkYXRlUXVldWUsIGluc3RhbmNlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoXG4gIGN1cnJlbnQsXG4gIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gIGluc3RhbmNlXG4pIHtcbiAgaW5zdGFuY2UucHJvcHMgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhcbiAgICBjdXJyZW50LnR5cGUsXG4gICAgY3VycmVudC5tZW1vaXplZFByb3BzXG4gICk7XG4gIGluc3RhbmNlLnN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICB0cnkge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICB9XG59XG5mdW5jdGlvbiBzYWZlbHlBdHRhY2hSZWYoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcikge1xuICB0cnkge1xuICAgIHZhciByZWYgPSBjdXJyZW50LnJlZjtcbiAgICBpZiAobnVsbCAhPT0gcmVmKSB7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBjdXJyZW50LnN0YXRlTm9kZTtcbiAgICAgIHN3aXRjaCAoY3VycmVudC50YWcpIHtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHZhciBpbnN0YW5jZVRvVXNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGluc3RhbmNlO1xuICAgICAgfVxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmXG4gICAgICAgID8gKGN1cnJlbnQucmVmQ2xlYW51cCA9IHJlZihpbnN0YW5jZVRvVXNlKSlcbiAgICAgICAgOiAocmVmLmN1cnJlbnQgPSBpbnN0YW5jZVRvVXNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICB9XG59XG5mdW5jdGlvbiBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcikge1xuICB2YXIgcmVmID0gY3VycmVudC5yZWYsXG4gICAgcmVmQ2xlYW51cCA9IGN1cnJlbnQucmVmQ2xlYW51cDtcbiAgaWYgKG51bGwgIT09IHJlZilcbiAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmQ2xlYW51cClcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlZkNsZWFudXAoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIChjdXJyZW50LnJlZkNsZWFudXAgPSBudWxsKSxcbiAgICAgICAgICAoY3VycmVudCA9IGN1cnJlbnQuYWx0ZXJuYXRlKSxcbiAgICAgICAgICBudWxsICE9IGN1cnJlbnQgJiYgKGN1cnJlbnQucmVmQ2xlYW51cCA9IG51bGwpO1xuICAgICAgfVxuICAgIGVsc2UgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlZilcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlZihudWxsKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yJDExMikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvciQxMTIpO1xuICAgICAgfVxuICAgIGVsc2UgcmVmLmN1cnJlbnQgPSBudWxsO1xufVxuZnVuY3Rpb24gY29tbWl0SG9zdE1vdW50KGZpbmlzaGVkV29yaykge1xuICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlLFxuICAgIHByb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICB0cnkge1xuICAgIGE6IHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcImJ1dHRvblwiOlxuICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICBjYXNlIFwidGV4dGFyZWFcIjpcbiAgICAgICAgcHJvcHMuYXV0b0ZvY3VzICYmIGluc3RhbmNlLmZvY3VzKCk7XG4gICAgICAgIGJyZWFrIGE7XG4gICAgICBjYXNlIFwiaW1nXCI6XG4gICAgICAgIHByb3BzLnNyY1xuICAgICAgICAgID8gKGluc3RhbmNlLnNyYyA9IHByb3BzLnNyYylcbiAgICAgICAgICA6IHByb3BzLnNyY1NldCAmJiAoaW5zdGFuY2Uuc3Jjc2V0ID0gcHJvcHMuc3JjU2V0KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdEhvc3RVcGRhdGUoZmluaXNoZWRXb3JrLCBuZXdQcm9wcywgb2xkUHJvcHMpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZG9tRWxlbWVudCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCBmaW5pc2hlZFdvcmsudHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBkb21FbGVtZW50W2ludGVybmFsUHJvcHNLZXldID0gbmV3UHJvcHM7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzSG9zdFBhcmVudChmaWJlcikge1xuICByZXR1cm4gKFxuICAgIDUgPT09IGZpYmVyLnRhZyB8fFxuICAgIDMgPT09IGZpYmVyLnRhZyB8fFxuICAgIDI2ID09PSBmaWJlci50YWcgfHxcbiAgICAyNyA9PT0gZmliZXIudGFnIHx8XG4gICAgNCA9PT0gZmliZXIudGFnXG4gICk7XG59XG5mdW5jdGlvbiBnZXRIb3N0U2libGluZyhmaWJlcikge1xuICBhOiBmb3IgKDs7KSB7XG4gICAgZm9yICg7IG51bGwgPT09IGZpYmVyLnNpYmxpbmc7ICkge1xuICAgICAgaWYgKG51bGwgPT09IGZpYmVyLnJldHVybiB8fCBpc0hvc3RQYXJlbnQoZmliZXIucmV0dXJuKSkgcmV0dXJuIG51bGw7XG4gICAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgICB9XG4gICAgZmliZXIuc2libGluZy5yZXR1cm4gPSBmaWJlci5yZXR1cm47XG4gICAgZm9yIChcbiAgICAgIGZpYmVyID0gZmliZXIuc2libGluZztcbiAgICAgIDUgIT09IGZpYmVyLnRhZyAmJlxuICAgICAgNiAhPT0gZmliZXIudGFnICYmXG4gICAgICAyNyAhPT0gZmliZXIudGFnICYmXG4gICAgICAxOCAhPT0gZmliZXIudGFnO1xuXG4gICAgKSB7XG4gICAgICBpZiAoZmliZXIuZmxhZ3MgJiAyKSBjb250aW51ZSBhO1xuICAgICAgaWYgKG51bGwgPT09IGZpYmVyLmNoaWxkIHx8IDQgPT09IGZpYmVyLnRhZykgY29udGludWUgYTtcbiAgICAgIGVsc2UgKGZpYmVyLmNoaWxkLnJldHVybiA9IGZpYmVyKSwgKGZpYmVyID0gZmliZXIuY2hpbGQpO1xuICAgIH1cbiAgICBpZiAoIShmaWJlci5mbGFncyAmIDIpKSByZXR1cm4gZmliZXIuc3RhdGVOb2RlO1xuICB9XG59XG5mdW5jdGlvbiBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZztcbiAgaWYgKDUgPT09IHRhZyB8fCA2ID09PSB0YWcpXG4gICAgKG5vZGUgPSBub2RlLnN0YXRlTm9kZSksXG4gICAgICBiZWZvcmVcbiAgICAgICAgPyA4ID09PSBwYXJlbnQubm9kZVR5cGVcbiAgICAgICAgICA/IHBhcmVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCBiZWZvcmUpXG4gICAgICAgICAgOiBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIGJlZm9yZSlcbiAgICAgICAgOiAoOCA9PT0gcGFyZW50Lm5vZGVUeXBlXG4gICAgICAgICAgICA/ICgoYmVmb3JlID0gcGFyZW50LnBhcmVudE5vZGUpLCBiZWZvcmUuaW5zZXJ0QmVmb3JlKG5vZGUsIHBhcmVudCkpXG4gICAgICAgICAgICA6ICgoYmVmb3JlID0gcGFyZW50KSwgYmVmb3JlLmFwcGVuZENoaWxkKG5vZGUpKSxcbiAgICAgICAgICAocGFyZW50ID0gcGFyZW50Ll9yZWFjdFJvb3RDb250YWluZXIpLFxuICAgICAgICAgIChudWxsICE9PSBwYXJlbnQgJiYgdm9pZCAwICE9PSBwYXJlbnQpIHx8XG4gICAgICAgICAgICBudWxsICE9PSBiZWZvcmUub25jbGljayB8fFxuICAgICAgICAgICAgKGJlZm9yZS5vbmNsaWNrID0gbm9vcCQxKSk7XG4gIGVsc2UgaWYgKDQgIT09IHRhZyAmJiAyNyAhPT0gdGFnICYmICgobm9kZSA9IG5vZGUuY2hpbGQpLCBudWxsICE9PSBub2RlKSlcbiAgICBmb3IgKFxuICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCksXG4gICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICBudWxsICE9PSBub2RlO1xuXG4gICAgKVxuICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCksXG4gICAgICAgIChub2RlID0gbm9kZS5zaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIGlmICg1ID09PSB0YWcgfHwgNiA9PT0gdGFnKVxuICAgIChub2RlID0gbm9kZS5zdGF0ZU5vZGUpLFxuICAgICAgYmVmb3JlID8gcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCBiZWZvcmUpIDogcGFyZW50LmFwcGVuZENoaWxkKG5vZGUpO1xuICBlbHNlIGlmICg0ICE9PSB0YWcgJiYgMjcgIT09IHRhZyAmJiAoKG5vZGUgPSBub2RlLmNoaWxkKSwgbnVsbCAhPT0gbm9kZSkpXG4gICAgZm9yIChcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCksIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICBudWxsICE9PSBub2RlO1xuXG4gICAgKVxuICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKG5vZGUsIGJlZm9yZSwgcGFyZW50KSwgKG5vZGUgPSBub2RlLnNpYmxpbmcpO1xufVxudmFyIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9ICExLFxuICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gITEsXG4gIG5lZWRzRm9ybVJlc2V0ID0gITEsXG4gIFBvc3NpYmx5V2Vha1NldCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFdlYWtTZXQgPyBXZWFrU2V0IDogU2V0LFxuICBuZXh0RWZmZWN0ID0gbnVsbCxcbiAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gITE7XG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmlyc3RDaGlsZCkge1xuICByb290ID0gcm9vdC5jb250YWluZXJJbmZvO1xuICBldmVudHNFbmFibGVkID0gX2VuYWJsZWQ7XG4gIHJvb3QgPSBnZXRBY3RpdmVFbGVtZW50RGVlcChyb290KTtcbiAgaWYgKGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhyb290KSkge1xuICAgIGlmIChcInNlbGVjdGlvblN0YXJ0XCIgaW4gcm9vdClcbiAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXAgPSB7XG4gICAgICAgIHN0YXJ0OiByb290LnNlbGVjdGlvblN0YXJ0LFxuICAgICAgICBlbmQ6IHJvb3Quc2VsZWN0aW9uRW5kXG4gICAgICB9O1xuICAgIGVsc2VcbiAgICAgIGE6IHtcbiAgICAgICAgSlNDb21waWxlcl90ZW1wID1cbiAgICAgICAgICAoKEpTQ29tcGlsZXJfdGVtcCA9IHJvb3Qub3duZXJEb2N1bWVudCkgJiZcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5kZWZhdWx0VmlldykgfHxcbiAgICAgICAgICB3aW5kb3c7XG4gICAgICAgIHZhciBzZWxlY3Rpb24gPVxuICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5nZXRTZWxlY3Rpb24gJiYgSlNDb21waWxlcl90ZW1wLmdldFNlbGVjdGlvbigpO1xuICAgICAgICBpZiAoc2VsZWN0aW9uICYmIDAgIT09IHNlbGVjdGlvbi5yYW5nZUNvdW50KSB7XG4gICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gc2VsZWN0aW9uLmFuY2hvck5vZGU7XG4gICAgICAgICAgdmFyIGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgICBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlO1xuICAgICAgICAgIHNlbGVjdGlvbiA9IHNlbGVjdGlvbi5mb2N1c09mZnNldDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wLm5vZGVUeXBlLCBmb2N1c05vZGUubm9kZVR5cGU7XG4gICAgICAgICAgfSBjYXRjaCAoZSQyMCkge1xuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gbnVsbDtcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBsZW5ndGggPSAwLFxuICAgICAgICAgICAgc3RhcnQgPSAtMSxcbiAgICAgICAgICAgIGVuZCA9IC0xLFxuICAgICAgICAgICAgaW5kZXhXaXRoaW5BbmNob3IgPSAwLFxuICAgICAgICAgICAgaW5kZXhXaXRoaW5Gb2N1cyA9IDAsXG4gICAgICAgICAgICBub2RlID0gcm9vdCxcbiAgICAgICAgICAgIHBhcmVudE5vZGUgPSBudWxsO1xuICAgICAgICAgIGI6IGZvciAoOzspIHtcbiAgICAgICAgICAgIGZvciAodmFyIG5leHQ7IDsgKSB7XG4gICAgICAgICAgICAgIG5vZGUgIT09IEpTQ29tcGlsZXJfdGVtcCB8fFxuICAgICAgICAgICAgICAgICgwICE9PSBhbmNob3JPZmZzZXQgJiYgMyAhPT0gbm9kZS5ub2RlVHlwZSkgfHxcbiAgICAgICAgICAgICAgICAoc3RhcnQgPSBsZW5ndGggKyBhbmNob3JPZmZzZXQpO1xuICAgICAgICAgICAgICBub2RlICE9PSBmb2N1c05vZGUgfHxcbiAgICAgICAgICAgICAgICAoMCAhPT0gc2VsZWN0aW9uICYmIDMgIT09IG5vZGUubm9kZVR5cGUpIHx8XG4gICAgICAgICAgICAgICAgKGVuZCA9IGxlbmd0aCArIHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgIDMgPT09IG5vZGUubm9kZVR5cGUgJiYgKGxlbmd0aCArPSBub2RlLm5vZGVWYWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gKG5leHQgPSBub2RlLmZpcnN0Q2hpbGQpKSBicmVhaztcbiAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IG5vZGU7XG4gICAgICAgICAgICAgIG5vZGUgPSBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgICBpZiAobm9kZSA9PT0gcm9vdCkgYnJlYWsgYjtcbiAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9PT0gSlNDb21waWxlcl90ZW1wICYmXG4gICAgICAgICAgICAgICAgKytpbmRleFdpdGhpbkFuY2hvciA9PT0gYW5jaG9yT2Zmc2V0ICYmXG4gICAgICAgICAgICAgICAgKHN0YXJ0ID0gbGVuZ3RoKTtcbiAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9PT0gZm9jdXNOb2RlICYmXG4gICAgICAgICAgICAgICAgKytpbmRleFdpdGhpbkZvY3VzID09PSBzZWxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAoZW5kID0gbGVuZ3RoKTtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT09IChuZXh0ID0gbm9kZS5uZXh0U2libGluZykpIGJyZWFrO1xuICAgICAgICAgICAgICBub2RlID0gcGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUgPSBuZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPVxuICAgICAgICAgICAgLTEgPT09IHN0YXJ0IHx8IC0xID09PSBlbmQgPyBudWxsIDogeyBzdGFydDogc3RhcnQsIGVuZDogZW5kIH07XG4gICAgICAgIH0gZWxzZSBKU0NvbXBpbGVyX3RlbXAgPSBudWxsO1xuICAgICAgfVxuICAgIEpTQ29tcGlsZXJfdGVtcCA9IEpTQ29tcGlsZXJfdGVtcCB8fCB7IHN0YXJ0OiAwLCBlbmQ6IDAgfTtcbiAgfSBlbHNlIEpTQ29tcGlsZXJfdGVtcCA9IG51bGw7XG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0geyBmb2N1c2VkRWxlbTogcm9vdCwgc2VsZWN0aW9uUmFuZ2U6IEpTQ29tcGlsZXJfdGVtcCB9O1xuICBfZW5hYmxlZCA9ICExO1xuICBmb3IgKG5leHRFZmZlY3QgPSBmaXJzdENoaWxkOyBudWxsICE9PSBuZXh0RWZmZWN0OyApXG4gICAgaWYgKFxuICAgICAgKChmaXJzdENoaWxkID0gbmV4dEVmZmVjdCksXG4gICAgICAocm9vdCA9IGZpcnN0Q2hpbGQuY2hpbGQpLFxuICAgICAgMCAhPT0gKGZpcnN0Q2hpbGQuc3VidHJlZUZsYWdzICYgMTAyOCkgJiYgbnVsbCAhPT0gcm9vdClcbiAgICApXG4gICAgICAocm9vdC5yZXR1cm4gPSBmaXJzdENoaWxkKSwgKG5leHRFZmZlY3QgPSByb290KTtcbiAgICBlbHNlXG4gICAgICBmb3IgKDsgbnVsbCAhPT0gbmV4dEVmZmVjdDsgKSB7XG4gICAgICAgIGZpcnN0Q2hpbGQgPSBuZXh0RWZmZWN0O1xuICAgICAgICBmb2N1c05vZGUgPSBmaXJzdENoaWxkLmFsdGVybmF0ZTtcbiAgICAgICAgcm9vdCA9IGZpcnN0Q2hpbGQuZmxhZ3M7XG4gICAgICAgIHN3aXRjaCAoZmlyc3RDaGlsZC50YWcpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBpZiAoMCAhPT0gKHJvb3QgJiAxMDI0KSAmJiBudWxsICE9PSBmb2N1c05vZGUpIHtcbiAgICAgICAgICAgICAgcm9vdCA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgYW5jaG9yT2Zmc2V0ID0gZm9jdXNOb2RlLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICAgIGZvY3VzTm9kZSA9IGZvY3VzTm9kZS5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgICBzZWxlY3Rpb24gPSBKU0NvbXBpbGVyX3RlbXAuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhciByZXNvbHZlZFByZXZQcm9wcyA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKFxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wLnR5cGUsXG4gICAgICAgICAgICAgICAgICBhbmNob3JPZmZzZXQsXG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAuZWxlbWVudFR5cGUgPT09IEpTQ29tcGlsZXJfdGVtcC50eXBlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByb290ID0gc2VsZWN0aW9uLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKFxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRQcmV2UHJvcHMsXG4gICAgICAgICAgICAgICAgICBmb2N1c05vZGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IHJvb3Q7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAsXG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAucmV0dXJuLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBpZiAoMCAhPT0gKHJvb3QgJiAxMDI0KSlcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICgocm9vdCA9IGZpcnN0Q2hpbGQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLFxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX3RlbXAgPSByb290Lm5vZGVUeXBlKSxcbiAgICAgICAgICAgICAgICA5ID09PSBKU0NvbXBpbGVyX3RlbXApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjbGVhckNvbnRhaW5lclNwYXJpbmdseShyb290KTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAoMSA9PT0gSlNDb21waWxlcl90ZW1wKVxuICAgICAgICAgICAgICAgIHN3aXRjaCAocm9vdC5ub2RlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcIkhFQURcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiQk9EWVwiOlxuICAgICAgICAgICAgICAgICAgICBjbGVhckNvbnRhaW5lclNwYXJpbmdseShyb290KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByb290LnRleHRDb250ZW50ID0gXCJcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoMCAhPT0gKHJvb3QgJiAxMDI0KSkgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNjMpKTtcbiAgICAgICAgfVxuICAgICAgICByb290ID0gZmlyc3RDaGlsZC5zaWJsaW5nO1xuICAgICAgICBpZiAobnVsbCAhPT0gcm9vdCkge1xuICAgICAgICAgIHJvb3QucmV0dXJuID0gZmlyc3RDaGlsZC5yZXR1cm47XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IHJvb3Q7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dEVmZmVjdCA9IGZpcnN0Q2hpbGQucmV0dXJuO1xuICAgICAgfVxuICByZXNvbHZlZFByZXZQcm9wcyA9IHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1cjtcbiAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gITE7XG4gIHJldHVybiByZXNvbHZlZFByZXZQcm9wcztcbn1cbmZ1bmN0aW9uIGNvbW1pdExheW91dEVmZmVjdE9uRmliZXIoZmluaXNoZWRSb290LCBjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgdmFyIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIDA6XG4gICAgY2FzZSAxMTpcbiAgICBjYXNlIDE1OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgZmxhZ3MgJiA0ICYmIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoNSwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGlmIChmbGFncyAmIDQpXG4gICAgICAgIGlmICgoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUpLCBudWxsID09PSBjdXJyZW50KSlcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmluaXNoZWRSb290LmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIHByZXZQcm9wcyA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHNcbiAgICAgICAgICApO1xuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5jb21wb25lbnREaWRVcGRhdGUoXG4gICAgICAgICAgICAgIHByZXZQcm9wcyxcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290Ll9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yJDExMSkge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgICAgZXJyb3IkMTExXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgZmxhZ3MgJiA2NCAmJiBjb21taXRDbGFzc0NhbGxiYWNrcyhmaW5pc2hlZFdvcmspO1xuICAgICAgZmxhZ3MgJiA1MTIgJiYgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBpZiAoZmxhZ3MgJiA2NCAmJiAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSwgbnVsbCAhPT0gZmxhZ3MpKSB7XG4gICAgICAgIGZpbmlzaGVkUm9vdCA9IG51bGw7XG4gICAgICAgIGlmIChudWxsICE9PSBmaW5pc2hlZFdvcmsuY2hpbGQpXG4gICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsuY2hpbGQudGFnKSB7XG4gICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29tbWl0Q2FsbGJhY2tzKGZsYWdzLCBmaW5pc2hlZFJvb3QpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI2OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgZmxhZ3MgJiA1MTIgJiYgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI3OlxuICAgIGNhc2UgNTpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIG51bGwgPT09IGN1cnJlbnQgJiYgZmxhZ3MgJiA0ICYmIGNvbW1pdEhvc3RNb3VudChmaW5pc2hlZFdvcmspO1xuICAgICAgZmxhZ3MgJiA1MTIgJiYgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEyOlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMzpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGZsYWdzICYgNCAmJiBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDIyOlxuICAgICAgcHJldlByb3BzID1cbiAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgfHwgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuO1xuICAgICAgaWYgKCFwcmV2UHJvcHMpIHtcbiAgICAgICAgY3VycmVudCA9XG4gICAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgIHZhciBwcmV2T2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuLFxuICAgICAgICAgIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gcHJldlByb3BzO1xuICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IGN1cnJlbnQpICYmICFwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlblxuICAgICAgICAgID8gcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIDAgIT09IChmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzICYgODc3MilcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgfVxuICAgICAgZmxhZ3MgJiA1MTIgJiZcbiAgICAgICAgKFwibWFudWFsXCIgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLm1vZGVcbiAgICAgICAgICA/IHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pXG4gICAgICAgICAgOiBzYWZlbHlEZXRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICB9XG59XG5mdW5jdGlvbiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhmaWJlcikge1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuICBudWxsICE9PSBhbHRlcm5hdGUgJiZcbiAgICAoKGZpYmVyLmFsdGVybmF0ZSA9IG51bGwpLCBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhhbHRlcm5hdGUpKTtcbiAgZmliZXIuY2hpbGQgPSBudWxsO1xuICBmaWJlci5kZWxldGlvbnMgPSBudWxsO1xuICBmaWJlci5zaWJsaW5nID0gbnVsbDtcbiAgNSA9PT0gZmliZXIudGFnICYmXG4gICAgKChhbHRlcm5hdGUgPSBmaWJlci5zdGF0ZU5vZGUpLFxuICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJiBkZXRhY2hEZWxldGVkSW5zdGFuY2UoYWx0ZXJuYXRlKSk7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IG51bGw7XG4gIGZpYmVyLnJldHVybiA9IG51bGw7XG4gIGZpYmVyLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICBmaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgZmliZXIucGVuZGluZ1Byb3BzID0gbnVsbDtcbiAgZmliZXIuc3RhdGVOb2RlID0gbnVsbDtcbiAgZmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xufVxudmFyIGhvc3RQYXJlbnQgPSBudWxsLFxuICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMTtcbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gIGZpbmlzaGVkUm9vdCxcbiAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgcGFyZW50XG4pIHtcbiAgZm9yIChwYXJlbnQgPSBwYXJlbnQuY2hpbGQ7IG51bGwgIT09IHBhcmVudDsgKVxuICAgIGNvbW1pdERlbGV0aW9uRWZmZWN0c09uRmliZXIoZmluaXNoZWRSb290LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBwYXJlbnQpLFxuICAgICAgKHBhcmVudCA9IHBhcmVudC5zaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIGNvbW1pdERlbGV0aW9uRWZmZWN0c09uRmliZXIoXG4gIGZpbmlzaGVkUm9vdCxcbiAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgZGVsZXRlZEZpYmVyXG4pIHtcbiAgaWYgKGluamVjdGVkSG9vayAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQpXG4gICAgdHJ5IHtcbiAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudChyZW5kZXJlcklELCBkZWxldGVkRmliZXIpO1xuICAgIH0gY2F0Y2ggKGVycikge31cbiAgc3dpdGNoIChkZWxldGVkRmliZXIudGFnKSB7XG4gICAgY2FzZSAyNjpcbiAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgKTtcbiAgICAgIGRlbGV0ZWRGaWJlci5tZW1vaXplZFN0YXRlXG4gICAgICAgID8gZGVsZXRlZEZpYmVyLm1lbW9pemVkU3RhdGUuY291bnQtLVxuICAgICAgICA6IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUgJiZcbiAgICAgICAgICAoKGRlbGV0ZWRGaWJlciA9IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICAgIGRlbGV0ZWRGaWJlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRlbGV0ZWRGaWJlcikpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyNzpcbiAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG4gICAgICB2YXIgcHJldkhvc3RQYXJlbnQgPSBob3N0UGFyZW50LFxuICAgICAgICBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyID0gaG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgaG9zdFBhcmVudCA9IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgKTtcbiAgICAgIGRlbGV0ZWRGaWJlciA9IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICBmb3IgKFxuICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yID0gZGVsZXRlZEZpYmVyLmF0dHJpYnV0ZXM7XG4gICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IubGVuZ3RoO1xuXG4gICAgICApXG4gICAgICAgIGRlbGV0ZWRGaWJlci5yZW1vdmVBdHRyaWJ1dGVOb2RlKG5lYXJlc3RNb3VudGVkQW5jZXN0b3JbMF0pO1xuICAgICAgZGV0YWNoRGVsZXRlZEluc3RhbmNlKGRlbGV0ZWRGaWJlcik7XG4gICAgICBob3N0UGFyZW50ID0gcHJldkhvc3RQYXJlbnQ7XG4gICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICBjYXNlIDY6XG4gICAgICBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyID0gaG9zdFBhcmVudDtcbiAgICAgIHZhciBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyJDExOSA9IGhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgIGhvc3RQYXJlbnQgPSBudWxsO1xuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICk7XG4gICAgICBob3N0UGFyZW50ID0gcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IHByZXZIb3N0UGFyZW50SXNDb250YWluZXIkMTE5O1xuICAgICAgaWYgKG51bGwgIT09IGhvc3RQYXJlbnQpXG4gICAgICAgIGlmIChob3N0UGFyZW50SXNDb250YWluZXIpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIChmaW5pc2hlZFJvb3QgPSBob3N0UGFyZW50KSxcbiAgICAgICAgICAgICAgKHByZXZIb3N0UGFyZW50ID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAgIDggPT09IGZpbmlzaGVkUm9vdC5ub2RlVHlwZVxuICAgICAgICAgICAgICAgID8gZmluaXNoZWRSb290LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocHJldkhvc3RQYXJlbnQpXG4gICAgICAgICAgICAgICAgOiBmaW5pc2hlZFJvb3QucmVtb3ZlQ2hpbGQocHJldkhvc3RQYXJlbnQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihcbiAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaG9zdFBhcmVudC5yZW1vdmVDaGlsZChkZWxldGVkRmliZXIuc3RhdGVOb2RlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoXG4gICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxODpcbiAgICAgIG51bGwgIT09IGhvc3RQYXJlbnQgJiZcbiAgICAgICAgKGhvc3RQYXJlbnRJc0NvbnRhaW5lclxuICAgICAgICAgID8gKChuZWFyZXN0TW91bnRlZEFuY2VzdG9yID0gaG9zdFBhcmVudCksXG4gICAgICAgICAgICAoZGVsZXRlZEZpYmVyID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgICAgICA4ID09PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLm5vZGVUeXBlXG4gICAgICAgICAgICAgID8gY2xlYXJTdXNwZW5zZUJvdW5kYXJ5KFxuICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvci5wYXJlbnROb2RlLFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IDEgPT09IG5lYXJlc3RNb3VudGVkQW5jZXN0b3Iubm9kZVR5cGUgJiZcbiAgICAgICAgICAgICAgICBjbGVhclN1c3BlbnNlQm91bmRhcnkobmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZGVsZXRlZEZpYmVyKSxcbiAgICAgICAgICAgIHJldHJ5SWZCbG9ja2VkT24obmVhcmVzdE1vdW50ZWRBbmNlc3RvcikpXG4gICAgICAgICAgOiBjbGVhclN1c3BlbnNlQm91bmRhcnkoaG9zdFBhcmVudCwgZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgcHJldkhvc3RQYXJlbnQgPSBob3N0UGFyZW50O1xuICAgICAgcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IGhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgIGhvc3RQYXJlbnQgPSBkZWxldGVkRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMDtcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICApO1xuICAgICAgaG9zdFBhcmVudCA9IHByZXZIb3N0UGFyZW50O1xuICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIDExOlxuICAgIGNhc2UgMTQ6XG4gICAgY2FzZSAxNTpcbiAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KDIsIGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG4gICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudCg0LCBkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpO1xuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgIChzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKSxcbiAgICAgICAgKHByZXZIb3N0UGFyZW50ID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByZXZIb3N0UGFyZW50LmNvbXBvbmVudFdpbGxVbm1vdW50ICYmXG4gICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIHByZXZIb3N0UGFyZW50XG4gICAgICAgICAgKSk7XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjE6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgIHNhZmVseURldGFjaFJlZihkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpO1xuICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9XG4gICAgICAgIChwcmV2SG9zdFBhcmVudCA9IG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4pIHx8XG4gICAgICAgIG51bGwgIT09IGRlbGV0ZWRGaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICk7XG4gICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gcHJldkhvc3RQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSB7XG4gIGlmIChcbiAgICBudWxsID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICgoZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSksXG4gICAgbnVsbCAhPT0gZmluaXNoZWRSb290ICYmXG4gICAgICAoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkUm9vdC5tZW1vaXplZFN0YXRlKSxcbiAgICAgIG51bGwgIT09IGZpbmlzaGVkUm9vdCAmJlxuICAgICAgICAoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkUm9vdC5kZWh5ZHJhdGVkKSwgbnVsbCAhPT0gZmluaXNoZWRSb290KSkpXG4gIClcbiAgICB0cnkge1xuICAgICAgcmV0cnlJZkJsb2NrZWRPbihmaW5pc2hlZFJvb3QpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRSZXRyeUNhY2hlKGZpbmlzaGVkV29yaykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIDEzOlxuICAgIGNhc2UgMTk6XG4gICAgICB2YXIgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICBudWxsID09PSByZXRyeUNhY2hlICYmXG4gICAgICAgIChyZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSA9IG5ldyBQb3NzaWJseVdlYWtTZXQoKSk7XG4gICAgICByZXR1cm4gcmV0cnlDYWNoZTtcbiAgICBjYXNlIDIyOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUpLFxuICAgICAgICAocmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5fcmV0cnlDYWNoZSksXG4gICAgICAgIG51bGwgPT09IHJldHJ5Q2FjaGUgJiZcbiAgICAgICAgICAocmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5fcmV0cnlDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtTZXQoKSksXG4gICAgICAgIHJldHJ5Q2FjaGVcbiAgICAgICk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDM1LCBmaW5pc2hlZFdvcmsudGFnKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrLCB3YWtlYWJsZXMpIHtcbiAgdmFyIHJldHJ5Q2FjaGUgPSBnZXRSZXRyeUNhY2hlKGZpbmlzaGVkV29yayk7XG4gIHdha2VhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uICh3YWtlYWJsZSkge1xuICAgIHZhciByZXRyeSA9IHJlc29sdmVSZXRyeVdha2VhYmxlLmJpbmQobnVsbCwgZmluaXNoZWRXb3JrLCB3YWtlYWJsZSk7XG4gICAgcmV0cnlDYWNoZS5oYXMod2FrZWFibGUpIHx8XG4gICAgICAocmV0cnlDYWNoZS5hZGQod2FrZWFibGUpLCB3YWtlYWJsZS50aGVuKHJldHJ5LCByZXRyeSkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCRqc2NvbXAkMCwgcGFyZW50RmliZXIpIHtcbiAgdmFyIGRlbGV0aW9ucyA9IHBhcmVudEZpYmVyLmRlbGV0aW9ucztcbiAgaWYgKG51bGwgIT09IGRlbGV0aW9ucylcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV0sXG4gICAgICAgIHJvb3QgPSByb290JGpzY29tcCQwLFxuICAgICAgICByZXR1cm5GaWJlciA9IHBhcmVudEZpYmVyLFxuICAgICAgICBwYXJlbnQgPSByZXR1cm5GaWJlcjtcbiAgICAgIGE6IGZvciAoOyBudWxsICE9PSBwYXJlbnQ7ICkge1xuICAgICAgICBzd2l0Y2ggKHBhcmVudC50YWcpIHtcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGhvc3RQYXJlbnQgPSBwYXJlbnQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gITE7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGhvc3RQYXJlbnQgPSBwYXJlbnQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMDtcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9ICEwO1xuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKG51bGwgPT09IGhvc3RQYXJlbnQpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTYwKSk7XG4gICAgICBjb21taXREZWxldGlvbkVmZmVjdHNPbkZpYmVyKHJvb3QsIHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKTtcbiAgICAgIGhvc3RQYXJlbnQgPSBudWxsO1xuICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gITE7XG4gICAgICByb290ID0gY2hpbGRUb0RlbGV0ZS5hbHRlcm5hdGU7XG4gICAgICBudWxsICE9PSByb290ICYmIChyb290LnJldHVybiA9IG51bGwpO1xuICAgICAgY2hpbGRUb0RlbGV0ZS5yZXR1cm4gPSBudWxsO1xuICAgIH1cbiAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEzODc4KVxuICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIocGFyZW50RmliZXIsIHJvb3QkanNjb21wJDApLFxuICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbn1cbnZhciBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IG51bGw7XG5mdW5jdGlvbiBjb21taXRNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKGZpbmlzaGVkV29yaywgcm9vdCkge1xuICB2YXIgY3VycmVudCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGUsXG4gICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIDExOlxuICAgIGNhc2UgMTQ6XG4gICAgY2FzZSAxNTpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgIChjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoMywgZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKSxcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudCgzLCBmaW5pc2hlZFdvcmspLFxuICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoNSwgZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgIChvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBjdXJyZW50LnJldHVybikpO1xuICAgICAgZmxhZ3MgJiA2NCAmJlxuICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gJiZcbiAgICAgICAgKChmaW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUpLFxuICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsgJiZcbiAgICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLmNhbGxiYWNrcyksXG4gICAgICAgICAgbnVsbCAhPT0gZmxhZ3MgJiZcbiAgICAgICAgICAgICgoY3VycmVudCA9IGZpbmlzaGVkV29yay5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzKSxcbiAgICAgICAgICAgIChmaW5pc2hlZFdvcmsuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyA9XG4gICAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgPyBmbGFncyA6IGN1cnJlbnQuY29uY2F0KGZsYWdzKSkpKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI2OlxuICAgICAgdmFyIGhvaXN0YWJsZVJvb3QgPSBjdXJyZW50SG9pc3RhYmxlUm9vdDtcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgZmxhZ3MgJiA1MTIgJiZcbiAgICAgICAgKG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIGN1cnJlbnQucmV0dXJuKSk7XG4gICAgICBpZiAoZmxhZ3MgJiA0KSB7XG4gICAgICAgIHZhciBjdXJyZW50UmVzb3VyY2UgPSBudWxsICE9PSBjdXJyZW50ID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcbiAgICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpXG4gICAgICAgICAgaWYgKG51bGwgPT09IGZsYWdzKVxuICAgICAgICAgICAgaWYgKG51bGwgPT09IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUpIHtcbiAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgIGZsYWdzID0gZmluaXNoZWRXb3JrLnR5cGU7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QgPSBob2lzdGFibGVSb290Lm93bmVyRG9jdW1lbnQgfHwgaG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICAgICAgICBiOiBzd2l0Y2ggKGZsYWdzKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwidGl0bGVcIjpcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlID1cbiAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidGl0bGVcIilbMF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAhY3VycmVudFJlc291cmNlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlW2ludGVybmFsSG9pc3RhYmxlTWFya2VyXSB8fFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZVtpbnRlcm5hbEluc3RhbmNlS2V5XSB8fFxuICAgICAgICAgICAgICAgICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZS5uYW1lc3BhY2VVUkkgfHxcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50UmVzb3VyY2UgPSBob2lzdGFibGVSb290LmNyZWF0ZUVsZW1lbnQoZmxhZ3MpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuaGVhZC5pbnNlcnRCZWZvcmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5xdWVyeVNlbGVjdG9yKFwiaGVhZCA+IHRpdGxlXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhjdXJyZW50UmVzb3VyY2UsIGZsYWdzLCBjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlW2ludGVybmFsSW5zdGFuY2VLZXldID0gZmluaXNoZWRXb3JrO1xuICAgICAgICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGN1cnJlbnRSZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzID0gY3VycmVudFJlc291cmNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heWJlTm9kZXMgPSBnZXRIeWRyYXRhYmxlSG9pc3RhYmxlQ2FjaGUoXG4gICAgICAgICAgICAgICAgICAgICAgXCJsaW5rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJocmVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdFxuICAgICAgICAgICAgICAgICAgICApLmdldChmbGFncyArIChjdXJyZW50LmhyZWYgfHwgXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF5YmVOb2RlcylcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heWJlTm9kZXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgoY3VycmVudFJlc291cmNlID0gbWF5YmVOb2Rlc1tpXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZS5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQuaHJlZiA/IG51bGwgOiBjdXJyZW50LmhyZWYpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlLmdldEF0dHJpYnV0ZShcInJlbFwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQucmVsID8gbnVsbCA6IGN1cnJlbnQucmVsKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZS5nZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQudGl0bGUgPyBudWxsIDogY3VycmVudC50aXRsZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50LmNyb3NzT3JpZ2luXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuY3Jvc3NPcmlnaW4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlTm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UgPSBob2lzdGFibGVSb290LmNyZWF0ZUVsZW1lbnQoZmxhZ3MpO1xuICAgICAgICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhjdXJyZW50UmVzb3VyY2UsIGZsYWdzLCBjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5oZWFkLmFwcGVuZENoaWxkKGN1cnJlbnRSZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcIm1ldGFcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIChtYXliZU5vZGVzID0gZ2V0SHlkcmF0YWJsZUhvaXN0YWJsZUNhY2hlKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3RcbiAgICAgICAgICAgICAgICAgICAgICApLmdldChmbGFncyArIChjdXJyZW50LmNvbnRlbnQgfHwgXCJcIikpKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1heWJlTm9kZXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgoY3VycmVudFJlc291cmNlID0gbWF5YmVOb2Rlc1tpXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZS5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQuY29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCIgKyBjdXJyZW50LmNvbnRlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlLmdldEF0dHJpYnV0ZShcIm5hbWVcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50Lm5hbWUgPyBudWxsIDogY3VycmVudC5uYW1lKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZS5nZXRBdHRyaWJ1dGUoXCJwcm9wZXJ0eVwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQucHJvcGVydHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5wcm9wZXJ0eSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UuZ2V0QXR0cmlidXRlKFwiaHR0cC1lcXVpdlwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQuaHR0cEVxdWl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuaHR0cEVxdWl2KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZS5nZXRBdHRyaWJ1dGUoXCJjaGFyc2V0XCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC5jaGFyU2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuY2hhclNldCkpXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVOb2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZSA9IGhvaXN0YWJsZVJvb3QuY3JlYXRlRWxlbWVudChmbGFncyk7XG4gICAgICAgICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGN1cnJlbnRSZXNvdXJjZSwgZmxhZ3MsIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LmhlYWQuYXBwZW5kQ2hpbGQoY3VycmVudFJlc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQ2OCwgZmxhZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlW2ludGVybmFsSW5zdGFuY2VLZXldID0gZmluaXNoZWRXb3JrO1xuICAgICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoY3VycmVudFJlc291cmNlKTtcbiAgICAgICAgICAgICAgICBmbGFncyA9IGN1cnJlbnRSZXNvdXJjZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gZmxhZ3M7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgbW91bnRIb2lzdGFibGUoXG4gICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZSA9IGFjcXVpcmVSZXNvdXJjZShcbiAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICAgICAgZmxhZ3MsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICApO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY3VycmVudFJlc291cmNlICE9PSBmbGFnc1xuICAgICAgICAgICAgPyAobnVsbCA9PT0gY3VycmVudFJlc291cmNlXG4gICAgICAgICAgICAgICAgPyBudWxsICE9PSBjdXJyZW50LnN0YXRlTm9kZSAmJlxuICAgICAgICAgICAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgICAgICAgY3VycmVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGN1cnJlbnQpKVxuICAgICAgICAgICAgICAgIDogY3VycmVudFJlc291cmNlLmNvdW50LS0sXG4gICAgICAgICAgICAgIG51bGwgPT09IGZsYWdzXG4gICAgICAgICAgICAgICAgPyBtb3VudEhvaXN0YWJsZShcbiAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGVcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IGFjcXVpcmVSZXNvdXJjZShcbiAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgOiBudWxsID09PSBmbGFncyAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlICYmXG4gICAgICAgICAgICAgIGNvbW1pdEhvc3RVcGRhdGUoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wc1xuICAgICAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyNzpcbiAgICAgIGlmIChmbGFncyAmIDQgJiYgbnVsbCA9PT0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSkge1xuICAgICAgICBob2lzdGFibGVSb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgY3VycmVudFJlc291cmNlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgbm9kZSA9IGhvaXN0YWJsZVJvb3QuZmlyc3RDaGlsZDsgbm9kZTsgKSB7XG4gICAgICAgICAgICB2YXIgbmV4dE5vZGUgPSBub2RlLm5leHRTaWJsaW5nLFxuICAgICAgICAgICAgICBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG4gICAgICAgICAgICBub2RlW2ludGVybmFsSG9pc3RhYmxlTWFya2VyXSB8fFxuICAgICAgICAgICAgICBcIkhFQURcIiA9PT0gbm9kZU5hbWUgfHxcbiAgICAgICAgICAgICAgXCJCT0RZXCIgPT09IG5vZGVOYW1lIHx8XG4gICAgICAgICAgICAgIFwiU0NSSVBUXCIgPT09IG5vZGVOYW1lIHx8XG4gICAgICAgICAgICAgIFwiU1RZTEVcIiA9PT0gbm9kZU5hbWUgfHxcbiAgICAgICAgICAgICAgKFwiTElOS1wiID09PSBub2RlTmFtZSAmJlxuICAgICAgICAgICAgICAgIFwic3R5bGVzaGVldFwiID09PSBub2RlLnJlbC50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgICAgICAgICBob2lzdGFibGVSb290LnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgICAgICAgbm9kZSA9IG5leHROb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZSwgYXR0cmlidXRlcyA9IGhvaXN0YWJsZVJvb3QuYXR0cmlidXRlcztcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMubGVuZ3RoO1xuXG4gICAgICAgICAgKVxuICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5yZW1vdmVBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZXNbMF0pO1xuICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGhvaXN0YWJsZVJvb3QsIHR5cGUsIGN1cnJlbnRSZXNvdXJjZSk7XG4gICAgICAgICAgaG9pc3RhYmxlUm9vdFtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGZpbmlzaGVkV29yaztcbiAgICAgICAgICBob2lzdGFibGVSb290W2ludGVybmFsUHJvcHNLZXldID0gY3VycmVudFJlc291cmNlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgY2FzZSA1OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBmbGFncyAmIDUxMiAmJlxuICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pKTtcbiAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiAzMikge1xuICAgICAgICBob2lzdGFibGVSb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzZXRUZXh0Q29udGVudChob2lzdGFibGVSb290LCBcIlwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgIG51bGwgIT0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSAmJlxuICAgICAgICAoKGhvaXN0YWJsZVJvb3QgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyksXG4gICAgICAgIGNvbW1pdEhvc3RVcGRhdGUoXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGhvaXN0YWJsZVJvb3QsXG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IGhvaXN0YWJsZVJvb3RcbiAgICAgICAgKSk7XG4gICAgICBmbGFncyAmIDEwMjQgJiYgKG5lZWRzRm9ybVJlc2V0ID0gITApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBpZiAoZmxhZ3MgJiA0KSB7XG4gICAgICAgIGlmIChudWxsID09PSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlKVxuICAgICAgICAgIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTYyKSk7XG4gICAgICAgIGZsYWdzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICAgIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGN1cnJlbnQubm9kZVZhbHVlID0gZmxhZ3M7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHRhZ0NhY2hlcyA9IG51bGw7XG4gICAgICBob2lzdGFibGVSb290ID0gY3VycmVudEhvaXN0YWJsZVJvb3Q7XG4gICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IGdldEhvaXN0YWJsZVJvb3Qocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gaG9pc3RhYmxlUm9vdDtcbiAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgaWYgKGZsYWdzICYgNCAmJiBudWxsICE9PSBjdXJyZW50ICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0cnlJZkJsb2NrZWRPbihyb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICBuZWVkc0Zvcm1SZXNldCAmJlxuICAgICAgICAoKG5lZWRzRm9ybVJlc2V0ID0gITEpLCByZWN1cnNpdmVseVJlc2V0Rm9ybXMoZmluaXNoZWRXb3JrKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICBmbGFncyA9IGN1cnJlbnRIb2lzdGFibGVSb290O1xuICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBnZXRIb2lzdGFibGVSb290KFxuICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICk7XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gZmxhZ3M7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEyOlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEzOlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBmaW5pc2hlZFdvcmsuY2hpbGQuZmxhZ3MgJiA4MTkyICYmXG4gICAgICAgIChudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkgIT09XG4gICAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSAmJlxuICAgICAgICAoZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IG5vdygpKTtcbiAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgbnVsbCAhPT0gZmxhZ3MgJiZcbiAgICAgICAgICAoKGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGwpLFxuICAgICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrLCBmbGFncykpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgICBmbGFncyAmIDUxMiAmJlxuICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pKTtcbiAgICAgIG5vZGUgPSBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIG5leHROb2RlID0gbnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICBub2RlTmFtZSA9IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgIHR5cGUgPSBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gbm9kZU5hbWUgfHwgbm9kZTtcbiAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSB0eXBlIHx8IG5leHROb2RlO1xuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHR5cGU7XG4gICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBub2RlTmFtZTtcbiAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICByb290Ll9jdXJyZW50ID0gZmluaXNoZWRXb3JrO1xuICAgICAgcm9vdC5fdmlzaWJpbGl0eSAmPSAtMztcbiAgICAgIHJvb3QuX3Zpc2liaWxpdHkgfD0gcm9vdC5fcGVuZGluZ1Zpc2liaWxpdHkgJiAyO1xuICAgICAgaWYgKFxuICAgICAgICBmbGFncyAmIDgxOTIgJiZcbiAgICAgICAgKChyb290Ll92aXNpYmlsaXR5ID0gbm9kZVxuICAgICAgICAgID8gcm9vdC5fdmlzaWJpbGl0eSAmIC0yXG4gICAgICAgICAgOiByb290Ll92aXNpYmlsaXR5IHwgMSksXG4gICAgICAgIG5vZGUgJiZcbiAgICAgICAgICAoKHJvb3QgPSBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gfHwgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiksXG4gICAgICAgICAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICAgICAgbmV4dE5vZGUgfHxcbiAgICAgICAgICAgIHJvb3QgfHxcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaykpLFxuICAgICAgICBudWxsID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyB8fFxuICAgICAgICAgIFwibWFudWFsXCIgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLm1vZGUpXG4gICAgICApXG4gICAgICAgIGE6IGZvciAoY3VycmVudCA9IG51bGwsIHJvb3QgPSBmaW5pc2hlZFdvcms7IDsgKSB7XG4gICAgICAgICAgaWYgKDUgPT09IHJvb3QudGFnIHx8IDI2ID09PSByb290LnRhZyB8fCAyNyA9PT0gcm9vdC50YWcpIHtcbiAgICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgIG5leHROb2RlID0gY3VycmVudCA9IHJvb3Q7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoaG9pc3RhYmxlUm9vdCA9IG5leHROb2RlLnN0YXRlTm9kZSksIG5vZGUpKVxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnRSZXNvdXJjZSA9IGhvaXN0YWJsZVJvb3Quc3R5bGUpLFxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjdXJyZW50UmVzb3VyY2Uuc2V0UHJvcGVydHlcbiAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnRSZXNvdXJjZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNwbGF5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiAoY3VycmVudFJlc291cmNlLmRpc3BsYXkgPSBcIm5vbmVcIik7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICBtYXliZU5vZGVzID0gbmV4dE5vZGUuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgICAgaSA9IG5leHROb2RlLm1lbW9pemVkUHJvcHMuc3R5bGU7XG4gICAgICAgICAgICAgICAgICB2YXIgZGlzcGxheSA9XG4gICAgICAgICAgICAgICAgICAgIHZvaWQgMCAhPT0gaSAmJiBudWxsICE9PSBpICYmIGkuaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgPyBpLmRpc3BsYXlcbiAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICBtYXliZU5vZGVzLnN0eWxlLmRpc3BsYXkgPVxuICAgICAgICAgICAgICAgICAgICBudWxsID09IGRpc3BsYXkgfHwgXCJib29sZWFuXCIgPT09IHR5cGVvZiBkaXNwbGF5XG4gICAgICAgICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgOiAoXCJcIiArIGRpc3BsYXkpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dE5vZGUsIG5leHROb2RlLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICg2ID09PSByb290LnRhZykge1xuICAgICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgbmV4dE5vZGUgPSByb290O1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG5leHROb2RlLnN0YXRlTm9kZS5ub2RlVmFsdWUgPSBub2RlXG4gICAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICAgIDogbmV4dE5vZGUubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0Tm9kZSwgbmV4dE5vZGUucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgKCgyMiAhPT0gcm9vdC50YWcgJiYgMjMgIT09IHJvb3QudGFnKSB8fFxuICAgICAgICAgICAgICBudWxsID09PSByb290Lm1lbW9pemVkU3RhdGUgfHxcbiAgICAgICAgICAgICAgcm9vdCA9PT0gZmluaXNoZWRXb3JrKSAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gcm9vdC5jaGlsZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcm9vdC5jaGlsZC5yZXR1cm4gPSByb290O1xuICAgICAgICAgICAgcm9vdCA9IHJvb3QuY2hpbGQ7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJvb3QgPT09IGZpbmlzaGVkV29yaykgYnJlYWsgYTtcbiAgICAgICAgICBmb3IgKDsgbnVsbCA9PT0gcm9vdC5zaWJsaW5nOyApIHtcbiAgICAgICAgICAgIGlmIChudWxsID09PSByb290LnJldHVybiB8fCByb290LnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSBicmVhayBhO1xuICAgICAgICAgICAgY3VycmVudCA9PT0gcm9vdCAmJiAoY3VycmVudCA9IG51bGwpO1xuICAgICAgICAgICAgcm9vdCA9IHJvb3QucmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50ID09PSByb290ICYmIChjdXJyZW50ID0gbnVsbCk7XG4gICAgICAgICAgcm9vdC5zaWJsaW5nLnJldHVybiA9IHJvb3QucmV0dXJuO1xuICAgICAgICAgIHJvb3QgPSByb290LnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgbnVsbCAhPT0gZmxhZ3MgJiZcbiAgICAgICAgICAoKGN1cnJlbnQgPSBmbGFncy5yZXRyeVF1ZXVlKSxcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAoKGZsYWdzLnJldHJ5UXVldWUgPSBudWxsKSxcbiAgICAgICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrLCBjdXJyZW50KSkpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTk6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgbnVsbCAhPT0gZmxhZ3MgJiZcbiAgICAgICAgICAoKGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGwpLFxuICAgICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrLCBmbGFncykpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjE6XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspLFxuICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgfVxufVxuZnVuY3Rpb24gY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gIGlmIChmbGFncyAmIDIpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKDI3ICE9PSBmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGE6IHtcbiAgICAgICAgICBmb3IgKHZhciBwYXJlbnQgPSBmaW5pc2hlZFdvcmsucmV0dXJuOyBudWxsICE9PSBwYXJlbnQ7ICkge1xuICAgICAgICAgICAgaWYgKGlzSG9zdFBhcmVudChwYXJlbnQpKSB7XG4gICAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBwYXJlbnQ7XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE2MCkpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LnRhZykge1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICB2YXIgcGFyZW50JGpzY29tcCQwID0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LnN0YXRlTm9kZSxcbiAgICAgICAgICAgICAgYmVmb3JlID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShmaW5pc2hlZFdvcmssIGJlZm9yZSwgcGFyZW50JGpzY29tcCQwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHZhciBwYXJlbnQkMTEzID0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LnN0YXRlTm9kZTtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5mbGFncyAmIDMyICYmXG4gICAgICAgICAgICAgIChzZXRUZXh0Q29udGVudChwYXJlbnQkMTEzLCBcIlwiKSxcbiAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5mbGFncyAmPSAtMzMpKTtcbiAgICAgICAgICAgIHZhciBiZWZvcmUkMTE0ID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShmaW5pc2hlZFdvcmssIGJlZm9yZSQxMTQsIHBhcmVudCQxMTMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHZhciBwYXJlbnQkMTE1ID0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvLFxuICAgICAgICAgICAgICBiZWZvcmUkMTE2ID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgYmVmb3JlJDExNixcbiAgICAgICAgICAgICAgcGFyZW50JDExNVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE2MSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgIH1cbiAgICBmaW5pc2hlZFdvcmsuZmxhZ3MgJj0gLTM7XG4gIH1cbiAgZmxhZ3MgJiA0MDk2ICYmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJj0gLTQwOTcpO1xufVxuZnVuY3Rpb24gcmVjdXJzaXZlbHlSZXNldEZvcm1zKHBhcmVudEZpYmVyKSB7XG4gIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiAxMDI0KVxuICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7ICkge1xuICAgICAgdmFyIGZpYmVyID0gcGFyZW50RmliZXI7XG4gICAgICByZWN1cnNpdmVseVJlc2V0Rm9ybXMoZmliZXIpO1xuICAgICAgNSA9PT0gZmliZXIudGFnICYmIGZpYmVyLmZsYWdzICYgMTAyNCAmJiBmaWJlci5zdGF0ZU5vZGUucmVzZXQoKTtcbiAgICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZztcbiAgICB9XG59XG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhyb290LCBwYXJlbnRGaWJlcikge1xuICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgODc3MilcbiAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICBjb21taXRMYXlvdXRFZmZlY3RPbkZpYmVyKHJvb3QsIHBhcmVudEZpYmVyLmFsdGVybmF0ZSwgcGFyZW50RmliZXIpLFxuICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7ICkge1xuICAgIHZhciBmaW5pc2hlZFdvcmsgPSBwYXJlbnRGaWJlcjtcbiAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICBjYXNlIDE0OlxuICAgICAgY2FzZSAxNTpcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KDQsIGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQgJiZcbiAgICAgICAgICBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgaW5zdGFuY2VcbiAgICAgICAgICApO1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjY6XG4gICAgICBjYXNlIDI3OlxuICAgICAgY2FzZSA1OlxuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDIyOlxuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgbnVsbCA9PT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgfVxuICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZztcbiAgfVxufVxuZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgZmluaXNoZWRSb290JGpzY29tcCQwLFxuICBwYXJlbnRGaWJlcixcbiAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuKSB7XG4gIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgPVxuICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiYgMCAhPT0gKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDg3NzIpO1xuICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApIHtcbiAgICB2YXIgY3VycmVudCA9IHBhcmVudEZpYmVyLmFsdGVybmF0ZSxcbiAgICAgIGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkUm9vdCRqc2NvbXAkMCxcbiAgICAgIGZpbmlzaGVkV29yayA9IHBhcmVudEZpYmVyLFxuICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDExOlxuICAgICAgY2FzZSAxNTpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgKTtcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudCg0LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgKTtcbiAgICAgICAgY3VycmVudCA9IGZpbmlzaGVkV29yaztcbiAgICAgICAgZmluaXNoZWRSb290ID0gY3VycmVudC5zdGF0ZU5vZGU7XG4gICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBmaW5pc2hlZFJvb3QuY29tcG9uZW50RGlkTW91bnQpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBjdXJyZW50LnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IGZpbmlzaGVkV29yaztcbiAgICAgICAgZmluaXNoZWRSb290ID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgICAgaWYgKG51bGwgIT09IGZpbmlzaGVkUm9vdCkge1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgaGlkZGVuQ2FsbGJhY2tzID0gZmluaXNoZWRSb290LnNoYXJlZC5oaWRkZW5DYWxsYmFja3M7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gaGlkZGVuQ2FsbGJhY2tzKVxuICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzID0gbnVsbCwgZmluaXNoZWRSb290ID0gMDtcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QgPCBoaWRkZW5DYWxsYmFja3MubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCsrXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjYWxsQ2FsbGJhY2soaGlkZGVuQ2FsbGJhY2tzW2ZpbmlzaGVkUm9vdF0sIGluc3RhbmNlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgY3VycmVudC5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgIGZsYWdzICYgNjQgJiZcbiAgICAgICAgICBjb21taXRDbGFzc0NhbGxiYWNrcyhmaW5pc2hlZFdvcmspO1xuICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI2OlxuICAgICAgY2FzZSAyNzpcbiAgICAgIGNhc2UgNTpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgKTtcbiAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICBjb21taXRIb3N0TW91bnQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEzOlxuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICApO1xuICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgY29tbWl0U3VzcGVuc2VIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjI6XG4gICAgICAgIG51bGwgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICApO1xuICAgIH1cbiAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdE9mZnNjcmVlblBhc3NpdmVNb3VudEVmZmVjdHMoY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gIHZhciBwcmV2aW91c0NhY2hlID0gbnVsbDtcbiAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wgJiZcbiAgICAocHJldmlvdXNDYWNoZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCk7XG4gIGN1cnJlbnQgPSBudWxsO1xuICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAmJlxuICAgIChjdXJyZW50ID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpO1xuICBjdXJyZW50ICE9PSBwcmV2aW91c0NhY2hlICYmXG4gICAgKG51bGwgIT0gY3VycmVudCAmJiBjdXJyZW50LnJlZkNvdW50KyssXG4gICAgbnVsbCAhPSBwcmV2aW91c0NhY2hlICYmIHJlbGVhc2VDYWNoZShwcmV2aW91c0NhY2hlKSk7XG59XG5mdW5jdGlvbiBjb21taXRDYWNoZVBhc3NpdmVNb3VudEVmZmVjdChjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgY3VycmVudCA9IG51bGw7XG4gIG51bGwgIT09IGZpbmlzaGVkV29yay5hbHRlcm5hdGUgJiZcbiAgICAoY3VycmVudCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSk7XG4gIGZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlLmNhY2hlO1xuICBmaW5pc2hlZFdvcmsgIT09IGN1cnJlbnQgJiZcbiAgICAoZmluaXNoZWRXb3JrLnJlZkNvdW50KyssIG51bGwgIT0gY3VycmVudCAmJiByZWxlYXNlQ2FjaGUoY3VycmVudCkpO1xufVxuZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gIHJvb3QsXG4gIHBhcmVudEZpYmVyLFxuICBjb21taXR0ZWRMYW5lcyxcbiAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbikge1xuICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgMTAyNTYpXG4gICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgY29tbWl0UGFzc2l2ZU1vdW50T25GaWJlcihcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcGFyZW50RmliZXIsXG4gICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgKSxcbiAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG59XG5mdW5jdGlvbiBjb21taXRQYXNzaXZlTW91bnRPbkZpYmVyKFxuICBmaW5pc2hlZFJvb3QsXG4gIGZpbmlzaGVkV29yayxcbiAgY29tbWl0dGVkTGFuZXMsXG4gIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4pIHtcbiAgdmFyIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIDA6XG4gICAgY2FzZSAxMTpcbiAgICBjYXNlIDE1OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICk7XG4gICAgICBmbGFncyAmIDIwNDggJiYgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudCg5LCBmaW5pc2hlZFdvcmspO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICk7XG4gICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgKChmaW5pc2hlZFJvb3QgPSBudWxsKSxcbiAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSAmJlxuICAgICAgICAgIChmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGUpLFxuICAgICAgICAoZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUuY2FjaGUpLFxuICAgICAgICBmaW5pc2hlZFdvcmsgIT09IGZpbmlzaGVkUm9vdCAmJlxuICAgICAgICAgIChmaW5pc2hlZFdvcmsucmVmQ291bnQrKyxcbiAgICAgICAgICBudWxsICE9IGZpbmlzaGVkUm9vdCAmJiByZWxlYXNlQ2FjaGUoZmluaXNoZWRSb290KSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMjpcbiAgICAgIGlmIChmbGFncyAmIDIwNDgpIHtcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICApO1xuICAgICAgICBmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBfZmluaXNoZWRXb3JrJG1lbW9pemUyID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICBpZCA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIuaWQsXG4gICAgICAgICAgICBvblBvc3RDb21taXQgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uUG9zdENvbW1pdDtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBvblBvc3RDb21taXQgJiZcbiAgICAgICAgICAgIG9uUG9zdENvbW1pdChcbiAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgIG51bGwgPT09IGZpbmlzaGVkV29yay5hbHRlcm5hdGUgPyBcIm1vdW50XCIgOiBcInVwZGF0ZVwiLFxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QucGFzc2l2ZUVmZmVjdER1cmF0aW9uLFxuICAgICAgICAgICAgICAtMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlXG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjM6XG4gICAgICBicmVhaztcbiAgICBjYXNlIDIyOlxuICAgICAgX2ZpbmlzaGVkV29yayRtZW1vaXplMiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZVxuICAgICAgICA/IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIuX3Zpc2liaWxpdHkgJiA0XG4gICAgICAgICAgPyByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICAgKVxuICAgICAgICAgIDogcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKVxuICAgICAgICA6IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIuX3Zpc2liaWxpdHkgJiA0XG4gICAgICAgICAgPyByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICAgKVxuICAgICAgICAgIDogKChfZmluaXNoZWRXb3JrJG1lbW9pemUyLl92aXNpYmlsaXR5IHw9IDQpLFxuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDEwMjU2KVxuICAgICAgICAgICAgKSk7XG4gICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgY29tbWl0T2Zmc2NyZWVuUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLFxuICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyNDpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICApO1xuICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgIGNvbW1pdENhY2hlUGFzc2l2ZU1vdW50RWZmZWN0KGZpbmlzaGVkV29yay5hbHRlcm5hdGUsIGZpbmlzaGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgZmluaXNoZWRSb290JGpzY29tcCQwLFxuICBwYXJlbnRGaWJlcixcbiAgY29tbWl0dGVkTGFuZXMkanNjb21wJDAsXG4gIGNvbW1pdHRlZFRyYW5zaXRpb25zJGpzY29tcCQwLFxuICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4pIHtcbiAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyA9XG4gICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJiAwICE9PSAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgMTAyNTYpO1xuICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApIHtcbiAgICB2YXIgZmluaXNoZWRSb290ID0gZmluaXNoZWRSb290JGpzY29tcCQwLFxuICAgICAgZmluaXNoZWRXb3JrID0gcGFyZW50RmliZXIsXG4gICAgICBjb21taXR0ZWRMYW5lcyA9IGNvbW1pdHRlZExhbmVzJGpzY29tcCQwLFxuICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMgPSBjb21taXR0ZWRUcmFuc2l0aW9ucyRqc2NvbXAkMCxcbiAgICAgIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgY2FzZSAwOlxuICAgICAgY2FzZSAxMTpcbiAgICAgIGNhc2UgMTU6XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgKTtcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudCg4LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjM6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyMjpcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGVcbiAgICAgICAgICA/IGluc3RhbmNlLl92aXNpYmlsaXR5ICYgNFxuICAgICAgICAgICAgPyByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIDogKChpbnN0YW5jZS5fdmlzaWJpbGl0eSB8PSA0KSxcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICAgKSk7XG4gICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiZcbiAgICAgICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgICBjb21taXRPZmZzY3JlZW5QYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNDpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICApO1xuICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgY29tbWl0Q2FjaGVQYXNzaXZlTW91bnRFZmZlY3QoZmluaXNoZWRXb3JrLmFsdGVybmF0ZSwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICk7XG4gICAgfVxuICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZztcbiAgfVxufVxuZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKFxuICBmaW5pc2hlZFJvb3QkanNjb21wJDAsXG4gIHBhcmVudEZpYmVyXG4pIHtcbiAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEwMjU2KVxuICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7ICkge1xuICAgICAgdmFyIGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkUm9vdCRqc2NvbXAkMCxcbiAgICAgICAgZmluaXNoZWRXb3JrID0gcGFyZW50RmliZXIsXG4gICAgICAgIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgIGNvbW1pdE9mZnNjcmVlblBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5hbHRlcm5hdGUsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlQXRvbWljUGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgY29tbWl0Q2FjaGVQYXNzaXZlTW91bnRFZmZlY3QoZmluaXNoZWRXb3JrLmFsdGVybmF0ZSwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlQXRvbWljUGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgfVxuICAgICAgcGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nO1xuICAgIH1cbn1cbnZhciBzdXNwZW5zZXlDb21taXRGbGFnID0gODE5MjtcbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChwYXJlbnRGaWJlcikge1xuICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgc3VzcGVuc2V5Q29tbWl0RmxhZylcbiAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlcihwYXJlbnRGaWJlciksXG4gICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xufVxuZnVuY3Rpb24gYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdE9uRmliZXIoZmliZXIpIHtcbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIDI2OlxuICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKTtcbiAgICAgIGZpYmVyLmZsYWdzICYgc3VzcGVuc2V5Q29tbWl0RmxhZyAmJlxuICAgICAgICBudWxsICE9PSBmaWJlci5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgIHN1c3BlbmRSZXNvdXJjZShcbiAgICAgICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICBmaWJlci5tZW1vaXplZFN0YXRlLFxuICAgICAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHNcbiAgICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgY2FzZSA0OlxuICAgICAgdmFyIHByZXZpb3VzSG9pc3RhYmxlUm9vdCA9IGN1cnJlbnRIb2lzdGFibGVSb290O1xuICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBnZXRIb2lzdGFibGVSb290KGZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IHByZXZpb3VzSG9pc3RhYmxlUm9vdDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgICBudWxsID09PSBmaWJlci5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICgocHJldmlvdXNIb2lzdGFibGVSb290ID0gZmliZXIuYWx0ZXJuYXRlKSxcbiAgICAgICAgbnVsbCAhPT0gcHJldmlvdXNIb2lzdGFibGVSb290ICYmXG4gICAgICAgIG51bGwgIT09IHByZXZpb3VzSG9pc3RhYmxlUm9vdC5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgPyAoKHByZXZpb3VzSG9pc3RhYmxlUm9vdCA9IHN1c3BlbnNleUNvbW1pdEZsYWcpLFxuICAgICAgICAgICAgKHN1c3BlbnNleUNvbW1pdEZsYWcgPSAxNjc3NzIxNiksXG4gICAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpLFxuICAgICAgICAgICAgKHN1c3BlbnNleUNvbW1pdEZsYWcgPSBwcmV2aW91c0hvaXN0YWJsZVJvb3QpKVxuICAgICAgICAgIDogcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKTtcbiAgfVxufVxuZnVuY3Rpb24gZGV0YWNoQWx0ZXJuYXRlU2libGluZ3MocGFyZW50RmliZXIpIHtcbiAgdmFyIHByZXZpb3VzRmliZXIgPSBwYXJlbnRGaWJlci5hbHRlcm5hdGU7XG4gIGlmIChcbiAgICBudWxsICE9PSBwcmV2aW91c0ZpYmVyICYmXG4gICAgKChwYXJlbnRGaWJlciA9IHByZXZpb3VzRmliZXIuY2hpbGQpLCBudWxsICE9PSBwYXJlbnRGaWJlcilcbiAgKSB7XG4gICAgcHJldmlvdXNGaWJlci5jaGlsZCA9IG51bGw7XG4gICAgZG9cbiAgICAgIChwcmV2aW91c0ZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyksXG4gICAgICAgIChwYXJlbnRGaWJlci5zaWJsaW5nID0gbnVsbCksXG4gICAgICAgIChwYXJlbnRGaWJlciA9IHByZXZpb3VzRmliZXIpO1xuICAgIHdoaWxlIChudWxsICE9PSBwYXJlbnRGaWJlcik7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMocGFyZW50RmliZXIpIHtcbiAgdmFyIGRlbGV0aW9ucyA9IHBhcmVudEZpYmVyLmRlbGV0aW9ucztcbiAgaWYgKDAgIT09IChwYXJlbnRGaWJlci5mbGFncyAmIDE2KSkge1xuICAgIGlmIChudWxsICE9PSBkZWxldGlvbnMpXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGRlbGV0aW9uc1tpXTtcbiAgICAgICAgbmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfYmVnaW4oXG4gICAgICAgICAgY2hpbGRUb0RlbGV0ZSxcbiAgICAgICAgICBwYXJlbnRGaWJlclxuICAgICAgICApO1xuICAgICAgfVxuICAgIGRldGFjaEFsdGVybmF0ZVNpYmxpbmdzKHBhcmVudEZpYmVyKTtcbiAgfVxuICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgMTAyNTYpXG4gICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRPbkZpYmVyKHBhcmVudEZpYmVyKSxcbiAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG59XG5mdW5jdGlvbiBjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIoZmluaXNoZWRXb3JrKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIDExOlxuICAgIGNhc2UgMTU6XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBmaW5pc2hlZFdvcmsuZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudCg5LCBmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMjpcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgIGluc3RhbmNlLl92aXNpYmlsaXR5ICYgNCAmJlxuICAgICAgKG51bGwgPT09IGZpbmlzaGVkV29yay5yZXR1cm4gfHwgMTMgIT09IGZpbmlzaGVkV29yay5yZXR1cm4udGFnKVxuICAgICAgICA/ICgoaW5zdGFuY2UuX3Zpc2liaWxpdHkgJj0gLTUpLFxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKSlcbiAgICAgICAgOiByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICB9XG59XG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gIHZhciBkZWxldGlvbnMgPSBwYXJlbnRGaWJlci5kZWxldGlvbnM7XG4gIGlmICgwICE9PSAocGFyZW50RmliZXIuZmxhZ3MgJiAxNikpIHtcbiAgICBpZiAobnVsbCAhPT0gZGVsZXRpb25zKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV07XG4gICAgICAgIG5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luKFxuICAgICAgICAgIGNoaWxkVG9EZWxldGUsXG4gICAgICAgICAgcGFyZW50RmliZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICBkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyhwYXJlbnRGaWJlcik7XG4gIH1cbiAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKSB7XG4gICAgZGVsZXRpb25zID0gcGFyZW50RmliZXI7XG4gICAgc3dpdGNoIChkZWxldGlvbnMudGFnKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDExOlxuICAgICAgY2FzZSAxNTpcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KDgsIGRlbGV0aW9ucywgZGVsZXRpb25zLnJldHVybik7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZGVsZXRpb25zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDIyOlxuICAgICAgICBpID0gZGVsZXRpb25zLnN0YXRlTm9kZTtcbiAgICAgICAgaS5fdmlzaWJpbGl0eSAmIDQgJiZcbiAgICAgICAgICAoKGkuX3Zpc2liaWxpdHkgJj0gLTUpLFxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZGVsZXRpb25zKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhkZWxldGlvbnMpO1xuICAgIH1cbiAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfYmVnaW4oXG4gIGRlbGV0ZWRTdWJ0cmVlUm9vdCxcbiAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuKSB7XG4gIGZvciAoOyBudWxsICE9PSBuZXh0RWZmZWN0OyApIHtcbiAgICB2YXIgZmliZXIgPSBuZXh0RWZmZWN0O1xuICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDExOlxuICAgICAgY2FzZSAxNTpcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KDgsIGZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDIzOlxuICAgICAgY2FzZSAyMjpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG51bGwgIT09IGZpYmVyLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICBudWxsICE9PSBmaWJlci5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbFxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgY2FjaGUgPSBmaWJlci5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sO1xuICAgICAgICAgIG51bGwgIT0gY2FjaGUgJiYgY2FjaGUucmVmQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjQ6XG4gICAgICAgIHJlbGVhc2VDYWNoZShmaWJlci5tZW1vaXplZFN0YXRlLmNhY2hlKTtcbiAgICB9XG4gICAgY2FjaGUgPSBmaWJlci5jaGlsZDtcbiAgICBpZiAobnVsbCAhPT0gY2FjaGUpIChjYWNoZS5yZXR1cm4gPSBmaWJlciksIChuZXh0RWZmZWN0ID0gY2FjaGUpO1xuICAgIGVsc2VcbiAgICAgIGE6IGZvciAoZmliZXIgPSBkZWxldGVkU3VidHJlZVJvb3Q7IG51bGwgIT09IG5leHRFZmZlY3Q7ICkge1xuICAgICAgICBjYWNoZSA9IG5leHRFZmZlY3Q7XG4gICAgICAgIHZhciBzaWJsaW5nID0gY2FjaGUuc2libGluZyxcbiAgICAgICAgICByZXR1cm5GaWJlciA9IGNhY2hlLnJldHVybjtcbiAgICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoY2FjaGUpO1xuICAgICAgICBpZiAoY2FjaGUgPT09IGZpYmVyKSB7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobnVsbCAhPT0gc2libGluZykge1xuICAgICAgICAgIHNpYmxpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IHNpYmxpbmc7XG4gICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0RWZmZWN0ID0gcmV0dXJuRmliZXI7XG4gICAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmtleSA9IGtleTtcbiAgdGhpcy5zaWJsaW5nID1cbiAgICB0aGlzLmNoaWxkID1cbiAgICB0aGlzLnJldHVybiA9XG4gICAgdGhpcy5zdGF0ZU5vZGUgPVxuICAgIHRoaXMudHlwZSA9XG4gICAgdGhpcy5lbGVtZW50VHlwZSA9XG4gICAgICBudWxsO1xuICB0aGlzLmluZGV4ID0gMDtcbiAgdGhpcy5yZWZDbGVhbnVwID0gdGhpcy5yZWYgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcztcbiAgdGhpcy5kZXBlbmRlbmNpZXMgPVxuICAgIHRoaXMubWVtb2l6ZWRTdGF0ZSA9XG4gICAgdGhpcy51cGRhdGVRdWV1ZSA9XG4gICAgdGhpcy5tZW1vaXplZFByb3BzID1cbiAgICAgIG51bGw7XG4gIHRoaXMubW9kZSA9IG1vZGU7XG4gIHRoaXMuc3VidHJlZUZsYWdzID0gdGhpcy5mbGFncyA9IDA7XG4gIHRoaXMuZGVsZXRpb25zID0gbnVsbDtcbiAgdGhpcy5jaGlsZExhbmVzID0gdGhpcy5sYW5lcyA9IDA7XG4gIHRoaXMuYWx0ZXJuYXRlID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVySW1wbENsYXNzKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgcmV0dXJuIG5ldyBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG59XG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIENvbXBvbmVudCA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhKCFDb21wb25lbnQgfHwgIUNvbXBvbmVudC5pc1JlYWN0Q29tcG9uZW50KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIHBlbmRpbmdQcm9wcykge1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50LmFsdGVybmF0ZTtcbiAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NcbiAgICA/ICgod29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVGaWJlckltcGxDbGFzcyhcbiAgICAgICAgY3VycmVudC50YWcsXG4gICAgICAgIHBlbmRpbmdQcm9wcyxcbiAgICAgICAgY3VycmVudC5rZXksXG4gICAgICAgIGN1cnJlbnQubW9kZVxuICAgICAgKSksXG4gICAgICAod29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPSBjdXJyZW50LmVsZW1lbnRUeXBlKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50LnN0YXRlTm9kZSksXG4gICAgICAod29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gY3VycmVudCksXG4gICAgICAoY3VycmVudC5hbHRlcm5hdGUgPSB3b3JrSW5Qcm9ncmVzcykpXG4gICAgOiAoKHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcyksXG4gICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZSksXG4gICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAwKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSAwKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMgPSBudWxsKSk7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzID0gY3VycmVudC5mbGFncyAmIDMxNDU3MjgwO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICBwZW5kaW5nUHJvcHMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID1cbiAgICBudWxsID09PSBwZW5kaW5nUHJvcHNcbiAgICAgID8gbnVsbFxuICAgICAgOiB7IGxhbmVzOiBwZW5kaW5nUHJvcHMubGFuZXMsIGZpcnN0Q29udGV4dDogcGVuZGluZ1Byb3BzLmZpcnN0Q29udGV4dCB9O1xuICB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gY3VycmVudC5zaWJsaW5nO1xuICB3b3JrSW5Qcm9ncmVzcy5pbmRleCA9IGN1cnJlbnQuaW5kZXg7XG4gIHdvcmtJblByb2dyZXNzLnJlZiA9IGN1cnJlbnQucmVmO1xuICB3b3JrSW5Qcm9ncmVzcy5yZWZDbGVhbnVwID0gY3VycmVudC5yZWZDbGVhbnVwO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59XG5mdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAzMTQ1NzI4MjtcbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG4gIG51bGwgPT09IGN1cnJlbnRcbiAgICA/ICgod29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IDApLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXMpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbCksXG4gICAgICAod29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gMCksXG4gICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG51bGwpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGwpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IG51bGwpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IG51bGwpKVxuICAgIDogKCh3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXMpLFxuICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZCksXG4gICAgICAod29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gMCksXG4gICAgICAod29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gbnVsbCksXG4gICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyksXG4gICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlKSxcbiAgICAgIChyZW5kZXJMYW5lcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPVxuICAgICAgICBudWxsID09PSByZW5kZXJMYW5lc1xuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBsYW5lczogcmVuZGVyTGFuZXMubGFuZXMsXG4gICAgICAgICAgICAgIGZpcnN0Q29udGV4dDogcmVuZGVyTGFuZXMuZmlyc3RDb250ZXh0XG4gICAgICAgICAgICB9KSk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgdHlwZSxcbiAga2V5LFxuICBwZW5kaW5nUHJvcHMsXG4gIG93bmVyLFxuICBtb2RlLFxuICBsYW5lc1xuKSB7XG4gIHZhciBmaWJlclRhZyA9IDA7XG4gIG93bmVyID0gdHlwZTtcbiAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpIHNob3VsZENvbnN0cnVjdCh0eXBlKSAmJiAoZmliZXJUYWcgPSAxKTtcbiAgZWxzZSBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgZmliZXJUYWcgPSBpc0hvc3RIb2lzdGFibGVUeXBlKFxuICAgICAgdHlwZSxcbiAgICAgIHBlbmRpbmdQcm9wcyxcbiAgICAgIGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50XG4gICAgKVxuICAgICAgPyAyNlxuICAgICAgOiBcImh0bWxcIiA9PT0gdHlwZSB8fCBcImhlYWRcIiA9PT0gdHlwZSB8fCBcImJvZHlcIiA9PT0gdHlwZVxuICAgICAgICA/IDI3XG4gICAgICAgIDogNTtcbiAgZWxzZVxuICAgIGE6IHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQocGVuZGluZ1Byb3BzLmNoaWxkcmVuLCBtb2RlLCBsYW5lcywga2V5KTtcbiAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgZmliZXJUYWcgPSA4O1xuICAgICAgICBtb2RlIHw9IDI0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAodHlwZSA9IGNyZWF0ZUZpYmVySW1wbENsYXNzKDEyLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSB8IDIpKSxcbiAgICAgICAgICAodHlwZS5lbGVtZW50VHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEUpLFxuICAgICAgICAgICh0eXBlLmxhbmVzID0gbGFuZXMpLFxuICAgICAgICAgIHR5cGVcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAodHlwZSA9IGNyZWF0ZUZpYmVySW1wbENsYXNzKDEzLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkpLFxuICAgICAgICAgICh0eXBlLmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRSksXG4gICAgICAgICAgKHR5cGUubGFuZXMgPSBsYW5lcyksXG4gICAgICAgICAgdHlwZVxuICAgICAgICApO1xuICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKHR5cGUgPSBjcmVhdGVGaWJlckltcGxDbGFzcygxOSwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpKSxcbiAgICAgICAgICAodHlwZS5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSksXG4gICAgICAgICAgKHR5cGUubGFuZXMgPSBsYW5lcyksXG4gICAgICAgICAgdHlwZVxuICAgICAgICApO1xuICAgICAgY2FzZSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlICYmIG51bGwgIT09IHR5cGUpXG4gICAgICAgICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgZmliZXJUYWcgPSAxMDtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgICAgZmliZXJUYWcgPSA5O1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBmaWJlclRhZyA9IDExO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGZpYmVyVGFnID0gMTQ7XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgZmliZXJUYWcgPSAxNjtcbiAgICAgICAgICAgICAgb3duZXIgPSBudWxsO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIH1cbiAgICAgICAgZmliZXJUYWcgPSAyOTtcbiAgICAgICAgcGVuZGluZ1Byb3BzID0gRXJyb3IoXG4gICAgICAgICAgZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMzAsIG51bGwgPT09IHR5cGUgPyBcIm51bGxcIiA6IHR5cGVvZiB0eXBlLCBcIlwiKVxuICAgICAgICApO1xuICAgICAgICBvd25lciA9IG51bGw7XG4gICAgfVxuICBrZXkgPSBjcmVhdGVGaWJlckltcGxDbGFzcyhmaWJlclRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuICBrZXkuZWxlbWVudFR5cGUgPSB0eXBlO1xuICBrZXkudHlwZSA9IG93bmVyO1xuICBrZXkubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGtleTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnRzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIGVsZW1lbnRzID0gY3JlYXRlRmliZXJJbXBsQ2xhc3MoNywgZWxlbWVudHMsIGtleSwgbW9kZSk7XG4gIGVsZW1lbnRzLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBlbGVtZW50cztcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgcGVuZGluZ1Byb3BzID0gY3JlYXRlRmliZXJJbXBsQ2xhc3MoMjIsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgcGVuZGluZ1Byb3BzLmVsZW1lbnRUeXBlID0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEU7XG4gIHBlbmRpbmdQcm9wcy5sYW5lcyA9IGxhbmVzO1xuICB2YXIgcHJpbWFyeUNoaWxkSW5zdGFuY2UgPSB7XG4gICAgX3Zpc2liaWxpdHk6IDEsXG4gICAgX3BlbmRpbmdWaXNpYmlsaXR5OiAxLFxuICAgIF9wZW5kaW5nTWFya2VyczogbnVsbCxcbiAgICBfcmV0cnlDYWNoZTogbnVsbCxcbiAgICBfdHJhbnNpdGlvbnM6IG51bGwsXG4gICAgX2N1cnJlbnQ6IG51bGwsXG4gICAgZGV0YWNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZmliZXIgPSBwcmltYXJ5Q2hpbGRJbnN0YW5jZS5fY3VycmVudDtcbiAgICAgIGlmIChudWxsID09PSBmaWJlcikgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg0NTYpKTtcbiAgICAgIGlmICgwID09PSAocHJpbWFyeUNoaWxkSW5zdGFuY2UuX3BlbmRpbmdWaXNpYmlsaXR5ICYgMikpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpO1xuICAgICAgICBudWxsICE9PSByb290ICYmXG4gICAgICAgICAgKChwcmltYXJ5Q2hpbGRJbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgfD0gMiksXG4gICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCAyKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBhdHRhY2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBmaWJlciA9IHByaW1hcnlDaGlsZEluc3RhbmNlLl9jdXJyZW50O1xuICAgICAgaWYgKG51bGwgPT09IGZpYmVyKSB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQ1NikpO1xuICAgICAgaWYgKDAgIT09IChwcmltYXJ5Q2hpbGRJbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgJiAyKSkge1xuICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMik7XG4gICAgICAgIG51bGwgIT09IHJvb3QgJiZcbiAgICAgICAgICAoKHByaW1hcnlDaGlsZEluc3RhbmNlLl9wZW5kaW5nVmlzaWJpbGl0eSAmPSAtMyksXG4gICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCAyKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBwZW5kaW5nUHJvcHMuc3RhdGVOb2RlID0gcHJpbWFyeUNoaWxkSW5zdGFuY2U7XG4gIHJldHVybiBwZW5kaW5nUHJvcHM7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UZXh0KGNvbnRlbnQsIG1vZGUsIGxhbmVzKSB7XG4gIGNvbnRlbnQgPSBjcmVhdGVGaWJlckltcGxDbGFzcyg2LCBjb250ZW50LCBudWxsLCBtb2RlKTtcbiAgY29udGVudC5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gY29udGVudDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIG1vZGUsIGxhbmVzKSB7XG4gIG1vZGUgPSBjcmVhdGVGaWJlckltcGxDbGFzcyhcbiAgICA0LFxuICAgIG51bGwgIT09IHBvcnRhbC5jaGlsZHJlbiA/IHBvcnRhbC5jaGlsZHJlbiA6IFtdLFxuICAgIHBvcnRhbC5rZXksXG4gICAgbW9kZVxuICApO1xuICBtb2RlLmxhbmVzID0gbGFuZXM7XG4gIG1vZGUuc3RhdGVOb2RlID0ge1xuICAgIGNvbnRhaW5lckluZm86IHBvcnRhbC5jb250YWluZXJJbmZvLFxuICAgIHBlbmRpbmdDaGlsZHJlbjogbnVsbCxcbiAgICBpbXBsZW1lbnRhdGlvbjogcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gIH07XG4gIHJldHVybiBtb2RlO1xufVxuZnVuY3Rpb24gbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykge1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0O1xufVxuZnVuY3Rpb24gcHJlbG9hZFJlc291cmNlQW5kU3VzcGVuZElmTmVlZGVkKHdvcmtJblByb2dyZXNzLCByZXNvdXJjZSkge1xuICBpZiAoXCJzdHlsZXNoZWV0XCIgIT09IHJlc291cmNlLnR5cGUgfHwgMCAhPT0gKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiA0KSlcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMTY3NzcyMTc7XG4gIGVsc2UgaWYgKCgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTY3NzcyMTYpLCAhcHJlbG9hZFJlc291cmNlKHJlc291cmNlKSkpIHtcbiAgICByZXNvdXJjZSA9IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgaWYgKFxuICAgICAgbnVsbCAhPT0gcmVzb3VyY2UgJiZcbiAgICAgICgod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA0MTk0MTc2KSA9PT1cbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzXG4gICAgICAgID8gbnVsbCAhPT0gc2hlbGxCb3VuZGFyeVxuICAgICAgICA6ICgod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA2MjkxNDU2MCkgIT09XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNTM2ODcwOTEyKSkgfHxcbiAgICAgICAgICByZXNvdXJjZSAhPT0gc2hlbGxCb3VuZGFyeSlcbiAgICApXG4gICAgICB0aHJvdyAoXG4gICAgICAgICgoc3VzcGVuZGVkVGhlbmFibGUgPSBub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGUpLFxuICAgICAgICBTdXNwZW5zZXlDb21taXRFeGNlcHRpb24pXG4gICAgICApO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDgxOTI7XG4gIH1cbn1cbmZ1bmN0aW9uIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIHJldHJ5UXVldWUpIHtcbiAgbnVsbCAhPT0gcmV0cnlRdWV1ZSAmJiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNCk7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTYzODQgJiZcbiAgICAoKHJldHJ5UXVldWUgPVxuICAgICAgMjIgIT09IHdvcmtJblByb2dyZXNzLnRhZyA/IGNsYWltTmV4dFJldHJ5TGFuZSgpIDogNTM2ODcwOTEyKSxcbiAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgfD0gcmV0cnlRdWV1ZSksXG4gICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lcyB8PSByZXRyeVF1ZXVlKSk7XG59XG5mdW5jdGlvbiBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjaykge1xuICBpZiAoIWlzSHlkcmF0aW5nKVxuICAgIHN3aXRjaCAocmVuZGVyU3RhdGUudGFpbE1vZGUpIHtcbiAgICAgIGNhc2UgXCJoaWRkZW5cIjpcbiAgICAgICAgaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgZm9yICh2YXIgbGFzdFRhaWxOb2RlID0gbnVsbDsgbnVsbCAhPT0gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrOyApXG4gICAgICAgICAgbnVsbCAhPT0gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgKGxhc3RUYWlsTm9kZSA9IGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayksXG4gICAgICAgICAgICAoaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrID0gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrLnNpYmxpbmcpO1xuICAgICAgICBudWxsID09PSBsYXN0VGFpbE5vZGVcbiAgICAgICAgICA/IChyZW5kZXJTdGF0ZS50YWlsID0gbnVsbClcbiAgICAgICAgICA6IChsYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJjb2xsYXBzZWRcIjpcbiAgICAgICAgbGFzdFRhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgZm9yICh2YXIgbGFzdFRhaWxOb2RlJDEzMSA9IG51bGw7IG51bGwgIT09IGxhc3RUYWlsTm9kZTsgKVxuICAgICAgICAgIG51bGwgIT09IGxhc3RUYWlsTm9kZS5hbHRlcm5hdGUgJiYgKGxhc3RUYWlsTm9kZSQxMzEgPSBsYXN0VGFpbE5vZGUpLFxuICAgICAgICAgICAgKGxhc3RUYWlsTm9kZSA9IGxhc3RUYWlsTm9kZS5zaWJsaW5nKTtcbiAgICAgICAgbnVsbCA9PT0gbGFzdFRhaWxOb2RlJDEzMVxuICAgICAgICAgID8gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrIHx8IG51bGwgPT09IHJlbmRlclN0YXRlLnRhaWxcbiAgICAgICAgICAgID8gKHJlbmRlclN0YXRlLnRhaWwgPSBudWxsKVxuICAgICAgICAgICAgOiAocmVuZGVyU3RhdGUudGFpbC5zaWJsaW5nID0gbnVsbClcbiAgICAgICAgICA6IChsYXN0VGFpbE5vZGUkMTMxLnNpYmxpbmcgPSBudWxsKTtcbiAgICB9XG59XG5mdW5jdGlvbiBidWJibGVQcm9wZXJ0aWVzKGNvbXBsZXRlZFdvcmspIHtcbiAgdmFyIGRpZEJhaWxvdXQgPVxuICAgICAgbnVsbCAhPT0gY29tcGxldGVkV29yay5hbHRlcm5hdGUgJiZcbiAgICAgIGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlLmNoaWxkID09PSBjb21wbGV0ZWRXb3JrLmNoaWxkLFxuICAgIG5ld0NoaWxkTGFuZXMgPSAwLFxuICAgIHN1YnRyZWVGbGFncyA9IDA7XG4gIGlmIChkaWRCYWlsb3V0KVxuICAgIGZvciAodmFyIGNoaWxkJDEzMiA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7IG51bGwgIT09IGNoaWxkJDEzMjsgKVxuICAgICAgKG5ld0NoaWxkTGFuZXMgfD0gY2hpbGQkMTMyLmxhbmVzIHwgY2hpbGQkMTMyLmNoaWxkTGFuZXMpLFxuICAgICAgICAoc3VidHJlZUZsYWdzIHw9IGNoaWxkJDEzMi5zdWJ0cmVlRmxhZ3MgJiAzMTQ1NzI4MCksXG4gICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gY2hpbGQkMTMyLmZsYWdzICYgMzE0NTcyODApLFxuICAgICAgICAoY2hpbGQkMTMyLnJldHVybiA9IGNvbXBsZXRlZFdvcmspLFxuICAgICAgICAoY2hpbGQkMTMyID0gY2hpbGQkMTMyLnNpYmxpbmcpO1xuICBlbHNlXG4gICAgZm9yIChjaGlsZCQxMzIgPSBjb21wbGV0ZWRXb3JrLmNoaWxkOyBudWxsICE9PSBjaGlsZCQxMzI7IClcbiAgICAgIChuZXdDaGlsZExhbmVzIHw9IGNoaWxkJDEzMi5sYW5lcyB8IGNoaWxkJDEzMi5jaGlsZExhbmVzKSxcbiAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBjaGlsZCQxMzIuc3VidHJlZUZsYWdzKSxcbiAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBjaGlsZCQxMzIuZmxhZ3MpLFxuICAgICAgICAoY2hpbGQkMTMyLnJldHVybiA9IGNvbXBsZXRlZFdvcmspLFxuICAgICAgICAoY2hpbGQkMTMyID0gY2hpbGQkMTMyLnNpYmxpbmcpO1xuICBjb21wbGV0ZWRXb3JrLnN1YnRyZWVGbGFncyB8PSBzdWJ0cmVlRmxhZ3M7XG4gIGNvbXBsZXRlZFdvcmsuY2hpbGRMYW5lcyA9IG5ld0NoaWxkTGFuZXM7XG4gIHJldHVybiBkaWRCYWlsb3V0O1xufVxuZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHBvcFRyZWVDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIDE2OlxuICAgIGNhc2UgMTU6XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTE6XG4gICAgY2FzZSA3OlxuICAgIGNhc2UgODpcbiAgICBjYXNlIDEyOlxuICAgIGNhc2UgOTpcbiAgICBjYXNlIDE0OlxuICAgICAgcmV0dXJuIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICBjYXNlIDM6XG4gICAgICByZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgIG5ld1Byb3BzID0gbnVsbDtcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgKG5ld1Byb3BzID0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUuY2FjaGUgIT09IG5ld1Byb3BzICYmXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyMDQ4KTtcbiAgICAgIHBvcFByb3ZpZGVyKENhY2hlQ29udGV4dCk7XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKCk7XG4gICAgICByZW5kZXJMYW5lcy5wZW5kaW5nQ29udGV4dCAmJlxuICAgICAgICAoKHJlbmRlckxhbmVzLmNvbnRleHQgPSByZW5kZXJMYW5lcy5wZW5kaW5nQ29udGV4dCksXG4gICAgICAgIChyZW5kZXJMYW5lcy5wZW5kaW5nQ29udGV4dCA9IG51bGwpKTtcbiAgICAgIGlmIChudWxsID09PSBjdXJyZW50IHx8IG51bGwgPT09IGN1cnJlbnQuY2hpbGQpXG4gICAgICAgIHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgID8gbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICA6IG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICAgIChjdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkICYmXG4gICAgICAgICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NikpIHx8XG4gICAgICAgICAgICAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEwMjQpLFxuICAgICAgICAgICAgbnVsbCAhPT0gaHlkcmF0aW9uRXJyb3JzICYmXG4gICAgICAgICAgICAgIChxdWV1ZVJlY292ZXJhYmxlRXJyb3JzKGh5ZHJhdGlvbkVycm9ycyksXG4gICAgICAgICAgICAgIChoeWRyYXRpb25FcnJvcnMgPSBudWxsKSkpO1xuICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIDI2OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICA/IChtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGwgIT09IHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgID8gKGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIHByZWxvYWRSZXNvdXJjZUFuZFN1c3BlbmRJZk5lZWRlZCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpKVxuICAgICAgICAgICAgICA6IChidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTE2Nzc3MjE3KSkpXG4gICAgICAgICAgOiByZW5kZXJMYW5lc1xuICAgICAgICAgICAgPyByZW5kZXJMYW5lcyAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICAgID8gKG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIHByZWxvYWRSZXNvdXJjZUFuZFN1c3BlbmRJZk5lZWRlZCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpKVxuICAgICAgICAgICAgICA6IChidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTE2Nzc3MjE3KSlcbiAgICAgICAgICAgIDogKGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAhPT0gbmV3UHJvcHMgJiYgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTE2Nzc3MjE3KSksXG4gICAgICAgIG51bGxcbiAgICAgICk7XG4gICAgY2FzZSAyNzpcbiAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJlbmRlckxhbmVzID0gcm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHMgIT09IG5ld1Byb3BzICYmIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICghbmV3UHJvcHMpIHtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNjYpKTtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgICAgIHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgID8gcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3VycmVudClcbiAgICAgICAgICA6ICgoY3VycmVudCA9IHJlc29sdmVTaW5nbGV0b25JbnN0YW5jZSh0eXBlLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50KSxcbiAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpKTtcbiAgICAgIH1cbiAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSA1OlxuICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpXG4gICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAhPT0gbmV3UHJvcHMgJiYgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKCFuZXdQcm9wcykge1xuICAgICAgICAgIGlmIChudWxsID09PSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE2NikpO1xuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICAgICAgaWYgKHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKSlcbiAgICAgICAgICBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdXJyZW50KTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdHlwZSA9IGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihcbiAgICAgICAgICAgIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnRcbiAgICAgICAgICApO1xuICAgICAgICAgIHN3aXRjaCAoY3VycmVudCkge1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBjdXJyZW50ID0gdHlwZS5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBjdXJyZW50ID0gdHlwZS5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBzd2l0Y2ggKHJlbmRlckxhbmVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN2Z1wiOlxuICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHR5cGUuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgICAgICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1hdGhcIjpcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0eXBlLmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICAgICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjcmlwdFwiOlxuICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHR5cGUuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQuaW5uZXJIVE1MID0gXCI8c2NyaXB0PlxceDNjL3NjcmlwdD5cIjtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJlbW92ZUNoaWxkKGN1cnJlbnQuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgICAgICAgICBjdXJyZW50ID1cbiAgICAgICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld1Byb3BzLmlzXG4gICAgICAgICAgICAgICAgICAgICAgPyB0eXBlLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgeyBpczogbmV3UHJvcHMuaXMgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IHR5cGUuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKTtcbiAgICAgICAgICAgICAgICAgIG5ld1Byb3BzLm11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgID8gKGN1cnJlbnQubXVsdGlwbGUgPSAhMClcbiAgICAgICAgICAgICAgICAgICAgOiBuZXdQcm9wcy5zaXplICYmIChjdXJyZW50LnNpemUgPSBuZXdQcm9wcy5zaXplKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBjdXJyZW50ID1cbiAgICAgICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld1Byb3BzLmlzXG4gICAgICAgICAgICAgICAgICAgICAgPyB0eXBlLmNyZWF0ZUVsZW1lbnQocmVuZGVyTGFuZXMsIHsgaXM6IG5ld1Byb3BzLmlzIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiB0eXBlLmNyZWF0ZUVsZW1lbnQocmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICBjdXJyZW50W2ludGVybmFsUHJvcHNLZXldID0gbmV3UHJvcHM7XG4gICAgICAgICAgYTogZm9yICh0eXBlID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7IG51bGwgIT09IHR5cGU7ICkge1xuICAgICAgICAgICAgaWYgKDUgPT09IHR5cGUudGFnIHx8IDYgPT09IHR5cGUudGFnKVxuICAgICAgICAgICAgICBjdXJyZW50LmFwcGVuZENoaWxkKHR5cGUuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKDQgIT09IHR5cGUudGFnICYmIDI3ICE9PSB0eXBlLnRhZyAmJiBudWxsICE9PSB0eXBlLmNoaWxkKSB7XG4gICAgICAgICAgICAgIHR5cGUuY2hpbGQucmV0dXJuID0gdHlwZTtcbiAgICAgICAgICAgICAgdHlwZSA9IHR5cGUuY2hpbGQ7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09IHdvcmtJblByb2dyZXNzKSBicmVhayBhO1xuICAgICAgICAgICAgZm9yICg7IG51bGwgPT09IHR5cGUuc2libGluZzsgKSB7XG4gICAgICAgICAgICAgIGlmIChudWxsID09PSB0eXBlLnJldHVybiB8fCB0eXBlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgdHlwZSA9IHR5cGUucmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHlwZS5zaWJsaW5nLnJldHVybiA9IHR5cGUucmV0dXJuO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuc2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudDtcbiAgICAgICAgICBhOiBzd2l0Y2ggKFxuICAgICAgICAgICAgKHNldEluaXRpYWxQcm9wZXJ0aWVzKGN1cnJlbnQsIHJlbmRlckxhbmVzLCBuZXdQcm9wcyksIHJlbmRlckxhbmVzKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY2FzZSBcImJ1dHRvblwiOlxuICAgICAgICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcbiAgICAgICAgICAgICAgY3VycmVudCA9ICEhbmV3UHJvcHMuYXV0b0ZvY3VzO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgY2FzZSBcImltZ1wiOlxuICAgICAgICAgICAgICBjdXJyZW50ID0gITA7XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjdXJyZW50ID0gITE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnQgJiYgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTE2Nzc3MjE3O1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSA2OlxuICAgICAgaWYgKGN1cnJlbnQgJiYgbnVsbCAhPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpXG4gICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAhPT0gbmV3UHJvcHMgJiYgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKFwic3RyaW5nXCIgIT09IHR5cGVvZiBuZXdQcm9wcyAmJiBudWxsID09PSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNjYpKTtcbiAgICAgICAgY3VycmVudCA9IHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgICAgIGlmIChwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICBuZXdQcm9wcyA9IG51bGw7XG4gICAgICAgICAgdHlwZSA9IGh5ZHJhdGlvblBhcmVudEZpYmVyO1xuICAgICAgICAgIGlmIChudWxsICE9PSB0eXBlKVxuICAgICAgICAgICAgc3dpdGNoICh0eXBlLnRhZykge1xuICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgbmV3UHJvcHMgPSB0eXBlLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudFtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgIGN1cnJlbnQgPVxuICAgICAgICAgICAgY3VycmVudC5ub2RlVmFsdWUgPT09IHJlbmRlckxhbmVzIHx8XG4gICAgICAgICAgICAobnVsbCAhPT0gbmV3UHJvcHMgJiYgITAgPT09IG5ld1Byb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZykgfHxcbiAgICAgICAgICAgIGNoZWNrRm9yVW5tYXRjaGVkVGV4dChjdXJyZW50Lm5vZGVWYWx1ZSwgcmVuZGVyTGFuZXMpXG4gICAgICAgICAgICAgID8gITBcbiAgICAgICAgICAgICAgOiAhMTtcbiAgICAgICAgICBjdXJyZW50IHx8IHRocm93T25IeWRyYXRpb25NaXNtYXRjaCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIChjdXJyZW50ID1cbiAgICAgICAgICAgIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihjdXJyZW50KS5jcmVhdGVUZXh0Tm9kZShcbiAgICAgICAgICAgICAgbmV3UHJvcHNcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKGN1cnJlbnRbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudCk7XG4gICAgICB9XG4gICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgMTM6XG4gICAgICBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgKG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5kZWh5ZHJhdGVkKVxuICAgICAgKSB7XG4gICAgICAgIHR5cGUgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIGlmIChudWxsICE9PSBuZXdQcm9wcyAmJiBudWxsICE9PSBuZXdQcm9wcy5kZWh5ZHJhdGVkKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGlmICghdHlwZSkgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzMTgpKTtcbiAgICAgICAgICAgIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgdHlwZSA9IG51bGwgIT09IHR5cGUgPyB0eXBlLmRlaHlkcmF0ZWQgOiBudWxsO1xuICAgICAgICAgICAgaWYgKCF0eXBlKSB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMxNykpO1xuICAgICAgICAgICAgdHlwZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpLFxuICAgICAgICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpICYmXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpO1xuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHR5cGUgPSAhMTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgbnVsbCAhPT0gaHlkcmF0aW9uRXJyb3JzICYmXG4gICAgICAgICAgICAocXVldWVSZWNvdmVyYWJsZUVycm9ycyhoeWRyYXRpb25FcnJvcnMpLCAoaHlkcmF0aW9uRXJyb3JzID0gbnVsbCkpLFxuICAgICAgICAgICAgKHR5cGUgPSAhMCk7XG4gICAgICAgIGlmICghdHlwZSkge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NilcbiAgICAgICAgICAgIHJldHVybiBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpLCB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgaWYgKDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCkpXG4gICAgICAgIHJldHVybiAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lcyksIHdvcmtJblByb2dyZXNzO1xuICAgICAgcmVuZGVyTGFuZXMgPSBudWxsICE9PSBuZXdQcm9wcztcbiAgICAgIGN1cnJlbnQgPSBudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChyZW5kZXJMYW5lcykge1xuICAgICAgICBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICB0eXBlID0gbnVsbDtcbiAgICAgICAgbnVsbCAhPT0gbmV3UHJvcHMuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgbnVsbCAhPT0gbmV3UHJvcHMuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcy5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wgJiZcbiAgICAgICAgICAodHlwZSA9IG5ld1Byb3BzLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKTtcbiAgICAgICAgdmFyIGNhY2hlJDE0NCA9IG51bGw7XG4gICAgICAgIG51bGwgIT09IG5ld1Byb3BzLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcy5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAmJlxuICAgICAgICAgIChjYWNoZSQxNDQgPSBuZXdQcm9wcy5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKTtcbiAgICAgICAgY2FjaGUkMTQ0ICE9PSB0eXBlICYmIChuZXdQcm9wcy5mbGFncyB8PSAyMDQ4KTtcbiAgICAgIH1cbiAgICAgIHJlbmRlckxhbmVzICE9PSBjdXJyZW50ICYmXG4gICAgICAgIHJlbmRlckxhbmVzICYmXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZC5mbGFncyB8PSA4MTkyKTtcbiAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlKTtcbiAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcigpLFxuICAgICAgICBudWxsID09PSBjdXJyZW50ICYmXG4gICAgICAgICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLFxuICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICBjYXNlIDEwOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcG9wUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MudHlwZSksIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLCBudWxsXG4gICAgICApO1xuICAgIGNhc2UgMTk6XG4gICAgICBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvcik7XG4gICAgICB0eXBlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsID09PSB0eXBlKSByZXR1cm4gYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICBuZXdQcm9wcyA9IDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCk7XG4gICAgICBjYWNoZSQxNDQgPSB0eXBlLnJlbmRlcmluZztcbiAgICAgIGlmIChudWxsID09PSBjYWNoZSQxNDQpXG4gICAgICAgIGlmIChuZXdQcm9wcykgY3V0T2ZmVGFpbElmTmVlZGVkKHR5cGUsICExKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgMCAhPT0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyB8fFxuICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiYgMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMjgpKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGZvciAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkOyBudWxsICE9PSBjdXJyZW50OyApIHtcbiAgICAgICAgICAgICAgY2FjaGUkMTQ0ID0gZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnQpO1xuICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gY2FjaGUkMTQ0KSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4O1xuICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZCh0eXBlLCAhMSk7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IGNhY2hlJDE0NC51cGRhdGVRdWV1ZTtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgY3VycmVudCk7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gMDtcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gcmVuZGVyTGFuZXM7XG4gICAgICAgICAgICAgICAgZm9yIChyZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkOyBudWxsICE9PSByZW5kZXJMYW5lczsgKVxuICAgICAgICAgICAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzcyhyZW5kZXJMYW5lcywgY3VycmVudCksXG4gICAgICAgICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzLnNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIHB1c2goXG4gICAgICAgICAgICAgICAgICBzdXNwZW5zZVN0YWNrQ3Vyc29yLFxuICAgICAgICAgICAgICAgICAgKHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCAmIDEpIHwgMlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgbnVsbCAhPT0gdHlwZS50YWlsICYmXG4gICAgICAgICAgICBub3coKSA+IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgJiZcbiAgICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgIChuZXdQcm9wcyA9ICEwKSxcbiAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZCh0eXBlLCAhMSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSA0MTk0MzA0KSk7XG4gICAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoIW5ld1Byb3BzKVxuICAgICAgICAgIGlmICgoKGN1cnJlbnQgPSBmaW5kRmlyc3RTdXNwZW5kZWQoY2FjaGUkMTQ0KSksIG51bGwgIT09IGN1cnJlbnQpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgICAgKG5ld1Byb3BzID0gITApLFxuICAgICAgICAgICAgICAoY3VycmVudCA9IGN1cnJlbnQudXBkYXRlUXVldWUpLFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50KSxcbiAgICAgICAgICAgICAgc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgY3VycmVudCksXG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZCh0eXBlLCAhMCksXG4gICAgICAgICAgICAgIG51bGwgPT09IHR5cGUudGFpbCAmJlxuICAgICAgICAgICAgICAgIFwiaGlkZGVuXCIgPT09IHR5cGUudGFpbE1vZGUgJiZcbiAgICAgICAgICAgICAgICAhY2FjaGUkMTQ0LmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAgICFpc0h5ZHJhdGluZylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgMiAqIG5vdygpIC0gdHlwZS5yZW5kZXJpbmdTdGFydFRpbWUgPlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lICYmXG4gICAgICAgICAgICAgIDUzNjg3MDkxMiAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpLFxuICAgICAgICAgICAgICAobmV3UHJvcHMgPSAhMCksXG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZCh0eXBlLCAhMSksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDQxOTQzMDQpKTtcbiAgICAgICAgdHlwZS5pc0JhY2t3YXJkc1xuICAgICAgICAgID8gKChjYWNoZSQxNDQuc2libGluZyA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGNhY2hlJDE0NCkpXG4gICAgICAgICAgOiAoKGN1cnJlbnQgPSB0eXBlLmxhc3QpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudFxuICAgICAgICAgICAgICA/IChjdXJyZW50LnNpYmxpbmcgPSBjYWNoZSQxNDQpXG4gICAgICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2FjaGUkMTQ0KSxcbiAgICAgICAgICAgICh0eXBlLmxhc3QgPSBjYWNoZSQxNDQpKTtcbiAgICAgIH1cbiAgICAgIGlmIChudWxsICE9PSB0eXBlLnRhaWwpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gdHlwZS50YWlsKSxcbiAgICAgICAgICAodHlwZS5yZW5kZXJpbmcgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgKHR5cGUudGFpbCA9IHdvcmtJblByb2dyZXNzLnNpYmxpbmcpLFxuICAgICAgICAgICh0eXBlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IG5vdygpKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc2libGluZyA9IG51bGwpLFxuICAgICAgICAgIChjdXJyZW50ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KSxcbiAgICAgICAgICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIG5ld1Byb3BzID8gKGN1cnJlbnQgJiAxKSB8IDIgOiBjdXJyZW50ICYgMSksXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgKTtcbiAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSAyMjpcbiAgICBjYXNlIDIzOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgcG9wSGlkZGVuQ29udGV4dCgpLFxuICAgICAgICAobmV3UHJvcHMgPSBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudFxuICAgICAgICAgID8gKG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgIT09IG5ld1Byb3BzICYmXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MilcbiAgICAgICAgICA6IG5ld1Byb3BzICYmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA4MTkyKSxcbiAgICAgICAgbmV3UHJvcHNcbiAgICAgICAgICA/IDAgIT09IChyZW5kZXJMYW5lcyAmIDUzNjg3MDkxMikgJiZcbiAgICAgICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCkgJiZcbiAgICAgICAgICAgIChidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyAmIDYgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDgxOTIpKVxuICAgICAgICAgIDogYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgIChyZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgbnVsbCAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcy5yZXRyeVF1ZXVlKSxcbiAgICAgICAgKHJlbmRlckxhbmVzID0gbnVsbCksXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgICAgKHJlbmRlckxhbmVzID0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxcbiAgICAgICAgKG5ld1Byb3BzID0gbnVsbCksXG4gICAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAmJlxuICAgICAgICAgIChuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLFxuICAgICAgICBuZXdQcm9wcyAhPT0gcmVuZGVyTGFuZXMgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwNDgpLFxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIHBvcChyZXN1bWVkQ2FjaGUpLFxuICAgICAgICBudWxsXG4gICAgICApO1xuICAgIGNhc2UgMjQ6XG4gICAgICByZXR1cm4gKFxuICAgICAgICAocmVuZGVyTGFuZXMgPSBudWxsKSxcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiAocmVuZGVyTGFuZXMgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGUpLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlLmNhY2hlICE9PSByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyMDQ4KSxcbiAgICAgICAgcG9wUHJvdmlkZXIoQ2FjaGVDb250ZXh0KSxcbiAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgIG51bGxcbiAgICAgICk7XG4gICAgY2FzZSAyNTpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTU2LCB3b3JrSW5Qcm9ncmVzcy50YWcpKTtcbn1cbmZ1bmN0aW9uIHVud2luZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgcG9wVHJlZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3MpLFxuICAgICAgICBjdXJyZW50ICYgNjU1MzZcbiAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoY3VycmVudCAmIC02NTUzNykgfCAxMjgpLCB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICA6IG51bGxcbiAgICAgICk7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcG9wUHJvdmlkZXIoQ2FjaGVDb250ZXh0KSxcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcigpLFxuICAgICAgICAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzKSxcbiAgICAgICAgMCAhPT0gKGN1cnJlbnQgJiA2NTUzNikgJiYgMCA9PT0gKGN1cnJlbnQgJiAxMjgpXG4gICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmZsYWdzID0gKGN1cnJlbnQgJiAtNjU1MzcpIHwgMTI4KSwgd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgOiBudWxsXG4gICAgICApO1xuICAgIGNhc2UgMjY6XG4gICAgY2FzZSAyNzpcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgIGNhc2UgMTM6XG4gICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50LmRlaHlkcmF0ZWQpIHtcbiAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSlcbiAgICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDM0MCkpO1xuICAgICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG4gICAgICByZXR1cm4gY3VycmVudCAmIDY1NTM2XG4gICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IChjdXJyZW50ICYgLTY1NTM3KSB8IDEyOCksIHdvcmtJblByb2dyZXNzKVxuICAgICAgICA6IG51bGw7XG4gICAgY2FzZSAxOTpcbiAgICAgIHJldHVybiBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvciksIG51bGw7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIHBvcEhvc3RDb250YWluZXIoKSwgbnVsbDtcbiAgICBjYXNlIDEwOlxuICAgICAgcmV0dXJuIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLnR5cGUpLCBudWxsO1xuICAgIGNhc2UgMjI6XG4gICAgY2FzZSAyMzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgIHBvcEhpZGRlbkNvbnRleHQoKSxcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBwb3AocmVzdW1lZENhY2hlKSxcbiAgICAgICAgKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncyksXG4gICAgICAgIGN1cnJlbnQgJiA2NTUzNlxuICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IChjdXJyZW50ICYgLTY1NTM3KSB8IDEyOCksIHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKTtcbiAgICBjYXNlIDI0OlxuICAgICAgcmV0dXJuIHBvcFByb3ZpZGVyKENhY2hlQ29udGV4dCksIG51bGw7XG4gICAgY2FzZSAyNTpcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gdW53aW5kSW50ZXJydXB0ZWRXb3JrKGN1cnJlbnQsIGludGVycnVwdGVkV29yaykge1xuICBwb3BUcmVlQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICBzd2l0Y2ggKGludGVycnVwdGVkV29yay50YWcpIHtcbiAgICBjYXNlIDM6XG4gICAgICBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQpO1xuICAgICAgcG9wSG9zdENvbnRhaW5lcigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyNjpcbiAgICBjYXNlIDI3OlxuICAgIGNhc2UgNTpcbiAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEzOlxuICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE5OlxuICAgICAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMDpcbiAgICAgIHBvcFByb3ZpZGVyKGludGVycnVwdGVkV29yay50eXBlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgY2FzZSAyMzpcbiAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgcG9wSGlkZGVuQ29udGV4dCgpO1xuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBwb3AocmVzdW1lZENhY2hlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjQ6XG4gICAgICBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQpO1xuICB9XG59XG52YXIgRGVmYXVsdEFzeW5jRGlzcGF0Y2hlciA9IHtcbiAgICBnZXRDYWNoZUZvclR5cGU6IGZ1bmN0aW9uIChyZXNvdXJjZVR5cGUpIHtcbiAgICAgIHZhciBjYWNoZSA9IHJlYWRDb250ZXh0KENhY2hlQ29udGV4dCksXG4gICAgICAgIGNhY2hlRm9yVHlwZSA9IGNhY2hlLmRhdGEuZ2V0KHJlc291cmNlVHlwZSk7XG4gICAgICB2b2lkIDAgPT09IGNhY2hlRm9yVHlwZSAmJlxuICAgICAgICAoKGNhY2hlRm9yVHlwZSA9IHJlc291cmNlVHlwZSgpKSxcbiAgICAgICAgY2FjaGUuZGF0YS5zZXQocmVzb3VyY2VUeXBlLCBjYWNoZUZvclR5cGUpKTtcbiAgICAgIHJldHVybiBjYWNoZUZvclR5cGU7XG4gICAgfVxuICB9LFxuICBQb3NzaWJseVdlYWtNYXAgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBXZWFrTWFwID8gV2Vha01hcCA6IE1hcCxcbiAgZXhlY3V0aW9uQ29udGV4dCA9IDAsXG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGwsXG4gIHdvcmtJblByb2dyZXNzID0gbnVsbCxcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSAwLFxuICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IDAsXG4gIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsLFxuICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3MgPSAhMSxcbiAgd29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmcgPSAhMSxcbiAgd29ya0luUHJvZ3Jlc3NSb290RGlkQXR0YWNoUGluZ0xpc3RlbmVyID0gITEsXG4gIGVudGFuZ2xlZFJlbmRlckxhbmVzID0gMCxcbiAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IDAsXG4gIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IDAsXG4gIHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzID0gMCxcbiAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSAwLFxuICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9IDAsXG4gIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lcyA9IDAsXG4gIHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPSBudWxsLFxuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IG51bGwsXG4gIHdvcmtJblByb2dyZXNzUm9vdERpZEluY2x1ZGVSZWN1cnNpdmVSZW5kZXJVcGRhdGUgPSAhMSxcbiAgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IDAsXG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBJbmZpbml0eSxcbiAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGwsXG4gIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbCxcbiAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSAhMSxcbiAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsLFxuICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IDAsXG4gIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbWFpbmluZ0xhbmVzID0gMCxcbiAgcGVuZGluZ1Bhc3NpdmVUcmFuc2l0aW9ucyA9IG51bGwsXG4gIG5lc3RlZFVwZGF0ZUNvdW50ID0gMCxcbiAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcbmZ1bmN0aW9uIHJlcXVlc3RVcGRhdGVMYW5lKCkge1xuICBpZiAoMCAhPT0gKGV4ZWN1dGlvbkNvbnRleHQgJiAyKSAmJiAwICE9PSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcylcbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiAtd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gIGlmIChudWxsICE9PSBSZWFjdFNoYXJlZEludGVybmFscy5UKSB7XG4gICAgdmFyIGFjdGlvblNjb3BlTGFuZSA9IGN1cnJlbnRFbnRhbmdsZWRMYW5lO1xuICAgIHJldHVybiAwICE9PSBhY3Rpb25TY29wZUxhbmUgPyBhY3Rpb25TY29wZUxhbmUgOiByZXF1ZXN0VHJhbnNpdGlvbkxhbmUoKTtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZVVwZGF0ZVByaW9yaXR5KCk7XG59XG5mdW5jdGlvbiByZXF1ZXN0RGVmZXJyZWRMYW5lKCkge1xuICAwID09PSB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSAmJlxuICAgICh3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9XG4gICAgICAwID09PSAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA1MzY4NzA5MTIpIHx8IGlzSHlkcmF0aW5nXG4gICAgICAgID8gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKVxuICAgICAgICA6IDUzNjg3MDkxMik7XG4gIHZhciBzdXNwZW5zZUhhbmRsZXIgPSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50O1xuICBudWxsICE9PSBzdXNwZW5zZUhhbmRsZXIgJiYgKHN1c3BlbnNlSGFuZGxlci5mbGFncyB8PSAzMik7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSkge1xuICBpZiAoXG4gICAgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJiAyID09PSB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbikgfHxcbiAgICBudWxsICE9PSByb290LmNhbmNlbFBlbmRpbmdDb21taXRcbiAgKVxuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIDApLFxuICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSxcbiAgICAgICAgITFcbiAgICAgICk7XG4gIG1hcmtSb290VXBkYXRlZCQxKHJvb3QsIGxhbmUpO1xuICBpZiAoMCA9PT0gKGV4ZWN1dGlvbkNvbnRleHQgJiAyKSB8fCByb290ICE9PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpXG4gICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmXG4gICAgICAoMCA9PT0gKGV4ZWN1dGlvbkNvbnRleHQgJiAyKSAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgfD0gbGFuZSksXG4gICAgICA0ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzICYmXG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgITFcbiAgICAgICAgKSksXG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG59XG5mdW5jdGlvbiBwZXJmb3JtV29ya09uUm9vdChyb290JGpzY29tcCQwLCBsYW5lcywgZm9yY2VTeW5jKSB7XG4gIGlmICgwICE9PSAoZXhlY3V0aW9uQ29udGV4dCAmIDYpKSB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMyNykpO1xuICB2YXIgc2hvdWxkVGltZVNsaWNlID1cbiAgICAgICghZm9yY2VTeW5jICYmXG4gICAgICAgIDAgPT09IChsYW5lcyAmIDYwKSAmJlxuICAgICAgICAwID09PSAobGFuZXMgJiByb290JGpzY29tcCQwLmV4cGlyZWRMYW5lcykpIHx8XG4gICAgICBjaGVja0lmUm9vdElzUHJlcmVuZGVyaW5nKHJvb3QkanNjb21wJDAsIGxhbmVzKSxcbiAgICBleGl0U3RhdHVzID0gc2hvdWxkVGltZVNsaWNlXG4gICAgICA/IHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QkanNjb21wJDAsIGxhbmVzKVxuICAgICAgOiByZW5kZXJSb290U3luYyhyb290JGpzY29tcCQwLCBsYW5lcywgITApLFxuICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgPSBzaG91bGRUaW1lU2xpY2U7XG4gIGRvIHtcbiAgICBpZiAoMCA9PT0gZXhpdFN0YXR1cykge1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmcgJiZcbiAgICAgICAgIXNob3VsZFRpbWVTbGljZSAmJlxuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290JGpzY29tcCQwLCBsYW5lcywgMCwgITEpO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmICg2ID09PSBleGl0U3RhdHVzKVxuICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgIHJvb3QkanNjb21wJDAsXG4gICAgICAgIGxhbmVzLFxuICAgICAgICAwLFxuICAgICAgICAhd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzXG4gICAgICApO1xuICAgIGVsc2Uge1xuICAgICAgZm9yY2VTeW5jID0gcm9vdCRqc2NvbXAkMC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgICAgIGlmIChcbiAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCAmJlxuICAgICAgICAhaXNSZW5kZXJDb25zaXN0ZW50V2l0aEV4dGVybmFsU3RvcmVzKGZvcmNlU3luYylcbiAgICAgICkge1xuICAgICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCRqc2NvbXAkMCwgbGFuZXMsICExKTtcbiAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9ICExO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgyID09PSBleGl0U3RhdHVzKSB7XG4gICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgPSBsYW5lcztcbiAgICAgICAgaWYgKHJvb3QkanNjb21wJDAuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMgJiByZW5kZXJXYXNDb25jdXJyZW50KVxuICAgICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAwO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IHJvb3QkanNjb21wJDAucGVuZGluZ0xhbmVzICYgLTUzNjg3MDkxMyksXG4gICAgICAgICAgICAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICAgICAgICAgICAgMCAhPT0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICAgICAgICAgICAgICAgPyBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRcbiAgICAgICAgICAgICAgICA6IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCAmIDUzNjg3MDkxMlxuICAgICAgICAgICAgICAgICAgPyA1MzY4NzA5MTJcbiAgICAgICAgICAgICAgICAgIDogMCk7XG4gICAgICAgIGlmICgwICE9PSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpIHtcbiAgICAgICAgICBsYW5lcyA9IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICB2YXIgcm9vdCA9IHJvb3QkanNjb21wJDA7XG4gICAgICAgICAgICBleGl0U3RhdHVzID0gd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycztcbiAgICAgICAgICAgIHZhciB3YXNSb290RGVoeWRyYXRlZCA9IHJvb3QuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZDtcbiAgICAgICAgICAgIHdhc1Jvb3REZWh5ZHJhdGVkICYmXG4gICAgICAgICAgICAgIChwcmVwYXJlRnJlc2hTdGFjayhyb290LCBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpLmZsYWdzIHw9IDI1Nik7XG4gICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSByZW5kZXJSb290U3luYyhcbiAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LFxuICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICgyICE9PSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciAmJlxuICAgICAgICAgICAgICAgICF3YXNSb290RGVoeWRyYXRlZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByb290LmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzIHw9IHJlbmRlcldhc0NvbmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgfD1cbiAgICAgICAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgZXhpdFN0YXR1cyA9IDQ7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnM7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gZXhpdFN0YXR1cztcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcmVuZGVyV2FzQ29uY3VycmVudCAmJlxuICAgICAgICAgICAgICAgIHF1ZXVlUmVjb3ZlcmFibGVFcnJvcnMocmVuZGVyV2FzQ29uY3VycmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleGl0U3RhdHVzID0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50ID0gITE7XG4gICAgICAgICAgaWYgKDIgIT09IGV4aXRTdGF0dXMpIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoMSA9PT0gZXhpdFN0YXR1cykge1xuICAgICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290JGpzY29tcCQwLCAwKTtcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCRqc2NvbXAkMCwgbGFuZXMsIDAsICEwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBhOiB7XG4gICAgICAgIHNob3VsZFRpbWVTbGljZSA9IHJvb3QkanNjb21wJDA7XG4gICAgICAgIHN3aXRjaCAoZXhpdFN0YXR1cykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDM0NSkpO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGlmICgobGFuZXMgJiA0MTk0MTc2KSA9PT0gbGFuZXMpIHtcbiAgICAgICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgICAgICAgc2hvdWxkVGltZVNsaWNlLFxuICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgICAgICAgICF3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3NcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gbnVsbDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzMjkpKTtcbiAgICAgICAgfVxuICAgICAgICBzaG91bGRUaW1lU2xpY2UuZmluaXNoZWRXb3JrID0gZm9yY2VTeW5jO1xuICAgICAgICBzaG91bGRUaW1lU2xpY2UuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGxhbmVzICYgNjI5MTQ1NjApID09PSBsYW5lcyAmJlxuICAgICAgICAgICgocmVuZGVyV2FzQ29uY3VycmVudCA9IGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgKyAzMDAgLSBub3coKSksXG4gICAgICAgICAgMTAgPCByZW5kZXJXYXNDb25jdXJyZW50KVxuICAgICAgICApIHtcbiAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZSxcbiAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAhd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoMCAhPT0gZ2V0TmV4dExhbmVzKHNob3VsZFRpbWVTbGljZSwgMCkpIGJyZWFrIGE7XG4gICAgICAgICAgc2hvdWxkVGltZVNsaWNlLnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoXG4gICAgICAgICAgICBjb21taXRSb290V2hlblJlYWR5LmJpbmQoXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZSxcbiAgICAgICAgICAgICAgZm9yY2VTeW5jLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkSW5jbHVkZVJlY3Vyc2l2ZVJlbmRlclVwZGF0ZSxcbiAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3MsXG4gICAgICAgICAgICAgIDIsXG4gICAgICAgICAgICAgIC0wLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgfVxuICAgICAgICBjb21taXRSb290V2hlblJlYWR5KFxuICAgICAgICAgIHNob3VsZFRpbWVTbGljZSxcbiAgICAgICAgICBmb3JjZVN5bmMsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRJbmNsdWRlUmVjdXJzaXZlUmVuZGVyVXBkYXRlLFxuICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3MsXG4gICAgICAgICAgMCxcbiAgICAgICAgICAtMCxcbiAgICAgICAgICAwXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICB9IHdoaWxlICgxKTtcbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QkanNjb21wJDApO1xufVxuZnVuY3Rpb24gcXVldWVSZWNvdmVyYWJsZUVycm9ycyhlcnJvcnMpIHtcbiAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnNcbiAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IGVycm9ycylcbiAgICA6IHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLnB1c2guYXBwbHkoXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgICBlcnJvcnNcbiAgICAgICk7XG59XG5mdW5jdGlvbiBjb21taXRSb290V2hlblJlYWR5KFxuICByb290LFxuICBmaW5pc2hlZFdvcmssXG4gIHJlY292ZXJhYmxlRXJyb3JzLFxuICB0cmFuc2l0aW9ucyxcbiAgZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlLFxuICBsYW5lcyxcbiAgc3Bhd25lZExhbmUsXG4gIHVwZGF0ZWRMYW5lcyxcbiAgc3VzcGVuZGVkUmV0cnlMYW5lcyxcbiAgZGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzLFxuICBzdXNwZW5kZWRDb21taXRSZWFzb24sXG4gIGNvbXBsZXRlZFJlbmRlclN0YXJ0VGltZSxcbiAgY29tcGxldGVkUmVuZGVyRW5kVGltZVxuKSB7XG4gIHZhciBzdWJ0cmVlRmxhZ3MgPSBmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzO1xuICBpZiAoc3VidHJlZUZsYWdzICYgODE5MiB8fCAxNjc4NTQwOCA9PT0gKHN1YnRyZWVGbGFncyAmIDE2Nzg1NDA4KSlcbiAgICBpZiAoXG4gICAgICAoKHN1c3BlbmRlZFN0YXRlID0geyBzdHlsZXNoZWV0czogbnVsbCwgY291bnQ6IDAsIHVuc3VzcGVuZDogbm9vcCB9KSxcbiAgICAgIGFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXRPbkZpYmVyKGZpbmlzaGVkV29yayksXG4gICAgICAoZmluaXNoZWRXb3JrID0gd2FpdEZvckNvbW1pdFRvQmVSZWFkeSgpKSxcbiAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yaylcbiAgICApIHtcbiAgICAgIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IGZpbmlzaGVkV29yayhcbiAgICAgICAgY29tbWl0Um9vdC5iaW5kKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgcm9vdCxcbiAgICAgICAgICByZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICB0cmFuc2l0aW9ucyxcbiAgICAgICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICAgICAgc3Bhd25lZExhbmUsXG4gICAgICAgICAgdXBkYXRlZExhbmVzLFxuICAgICAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXMsXG4gICAgICAgICAgMSxcbiAgICAgICAgICBjb21wbGV0ZWRSZW5kZXJTdGFydFRpbWUsXG4gICAgICAgICAgY29tcGxldGVkUmVuZGVyRW5kVGltZVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgbGFuZXMsIHNwYXduZWRMYW5lLCAhZGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIGNvbW1pdFJvb3QoXG4gICAgcm9vdCxcbiAgICByZWNvdmVyYWJsZUVycm9ycyxcbiAgICB0cmFuc2l0aW9ucyxcbiAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgc3Bhd25lZExhbmUsXG4gICAgdXBkYXRlZExhbmVzLFxuICAgIHN1c3BlbmRlZFJldHJ5TGFuZXMsXG4gICAgc3VzcGVuZGVkQ29tbWl0UmVhc29uLFxuICAgIGNvbXBsZXRlZFJlbmRlclN0YXJ0VGltZSxcbiAgICBjb21wbGV0ZWRSZW5kZXJFbmRUaW1lXG4gICk7XG59XG5mdW5jdGlvbiBpc1JlbmRlckNvbnNpc3RlbnRXaXRoRXh0ZXJuYWxTdG9yZXMoZmluaXNoZWRXb3JrKSB7XG4gIGZvciAodmFyIG5vZGUgPSBmaW5pc2hlZFdvcms7IDsgKSB7XG4gICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICAgIGlmIChcbiAgICAgICgwID09PSB0YWcgfHwgMTEgPT09IHRhZyB8fCAxNSA9PT0gdGFnKSAmJlxuICAgICAgbm9kZS5mbGFncyAmIDE2Mzg0ICYmXG4gICAgICAoKHRhZyA9IG5vZGUudXBkYXRlUXVldWUpLFxuICAgICAgbnVsbCAhPT0gdGFnICYmICgodGFnID0gdGFnLnN0b3JlcyksIG51bGwgIT09IHRhZykpXG4gICAgKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoZWNrID0gdGFnW2ldLFxuICAgICAgICAgIGdldFNuYXBzaG90ID0gY2hlY2suZ2V0U25hcHNob3Q7XG4gICAgICAgIGNoZWNrID0gY2hlY2sudmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFvYmplY3RJcyhnZXRTbmFwc2hvdCgpLCBjaGVjaykpIHJldHVybiAhMTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB0YWcgPSBub2RlLmNoaWxkO1xuICAgIGlmIChub2RlLnN1YnRyZWVGbGFncyAmIDE2Mzg0ICYmIG51bGwgIT09IHRhZylcbiAgICAgICh0YWcucmV0dXJuID0gbm9kZSksIChub2RlID0gdGFnKTtcbiAgICBlbHNlIHtcbiAgICAgIGlmIChub2RlID09PSBmaW5pc2hlZFdvcmspIGJyZWFrO1xuICAgICAgZm9yICg7IG51bGwgPT09IG5vZGUuc2libGluZzsgKSB7XG4gICAgICAgIGlmIChudWxsID09PSBub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSByZXR1cm4gITA7XG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9XG4gIHJldHVybiAhMDtcbn1cbmZ1bmN0aW9uIG1hcmtSb290U3VzcGVuZGVkKFxuICByb290LFxuICBzdXNwZW5kZWRMYW5lcyxcbiAgc3Bhd25lZExhbmUsXG4gIGRpZEF0dGVtcHRFbnRpcmVUcmVlXG4pIHtcbiAgc3VzcGVuZGVkTGFuZXMgJj0gfndvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzO1xuICBzdXNwZW5kZWRMYW5lcyAmPSB+d29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXM7XG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgfD0gc3VzcGVuZGVkTGFuZXM7XG4gIHJvb3QucGluZ2VkTGFuZXMgJj0gfnN1c3BlbmRlZExhbmVzO1xuICBkaWRBdHRlbXB0RW50aXJlVHJlZSAmJiAocm9vdC53YXJtTGFuZXMgfD0gc3VzcGVuZGVkTGFuZXMpO1xuICBkaWRBdHRlbXB0RW50aXJlVHJlZSA9IHJvb3QuZXhwaXJhdGlvblRpbWVzO1xuICBmb3IgKHZhciBsYW5lcyA9IHN1c3BlbmRlZExhbmVzOyAwIDwgbGFuZXM7ICkge1xuICAgIHZhciBpbmRleCQ2ID0gMzEgLSBjbHozMihsYW5lcyksXG4gICAgICBsYW5lID0gMSA8PCBpbmRleCQ2O1xuICAgIGRpZEF0dGVtcHRFbnRpcmVUcmVlW2luZGV4JDZdID0gLTE7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbiAgMCAhPT0gc3Bhd25lZExhbmUgJiZcbiAgICBtYXJrU3Bhd25lZERlZmVycmVkTGFuZShyb290LCBzcGF3bmVkTGFuZSwgc3VzcGVuZGVkTGFuZXMpO1xufVxuZnVuY3Rpb24gZmx1c2hTeW5jV29yayQxKCkge1xuICByZXR1cm4gMCA9PT0gKGV4ZWN1dGlvbkNvbnRleHQgJiA2KVxuICAgID8gKGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKDAsICExKSwgITEpXG4gICAgOiAhMDtcbn1cbmZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpIHtcbiAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgaWYgKDAgPT09IHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uKVxuICAgICAgdmFyIGludGVycnVwdGVkV29yayA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICBlbHNlXG4gICAgICAoaW50ZXJydXB0ZWRXb3JrID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAobGFzdENvbnRleHREZXBlbmRlbmN5ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsKSxcbiAgICAgICAgcmVzZXRIb29rc09uVW53aW5kKGludGVycnVwdGVkV29yayksXG4gICAgICAgICh0aGVuYWJsZVN0YXRlJDEgPSBudWxsKSxcbiAgICAgICAgKHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgPSAwKSxcbiAgICAgICAgKGludGVycnVwdGVkV29yayA9IHdvcmtJblByb2dyZXNzKTtcbiAgICBmb3IgKDsgbnVsbCAhPT0gaW50ZXJydXB0ZWRXb3JrOyApXG4gICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrLmFsdGVybmF0ZSwgaW50ZXJydXB0ZWRXb3JrKSxcbiAgICAgICAgKGludGVycnVwdGVkV29yayA9IGludGVycnVwdGVkV29yay5yZXR1cm4pO1xuICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpIHtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSAwO1xuICB2YXIgdGltZW91dEhhbmRsZSA9IHJvb3QudGltZW91dEhhbmRsZTtcbiAgLTEgIT09IHRpbWVvdXRIYW5kbGUgJiZcbiAgICAoKHJvb3QudGltZW91dEhhbmRsZSA9IC0xKSwgY2FuY2VsVGltZW91dCh0aW1lb3V0SGFuZGxlKSk7XG4gIHRpbWVvdXRIYW5kbGUgPSByb290LmNhbmNlbFBlbmRpbmdDb21taXQ7XG4gIG51bGwgIT09IHRpbWVvdXRIYW5kbGUgJiZcbiAgICAoKHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IG51bGwpLCB0aW1lb3V0SGFuZGxlKCkpO1xuICByZXNldFdvcmtJblByb2dyZXNzU3RhY2soKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgd29ya0luUHJvZ3Jlc3MgPSB0aW1lb3V0SGFuZGxlID0gY3JlYXRlV29ya0luUHJvZ3Jlc3Mocm9vdC5jdXJyZW50LCBudWxsKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBsYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSAwO1xuICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzID0gITE7XG4gIHdvcmtJblByb2dyZXNzUm9vdElzUHJlcmVuZGVyaW5nID0gY2hlY2tJZlJvb3RJc1ByZXJlbmRlcmluZyhyb290LCBsYW5lcyk7XG4gIHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciA9ICExO1xuICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMgPVxuICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lID1cbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9XG4gICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPVxuICAgIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9XG4gICAgICAwO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPVxuICAgIG51bGw7XG4gIHdvcmtJblByb2dyZXNzUm9vdERpZEluY2x1ZGVSZWN1cnNpdmVSZW5kZXJVcGRhdGUgPSAhMTtcbiAgMCAhPT0gKGxhbmVzICYgOCkgJiYgKGxhbmVzIHw9IGxhbmVzICYgMzIpO1xuICB2YXIgYWxsRW50YW5nbGVkTGFuZXMgPSByb290LmVudGFuZ2xlZExhbmVzO1xuICBpZiAoMCAhPT0gYWxsRW50YW5nbGVkTGFuZXMpXG4gICAgZm9yIChcbiAgICAgIHJvb3QgPSByb290LmVudGFuZ2xlbWVudHMsIGFsbEVudGFuZ2xlZExhbmVzICY9IGxhbmVzO1xuICAgICAgMCA8IGFsbEVudGFuZ2xlZExhbmVzO1xuXG4gICAgKSB7XG4gICAgICB2YXIgaW5kZXgkNCA9IDMxIC0gY2x6MzIoYWxsRW50YW5nbGVkTGFuZXMpLFxuICAgICAgICBsYW5lID0gMSA8PCBpbmRleCQ0O1xuICAgICAgbGFuZXMgfD0gcm9vdFtpbmRleCQ0XTtcbiAgICAgIGFsbEVudGFuZ2xlZExhbmVzICY9IH5sYW5lO1xuICAgIH1cbiAgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSBsYW5lcztcbiAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpO1xuICByZXR1cm4gdGltZW91dEhhbmRsZTtcbn1cbmZ1bmN0aW9uIGhhbmRsZVRocm93KHJvb3QsIHRocm93blZhbHVlKSB7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICB0aHJvd25WYWx1ZSA9PT0gU3VzcGVuc2VFeGNlcHRpb25cbiAgICA/ICgodGhyb3duVmFsdWUgPSBnZXRTdXNwZW5kZWRUaGVuYWJsZSgpKSxcbiAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IDMpKVxuICAgIDogdGhyb3duVmFsdWUgPT09IFN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvblxuICAgICAgPyAoKHRocm93blZhbHVlID0gZ2V0U3VzcGVuZGVkVGhlbmFibGUoKSksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IDQpKVxuICAgICAgOiAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPVxuICAgICAgICAgIHRocm93blZhbHVlID09PSBTZWxlY3RpdmVIeWRyYXRpb25FeGNlcHRpb25cbiAgICAgICAgICAgID8gOFxuICAgICAgICAgICAgOiBudWxsICE9PSB0aHJvd25WYWx1ZSAmJlxuICAgICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiB0aHJvd25WYWx1ZSAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHRocm93blZhbHVlLnRoZW5cbiAgICAgICAgICAgICAgPyA2XG4gICAgICAgICAgICAgIDogMSk7XG4gIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSB0aHJvd25WYWx1ZTtcbiAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3MgJiZcbiAgICAoKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSAxKSxcbiAgICBsb2dVbmNhdWdodEVycm9yKFxuICAgICAgcm9vdCxcbiAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHRocm93blZhbHVlLCByb290LmN1cnJlbnQpXG4gICAgKSk7XG59XG5mdW5jdGlvbiBwdXNoRGlzcGF0Y2hlcigpIHtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgcmV0dXJuIG51bGwgPT09IHByZXZEaXNwYXRjaGVyID8gQ29udGV4dE9ubHlEaXNwYXRjaGVyIDogcHJldkRpc3BhdGNoZXI7XG59XG5mdW5jdGlvbiBwdXNoQXN5bmNEaXNwYXRjaGVyKCkge1xuICB2YXIgcHJldkFzeW5jRGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkE7XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkEgPSBEZWZhdWx0QXN5bmNEaXNwYXRjaGVyO1xuICByZXR1cm4gcHJldkFzeW5jRGlzcGF0Y2hlcjtcbn1cbmZ1bmN0aW9uIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKSB7XG4gIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSA0O1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3MgfHxcbiAgICAoKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNDE5NDE3NikgIT09XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmJlxuICAgICAgbnVsbCAhPT0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudCkgfHxcbiAgICAod29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmcgPSAhMCk7XG4gICgwID09PSAod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzICYgMTM0MjE3NzI3KSAmJlxuICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyAmIDEzNDIxNzcyNykpIHx8XG4gICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290IHx8XG4gICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyxcbiAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgITFcbiAgICApO1xufVxuZnVuY3Rpb24gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMsIHNob3VsZFlpZWxkRm9yUHJlcmVuZGVyaW5nKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gMjtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKSxcbiAgICBwcmV2QXN5bmNEaXNwYXRjaGVyID0gcHVzaEFzeW5jRGlzcGF0Y2hlcigpO1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lcylcbiAgICAod29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGwpLCBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gIGxhbmVzID0gITE7XG4gIHZhciBleGl0U3RhdHVzID0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgYTogZG9cbiAgICB0cnkge1xuICAgICAgaWYgKDAgIT09IHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uICYmIG51bGwgIT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHZhciB1bml0T2ZXb3JrID0gd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgdGhyb3duVmFsdWUgPSB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlO1xuICAgICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uKSB7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCk7XG4gICAgICAgICAgICBleGl0U3RhdHVzID0gNjtcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBudWxsID09PSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50ICYmIChsYW5lcyA9ICEwKTtcbiAgICAgICAgICAgIHZhciByZWFzb24gPSB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbjtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gMDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCB1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSwgcmVhc29uKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgc2hvdWxkWWllbGRGb3JQcmVyZW5kZXJpbmcgJiZcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBleGl0U3RhdHVzID0gMDtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAocmVhc29uID0gd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pLFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSAwKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsKSxcbiAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCB1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSwgcmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd29ya0xvb3BTeW5jKCk7XG4gICAgICBleGl0U3RhdHVzID0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlJDE2NCkge1xuICAgICAgaGFuZGxlVGhyb3cocm9vdCwgdGhyb3duVmFsdWUkMTY0KTtcbiAgICB9XG4gIHdoaWxlICgxKTtcbiAgbGFuZXMgJiYgcm9vdC5zaGVsbFN1c3BlbmRDb3VudGVyKys7XG4gIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gbnVsbDtcbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkEgPSBwcmV2QXN5bmNEaXNwYXRjaGVyO1xuICBudWxsID09PSB3b3JrSW5Qcm9ncmVzcyAmJlxuICAgICgod29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbCksXG4gICAgKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gMCksXG4gICAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpKTtcbiAgcmV0dXJuIGV4aXRTdGF0dXM7XG59XG5mdW5jdGlvbiB3b3JrTG9vcFN5bmMoKSB7XG4gIGZvciAoOyBudWxsICE9PSB3b3JrSW5Qcm9ncmVzczsgKSBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG59XG5mdW5jdGlvbiByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcykge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IDI7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCksXG4gICAgcHJldkFzeW5jRGlzcGF0Y2hlciA9IHB1c2hBc3luY0Rpc3BhdGNoZXIoKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lc1xuICAgID8gKCh3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zID0gbnVsbCksXG4gICAgICAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IG5vdygpICsgNTAwKSxcbiAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKSlcbiAgICA6ICh3b3JrSW5Qcm9ncmVzc1Jvb3RJc1ByZXJlbmRlcmluZyA9IGNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmcoXG4gICAgICAgIHJvb3QsXG4gICAgICAgIGxhbmVzXG4gICAgICApKTtcbiAgYTogZG9cbiAgICB0cnkge1xuICAgICAgaWYgKDAgIT09IHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uICYmIG51bGwgIT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIGxhbmVzID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIHZhciB0aHJvd25WYWx1ZSA9IHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWU7XG4gICAgICAgIGI6IHN3aXRjaCAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IDA7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgbGFuZXMsIHRocm93blZhbHVlLCAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlUmVzb2x2ZWQodGhyb3duVmFsdWUpKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gMDtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgIHJlcGxheVN1c3BlbmRlZFVuaXRPZldvcmsobGFuZXMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhbmVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAyID09PSB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiAmJlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCA9PT0gcm9vdCAmJlxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IDcpO1xuICAgICAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhyb3duVmFsdWUudGhlbihsYW5lcywgbGFuZXMpO1xuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IDc7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gNTtcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgaXNUaGVuYWJsZVJlc29sdmVkKHRocm93blZhbHVlKVxuICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSAwKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGwpLFxuICAgICAgICAgICAgICAgIHJlcGxheVN1c3BlbmRlZFVuaXRPZldvcmsobGFuZXMpKVxuICAgICAgICAgICAgICA6ICgod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSAwKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGwpLFxuICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgbGFuZXMsIHRocm93blZhbHVlLCA3KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBudWxsO1xuICAgICAgICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgICAgICByZXNvdXJjZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgICB2YXIgaG9zdEZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgaWYgKHJlc291cmNlID8gcHJlbG9hZFJlc291cmNlKHJlc291cmNlKSA6IDEpIHtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gMDtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgdmFyIHNpYmxpbmcgPSBob3N0RmliZXIuc2libGluZztcbiAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBzaWJsaW5nKSB3b3JrSW5Qcm9ncmVzcyA9IHNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVybkZpYmVyID0gaG9zdEZpYmVyLnJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZVVuaXRPZldvcmsocmV0dXJuRmliZXIpKVxuICAgICAgICAgICAgICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzID0gbnVsbCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gMDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCBsYW5lcywgdGhyb3duVmFsdWUsIDUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSAwO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKHJvb3QsIGxhbmVzLCB0aHJvd25WYWx1ZSwgNik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzU3RhY2soKTtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSA2O1xuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg0NjIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd29ya0xvb3BDb25jdXJyZW50KCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSQxNjYpIHtcbiAgICAgIGhhbmRsZVRocm93KHJvb3QsIHRocm93blZhbHVlJDE2Nik7XG4gICAgfVxuICB3aGlsZSAoMSk7XG4gIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gbnVsbDtcbiAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICBSZWFjdFNoYXJlZEludGVybmFscy5BID0gcHJldkFzeW5jRGlzcGF0Y2hlcjtcbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBpZiAobnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MpIHJldHVybiAwO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IDA7XG4gIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG59XG5mdW5jdGlvbiB3b3JrTG9vcENvbmN1cnJlbnQoKSB7XG4gIGZvciAoOyBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcyAmJiAhc2hvdWxkWWllbGQoKTsgKVxuICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbn1cbmZ1bmN0aW9uIHBlcmZvcm1Vbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgdmFyIG5leHQgPSBiZWdpbldvcmsodW5pdE9mV29yay5hbHRlcm5hdGUsIHVuaXRPZldvcmssIGVudGFuZ2xlZFJlbmRlckxhbmVzKTtcbiAgdW5pdE9mV29yay5tZW1vaXplZFByb3BzID0gdW5pdE9mV29yay5wZW5kaW5nUHJvcHM7XG4gIG51bGwgPT09IG5leHQgPyBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yaykgOiAod29ya0luUHJvZ3Jlc3MgPSBuZXh0KTtcbn1cbmZ1bmN0aW9uIHJlcGxheVN1c3BlbmRlZFVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICB2YXIgbmV4dCA9IHVuaXRPZldvcms7XG4gIHZhciBjdXJyZW50ID0gbmV4dC5hbHRlcm5hdGU7XG4gIHN3aXRjaCAobmV4dC50YWcpIHtcbiAgICBjYXNlIDE1OlxuICAgIGNhc2UgMDpcbiAgICAgIG5leHQgPSByZXBsYXlGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgbmV4dCxcbiAgICAgICAgbmV4dC5wZW5kaW5nUHJvcHMsXG4gICAgICAgIG5leHQudHlwZSxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6XG4gICAgICBuZXh0ID0gcmVwbGF5RnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIG5leHQsXG4gICAgICAgIG5leHQucGVuZGluZ1Byb3BzLFxuICAgICAgICBuZXh0LnR5cGUucmVuZGVyLFxuICAgICAgICBuZXh0LnJlZixcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDU6XG4gICAgICByZXNldEhvb2tzT25VbndpbmQobmV4dCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHVud2luZEludGVycnVwdGVkV29yayhjdXJyZW50LCBuZXh0KSxcbiAgICAgICAgKG5leHQgPSB3b3JrSW5Qcm9ncmVzcyA9XG4gICAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzcyhuZXh0LCBlbnRhbmdsZWRSZW5kZXJMYW5lcykpLFxuICAgICAgICAobmV4dCA9IGJlZ2luV29yayhjdXJyZW50LCBuZXh0LCBlbnRhbmdsZWRSZW5kZXJMYW5lcykpO1xuICB9XG4gIHVuaXRPZldvcmsubWVtb2l6ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuICBudWxsID09PSBuZXh0ID8gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIDogKHdvcmtJblByb2dyZXNzID0gbmV4dCk7XG59XG5mdW5jdGlvbiB0aHJvd0FuZFVud2luZFdvcmtMb29wKFxuICByb290LFxuICB1bml0T2ZXb3JrLFxuICB0aHJvd25WYWx1ZSxcbiAgc3VzcGVuZGVkUmVhc29uXG4pIHtcbiAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xuICByZXNldEhvb2tzT25VbndpbmQodW5pdE9mV29yayk7XG4gIHRoZW5hYmxlU3RhdGUkMSA9IG51bGw7XG4gIHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgPSAwO1xuICB2YXIgcmV0dXJuRmliZXIgPSB1bml0T2ZXb3JrLnJldHVybjtcbiAgdHJ5IHtcbiAgICBpZiAoXG4gICAgICB0aHJvd0V4Y2VwdGlvbihcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIHVuaXRPZldvcmssXG4gICAgICAgIHRocm93blZhbHVlLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgKVxuICAgICkge1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IDE7XG4gICAgICBsb2dVbmNhdWdodEVycm9yKFxuICAgICAgICByb290LFxuICAgICAgICBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih0aHJvd25WYWx1ZSwgcm9vdC5jdXJyZW50KVxuICAgICAgKTtcbiAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKG51bGwgIT09IHJldHVybkZpYmVyKSB0aHJvdyAoKHdvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXIpLCBlcnJvcik7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IDE7XG4gICAgbG9nVW5jYXVnaHRFcnJvcihcbiAgICAgIHJvb3QsXG4gICAgICBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih0aHJvd25WYWx1ZSwgcm9vdC5jdXJyZW50KVxuICAgICk7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodW5pdE9mV29yay5mbGFncyAmIDMyNzY4KSB7XG4gICAgaWYgKGlzSHlkcmF0aW5nIHx8IDEgPT09IHN1c3BlbmRlZFJlYXNvbikgcm9vdCA9ICEwO1xuICAgIGVsc2UgaWYgKFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmcgfHxcbiAgICAgIDAgIT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIDUzNjg3MDkxMilcbiAgICApXG4gICAgICByb290ID0gITE7XG4gICAgZWxzZSBpZiAoXG4gICAgICAoKHdvcmtJblByb2dyZXNzUm9vdERpZFNraXBTdXNwZW5kZWRTaWJsaW5ncyA9IHJvb3QgPSAhMCksXG4gICAgICAyID09PSBzdXNwZW5kZWRSZWFzb24gfHwgMyA9PT0gc3VzcGVuZGVkUmVhc29uIHx8IDYgPT09IHN1c3BlbmRlZFJlYXNvbilcbiAgICApXG4gICAgICAoc3VzcGVuZGVkUmVhc29uID0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudCksXG4gICAgICAgIG51bGwgIT09IHN1c3BlbmRlZFJlYXNvbiAmJlxuICAgICAgICAgIDEzID09PSBzdXNwZW5kZWRSZWFzb24udGFnICYmXG4gICAgICAgICAgKHN1c3BlbmRlZFJlYXNvbi5mbGFncyB8PSAxNjM4NCk7XG4gICAgdW53aW5kVW5pdE9mV29yayh1bml0T2ZXb3JrLCByb290KTtcbiAgfSBlbHNlIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbn1cbmZ1bmN0aW9uIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIHZhciBjb21wbGV0ZWRXb3JrID0gdW5pdE9mV29yaztcbiAgZG8ge1xuICAgIGlmICgwICE9PSAoY29tcGxldGVkV29yay5mbGFncyAmIDMyNzY4KSkge1xuICAgICAgdW53aW5kVW5pdE9mV29yayhcbiAgICAgICAgY29tcGxldGVkV29yayxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB1bml0T2ZXb3JrID0gY29tcGxldGVkV29yay5yZXR1cm47XG4gICAgdmFyIG5leHQgPSBjb21wbGV0ZVdvcmsoXG4gICAgICBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgIGNvbXBsZXRlZFdvcmssXG4gICAgICBlbnRhbmdsZWRSZW5kZXJMYW5lc1xuICAgICk7XG4gICAgaWYgKG51bGwgIT09IG5leHQpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzID0gbmV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29tcGxldGVkV29yayA9IGNvbXBsZXRlZFdvcmsuc2libGluZztcbiAgICBpZiAobnVsbCAhPT0gY29tcGxldGVkV29yaykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IGNvbXBsZXRlZFdvcmsgPSB1bml0T2ZXb3JrO1xuICB9IHdoaWxlIChudWxsICE9PSBjb21wbGV0ZWRXb3JrKTtcbiAgMCA9PT0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAmJiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IDUpO1xufVxuZnVuY3Rpb24gdW53aW5kVW5pdE9mV29yayh1bml0T2ZXb3JrLCBza2lwU2libGluZ3MpIHtcbiAgZG8ge1xuICAgIHZhciBuZXh0ID0gdW53aW5kV29yayh1bml0T2ZXb3JrLmFsdGVybmF0ZSwgdW5pdE9mV29yayk7XG4gICAgaWYgKG51bGwgIT09IG5leHQpIHtcbiAgICAgIG5leHQuZmxhZ3MgJj0gMzI3Njc7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG5leHQgPSB1bml0T2ZXb3JrLnJldHVybjtcbiAgICBudWxsICE9PSBuZXh0ICYmXG4gICAgICAoKG5leHQuZmxhZ3MgfD0gMzI3NjgpLCAobmV4dC5zdWJ0cmVlRmxhZ3MgPSAwKSwgKG5leHQuZGVsZXRpb25zID0gbnVsbCkpO1xuICAgIGlmIChcbiAgICAgICFza2lwU2libGluZ3MgJiZcbiAgICAgICgodW5pdE9mV29yayA9IHVuaXRPZldvcmsuc2libGluZyksIG51bGwgIT09IHVuaXRPZldvcmspXG4gICAgKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVuaXRPZldvcms7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdvcmtJblByb2dyZXNzID0gdW5pdE9mV29yayA9IG5leHQ7XG4gIH0gd2hpbGUgKG51bGwgIT09IHVuaXRPZldvcmspO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gNjtcbiAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xufVxuZnVuY3Rpb24gY29tbWl0Um9vdChcbiAgcm9vdCxcbiAgcmVjb3ZlcmFibGVFcnJvcnMsXG4gIHRyYW5zaXRpb25zLFxuICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gIHNwYXduZWRMYW5lLFxuICB1cGRhdGVkTGFuZXMsXG4gIHN1c3BlbmRlZFJldHJ5TGFuZXMsXG4gIHN1c3BlbmRlZENvbW1pdFJlYXNvbixcbiAgY29tcGxldGVkUmVuZGVyU3RhcnRUaW1lLFxuICBjb21wbGV0ZWRSZW5kZXJFbmRUaW1lXG4pIHtcbiAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCxcbiAgICBwcmV2aW91c1VwZGF0ZUxhbmVQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gIHRyeSB7XG4gICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSAyKSxcbiAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbCksXG4gICAgICBjb21taXRSb290SW1wbChcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgIHRyYW5zaXRpb25zLFxuICAgICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICAgIHByZXZpb3VzVXBkYXRlTGFuZVByaW9yaXR5LFxuICAgICAgICBzcGF3bmVkTGFuZSxcbiAgICAgICAgdXBkYXRlZExhbmVzLFxuICAgICAgICBzdXNwZW5kZWRSZXRyeUxhbmVzLFxuICAgICAgICBzdXNwZW5kZWRDb21taXRSZWFzb24sXG4gICAgICAgIGNvbXBsZXRlZFJlbmRlclN0YXJ0VGltZSxcbiAgICAgICAgY29tcGxldGVkUmVuZGVyRW5kVGltZVxuICAgICAgKTtcbiAgfSBmaW5hbGx5IHtcbiAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHByZXZUcmFuc2l0aW9uKSxcbiAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJldmlvdXNVcGRhdGVMYW5lUHJpb3JpdHkpO1xuICB9XG59XG5mdW5jdGlvbiBjb21taXRSb290SW1wbChcbiAgcm9vdCxcbiAgcmVjb3ZlcmFibGVFcnJvcnMsXG4gIHRyYW5zaXRpb25zLFxuICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gIHJlbmRlclByaW9yaXR5TGV2ZWwsXG4gIHNwYXduZWRMYW5lLFxuICB1cGRhdGVkTGFuZXMsXG4gIHN1c3BlbmRlZFJldHJ5TGFuZXNcbikge1xuICBkbyBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIHdoaWxlIChudWxsICE9PSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyk7XG4gIGlmICgwICE9PSAoZXhlY3V0aW9uQ29udGV4dCAmIDYpKSB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMyNykpO1xuICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5maW5pc2hlZFdvcms7XG4gIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZSA9IHJvb3QuZmluaXNoZWRMYW5lcztcbiAgaWYgKG51bGwgPT09IGZpbmlzaGVkV29yaykgcmV0dXJuIG51bGw7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gMDtcbiAgaWYgKGZpbmlzaGVkV29yayA9PT0gcm9vdC5jdXJyZW50KSB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE3NykpO1xuICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IDA7XG4gIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IG51bGw7XG4gIHZhciByZW1haW5pbmdMYW5lcyA9IGZpbmlzaGVkV29yay5sYW5lcyB8IGZpbmlzaGVkV29yay5jaGlsZExhbmVzO1xuICByZW1haW5pbmdMYW5lcyB8PSBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXM7XG4gIG1hcmtSb290RmluaXNoZWQoXG4gICAgcm9vdCxcbiAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgcmVtYWluaW5nTGFuZXMsXG4gICAgc3Bhd25lZExhbmUsXG4gICAgdXBkYXRlZExhbmVzLFxuICAgIHN1c3BlbmRlZFJldHJ5TGFuZXNcbiAgKTtcbiAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmXG4gICAgKCh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGwpLFxuICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IDApKTtcbiAgKDAgPT09IChmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzICYgMTAyNTYpICYmXG4gICAgMCA9PT0gKGZpbmlzaGVkV29yay5mbGFncyAmIDEwMjU2KSkgfHxcbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyB8fFxuICAgICgocm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSAhMCksXG4gICAgKHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbWFpbmluZ0xhbmVzID0gcmVtYWluaW5nTGFuZXMpLFxuICAgIChwZW5kaW5nUGFzc2l2ZVRyYW5zaXRpb25zID0gdHJhbnNpdGlvbnMpLFxuICAgIHNjaGVkdWxlQ2FsbGJhY2skMShOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCEwKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pKTtcbiAgdHJhbnNpdGlvbnMgPSAwICE9PSAoZmluaXNoZWRXb3JrLmZsYWdzICYgMTU5OTApO1xuICAwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDE1OTkwKSB8fCB0cmFuc2l0aW9uc1xuICAgID8gKCh0cmFuc2l0aW9ucyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQpLFxuICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBudWxsKSxcbiAgICAgIChzcGF3bmVkTGFuZSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnApLFxuICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSAyKSxcbiAgICAgICh1cGRhdGVkTGFuZXMgPSBleGVjdXRpb25Db250ZXh0KSxcbiAgICAgIChleGVjdXRpb25Db250ZXh0IHw9IDQpLFxuICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayksXG4gICAgICBjb21taXRNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKGZpbmlzaGVkV29yaywgcm9vdCksXG4gICAgICByZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbkluZm9ybWF0aW9uLCByb290LmNvbnRhaW5lckluZm8pLFxuICAgICAgKF9lbmFibGVkID0gISFldmVudHNFbmFibGVkKSxcbiAgICAgIChzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IGV2ZW50c0VuYWJsZWQgPSBudWxsKSxcbiAgICAgIChyb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcmspLFxuICAgICAgY29tbWl0TGF5b3V0RWZmZWN0T25GaWJlcihyb290LCBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLCBmaW5pc2hlZFdvcmspLFxuICAgICAgcmVxdWVzdFBhaW50KCksXG4gICAgICAoZXhlY3V0aW9uQ29udGV4dCA9IHVwZGF0ZWRMYW5lcyksXG4gICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHNwYXduZWRMYW5lKSxcbiAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gdHJhbnNpdGlvbnMpKVxuICAgIDogKHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yayk7XG4gIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzXG4gICAgPyAoKHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gITEpLFxuICAgICAgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gcm9vdCksXG4gICAgICAocGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUpKVxuICAgIDogcmVsZWFzZVJvb3RQb29sZWRDYWNoZShyb290LCByZW1haW5pbmdMYW5lcyk7XG4gIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIDAgPT09IHJlbWFpbmluZ0xhbmVzICYmIChsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGwpO1xuICBvbkNvbW1pdFJvb3QoZmluaXNoZWRXb3JrLnN0YXRlTm9kZSwgcmVuZGVyUHJpb3JpdHlMZXZlbCk7XG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgaWYgKG51bGwgIT09IHJlY292ZXJhYmxlRXJyb3JzKVxuICAgIGZvciAoXG4gICAgICByZW5kZXJQcmlvcml0eUxldmVsID0gcm9vdC5vblJlY292ZXJhYmxlRXJyb3IsIGZpbmlzaGVkV29yayA9IDA7XG4gICAgICBmaW5pc2hlZFdvcmsgPCByZWNvdmVyYWJsZUVycm9ycy5sZW5ndGg7XG4gICAgICBmaW5pc2hlZFdvcmsrK1xuICAgIClcbiAgICAgIChyZW1haW5pbmdMYW5lcyA9IHJlY292ZXJhYmxlRXJyb3JzW2ZpbmlzaGVkV29ya10pLFxuICAgICAgICByZW5kZXJQcmlvcml0eUxldmVsKHJlbWFpbmluZ0xhbmVzLnZhbHVlLCB7XG4gICAgICAgICAgY29tcG9uZW50U3RhY2s6IHJlbWFpbmluZ0xhbmVzLnN0YWNrXG4gICAgICAgIH0pO1xuICAwICE9PSAocGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgJiAzKSAmJiBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIDAgIT09IChkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUgJiA0MTk0MjE4KSAmJiAwICE9PSAocmVtYWluaW5nTGFuZXMgJiA0MilcbiAgICA/IHJvb3QgPT09IHJvb3RXaXRoTmVzdGVkVXBkYXRlc1xuICAgICAgPyBuZXN0ZWRVcGRhdGVDb3VudCsrXG4gICAgICA6ICgobmVzdGVkVXBkYXRlQ291bnQgPSAwKSwgKHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IHJvb3QpKVxuICAgIDogKG5lc3RlZFVwZGF0ZUNvdW50ID0gMCk7XG4gIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKDAsICExKTtcbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiByZWxlYXNlUm9vdFBvb2xlZENhY2hlKHJvb3QsIHJlbWFpbmluZ0xhbmVzKSB7XG4gIDAgPT09IChyb290LnBvb2xlZENhY2hlTGFuZXMgJj0gcmVtYWluaW5nTGFuZXMpICYmXG4gICAgKChyZW1haW5pbmdMYW5lcyA9IHJvb3QucG9vbGVkQ2FjaGUpLFxuICAgIG51bGwgIT0gcmVtYWluaW5nTGFuZXMgJiZcbiAgICAgICgocm9vdC5wb29sZWRDYWNoZSA9IG51bGwpLCByZWxlYXNlQ2FjaGUocmVtYWluaW5nTGFuZXMpKSk7XG59XG5mdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzKCkge1xuICBpZiAobnVsbCAhPT0gcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICB2YXIgcm9vdCQxNzAgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyxcbiAgICAgIHJlbWFpbmluZ0xhbmVzID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVtYWluaW5nTGFuZXM7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVtYWluaW5nTGFuZXMgPSAwO1xuICAgIHZhciByZW5kZXJQcmlvcml0eSA9IGxhbmVzVG9FdmVudFByaW9yaXR5KHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzKSxcbiAgICAgIHByZXZUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCxcbiAgICAgIHByZXZpb3VzUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgIHRyeSB7XG4gICAgICBSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gMzIgPiByZW5kZXJQcmlvcml0eSA/IDMyIDogcmVuZGVyUHJpb3JpdHk7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbDtcbiAgICAgIGlmIChudWxsID09PSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cylcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICExO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHJlbmRlclByaW9yaXR5ID0gcGVuZGluZ1Bhc3NpdmVUcmFuc2l0aW9ucztcbiAgICAgICAgcGVuZGluZ1Bhc3NpdmVUcmFuc2l0aW9ucyA9IG51bGw7XG4gICAgICAgIHZhciByb290ID0gcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMsXG4gICAgICAgICAgbGFuZXMgPSBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcztcbiAgICAgICAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsO1xuICAgICAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IDA7XG4gICAgICAgIGlmICgwICE9PSAoZXhlY3V0aW9uQ29udGV4dCAmIDYpKVxuICAgICAgICAgIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMzMxKSk7XG4gICAgICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gNDtcbiAgICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRPbkZpYmVyKHJvb3QuY3VycmVudCk7XG4gICAgICAgIGNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIocm9vdCwgcm9vdC5jdXJyZW50LCBsYW5lcywgcmVuZGVyUHJpb3JpdHkpO1xuICAgICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKDAsICExKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkSG9vay5vblBvc3RDb21taXRGaWJlclJvb3RcbiAgICAgICAgKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbmplY3RlZEhvb2sub25Qb3N0Q29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge31cbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITA7XG4gICAgICB9XG4gICAgICByZXR1cm4gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0O1xuICAgIH0gZmluYWxseSB7XG4gICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByZXZpb3VzUHJpb3JpdHkpLFxuICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHByZXZUcmFuc2l0aW9uKSxcbiAgICAgICAgcmVsZWFzZVJvb3RQb29sZWRDYWNoZShyb290JDE3MCwgcmVtYWluaW5nTGFuZXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gITE7XG59XG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChyb290RmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcikge1xuICBzb3VyY2VGaWJlciA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gIHNvdXJjZUZpYmVyID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHJvb3RGaWJlci5zdGF0ZU5vZGUsIHNvdXJjZUZpYmVyLCAyKTtcbiAgcm9vdEZpYmVyID0gZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIHNvdXJjZUZpYmVyLCAyKTtcbiAgbnVsbCAhPT0gcm9vdEZpYmVyICYmXG4gICAgKG1hcmtSb290VXBkYXRlZCQxKHJvb3RGaWJlciwgMiksIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290RmliZXIpKTtcbn1cbmZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKHNvdXJjZUZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcikge1xuICBpZiAoMyA9PT0gc291cmNlRmliZXIudGFnKVxuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHNvdXJjZUZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpO1xuICBlbHNlXG4gICAgZm9yICg7IG51bGwgIT09IG5lYXJlc3RNb3VudGVkQW5jZXN0b3I7ICkge1xuICAgICAgaWYgKDMgPT09IG5lYXJlc3RNb3VudGVkQW5jZXN0b3IudGFnKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KFxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgc291cmNlRmliZXIsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKDEgPT09IG5lYXJlc3RNb3VudGVkQW5jZXN0b3IudGFnKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IG5lYXJlc3RNb3VudGVkQW5jZXN0b3Iuc3RhdGVOb2RlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgdHlwZW9mIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgfHxcbiAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggJiZcbiAgICAgICAgICAgIChudWxsID09PSBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCB8fFxuICAgICAgICAgICAgICAhbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuaGFzKGluc3RhbmNlKSkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNvdXJjZUZpYmVyID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoZXJyb3IsIHNvdXJjZUZpYmVyKTtcbiAgICAgICAgICBlcnJvciA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoMik7XG4gICAgICAgICAgaW5zdGFuY2UgPSBlbnF1ZXVlVXBkYXRlKG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yLCAyKTtcbiAgICAgICAgICBudWxsICE9PSBpbnN0YW5jZSAmJlxuICAgICAgICAgICAgKGluaXRpYWxpemVDbGFzc0Vycm9yVXBkYXRlKFxuICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgIHNvdXJjZUZpYmVyXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbWFya1Jvb3RVcGRhdGVkJDEoaW5zdGFuY2UsIDIpLFxuICAgICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKGluc3RhbmNlKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IgPSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnJldHVybjtcbiAgICB9XG59XG5mdW5jdGlvbiBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIGxhbmVzKSB7XG4gIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcbiAgaWYgKG51bGwgPT09IHBpbmdDYWNoZSkge1xuICAgIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xuICAgIHZhciB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgfSBlbHNlXG4gICAgKHRocmVhZElEcyA9IHBpbmdDYWNoZS5nZXQod2FrZWFibGUpKSxcbiAgICAgIHZvaWQgMCA9PT0gdGhyZWFkSURzICYmXG4gICAgICAgICgodGhyZWFkSURzID0gbmV3IFNldCgpKSwgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKSk7XG4gIHRocmVhZElEcy5oYXMobGFuZXMpIHx8XG4gICAgKCh3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIgPSAhMCksXG4gICAgdGhyZWFkSURzLmFkZChsYW5lcyksXG4gICAgKHJvb3QgPSBwaW5nU3VzcGVuZGVkUm9vdC5iaW5kKG51bGwsIHJvb3QsIHdha2VhYmxlLCBsYW5lcykpLFxuICAgIHdha2VhYmxlLnRoZW4ocm9vdCwgcm9vdCkpO1xufVxuZnVuY3Rpb24gcGluZ1N1c3BlbmRlZFJvb3Qocm9vdCwgd2FrZWFibGUsIHBpbmdlZExhbmVzKSB7XG4gIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcbiAgbnVsbCAhPT0gcGluZ0NhY2hlICYmIHBpbmdDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICByb290LnBpbmdlZExhbmVzIHw9IHJvb3Quc3VzcGVuZGVkTGFuZXMgJiBwaW5nZWRMYW5lcztcbiAgcm9vdC53YXJtTGFuZXMgJj0gfnBpbmdlZExhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPT09IHJvb3QgJiZcbiAgICAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiBwaW5nZWRMYW5lcykgPT09IHBpbmdlZExhbmVzICYmXG4gICAgKDQgPT09IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgfHxcbiAgICAoMyA9PT0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAmJlxuICAgICAgKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNjI5MTQ1NjApID09PVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmJlxuICAgICAgMzAwID4gbm93KCkgLSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lKVxuICAgICAgPyAwID09PSAoZXhlY3V0aW9uQ29udGV4dCAmIDIpICYmIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIDApXG4gICAgICA6ICh3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyB8PSBwaW5nZWRMYW5lcyksXG4gICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmJlxuICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lcyA9IDApKTtcbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xufVxuZnVuY3Rpb24gcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSkge1xuICAwID09PSByZXRyeUxhbmUgJiYgKHJldHJ5TGFuZSA9IGNsYWltTmV4dFJldHJ5TGFuZSgpKTtcbiAgYm91bmRhcnlGaWJlciA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xuICBudWxsICE9PSBib3VuZGFyeUZpYmVyICYmXG4gICAgKG1hcmtSb290VXBkYXRlZCQxKGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSksXG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKGJvdW5kYXJ5RmliZXIpKTtcbn1cbmZ1bmN0aW9uIHJldHJ5RGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkoYm91bmRhcnlGaWJlcikge1xuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGJvdW5kYXJ5RmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICByZXRyeUxhbmUgPSAwO1xuICBudWxsICE9PSBzdXNwZW5zZVN0YXRlICYmIChyZXRyeUxhbmUgPSBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSk7XG4gIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZVJldHJ5V2FrZWFibGUoYm91bmRhcnlGaWJlciwgd2FrZWFibGUpIHtcbiAgdmFyIHJldHJ5TGFuZSA9IDA7XG4gIHN3aXRjaCAoYm91bmRhcnlGaWJlci50YWcpIHtcbiAgICBjYXNlIDEzOlxuICAgICAgdmFyIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gYm91bmRhcnlGaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgbnVsbCAhPT0gc3VzcGVuc2VTdGF0ZSAmJiAocmV0cnlMYW5lID0gc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOTpcbiAgICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGUuX3JldHJ5Q2FjaGU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzMTQpKTtcbiAgfVxuICBudWxsICE9PSByZXRyeUNhY2hlICYmIHJldHJ5Q2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG59XG5mdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrJDEocHJpb3JpdHlMZXZlbCwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIHNjaGVkdWxlQ2FsbGJhY2skMyhwcmlvcml0eUxldmVsLCBjYWxsYmFjayk7XG59XG52YXIgZmlyc3RTY2hlZHVsZWRSb290ID0gbnVsbCxcbiAgbGFzdFNjaGVkdWxlZFJvb3QgPSBudWxsLFxuICBkaWRTY2hlZHVsZU1pY3JvdGFzayA9ICExLFxuICBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmsgPSAhMSxcbiAgaXNGbHVzaGluZ1dvcmsgPSAhMSxcbiAgY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgPSAwO1xuZnVuY3Rpb24gZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpIHtcbiAgcm9vdCAhPT0gbGFzdFNjaGVkdWxlZFJvb3QgJiZcbiAgICBudWxsID09PSByb290Lm5leHQgJiZcbiAgICAobnVsbCA9PT0gbGFzdFNjaGVkdWxlZFJvb3RcbiAgICAgID8gKGZpcnN0U2NoZWR1bGVkUm9vdCA9IGxhc3RTY2hlZHVsZWRSb290ID0gcm9vdClcbiAgICAgIDogKGxhc3RTY2hlZHVsZWRSb290ID0gbGFzdFNjaGVkdWxlZFJvb3QubmV4dCA9IHJvb3QpKTtcbiAgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID0gITA7XG4gIGRpZFNjaGVkdWxlTWljcm90YXNrIHx8XG4gICAgKChkaWRTY2hlZHVsZU1pY3JvdGFzayA9ICEwKSxcbiAgICBzY2hlZHVsZUltbWVkaWF0ZVRhc2socHJvY2Vzc1Jvb3RTY2hlZHVsZUluTWljcm90YXNrKSk7XG59XG5mdW5jdGlvbiBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbChzeW5jVHJhbnNpdGlvbkxhbmVzLCBvbmx5TGVnYWN5KSB7XG4gIGlmICghaXNGbHVzaGluZ1dvcmsgJiYgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrKSB7XG4gICAgaXNGbHVzaGluZ1dvcmsgPSAhMDtcbiAgICBkbyB7XG4gICAgICB2YXIgZGlkUGVyZm9ybVNvbWVXb3JrID0gITE7XG4gICAgICBmb3IgKHZhciByb290JDE3MiA9IGZpcnN0U2NoZWR1bGVkUm9vdDsgbnVsbCAhPT0gcm9vdCQxNzI7ICkge1xuICAgICAgICBpZiAoIW9ubHlMZWdhY3kpXG4gICAgICAgICAgaWYgKDAgIT09IHN5bmNUcmFuc2l0aW9uTGFuZXMpIHtcbiAgICAgICAgICAgIHZhciBwZW5kaW5nTGFuZXMgPSByb290JDE3Mi5wZW5kaW5nTGFuZXM7XG4gICAgICAgICAgICBpZiAoMCA9PT0gcGVuZGluZ0xhbmVzKSB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gMDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290JDE3Mi5zdXNwZW5kZWRMYW5lcyxcbiAgICAgICAgICAgICAgICBwaW5nZWRMYW5lcyA9IHJvb3QkMTcyLnBpbmdlZExhbmVzO1xuICAgICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPVxuICAgICAgICAgICAgICAgICgxIDw8ICgzMSAtIGNsejMyKDQyIHwgc3luY1RyYW5zaXRpb25MYW5lcykgKyAxKSkgLSAxO1xuICAgICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgJj1cbiAgICAgICAgICAgICAgICBwZW5kaW5nTGFuZXMgJiB+KHN1c3BlbmRlZExhbmVzICYgfnBpbmdlZExhbmVzKTtcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgJiAyMDEzMjY2NzdcbiAgICAgICAgICAgICAgICAgID8gKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCAmIDIwMTMyNjY3NykgfCAxXG4gICAgICAgICAgICAgICAgICA6IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdFxuICAgICAgICAgICAgICAgICAgICA/IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCB8IDJcbiAgICAgICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgMCAhPT0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ICYmXG4gICAgICAgICAgICAgICgoZGlkUGVyZm9ybVNvbWVXb3JrID0gITApLFxuICAgICAgICAgICAgICBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCQxNzIsIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCkpO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGdldE5leHRMYW5lcyhcbiAgICAgICAgICAgICAgICByb290JDE3MixcbiAgICAgICAgICAgICAgICByb290JDE3MiA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0IDogMFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgMCA9PT0gKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCAmIDMpIHx8XG4gICAgICAgICAgICAgICAgY2hlY2tJZlJvb3RJc1ByZXJlbmRlcmluZyhyb290JDE3MiwgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KSB8fFxuICAgICAgICAgICAgICAgICgoZGlkUGVyZm9ybVNvbWVXb3JrID0gITApLFxuICAgICAgICAgICAgICAgIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290JDE3MiwgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KSk7XG4gICAgICAgIHJvb3QkMTcyID0gcm9vdCQxNzIubmV4dDtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChkaWRQZXJmb3JtU29tZVdvcmspO1xuICAgIGlzRmx1c2hpbmdXb3JrID0gITE7XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzaygpIHtcbiAgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID0gZGlkU2NoZWR1bGVNaWNyb3Rhc2sgPSAhMTtcbiAgdmFyIHN5bmNUcmFuc2l0aW9uTGFuZXMgPSAwO1xuICAwICE9PSBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSAmJlxuICAgIChzaG91bGRBdHRlbXB0RWFnZXJUcmFuc2l0aW9uKCkgJiZcbiAgICAgIChzeW5jVHJhbnNpdGlvbkxhbmVzID0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUpLFxuICAgIChjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSA9IDApKTtcbiAgZm9yIChcbiAgICB2YXIgY3VycmVudFRpbWUgPSBub3coKSwgcHJldiA9IG51bGwsIHJvb3QgPSBmaXJzdFNjaGVkdWxlZFJvb3Q7XG4gICAgbnVsbCAhPT0gcm9vdDtcblxuICApIHtcbiAgICB2YXIgbmV4dCA9IHJvb3QubmV4dCxcbiAgICAgIG5leHRMYW5lcyA9IHNjaGVkdWxlVGFza0ZvclJvb3REdXJpbmdNaWNyb3Rhc2socm9vdCwgY3VycmVudFRpbWUpO1xuICAgIGlmICgwID09PSBuZXh0TGFuZXMpXG4gICAgICAocm9vdC5uZXh0ID0gbnVsbCksXG4gICAgICAgIG51bGwgPT09IHByZXYgPyAoZmlyc3RTY2hlZHVsZWRSb290ID0gbmV4dCkgOiAocHJldi5uZXh0ID0gbmV4dCksXG4gICAgICAgIG51bGwgPT09IG5leHQgJiYgKGxhc3RTY2hlZHVsZWRSb290ID0gcHJldik7XG4gICAgZWxzZSBpZiAoXG4gICAgICAoKHByZXYgPSByb290KSwgMCAhPT0gc3luY1RyYW5zaXRpb25MYW5lcyB8fCAwICE9PSAobmV4dExhbmVzICYgMykpXG4gICAgKVxuICAgICAgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID0gITA7XG4gICAgcm9vdCA9IG5leHQ7XG4gIH1cbiAgZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoc3luY1RyYW5zaXRpb25MYW5lcywgITEpO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayhyb290LCBjdXJyZW50VGltZSkge1xuICBmb3IgKFxuICAgIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXMsXG4gICAgICBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXMsXG4gICAgICBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lcyxcbiAgICAgIGxhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXMgJiAtNjI5MTQ1NjE7XG4gICAgMCA8IGxhbmVzO1xuXG4gICkge1xuICAgIHZhciBpbmRleCQ1ID0gMzEgLSBjbHozMihsYW5lcyksXG4gICAgICBsYW5lID0gMSA8PCBpbmRleCQ1LFxuICAgICAgZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZXNbaW5kZXgkNV07XG4gICAgaWYgKC0xID09PSBleHBpcmF0aW9uVGltZSkge1xuICAgICAgaWYgKDAgPT09IChsYW5lICYgc3VzcGVuZGVkTGFuZXMpIHx8IDAgIT09IChsYW5lICYgcGluZ2VkTGFuZXMpKVxuICAgICAgICBleHBpcmF0aW9uVGltZXNbaW5kZXgkNV0gPSBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpO1xuICAgIH0gZWxzZSBleHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZSAmJiAocm9vdC5leHBpcmVkTGFuZXMgfD0gbGFuZSk7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbiAgY3VycmVudFRpbWUgPSB3b3JrSW5Qcm9ncmVzc1Jvb3Q7XG4gIHN1c3BlbmRlZExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gIHN1c3BlbmRlZExhbmVzID0gZ2V0TmV4dExhbmVzKFxuICAgIHJvb3QsXG4gICAgcm9vdCA9PT0gY3VycmVudFRpbWUgPyBzdXNwZW5kZWRMYW5lcyA6IDBcbiAgKTtcbiAgcGluZ2VkTGFuZXMgPSByb290LmNhbGxiYWNrTm9kZTtcbiAgaWYgKFxuICAgIDAgPT09IHN1c3BlbmRlZExhbmVzIHx8XG4gICAgKHJvb3QgPT09IGN1cnJlbnRUaW1lICYmIDIgPT09IHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uKSB8fFxuICAgIG51bGwgIT09IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdFxuICApXG4gICAgcmV0dXJuIChcbiAgICAgIG51bGwgIT09IHBpbmdlZExhbmVzICYmXG4gICAgICAgIG51bGwgIT09IHBpbmdlZExhbmVzICYmXG4gICAgICAgIGNhbmNlbENhbGxiYWNrJDEocGluZ2VkTGFuZXMpLFxuICAgICAgKHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbCksXG4gICAgICAocm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMClcbiAgICApO1xuICBpZiAoXG4gICAgMCA9PT0gKHN1c3BlbmRlZExhbmVzICYgMykgfHxcbiAgICBjaGVja0lmUm9vdElzUHJlcmVuZGVyaW5nKHJvb3QsIHN1c3BlbmRlZExhbmVzKVxuICApIHtcbiAgICBjdXJyZW50VGltZSA9IHN1c3BlbmRlZExhbmVzICYgLXN1c3BlbmRlZExhbmVzO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gcm9vdC5jYWxsYmFja1ByaW9yaXR5KSByZXR1cm4gY3VycmVudFRpbWU7XG4gICAgbnVsbCAhPT0gcGluZ2VkTGFuZXMgJiYgY2FuY2VsQ2FsbGJhY2skMShwaW5nZWRMYW5lcyk7XG4gICAgc3dpdGNoIChsYW5lc1RvRXZlbnRQcmlvcml0eShzdXNwZW5kZWRMYW5lcykpIHtcbiAgICAgIGNhc2UgMjpcbiAgICAgIGNhc2UgODpcbiAgICAgICAgc3VzcGVuZGVkTGFuZXMgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDMyOlxuICAgICAgICBzdXNwZW5kZWRMYW5lcyA9IE5vcm1hbFByaW9yaXR5JDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgICAgIHN1c3BlbmRlZExhbmVzID0gSWRsZVByaW9yaXR5O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHN1c3BlbmRlZExhbmVzID0gTm9ybWFsUHJpb3JpdHkkMTtcbiAgICB9XG4gICAgcGluZ2VkTGFuZXMgPSBwZXJmb3JtV29ya09uUm9vdFZpYVNjaGVkdWxlclRhc2suYmluZChudWxsLCByb290KTtcbiAgICBzdXNwZW5kZWRMYW5lcyA9IHNjaGVkdWxlQ2FsbGJhY2skMyhzdXNwZW5kZWRMYW5lcywgcGluZ2VkTGFuZXMpO1xuICAgIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IGN1cnJlbnRUaW1lO1xuICAgIHJvb3QuY2FsbGJhY2tOb2RlID0gc3VzcGVuZGVkTGFuZXM7XG4gICAgcmV0dXJuIGN1cnJlbnRUaW1lO1xuICB9XG4gIG51bGwgIT09IHBpbmdlZExhbmVzICYmIG51bGwgIT09IHBpbmdlZExhbmVzICYmIGNhbmNlbENhbGxiYWNrJDEocGluZ2VkTGFuZXMpO1xuICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSAyO1xuICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gIHJldHVybiAyO1xufVxuZnVuY3Rpb24gcGVyZm9ybVdvcmtPblJvb3RWaWFTY2hlZHVsZXJUYXNrKHJvb3QsIGRpZFRpbWVvdXQpIHtcbiAgdmFyIG9yaWdpbmFsQ2FsbGJhY2tOb2RlID0gcm9vdC5jYWxsYmFja05vZGU7XG4gIGlmIChmbHVzaFBhc3NpdmVFZmZlY3RzKCkgJiYgcm9vdC5jYWxsYmFja05vZGUgIT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlKVxuICAgIHJldHVybiBudWxsO1xuICB2YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkanNjb21wJDAgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkanNjb21wJDAgPSBnZXROZXh0TGFuZXMoXG4gICAgcm9vdCxcbiAgICByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyRqc2NvbXAkMCA6IDBcbiAgKTtcbiAgaWYgKDAgPT09IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJGpzY29tcCQwKSByZXR1cm4gbnVsbDtcbiAgcGVyZm9ybVdvcmtPblJvb3Qocm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkanNjb21wJDAsIGRpZFRpbWVvdXQpO1xuICBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrKHJvb3QsIG5vdygpKTtcbiAgcmV0dXJuIG51bGwgIT0gcm9vdC5jYWxsYmFja05vZGUgJiYgcm9vdC5jYWxsYmFja05vZGUgPT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlXG4gICAgPyBwZXJmb3JtV29ya09uUm9vdFZpYVNjaGVkdWxlclRhc2suYmluZChudWxsLCByb290KVxuICAgIDogbnVsbDtcbn1cbmZ1bmN0aW9uIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290LCBsYW5lcykge1xuICBpZiAoZmx1c2hQYXNzaXZlRWZmZWN0cygpKSByZXR1cm4gbnVsbDtcbiAgcGVyZm9ybVdvcmtPblJvb3Qocm9vdCwgbGFuZXMsICEwKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlSW1tZWRpYXRlVGFzayhjYikge1xuICBzY2hlZHVsZU1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgMCAhPT0gKGV4ZWN1dGlvbkNvbnRleHQgJiA2KVxuICAgICAgPyBzY2hlZHVsZUNhbGxiYWNrJDMoSW1tZWRpYXRlUHJpb3JpdHksIGNiKVxuICAgICAgOiBjYigpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpIHtcbiAgMCA9PT0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgJiZcbiAgICAoY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgPSBjbGFpbU5leHRUcmFuc2l0aW9uTGFuZSgpKTtcbiAgcmV0dXJuIGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lO1xufVxuZnVuY3Rpb24gY29lcmNlRm9ybUFjdGlvblByb3AoYWN0aW9uUHJvcCkge1xuICByZXR1cm4gbnVsbCA9PSBhY3Rpb25Qcm9wIHx8XG4gICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIGFjdGlvblByb3AgfHxcbiAgICBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIGFjdGlvblByb3BcbiAgICA/IG51bGxcbiAgICA6IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGFjdGlvblByb3BcbiAgICAgID8gYWN0aW9uUHJvcFxuICAgICAgOiBzYW5pdGl6ZVVSTChcIlwiICsgYWN0aW9uUHJvcCk7XG59XG5mdW5jdGlvbiBjcmVhdGVGb3JtRGF0YVdpdGhTdWJtaXR0ZXIoZm9ybSwgc3VibWl0dGVyKSB7XG4gIHZhciB0ZW1wID0gc3VibWl0dGVyLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICB0ZW1wLm5hbWUgPSBzdWJtaXR0ZXIubmFtZTtcbiAgdGVtcC52YWx1ZSA9IHN1Ym1pdHRlci52YWx1ZTtcbiAgZm9ybS5pZCAmJiB0ZW1wLnNldEF0dHJpYnV0ZShcImZvcm1cIiwgZm9ybS5pZCk7XG4gIHN1Ym1pdHRlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZW1wLCBzdWJtaXR0ZXIpO1xuICBmb3JtID0gbmV3IEZvcm1EYXRhKGZvcm0pO1xuICB0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGVtcCk7XG4gIHJldHVybiBmb3JtO1xufVxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQxKFxuICBkaXNwYXRjaFF1ZXVlLFxuICBkb21FdmVudE5hbWUsXG4gIG1heWJlVGFyZ2V0SW5zdCxcbiAgbmF0aXZlRXZlbnQsXG4gIG5hdGl2ZUV2ZW50VGFyZ2V0XG4pIHtcbiAgaWYgKFxuICAgIFwic3VibWl0XCIgPT09IGRvbUV2ZW50TmFtZSAmJlxuICAgIG1heWJlVGFyZ2V0SW5zdCAmJlxuICAgIG1heWJlVGFyZ2V0SW5zdC5zdGF0ZU5vZGUgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICkge1xuICAgIHZhciBhY3Rpb24gPSBjb2VyY2VGb3JtQWN0aW9uUHJvcChcbiAgICAgICAgKG5hdGl2ZUV2ZW50VGFyZ2V0W2ludGVybmFsUHJvcHNLZXldIHx8IG51bGwpLmFjdGlvblxuICAgICAgKSxcbiAgICAgIHN1Ym1pdHRlciA9IG5hdGl2ZUV2ZW50LnN1Ym1pdHRlcjtcbiAgICBzdWJtaXR0ZXIgJiZcbiAgICAgICgoZG9tRXZlbnROYW1lID0gKGRvbUV2ZW50TmFtZSA9IHN1Ym1pdHRlcltpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsKVxuICAgICAgICA/IGNvZXJjZUZvcm1BY3Rpb25Qcm9wKGRvbUV2ZW50TmFtZS5mb3JtQWN0aW9uKVxuICAgICAgICA6IHN1Ym1pdHRlci5nZXRBdHRyaWJ1dGUoXCJmb3JtQWN0aW9uXCIpKSxcbiAgICAgIG51bGwgIT09IGRvbUV2ZW50TmFtZSAmJiAoKGFjdGlvbiA9IGRvbUV2ZW50TmFtZSksIChzdWJtaXR0ZXIgPSBudWxsKSkpO1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudChcbiAgICAgIFwiYWN0aW9uXCIsXG4gICAgICBcImFjdGlvblwiLFxuICAgICAgbnVsbCxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICApO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICAgIGxpc3RlbmVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICBpZiAoMCAhPT0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZm9ybURhdGEgPSBzdWJtaXR0ZXJcbiAgICAgICAgICAgICAgICAgID8gY3JlYXRlRm9ybURhdGFXaXRoU3VibWl0dGVyKG5hdGl2ZUV2ZW50VGFyZ2V0LCBzdWJtaXR0ZXIpXG4gICAgICAgICAgICAgICAgICA6IG5ldyBGb3JtRGF0YShuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICAgICAgICAgICAgc3RhcnRIb3N0VHJhbnNpdGlvbihcbiAgICAgICAgICAgICAgICAgIG1heWJlVGFyZ2V0SW5zdCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZzogITAsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGZvcm1EYXRhLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IG5hdGl2ZUV2ZW50VGFyZ2V0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgZm9ybURhdGFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYWN0aW9uICYmXG4gICAgICAgICAgICAgICAgKGV2ZW50LnByZXZlbnREZWZhdWx0KCksXG4gICAgICAgICAgICAgICAgKGZvcm1EYXRhID0gc3VibWl0dGVyXG4gICAgICAgICAgICAgICAgICA/IGNyZWF0ZUZvcm1EYXRhV2l0aFN1Ym1pdHRlcihuYXRpdmVFdmVudFRhcmdldCwgc3VibWl0dGVyKVxuICAgICAgICAgICAgICAgICAgOiBuZXcgRm9ybURhdGEobmF0aXZlRXZlbnRUYXJnZXQpKSxcbiAgICAgICAgICAgICAgICBzdGFydEhvc3RUcmFuc2l0aW9uKFxuICAgICAgICAgICAgICAgICAgbWF5YmVUYXJnZXRJbnN0LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogbmF0aXZlRXZlbnRUYXJnZXQubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGFjdGlvblxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIGZvcm1EYXRhXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjdXJyZW50VGFyZ2V0OiBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG4gIH1cbn1cbmZvciAoXG4gIHZhciBpJGpzY29tcCRpbmxpbmVfMTQzOSA9IDA7XG4gIGkkanNjb21wJGlubGluZV8xNDM5IDwgc2ltcGxlRXZlbnRQbHVnaW5FdmVudHMubGVuZ3RoO1xuICBpJGpzY29tcCRpbmxpbmVfMTQzOSsrXG4pIHtcbiAgdmFyIGV2ZW50TmFtZSRqc2NvbXAkaW5saW5lXzE0NDAgPVxuICAgICAgc2ltcGxlRXZlbnRQbHVnaW5FdmVudHNbaSRqc2NvbXAkaW5saW5lXzE0MzldLFxuICAgIGRvbUV2ZW50TmFtZSRqc2NvbXAkaW5saW5lXzE0NDEgPVxuICAgICAgZXZlbnROYW1lJGpzY29tcCRpbmxpbmVfMTQ0MC50b0xvd2VyQ2FzZSgpLFxuICAgIGNhcGl0YWxpemVkRXZlbnQkanNjb21wJGlubGluZV8xNDQyID1cbiAgICAgIGV2ZW50TmFtZSRqc2NvbXAkaW5saW5lXzE0NDBbMF0udG9VcHBlckNhc2UoKSArXG4gICAgICBldmVudE5hbWUkanNjb21wJGlubGluZV8xNDQwLnNsaWNlKDEpO1xuICByZWdpc3RlclNpbXBsZUV2ZW50KFxuICAgIGRvbUV2ZW50TmFtZSRqc2NvbXAkaW5saW5lXzE0NDEsXG4gICAgXCJvblwiICsgY2FwaXRhbGl6ZWRFdmVudCRqc2NvbXAkaW5saW5lXzE0NDJcbiAgKTtcbn1cbnJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX0VORCwgXCJvbkFuaW1hdGlvbkVuZFwiKTtcbnJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX0lURVJBVElPTiwgXCJvbkFuaW1hdGlvbkl0ZXJhdGlvblwiKTtcbnJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX1NUQVJULCBcIm9uQW5pbWF0aW9uU3RhcnRcIik7XG5yZWdpc3RlclNpbXBsZUV2ZW50KFwiZGJsY2xpY2tcIiwgXCJvbkRvdWJsZUNsaWNrXCIpO1xucmVnaXN0ZXJTaW1wbGVFdmVudChcImZvY3VzaW5cIiwgXCJvbkZvY3VzXCIpO1xucmVnaXN0ZXJTaW1wbGVFdmVudChcImZvY3Vzb3V0XCIsIFwib25CbHVyXCIpO1xucmVnaXN0ZXJTaW1wbGVFdmVudChUUkFOU0lUSU9OX1JVTiwgXCJvblRyYW5zaXRpb25SdW5cIik7XG5yZWdpc3RlclNpbXBsZUV2ZW50KFRSQU5TSVRJT05fU1RBUlQsIFwib25UcmFuc2l0aW9uU3RhcnRcIik7XG5yZWdpc3RlclNpbXBsZUV2ZW50KFRSQU5TSVRJT05fQ0FOQ0VMLCBcIm9uVHJhbnNpdGlvbkNhbmNlbFwiKTtcbnJlZ2lzdGVyU2ltcGxlRXZlbnQoVFJBTlNJVElPTl9FTkQsIFwib25UcmFuc2l0aW9uRW5kXCIpO1xucmVnaXN0ZXJEaXJlY3RFdmVudChcIm9uTW91c2VFbnRlclwiLCBbXCJtb3VzZW91dFwiLCBcIm1vdXNlb3ZlclwiXSk7XG5yZWdpc3RlckRpcmVjdEV2ZW50KFwib25Nb3VzZUxlYXZlXCIsIFtcIm1vdXNlb3V0XCIsIFwibW91c2VvdmVyXCJdKTtcbnJlZ2lzdGVyRGlyZWN0RXZlbnQoXCJvblBvaW50ZXJFbnRlclwiLCBbXCJwb2ludGVyb3V0XCIsIFwicG9pbnRlcm92ZXJcIl0pO1xucmVnaXN0ZXJEaXJlY3RFdmVudChcIm9uUG9pbnRlckxlYXZlXCIsIFtcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVyb3ZlclwiXSk7XG5yZWdpc3RlclR3b1BoYXNlRXZlbnQoXG4gIFwib25DaGFuZ2VcIixcbiAgXCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFwiIFwiKVxuKTtcbnJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgXCJvblNlbGVjdFwiLFxuICBcImZvY3Vzb3V0IGNvbnRleHRtZW51IGRyYWdlbmQgZm9jdXNpbiBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFxuICAgIFwiIFwiXG4gIClcbik7XG5yZWdpc3RlclR3b1BoYXNlRXZlbnQoXCJvbkJlZm9yZUlucHV0XCIsIFtcbiAgXCJjb21wb3NpdGlvbmVuZFwiLFxuICBcImtleXByZXNzXCIsXG4gIFwidGV4dElucHV0XCIsXG4gIFwicGFzdGVcIlxuXSk7XG5yZWdpc3RlclR3b1BoYXNlRXZlbnQoXG4gIFwib25Db21wb3NpdGlvbkVuZFwiLFxuICBcImNvbXBvc2l0aW9uZW5kIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpXG4pO1xucmVnaXN0ZXJUd29QaGFzZUV2ZW50KFxuICBcIm9uQ29tcG9zaXRpb25TdGFydFwiLFxuICBcImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIilcbik7XG5yZWdpc3RlclR3b1BoYXNlRXZlbnQoXG4gIFwib25Db21wb3NpdGlvblVwZGF0ZVwiLFxuICBcImNvbXBvc2l0aW9udXBkYXRlIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpXG4pO1xudmFyIG1lZGlhRXZlbnRUeXBlcyA9XG4gICAgXCJhYm9ydCBjYW5wbGF5IGNhbnBsYXl0aHJvdWdoIGR1cmF0aW9uY2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGxvYWRlZGRhdGEgbG9hZGVkbWV0YWRhdGEgbG9hZHN0YXJ0IHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1c3BlbmQgdGltZXVwZGF0ZSB2b2x1bWVjaGFuZ2Ugd2FpdGluZ1wiLnNwbGl0KFxuICAgICAgXCIgXCJcbiAgICApLFxuICBub25EZWxlZ2F0ZWRFdmVudHMgPSBuZXcgU2V0KFxuICAgIFwiYmVmb3JldG9nZ2xlIGNhbmNlbCBjbG9zZSBpbnZhbGlkIGxvYWQgc2Nyb2xsIHNjcm9sbGVuZCB0b2dnbGVcIlxuICAgICAgLnNwbGl0KFwiIFwiKVxuICAgICAgLmNvbmNhdChtZWRpYUV2ZW50VHlwZXMpXG4gICk7XG5mdW5jdGlvbiBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCBldmVudFN5c3RlbUZsYWdzKSB7XG4gIGV2ZW50U3lzdGVtRmxhZ3MgPSAwICE9PSAoZXZlbnRTeXN0ZW1GbGFncyAmIDQpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BhdGNoUXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX2Rpc3BhdGNoUXVldWUkaSA9IGRpc3BhdGNoUXVldWVbaV0sXG4gICAgICBldmVudCA9IF9kaXNwYXRjaFF1ZXVlJGkuZXZlbnQ7XG4gICAgX2Rpc3BhdGNoUXVldWUkaSA9IF9kaXNwYXRjaFF1ZXVlJGkubGlzdGVuZXJzO1xuICAgIGE6IHtcbiAgICAgIHZhciBwcmV2aW91c0luc3RhbmNlID0gdm9pZCAwO1xuICAgICAgaWYgKGV2ZW50U3lzdGVtRmxhZ3MpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIGkkanNjb21wJDAgPSBfZGlzcGF0Y2hRdWV1ZSRpLmxlbmd0aCAtIDE7XG4gICAgICAgICAgMCA8PSBpJGpzY29tcCQwO1xuICAgICAgICAgIGkkanNjb21wJDAtLVxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBfZGlzcGF0Y2hRdWV1ZSRpW2kkanNjb21wJDBdLFxuICAgICAgICAgICAgaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5pbnN0YW5jZSxcbiAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5jdXJyZW50VGFyZ2V0O1xuICAgICAgICAgIF9kaXNwYXRjaExpc3RlbmVycyRpID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkubGlzdGVuZXI7XG4gICAgICAgICAgaWYgKGluc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpXG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIHByZXZpb3VzSW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaTtcbiAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJldmlvdXNJbnN0YW5jZShldmVudCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlcG9ydEdsb2JhbEVycm9yKGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG4gICAgICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICB9XG4gICAgICBlbHNlXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgaSRqc2NvbXAkMCA9IDA7XG4gICAgICAgICAgaSRqc2NvbXAkMCA8IF9kaXNwYXRjaFF1ZXVlJGkubGVuZ3RoO1xuICAgICAgICAgIGkkanNjb21wJDArK1xuICAgICAgICApIHtcbiAgICAgICAgICBfZGlzcGF0Y2hMaXN0ZW5lcnMkaSA9IF9kaXNwYXRjaFF1ZXVlJGlbaSRqc2NvbXAkMF07XG4gICAgICAgICAgaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5pbnN0YW5jZTtcbiAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuY3VycmVudFRhcmdldDtcbiAgICAgICAgICBfZGlzcGF0Y2hMaXN0ZW5lcnMkaSA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmxpc3RlbmVyO1xuICAgICAgICAgIGlmIChpbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKVxuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICBwcmV2aW91c0luc3RhbmNlID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGk7XG4gICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQ7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByZXZpb3VzSW5zdGFuY2UoZXZlbnQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXBvcnRHbG9iYWxFcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuICAgICAgICAgIHByZXZpb3VzSW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEVsZW1lbnQpIHtcbiAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IHRhcmdldEVsZW1lbnRbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XTtcbiAgdm9pZCAwID09PSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgJiZcbiAgICAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gdGFyZ2V0RWxlbWVudFtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldID1cbiAgICAgIG5ldyBTZXQoKSk7XG4gIHZhciBsaXN0ZW5lclNldEtleSA9IGRvbUV2ZW50TmFtZSArIFwiX19idWJibGVcIjtcbiAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LmhhcyhsaXN0ZW5lclNldEtleSkgfHxcbiAgICAoYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0RWxlbWVudCwgZG9tRXZlbnROYW1lLCAyLCAhMSksXG4gICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LmFkZChsaXN0ZW5lclNldEtleSkpO1xufVxuZnVuY3Rpb24gbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIsIHRhcmdldCkge1xuICB2YXIgZXZlbnRTeXN0ZW1GbGFncyA9IDA7XG4gIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIgJiYgKGV2ZW50U3lzdGVtRmxhZ3MgfD0gNCk7XG4gIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKFxuICAgIHRhcmdldCxcbiAgICBkb21FdmVudE5hbWUsXG4gICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyXG4gICk7XG59XG52YXIgbGlzdGVuaW5nTWFya2VyID0gXCJfcmVhY3RMaXN0ZW5pbmdcIiArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xuZnVuY3Rpb24gbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgaWYgKCFyb290Q29udGFpbmVyRWxlbWVudFtsaXN0ZW5pbmdNYXJrZXJdKSB7XG4gICAgcm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSA9ICEwO1xuICAgIGFsbE5hdGl2ZUV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChkb21FdmVudE5hbWUpIHtcbiAgICAgIFwic2VsZWN0aW9uY2hhbmdlXCIgIT09IGRvbUV2ZW50TmFtZSAmJlxuICAgICAgICAobm9uRGVsZWdhdGVkRXZlbnRzLmhhcyhkb21FdmVudE5hbWUpIHx8XG4gICAgICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsICExLCByb290Q29udGFpbmVyRWxlbWVudCksXG4gICAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCAhMCwgcm9vdENvbnRhaW5lckVsZW1lbnQpKTtcbiAgICB9KTtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9XG4gICAgICA5ID09PSByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZVxuICAgICAgICA/IHJvb3RDb250YWluZXJFbGVtZW50XG4gICAgICAgIDogcm9vdENvbnRhaW5lckVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICBudWxsID09PSBvd25lckRvY3VtZW50IHx8XG4gICAgICBvd25lckRvY3VtZW50W2xpc3RlbmluZ01hcmtlcl0gfHxcbiAgICAgICgob3duZXJEb2N1bWVudFtsaXN0ZW5pbmdNYXJrZXJdID0gITApLFxuICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChcInNlbGVjdGlvbmNoYW5nZVwiLCAhMSwgb3duZXJEb2N1bWVudCkpO1xuICB9XG59XG5mdW5jdGlvbiBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcihcbiAgdGFyZ2V0Q29udGFpbmVyLFxuICBkb21FdmVudE5hbWUsXG4gIGV2ZW50U3lzdGVtRmxhZ3MsXG4gIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXJcbikge1xuICBzd2l0Y2ggKGdldEV2ZW50UHJpb3JpdHkoZG9tRXZlbnROYW1lKSkge1xuICAgIGNhc2UgMjpcbiAgICAgIHZhciBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaERpc2NyZXRlRXZlbnQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaENvbnRpbnVvdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaEV2ZW50O1xuICB9XG4gIGV2ZW50U3lzdGVtRmxhZ3MgPSBsaXN0ZW5lcldyYXBwZXIuYmluZChcbiAgICBudWxsLFxuICAgIGRvbUV2ZW50TmFtZSxcbiAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgIHRhcmdldENvbnRhaW5lclxuICApO1xuICBsaXN0ZW5lcldyYXBwZXIgPSB2b2lkIDA7XG4gICFwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCB8fFxuICAgIChcInRvdWNoc3RhcnRcIiAhPT0gZG9tRXZlbnROYW1lICYmXG4gICAgICBcInRvdWNobW92ZVwiICE9PSBkb21FdmVudE5hbWUgJiZcbiAgICAgIFwid2hlZWxcIiAhPT0gZG9tRXZlbnROYW1lKSB8fFxuICAgIChsaXN0ZW5lcldyYXBwZXIgPSAhMCk7XG4gIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXJcbiAgICA/IHZvaWQgMCAhPT0gbGlzdGVuZXJXcmFwcGVyXG4gICAgICA/IHRhcmdldENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywge1xuICAgICAgICAgIGNhcHR1cmU6ICEwLFxuICAgICAgICAgIHBhc3NpdmU6IGxpc3RlbmVyV3JhcHBlclxuICAgICAgICB9KVxuICAgICAgOiB0YXJnZXRDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsICEwKVxuICAgIDogdm9pZCAwICE9PSBsaXN0ZW5lcldyYXBwZXJcbiAgICAgID8gdGFyZ2V0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB7XG4gICAgICAgICAgcGFzc2l2ZTogbGlzdGVuZXJXcmFwcGVyXG4gICAgICAgIH0pXG4gICAgICA6IHRhcmdldENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgITEpO1xufVxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKFxuICBkb21FdmVudE5hbWUsXG4gIGV2ZW50U3lzdGVtRmxhZ3MsXG4gIG5hdGl2ZUV2ZW50LFxuICB0YXJnZXRJbnN0JGpzY29tcCQwLFxuICB0YXJnZXRDb250YWluZXJcbikge1xuICB2YXIgYW5jZXN0b3JJbnN0ID0gdGFyZ2V0SW5zdCRqc2NvbXAkMDtcbiAgaWYgKFxuICAgIDAgPT09IChldmVudFN5c3RlbUZsYWdzICYgMSkgJiZcbiAgICAwID09PSAoZXZlbnRTeXN0ZW1GbGFncyAmIDIpICYmXG4gICAgbnVsbCAhPT0gdGFyZ2V0SW5zdCRqc2NvbXAkMFxuICApXG4gICAgYTogZm9yICg7Oykge1xuICAgICAgaWYgKG51bGwgPT09IHRhcmdldEluc3QkanNjb21wJDApIHJldHVybjtcbiAgICAgIHZhciBub2RlVGFnID0gdGFyZ2V0SW5zdCRqc2NvbXAkMC50YWc7XG4gICAgICBpZiAoMyA9PT0gbm9kZVRhZyB8fCA0ID09PSBub2RlVGFnKSB7XG4gICAgICAgIHZhciBjb250YWluZXIgPSB0YXJnZXRJbnN0JGpzY29tcCQwLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY29udGFpbmVyID09PSB0YXJnZXRDb250YWluZXIgfHxcbiAgICAgICAgICAoOCA9PT0gY29udGFpbmVyLm5vZGVUeXBlICYmIGNvbnRhaW5lci5wYXJlbnROb2RlID09PSB0YXJnZXRDb250YWluZXIpXG4gICAgICAgIClcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgaWYgKDQgPT09IG5vZGVUYWcpXG4gICAgICAgICAgZm9yIChub2RlVGFnID0gdGFyZ2V0SW5zdCRqc2NvbXAkMC5yZXR1cm47IG51bGwgIT09IG5vZGVUYWc7ICkge1xuICAgICAgICAgICAgdmFyIGdyYW5kVGFnID0gbm9kZVRhZy50YWc7XG4gICAgICAgICAgICBpZiAoMyA9PT0gZ3JhbmRUYWcgfHwgNCA9PT0gZ3JhbmRUYWcpXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoKGdyYW5kVGFnID0gbm9kZVRhZy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksXG4gICAgICAgICAgICAgICAgZ3JhbmRUYWcgPT09IHRhcmdldENvbnRhaW5lciB8fFxuICAgICAgICAgICAgICAgICAgKDggPT09IGdyYW5kVGFnLm5vZGVUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgIGdyYW5kVGFnLnBhcmVudE5vZGUgPT09IHRhcmdldENvbnRhaW5lcikpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBub2RlVGFnID0gbm9kZVRhZy5yZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICBmb3IgKDsgbnVsbCAhPT0gY29udGFpbmVyOyApIHtcbiAgICAgICAgICBub2RlVGFnID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoY29udGFpbmVyKTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gbm9kZVRhZykgcmV0dXJuO1xuICAgICAgICAgIGdyYW5kVGFnID0gbm9kZVRhZy50YWc7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgNSA9PT0gZ3JhbmRUYWcgfHxcbiAgICAgICAgICAgIDYgPT09IGdyYW5kVGFnIHx8XG4gICAgICAgICAgICAyNiA9PT0gZ3JhbmRUYWcgfHxcbiAgICAgICAgICAgIDI3ID09PSBncmFuZFRhZ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGFyZ2V0SW5zdCRqc2NvbXAkMCA9IGFuY2VzdG9ySW5zdCA9IG5vZGVUYWc7XG4gICAgICAgICAgICBjb250aW51ZSBhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGFyZ2V0SW5zdCRqc2NvbXAkMCA9IHRhcmdldEluc3QkanNjb21wJDAucmV0dXJuO1xuICAgIH1cbiAgYmF0Y2hlZFVwZGF0ZXMkMShmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRhcmdldEluc3QgPSBhbmNlc3Rvckluc3QsXG4gICAgICBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSxcbiAgICAgIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgICBhOiB7XG4gICAgICB2YXIgcmVhY3ROYW1lID0gdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuZ2V0KGRvbUV2ZW50TmFtZSk7XG4gICAgICBpZiAodm9pZCAwICE9PSByZWFjdE5hbWUpIHtcbiAgICAgICAgdmFyIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0V2ZW50LFxuICAgICAgICAgIHJlYWN0RXZlbnRUeXBlID0gZG9tRXZlbnROYW1lO1xuICAgICAgICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJrZXlwcmVzc1wiOlxuICAgICAgICAgICAgaWYgKDAgPT09IGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpKSBicmVhayBhO1xuICAgICAgICAgIGNhc2UgXCJrZXlkb3duXCI6XG4gICAgICAgICAgY2FzZSBcImtleXVwXCI6XG4gICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcImZvY3VzaW5cIjpcbiAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlID0gXCJmb2N1c1wiO1xuICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJmb2N1c291dFwiOlxuICAgICAgICAgICAgcmVhY3RFdmVudFR5cGUgPSBcImJsdXJcIjtcbiAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiYmVmb3JlYmx1clwiOlxuICAgICAgICAgIGNhc2UgXCJhZnRlcmJsdXJcIjpcbiAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiY2xpY2tcIjpcbiAgICAgICAgICAgIGlmICgyID09PSBuYXRpdmVFdmVudC5idXR0b24pIGJyZWFrIGE7XG4gICAgICAgICAgY2FzZSBcImF1eGNsaWNrXCI6XG4gICAgICAgICAgY2FzZSBcImRibGNsaWNrXCI6XG4gICAgICAgICAgY2FzZSBcIm1vdXNlZG93blwiOlxuICAgICAgICAgIGNhc2UgXCJtb3VzZW1vdmVcIjpcbiAgICAgICAgICBjYXNlIFwibW91c2V1cFwiOlxuICAgICAgICAgIGNhc2UgXCJtb3VzZW91dFwiOlxuICAgICAgICAgIGNhc2UgXCJtb3VzZW92ZXJcIjpcbiAgICAgICAgICBjYXNlIFwiY29udGV4dG1lbnVcIjpcbiAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiZHJhZ1wiOlxuICAgICAgICAgIGNhc2UgXCJkcmFnZW5kXCI6XG4gICAgICAgICAgY2FzZSBcImRyYWdlbnRlclwiOlxuICAgICAgICAgIGNhc2UgXCJkcmFnZXhpdFwiOlxuICAgICAgICAgIGNhc2UgXCJkcmFnbGVhdmVcIjpcbiAgICAgICAgICBjYXNlIFwiZHJhZ292ZXJcIjpcbiAgICAgICAgICBjYXNlIFwiZHJhZ3N0YXJ0XCI6XG4gICAgICAgICAgY2FzZSBcImRyb3BcIjpcbiAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0RyYWdFdmVudDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJ0b3VjaGNhbmNlbFwiOlxuICAgICAgICAgIGNhc2UgXCJ0b3VjaGVuZFwiOlxuICAgICAgICAgIGNhc2UgXCJ0b3VjaG1vdmVcIjpcbiAgICAgICAgICBjYXNlIFwidG91Y2hzdGFydFwiOlxuICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVG91Y2hFdmVudDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQU5JTUFUSU9OX0VORDpcbiAgICAgICAgICBjYXNlIEFOSU1BVElPTl9JVEVSQVRJT046XG4gICAgICAgICAgY2FzZSBBTklNQVRJT05fU1RBUlQ6XG4gICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNBbmltYXRpb25FdmVudDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgVFJBTlNJVElPTl9FTkQ6XG4gICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwic2Nyb2xsXCI6XG4gICAgICAgICAgY2FzZSBcInNjcm9sbGVuZFwiOlxuICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVUlFdmVudDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJ3aGVlbFwiOlxuICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljV2hlZWxFdmVudDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJjb3B5XCI6XG4gICAgICAgICAgY2FzZSBcImN1dFwiOlxuICAgICAgICAgIGNhc2UgXCJwYXN0ZVwiOlxuICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQ2xpcGJvYXJkRXZlbnQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiZ290cG9pbnRlcmNhcHR1cmVcIjpcbiAgICAgICAgICBjYXNlIFwibG9zdHBvaW50ZXJjYXB0dXJlXCI6XG4gICAgICAgICAgY2FzZSBcInBvaW50ZXJjYW5jZWxcIjpcbiAgICAgICAgICBjYXNlIFwicG9pbnRlcmRvd25cIjpcbiAgICAgICAgICBjYXNlIFwicG9pbnRlcm1vdmVcIjpcbiAgICAgICAgICBjYXNlIFwicG9pbnRlcm91dFwiOlxuICAgICAgICAgIGNhc2UgXCJwb2ludGVyb3ZlclwiOlxuICAgICAgICAgIGNhc2UgXCJwb2ludGVydXBcIjpcbiAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1BvaW50ZXJFdmVudDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJ0b2dnbGVcIjpcbiAgICAgICAgICBjYXNlIFwiYmVmb3JldG9nZ2xlXCI6XG4gICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUb2dnbGVFdmVudDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5DYXB0dXJlUGhhc2UgPSAwICE9PSAoZXZlbnRTeXN0ZW1GbGFncyAmIDQpLFxuICAgICAgICAgIGFjY3VtdWxhdGVUYXJnZXRPbmx5ID1cbiAgICAgICAgICAgICFpbkNhcHR1cmVQaGFzZSAmJlxuICAgICAgICAgICAgKFwic2Nyb2xsXCIgPT09IGRvbUV2ZW50TmFtZSB8fCBcInNjcm9sbGVuZFwiID09PSBkb21FdmVudE5hbWUpLFxuICAgICAgICAgIHJlYWN0RXZlbnROYW1lID0gaW5DYXB0dXJlUGhhc2VcbiAgICAgICAgICAgID8gbnVsbCAhPT0gcmVhY3ROYW1lXG4gICAgICAgICAgICAgID8gcmVhY3ROYW1lICsgXCJDYXB0dXJlXCJcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IHJlYWN0TmFtZTtcbiAgICAgICAgaW5DYXB0dXJlUGhhc2UgPSBbXTtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB0YXJnZXRJbnN0LCBsYXN0SG9zdENvbXBvbmVudDtcbiAgICAgICAgICBudWxsICE9PSBpbnN0YW5jZTtcblxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgX2luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQgPSBfaW5zdGFuY2Uuc3RhdGVOb2RlO1xuICAgICAgICAgIF9pbnN0YW5jZSA9IF9pbnN0YW5jZS50YWc7XG4gICAgICAgICAgKDUgIT09IF9pbnN0YW5jZSAmJiAyNiAhPT0gX2luc3RhbmNlICYmIDI3ICE9PSBfaW5zdGFuY2UpIHx8XG4gICAgICAgICAgICBudWxsID09PSBsYXN0SG9zdENvbXBvbmVudCB8fFxuICAgICAgICAgICAgbnVsbCA9PT0gcmVhY3RFdmVudE5hbWUgfHxcbiAgICAgICAgICAgICgoX2luc3RhbmNlID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlYWN0RXZlbnROYW1lKSksXG4gICAgICAgICAgICBudWxsICE9IF9pbnN0YW5jZSAmJlxuICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZS5wdXNoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIF9pbnN0YW5jZSwgbGFzdEhvc3RDb21wb25lbnQpXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIGlmIChhY2N1bXVsYXRlVGFyZ2V0T25seSkgYnJlYWs7XG4gICAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgMCA8IGluQ2FwdHVyZVBoYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICgocmVhY3ROYW1lID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihcbiAgICAgICAgICAgIHJlYWN0TmFtZSxcbiAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICApKSxcbiAgICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goeyBldmVudDogcmVhY3ROYW1lLCBsaXN0ZW5lcnM6IGluQ2FwdHVyZVBoYXNlIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKDAgPT09IChldmVudFN5c3RlbUZsYWdzICYgNykpIHtcbiAgICAgIGE6IHtcbiAgICAgICAgcmVhY3ROYW1lID1cbiAgICAgICAgICBcIm1vdXNlb3ZlclwiID09PSBkb21FdmVudE5hbWUgfHwgXCJwb2ludGVyb3ZlclwiID09PSBkb21FdmVudE5hbWU7XG4gICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9XG4gICAgICAgICAgXCJtb3VzZW91dFwiID09PSBkb21FdmVudE5hbWUgfHwgXCJwb2ludGVyb3V0XCIgPT09IGRvbUV2ZW50TmFtZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlYWN0TmFtZSAmJlxuICAgICAgICAgIG5hdGl2ZUV2ZW50ICE9PSBjdXJyZW50UmVwbGF5aW5nRXZlbnQgJiZcbiAgICAgICAgICAocmVhY3RFdmVudFR5cGUgPVxuICAgICAgICAgICAgbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC5mcm9tRWxlbWVudCkgJiZcbiAgICAgICAgICAoZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocmVhY3RFdmVudFR5cGUpIHx8XG4gICAgICAgICAgICByZWFjdEV2ZW50VHlwZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSlcbiAgICAgICAgKVxuICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgIGlmIChTeW50aGV0aWNFdmVudEN0b3IgfHwgcmVhY3ROYW1lKSB7XG4gICAgICAgICAgcmVhY3ROYW1lID1cbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgPyBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICA6IChyZWFjdE5hbWUgPSBuYXRpdmVFdmVudFRhcmdldC5vd25lckRvY3VtZW50KVxuICAgICAgICAgICAgICAgID8gcmVhY3ROYW1lLmRlZmF1bHRWaWV3IHx8IHJlYWN0TmFtZS5wYXJlbnRXaW5kb3dcbiAgICAgICAgICAgICAgICA6IHdpbmRvdztcbiAgICAgICAgICBpZiAoU3ludGhldGljRXZlbnRDdG9yKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgocmVhY3RFdmVudFR5cGUgPVxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQudG9FbGVtZW50KSxcbiAgICAgICAgICAgICAgKFN5bnRoZXRpY0V2ZW50Q3RvciA9IHRhcmdldEluc3QpLFxuICAgICAgICAgICAgICAocmVhY3RFdmVudFR5cGUgPSByZWFjdEV2ZW50VHlwZVxuICAgICAgICAgICAgICAgID8gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocmVhY3RFdmVudFR5cGUpXG4gICAgICAgICAgICAgICAgOiBudWxsKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcmVhY3RFdmVudFR5cGUgJiZcbiAgICAgICAgICAgICAgICAoKGFjY3VtdWxhdGVUYXJnZXRPbmx5ID1cbiAgICAgICAgICAgICAgICAgIGdldE5lYXJlc3RNb3VudGVkRmliZXIocmVhY3RFdmVudFR5cGUpKSxcbiAgICAgICAgICAgICAgICAoaW5DYXB0dXJlUGhhc2UgPSByZWFjdEV2ZW50VHlwZS50YWcpLFxuICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlICE9PSBhY2N1bXVsYXRlVGFyZ2V0T25seSB8fFxuICAgICAgICAgICAgICAgICAgKDUgIT09IGluQ2FwdHVyZVBoYXNlICYmXG4gICAgICAgICAgICAgICAgICAgIDI3ICE9PSBpbkNhcHR1cmVQaGFzZSAmJlxuICAgICAgICAgICAgICAgICAgICA2ICE9PSBpbkNhcHR1cmVQaGFzZSkpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIChTeW50aGV0aWNFdmVudEN0b3IgPSBudWxsKSwgKHJlYWN0RXZlbnRUeXBlID0gdGFyZ2V0SW5zdCk7XG4gICAgICAgICAgaWYgKFN5bnRoZXRpY0V2ZW50Q3RvciAhPT0gcmVhY3RFdmVudFR5cGUpIHtcbiAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgICAgICAgICAgIF9pbnN0YW5jZSA9IFwib25Nb3VzZUxlYXZlXCI7XG4gICAgICAgICAgICByZWFjdEV2ZW50TmFtZSA9IFwib25Nb3VzZUVudGVyXCI7XG4gICAgICAgICAgICBpbnN0YW5jZSA9IFwibW91c2VcIjtcbiAgICAgICAgICAgIGlmIChcInBvaW50ZXJvdXRcIiA9PT0gZG9tRXZlbnROYW1lIHx8IFwicG9pbnRlcm92ZXJcIiA9PT0gZG9tRXZlbnROYW1lKVxuICAgICAgICAgICAgICAoaW5DYXB0dXJlUGhhc2UgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQpLFxuICAgICAgICAgICAgICAgIChfaW5zdGFuY2UgPSBcIm9uUG9pbnRlckxlYXZlXCIpLFxuICAgICAgICAgICAgICAgIChyZWFjdEV2ZW50TmFtZSA9IFwib25Qb2ludGVyRW50ZXJcIiksXG4gICAgICAgICAgICAgICAgKGluc3RhbmNlID0gXCJwb2ludGVyXCIpO1xuICAgICAgICAgICAgYWNjdW11bGF0ZVRhcmdldE9ubHkgPVxuICAgICAgICAgICAgICBudWxsID09IFN5bnRoZXRpY0V2ZW50Q3RvclxuICAgICAgICAgICAgICAgID8gcmVhY3ROYW1lXG4gICAgICAgICAgICAgICAgOiBnZXROb2RlRnJvbUluc3RhbmNlKFN5bnRoZXRpY0V2ZW50Q3Rvcik7XG4gICAgICAgICAgICBsYXN0SG9zdENvbXBvbmVudCA9XG4gICAgICAgICAgICAgIG51bGwgPT0gcmVhY3RFdmVudFR5cGVcbiAgICAgICAgICAgICAgICA/IHJlYWN0TmFtZVxuICAgICAgICAgICAgICAgIDogZ2V0Tm9kZUZyb21JbnN0YW5jZShyZWFjdEV2ZW50VHlwZSk7XG4gICAgICAgICAgICByZWFjdE5hbWUgPSBuZXcgaW5DYXB0dXJlUGhhc2UoXG4gICAgICAgICAgICAgIF9pbnN0YW5jZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2UgKyBcImxlYXZlXCIsXG4gICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvcixcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVhY3ROYW1lLnRhcmdldCA9IGFjY3VtdWxhdGVUYXJnZXRPbmx5O1xuICAgICAgICAgICAgcmVhY3ROYW1lLnJlbGF0ZWRUYXJnZXQgPSBsYXN0SG9zdENvbXBvbmVudDtcbiAgICAgICAgICAgIF9pbnN0YW5jZSA9IG51bGw7XG4gICAgICAgICAgICBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCkgPT09IHRhcmdldEluc3QgJiZcbiAgICAgICAgICAgICAgKChpbkNhcHR1cmVQaGFzZSA9IG5ldyBpbkNhcHR1cmVQaGFzZShcbiAgICAgICAgICAgICAgICByZWFjdEV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZSArIFwiZW50ZXJcIixcbiAgICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGluQ2FwdHVyZVBoYXNlLnRhcmdldCA9IGxhc3RIb3N0Q29tcG9uZW50KSxcbiAgICAgICAgICAgICAgKGluQ2FwdHVyZVBoYXNlLnJlbGF0ZWRUYXJnZXQgPSBhY2N1bXVsYXRlVGFyZ2V0T25seSksXG4gICAgICAgICAgICAgIChfaW5zdGFuY2UgPSBpbkNhcHR1cmVQaGFzZSkpO1xuICAgICAgICAgICAgYWNjdW11bGF0ZVRhcmdldE9ubHkgPSBfaW5zdGFuY2U7XG4gICAgICAgICAgICBpZiAoU3ludGhldGljRXZlbnRDdG9yICYmIHJlYWN0RXZlbnRUeXBlKVxuICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UgPSBTeW50aGV0aWNFdmVudEN0b3I7XG4gICAgICAgICAgICAgICAgcmVhY3RFdmVudE5hbWUgPSByZWFjdEV2ZW50VHlwZTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50ID0gaW5DYXB0dXJlUGhhc2U7XG4gICAgICAgICAgICAgICAgICBsYXN0SG9zdENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50ID0gZ2V0UGFyZW50KGxhc3RIb3N0Q29tcG9uZW50KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlKys7XG4gICAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQgPSAwO1xuICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICBfaW5zdGFuY2UgPSByZWFjdEV2ZW50TmFtZTtcbiAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZSA9IGdldFBhcmVudChfaW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQrKztcbiAgICAgICAgICAgICAgICBmb3IgKDsgMCA8IGluc3RhbmNlIC0gbGFzdEhvc3RDb21wb25lbnQ7IClcbiAgICAgICAgICAgICAgICAgIChpbkNhcHR1cmVQaGFzZSA9IGdldFBhcmVudChpbkNhcHR1cmVQaGFzZSkpLCBpbnN0YW5jZS0tO1xuICAgICAgICAgICAgICAgIGZvciAoOyAwIDwgbGFzdEhvc3RDb21wb25lbnQgLSBpbnN0YW5jZTsgKVxuICAgICAgICAgICAgICAgICAgKHJlYWN0RXZlbnROYW1lID0gZ2V0UGFyZW50KHJlYWN0RXZlbnROYW1lKSksXG4gICAgICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50LS07XG4gICAgICAgICAgICAgICAgZm9yICg7IGluc3RhbmNlLS07ICkge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSA9PT0gcmVhY3RFdmVudE5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgKG51bGwgIT09IHJlYWN0RXZlbnROYW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UgPT09IHJlYWN0RXZlbnROYW1lLmFsdGVybmF0ZSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlID0gZ2V0UGFyZW50KGluQ2FwdHVyZVBoYXNlKTtcbiAgICAgICAgICAgICAgICAgIHJlYWN0RXZlbnROYW1lID0gZ2V0UGFyZW50KHJlYWN0RXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGluQ2FwdHVyZVBoYXNlID0gbnVsbDtcbiAgICAgICAgICAgIG51bGwgIT09IFN5bnRoZXRpY0V2ZW50Q3RvciAmJlxuICAgICAgICAgICAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoUXVldWUsXG4gICAgICAgICAgICAgICAgcmVhY3ROYW1lLFxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvcixcbiAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSxcbiAgICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgbnVsbCAhPT0gcmVhY3RFdmVudFR5cGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gYWNjdW11bGF0ZVRhcmdldE9ubHkgJiZcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChcbiAgICAgICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVUYXJnZXRPbmx5LFxuICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlLFxuICAgICAgICAgICAgICAgICEwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhOiB7XG4gICAgICAgIHJlYWN0TmFtZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpIDogd2luZG93O1xuICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPVxuICAgICAgICAgIHJlYWN0TmFtZS5ub2RlTmFtZSAmJiByZWFjdE5hbWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIFwic2VsZWN0XCIgPT09IFN5bnRoZXRpY0V2ZW50Q3RvciB8fFxuICAgICAgICAgIChcImlucHV0XCIgPT09IFN5bnRoZXRpY0V2ZW50Q3RvciAmJiBcImZpbGVcIiA9PT0gcmVhY3ROYW1lLnR5cGUpXG4gICAgICAgIClcbiAgICAgICAgICB2YXIgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQ7XG4gICAgICAgIGVsc2UgaWYgKGlzVGV4dElucHV0RWxlbWVudChyZWFjdE5hbWUpKVxuICAgICAgICAgIGlmIChpc0lucHV0RXZlbnRTdXBwb3J0ZWQpXG4gICAgICAgICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQ7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICAgICAgICB2YXIgaGFuZGxlRXZlbnRGdW5jID0gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIChTeW50aGV0aWNFdmVudEN0b3IgPSByZWFjdE5hbWUubm9kZU5hbWUpLFxuICAgICAgICAgICAgIVN5bnRoZXRpY0V2ZW50Q3RvciB8fFxuICAgICAgICAgICAgXCJpbnB1dFwiICE9PSBTeW50aGV0aWNFdmVudEN0b3IudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAgICAgKFwiY2hlY2tib3hcIiAhPT0gcmVhY3ROYW1lLnR5cGUgJiYgXCJyYWRpb1wiICE9PSByZWFjdE5hbWUudHlwZSlcbiAgICAgICAgICAgICAgPyB0YXJnZXRJbnN0ICYmXG4gICAgICAgICAgICAgICAgaXNDdXN0b21FbGVtZW50KHRhcmdldEluc3QuZWxlbWVudFR5cGUpICYmXG4gICAgICAgICAgICAgICAgKGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50KVxuICAgICAgICAgICAgICA6IChnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGdldFRhcmdldEluc3RGdW5jICYmXG4gICAgICAgICAgKGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KFxuICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgICAgICAgIGdldFRhcmdldEluc3RGdW5jLFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVFdmVudEZ1bmMgJiYgaGFuZGxlRXZlbnRGdW5jKGRvbUV2ZW50TmFtZSwgcmVhY3ROYW1lLCB0YXJnZXRJbnN0KTtcbiAgICAgICAgXCJmb2N1c291dFwiID09PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgICB0YXJnZXRJbnN0ICYmXG4gICAgICAgICAgXCJudW1iZXJcIiA9PT0gcmVhY3ROYW1lLnR5cGUgJiZcbiAgICAgICAgICBudWxsICE9IHRhcmdldEluc3QubWVtb2l6ZWRQcm9wcy52YWx1ZSAmJlxuICAgICAgICAgIHNldERlZmF1bHRWYWx1ZShyZWFjdE5hbWUsIFwibnVtYmVyXCIsIHJlYWN0TmFtZS52YWx1ZSk7XG4gICAgICB9XG4gICAgICBoYW5kbGVFdmVudEZ1bmMgPSB0YXJnZXRJbnN0ID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJmb2N1c2luXCI6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNUZXh0SW5wdXRFbGVtZW50KGhhbmRsZUV2ZW50RnVuYykgfHxcbiAgICAgICAgICAgIFwidHJ1ZVwiID09PSBoYW5kbGVFdmVudEZ1bmMuY29udGVudEVkaXRhYmxlXG4gICAgICAgICAgKVxuICAgICAgICAgICAgKGFjdGl2ZUVsZW1lbnQgPSBoYW5kbGVFdmVudEZ1bmMpLFxuICAgICAgICAgICAgICAoYWN0aXZlRWxlbWVudEluc3QgPSB0YXJnZXRJbnN0KSxcbiAgICAgICAgICAgICAgKGxhc3RTZWxlY3Rpb24gPSBudWxsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImZvY3Vzb3V0XCI6XG4gICAgICAgICAgbGFzdFNlbGVjdGlvbiA9IGFjdGl2ZUVsZW1lbnRJbnN0ID0gYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtb3VzZWRvd25cIjpcbiAgICAgICAgICBtb3VzZURvd24gPSAhMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNvbnRleHRtZW51XCI6XG4gICAgICAgIGNhc2UgXCJtb3VzZXVwXCI6XG4gICAgICAgIGNhc2UgXCJkcmFnZW5kXCI6XG4gICAgICAgICAgbW91c2VEb3duID0gITE7XG4gICAgICAgICAgY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInNlbGVjdGlvbmNoYW5nZVwiOlxuICAgICAgICAgIGlmIChza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQpIGJyZWFrO1xuICAgICAgICBjYXNlIFwia2V5ZG93blwiOlxuICAgICAgICBjYXNlIFwia2V5dXBcIjpcbiAgICAgICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgfVxuICAgICAgdmFyIGZhbGxiYWNrRGF0YTtcbiAgICAgIGlmIChjYW5Vc2VDb21wb3NpdGlvbkV2ZW50KVxuICAgICAgICBiOiB7XG4gICAgICAgICAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJjb21wb3NpdGlvbnN0YXJ0XCI6XG4gICAgICAgICAgICAgIHZhciBldmVudFR5cGUgPSBcIm9uQ29tcG9zaXRpb25TdGFydFwiO1xuICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6XG4gICAgICAgICAgICAgIGV2ZW50VHlwZSA9IFwib25Db21wb3NpdGlvbkVuZFwiO1xuICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9udXBkYXRlXCI6XG4gICAgICAgICAgICAgIGV2ZW50VHlwZSA9IFwib25Db21wb3NpdGlvblVwZGF0ZVwiO1xuICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBldmVudFR5cGUgPSB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgICAgaXNDb21wb3NpbmdcbiAgICAgICAgICA/IGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSAmJlxuICAgICAgICAgICAgKGV2ZW50VHlwZSA9IFwib25Db21wb3NpdGlvbkVuZFwiKVxuICAgICAgICAgIDogXCJrZXlkb3duXCIgPT09IGRvbUV2ZW50TmFtZSAmJlxuICAgICAgICAgICAgMjI5ID09PSBuYXRpdmVFdmVudC5rZXlDb2RlICYmXG4gICAgICAgICAgICAoZXZlbnRUeXBlID0gXCJvbkNvbXBvc2l0aW9uU3RhcnRcIik7XG4gICAgICBldmVudFR5cGUgJiZcbiAgICAgICAgKHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmXG4gICAgICAgICAgXCJrb1wiICE9PSBuYXRpdmVFdmVudC5sb2NhbGUgJiZcbiAgICAgICAgICAoaXNDb21wb3NpbmcgfHwgXCJvbkNvbXBvc2l0aW9uU3RhcnRcIiAhPT0gZXZlbnRUeXBlXG4gICAgICAgICAgICA/IFwib25Db21wb3NpdGlvbkVuZFwiID09PSBldmVudFR5cGUgJiZcbiAgICAgICAgICAgICAgaXNDb21wb3NpbmcgJiZcbiAgICAgICAgICAgICAgKGZhbGxiYWNrRGF0YSA9IGdldERhdGEoKSlcbiAgICAgICAgICAgIDogKChyb290ID0gbmF0aXZlRXZlbnRUYXJnZXQpLFxuICAgICAgICAgICAgICAoc3RhcnRUZXh0ID0gXCJ2YWx1ZVwiIGluIHJvb3QgPyByb290LnZhbHVlIDogcm9vdC50ZXh0Q29udGVudCksXG4gICAgICAgICAgICAgIChpc0NvbXBvc2luZyA9ICEwKSkpLFxuICAgICAgICAoaGFuZGxlRXZlbnRGdW5jID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsIGV2ZW50VHlwZSkpLFxuICAgICAgICAwIDwgaGFuZGxlRXZlbnRGdW5jLmxlbmd0aCAmJlxuICAgICAgICAgICgoZXZlbnRUeXBlID0gbmV3IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQoXG4gICAgICAgICAgICBldmVudFR5cGUsXG4gICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICkpLFxuICAgICAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7IGV2ZW50OiBldmVudFR5cGUsIGxpc3RlbmVyczogaGFuZGxlRXZlbnRGdW5jIH0pLFxuICAgICAgICAgIGZhbGxiYWNrRGF0YVxuICAgICAgICAgICAgPyAoZXZlbnRUeXBlLmRhdGEgPSBmYWxsYmFja0RhdGEpXG4gICAgICAgICAgICA6ICgoZmFsbGJhY2tEYXRhID0gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCkpLFxuICAgICAgICAgICAgICBudWxsICE9PSBmYWxsYmFja0RhdGEgJiYgKGV2ZW50VHlwZS5kYXRhID0gZmFsbGJhY2tEYXRhKSkpKTtcbiAgICAgIGlmIChcbiAgICAgICAgKGZhbGxiYWNrRGF0YSA9IGNhblVzZVRleHRJbnB1dEV2ZW50XG4gICAgICAgICAgPyBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpXG4gICAgICAgICAgOiBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpXG4gICAgICApXG4gICAgICAgIChldmVudFR5cGUgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgXCJvbkJlZm9yZUlucHV0XCIpKSxcbiAgICAgICAgICAwIDwgZXZlbnRUeXBlLmxlbmd0aCAmJlxuICAgICAgICAgICAgKChoYW5kbGVFdmVudEZ1bmMgPSBuZXcgU3ludGhldGljQ29tcG9zaXRpb25FdmVudChcbiAgICAgICAgICAgICAgXCJvbkJlZm9yZUlucHV0XCIsXG4gICAgICAgICAgICAgIFwiYmVmb3JlaW5wdXRcIixcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgICAgICAgIGV2ZW50OiBoYW5kbGVFdmVudEZ1bmMsXG4gICAgICAgICAgICAgIGxpc3RlbmVyczogZXZlbnRUeXBlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIChoYW5kbGVFdmVudEZ1bmMuZGF0YSA9IGZhbGxiYWNrRGF0YSkpO1xuICAgICAgZXh0cmFjdEV2ZW50cyQxKFxuICAgICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgIHRhcmdldEluc3QsXG4gICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgKTtcbiAgICB9XG4gICAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgfTtcbn1cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRGaWJlciwgcmVhY3ROYW1lKSB7XG4gIGZvciAoXG4gICAgdmFyIGNhcHR1cmVOYW1lID0gcmVhY3ROYW1lICsgXCJDYXB0dXJlXCIsIGxpc3RlbmVycyA9IFtdO1xuICAgIG51bGwgIT09IHRhcmdldEZpYmVyO1xuXG4gICkge1xuICAgIHZhciBfaW5zdGFuY2UyID0gdGFyZ2V0RmliZXIsXG4gICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2UyLnN0YXRlTm9kZTtcbiAgICBfaW5zdGFuY2UyID0gX2luc3RhbmNlMi50YWc7XG4gICAgKDUgIT09IF9pbnN0YW5jZTIgJiYgMjYgIT09IF9pbnN0YW5jZTIgJiYgMjcgIT09IF9pbnN0YW5jZTIpIHx8XG4gICAgICBudWxsID09PSBzdGF0ZU5vZGUgfHxcbiAgICAgICgoX2luc3RhbmNlMiA9IGdldExpc3RlbmVyKHRhcmdldEZpYmVyLCBjYXB0dXJlTmFtZSkpLFxuICAgICAgbnVsbCAhPSBfaW5zdGFuY2UyICYmXG4gICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KFxuICAgICAgICAgIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIodGFyZ2V0RmliZXIsIF9pbnN0YW5jZTIsIHN0YXRlTm9kZSlcbiAgICAgICAgKSxcbiAgICAgIChfaW5zdGFuY2UyID0gZ2V0TGlzdGVuZXIodGFyZ2V0RmliZXIsIHJlYWN0TmFtZSkpLFxuICAgICAgbnVsbCAhPSBfaW5zdGFuY2UyICYmXG4gICAgICAgIGxpc3RlbmVycy5wdXNoKFxuICAgICAgICAgIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIodGFyZ2V0RmliZXIsIF9pbnN0YW5jZTIsIHN0YXRlTm9kZSlcbiAgICAgICAgKSk7XG4gICAgdGFyZ2V0RmliZXIgPSB0YXJnZXRGaWJlci5yZXR1cm47XG4gIH1cbiAgcmV0dXJuIGxpc3RlbmVycztcbn1cbmZ1bmN0aW9uIGdldFBhcmVudChpbnN0KSB7XG4gIGlmIChudWxsID09PSBpbnN0KSByZXR1cm4gbnVsbDtcbiAgZG8gaW5zdCA9IGluc3QucmV0dXJuO1xuICB3aGlsZSAoaW5zdCAmJiA1ICE9PSBpbnN0LnRhZyAmJiAyNyAhPT0gaW5zdC50YWcpO1xuICByZXR1cm4gaW5zdCA/IGluc3QgOiBudWxsO1xufVxuZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChcbiAgZGlzcGF0Y2hRdWV1ZSxcbiAgZXZlbnQsXG4gIHRhcmdldCxcbiAgY29tbW9uLFxuICBpbkNhcHR1cmVQaGFzZVxuKSB7XG4gIGZvciAoXG4gICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5fcmVhY3ROYW1lLCBsaXN0ZW5lcnMgPSBbXTtcbiAgICBudWxsICE9PSB0YXJnZXQgJiYgdGFyZ2V0ICE9PSBjb21tb247XG5cbiAgKSB7XG4gICAgdmFyIF9pbnN0YW5jZTMgPSB0YXJnZXQsXG4gICAgICBhbHRlcm5hdGUgPSBfaW5zdGFuY2UzLmFsdGVybmF0ZSxcbiAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTMuc3RhdGVOb2RlO1xuICAgIF9pbnN0YW5jZTMgPSBfaW5zdGFuY2UzLnRhZztcbiAgICBpZiAobnVsbCAhPT0gYWx0ZXJuYXRlICYmIGFsdGVybmF0ZSA9PT0gY29tbW9uKSBicmVhaztcbiAgICAoNSAhPT0gX2luc3RhbmNlMyAmJiAyNiAhPT0gX2luc3RhbmNlMyAmJiAyNyAhPT0gX2luc3RhbmNlMykgfHxcbiAgICAgIG51bGwgPT09IHN0YXRlTm9kZSB8fFxuICAgICAgKChhbHRlcm5hdGUgPSBzdGF0ZU5vZGUpLFxuICAgICAgaW5DYXB0dXJlUGhhc2VcbiAgICAgICAgPyAoKHN0YXRlTm9kZSA9IGdldExpc3RlbmVyKHRhcmdldCwgcmVnaXN0cmF0aW9uTmFtZSkpLFxuICAgICAgICAgIG51bGwgIT0gc3RhdGVOb2RlICYmXG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChcbiAgICAgICAgICAgICAgY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcih0YXJnZXQsIHN0YXRlTm9kZSwgYWx0ZXJuYXRlKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgOiBpbkNhcHR1cmVQaGFzZSB8fFxuICAgICAgICAgICgoc3RhdGVOb2RlID0gZ2V0TGlzdGVuZXIodGFyZ2V0LCByZWdpc3RyYXRpb25OYW1lKSksXG4gICAgICAgICAgbnVsbCAhPSBzdGF0ZU5vZGUgJiZcbiAgICAgICAgICAgIGxpc3RlbmVycy5wdXNoKFxuICAgICAgICAgICAgICBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKHRhcmdldCwgc3RhdGVOb2RlLCBhbHRlcm5hdGUpXG4gICAgICAgICAgICApKSk7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0LnJldHVybjtcbiAgfVxuICAwICE9PSBsaXN0ZW5lcnMubGVuZ3RoICYmXG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHsgZXZlbnQ6IGV2ZW50LCBsaXN0ZW5lcnM6IGxpc3RlbmVycyB9KTtcbn1cbnZhciBOT1JNQUxJWkVfTkVXTElORVNfUkVHRVggPSAvXFxyXFxuPy9nLFxuICBOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVggPSAvXFx1MDAwMHxcXHVGRkZEL2c7XG5mdW5jdGlvbiBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUobWFya3VwKSB7XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG1hcmt1cCA/IG1hcmt1cCA6IFwiXCIgKyBtYXJrdXApXG4gICAgLnJlcGxhY2UoTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYLCBcIlxcblwiKVxuICAgIC5yZXBsYWNlKE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCwgXCJcIik7XG59XG5mdW5jdGlvbiBjaGVja0ZvclVubWF0Y2hlZFRleHQoc2VydmVyVGV4dCwgY2xpZW50VGV4dCkge1xuICBjbGllbnRUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFRleHQpO1xuICByZXR1cm4gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclRleHQpID09PSBjbGllbnRUZXh0ID8gITAgOiAhMTtcbn1cbmZ1bmN0aW9uIG5vb3AkMSgpIHt9XG5mdW5jdGlvbiBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywga2V5LCB2YWx1ZSwgcHJvcHMsIHByZXZWYWx1ZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHZhbHVlXG4gICAgICAgID8gXCJib2R5XCIgPT09IHRhZyB8fFxuICAgICAgICAgIChcInRleHRhcmVhXCIgPT09IHRhZyAmJiBcIlwiID09PSB2YWx1ZSkgfHxcbiAgICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCB2YWx1ZSlcbiAgICAgICAgOiAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHZhbHVlIHx8IFwiYmlnaW50XCIgPT09IHR5cGVvZiB2YWx1ZSkgJiZcbiAgICAgICAgICBcImJvZHlcIiAhPT0gdGFnICYmXG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgXCJcIiArIHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJjbGFzc05hbWVcIjpcbiAgICAgIHNldFZhbHVlRm9yS25vd25BdHRyaWJ1dGUoZG9tRWxlbWVudCwgXCJjbGFzc1wiLCB2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwidGFiSW5kZXhcIjpcbiAgICAgIHNldFZhbHVlRm9yS25vd25BdHRyaWJ1dGUoZG9tRWxlbWVudCwgXCJ0YWJpbmRleFwiLCB2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZGlyXCI6XG4gICAgY2FzZSBcInJvbGVcIjpcbiAgICBjYXNlIFwidmlld0JveFwiOlxuICAgIGNhc2UgXCJ3aWR0aFwiOlxuICAgIGNhc2UgXCJoZWlnaHRcIjpcbiAgICAgIHNldFZhbHVlRm9yS25vd25BdHRyaWJ1dGUoZG9tRWxlbWVudCwga2V5LCB2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIHZhbHVlLCBwcmV2VmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImRhdGFcIjpcbiAgICAgIGlmIChcIm9iamVjdFwiICE9PSB0YWcpIHtcbiAgICAgICAgc2V0VmFsdWVGb3JLbm93bkF0dHJpYnV0ZShkb21FbGVtZW50LCBcImRhdGFcIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIFwic3JjXCI6XG4gICAgY2FzZSBcImhyZWZcIjpcbiAgICAgIGlmIChcIlwiID09PSB2YWx1ZSAmJiAoXCJhXCIgIT09IHRhZyB8fCBcImhyZWZcIiAhPT0ga2V5KSkge1xuICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCA9PSB2YWx1ZSB8fFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgXCJib29sZWFuXCIgPT09IHR5cGVvZiB2YWx1ZVxuICAgICAgKSB7XG4gICAgICAgIGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSBzYW5pdGl6ZVVSTChcIlwiICsgdmFsdWUpO1xuICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYWN0aW9uXCI6XG4gICAgY2FzZSBcImZvcm1BY3Rpb25cIjpcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgXCJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignQSBSZWFjdCBmb3JtIHdhcyB1bmV4cGVjdGVkbHkgc3VibWl0dGVkLiBJZiB5b3UgY2FsbGVkIGZvcm0uc3VibWl0KCkgbWFudWFsbHksIGNvbnNpZGVyIHVzaW5nIGZvcm0ucmVxdWVzdFN1Ym1pdCgpIGluc3RlYWQuIElmIHlvdVxcXFwncmUgdHJ5aW5nIHRvIHVzZSBldmVudC5zdG9wUHJvcGFnYXRpb24oKSBpbiBhIHN1Ym1pdCBldmVudCBoYW5kbGVyLCBjb25zaWRlciBhbHNvIGNhbGxpbmcgZXZlbnQucHJldmVudERlZmF1bHQoKS4nKVwiXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByZXZWYWx1ZSAmJlxuICAgICAgICAgIChcImZvcm1BY3Rpb25cIiA9PT0ga2V5XG4gICAgICAgICAgICA/IChcImlucHV0XCIgIT09IHRhZyAmJlxuICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBcIm5hbWVcIiwgcHJvcHMubmFtZSwgcHJvcHMsIG51bGwpLFxuICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgIFwiZm9ybUVuY1R5cGVcIixcbiAgICAgICAgICAgICAgICBwcm9wcy5mb3JtRW5jVHlwZSxcbiAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgXCJmb3JtTWV0aG9kXCIsXG4gICAgICAgICAgICAgICAgcHJvcHMuZm9ybU1ldGhvZCxcbiAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgXCJmb3JtVGFyZ2V0XCIsXG4gICAgICAgICAgICAgICAgcHJvcHMuZm9ybVRhcmdldCxcbiAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICA6IChzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgXCJlbmNUeXBlXCIsIHByb3BzLmVuY1R5cGUsIHByb3BzLCBudWxsKSxcbiAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIFwibWV0aG9kXCIsIHByb3BzLm1ldGhvZCwgcHJvcHMsIG51bGwpLFxuICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgXCJ0YXJnZXRcIiwgcHJvcHMudGFyZ2V0LCBwcm9wcywgbnVsbCkpKTtcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCA9PSB2YWx1ZSB8fFxuICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgXCJib29sZWFuXCIgPT09IHR5cGVvZiB2YWx1ZVxuICAgICAgKSB7XG4gICAgICAgIGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSBzYW5pdGl6ZVVSTChcIlwiICsgdmFsdWUpO1xuICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwib25DbGlja1wiOlxuICAgICAgbnVsbCAhPSB2YWx1ZSAmJiAoZG9tRWxlbWVudC5vbmNsaWNrID0gbm9vcCQxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJvblNjcm9sbFwiOlxuICAgICAgbnVsbCAhPSB2YWx1ZSAmJiBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwic2Nyb2xsXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm9uU2Nyb2xsRW5kXCI6XG4gICAgICBudWxsICE9IHZhbHVlICYmIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJzY3JvbGxlbmRcIiwgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgIGlmIChudWxsICE9IHZhbHVlKSB7XG4gICAgICAgIGlmIChcIm9iamVjdFwiICE9PSB0eXBlb2YgdmFsdWUgfHwgIShcIl9faHRtbFwiIGluIHZhbHVlKSlcbiAgICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDYxKSk7XG4gICAgICAgIGtleSA9IHZhbHVlLl9faHRtbDtcbiAgICAgICAgaWYgKG51bGwgIT0ga2V5KSB7XG4gICAgICAgICAgaWYgKG51bGwgIT0gcHJvcHMuY2hpbGRyZW4pIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNjApKTtcbiAgICAgICAgICBkb21FbGVtZW50LmlubmVySFRNTCA9IGtleTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICBkb21FbGVtZW50Lm11bHRpcGxlID1cbiAgICAgICAgdmFsdWUgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiYgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHZhbHVlO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm11dGVkXCI6XG4gICAgICBkb21FbGVtZW50Lm11dGVkID1cbiAgICAgICAgdmFsdWUgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiYgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHZhbHVlO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOlxuICAgIGNhc2UgXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIjpcbiAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgY2FzZSBcImRlZmF1bHRDaGVja2VkXCI6XG4gICAgY2FzZSBcImlubmVySFRNTFwiOlxuICAgIGNhc2UgXCJyZWZcIjpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJhdXRvRm9jdXNcIjpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ4bGlua0hyZWZcIjpcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCA9PSB2YWx1ZSB8fFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgIFwic3ltYm9sXCIgPT09IHR5cGVvZiB2YWx1ZVxuICAgICAgKSB7XG4gICAgICAgIGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwieGxpbms6aHJlZlwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBrZXkgPSBzYW5pdGl6ZVVSTChcIlwiICsgdmFsdWUpO1xuICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhcbiAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgICAgIFwieGxpbms6aHJlZlwiLFxuICAgICAgICBrZXlcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY29udGVudEVkaXRhYmxlXCI6XG4gICAgY2FzZSBcInNwZWxsQ2hlY2tcIjpcbiAgICBjYXNlIFwiZHJhZ2dhYmxlXCI6XG4gICAgY2FzZSBcInZhbHVlXCI6XG4gICAgY2FzZSBcImF1dG9SZXZlcnNlXCI6XG4gICAgY2FzZSBcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIjpcbiAgICBjYXNlIFwiZm9jdXNhYmxlXCI6XG4gICAgY2FzZSBcInByZXNlcnZlQWxwaGFcIjpcbiAgICAgIG51bGwgIT0gdmFsdWUgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiYgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHZhbHVlXG4gICAgICAgID8gZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBcIlwiICsgdmFsdWUpXG4gICAgICAgIDogZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJpbmVydFwiOlxuICAgIGNhc2UgXCJhbGxvd0Z1bGxTY3JlZW5cIjpcbiAgICBjYXNlIFwiYXN5bmNcIjpcbiAgICBjYXNlIFwiYXV0b1BsYXlcIjpcbiAgICBjYXNlIFwiY29udHJvbHNcIjpcbiAgICBjYXNlIFwiZGVmYXVsdFwiOlxuICAgIGNhc2UgXCJkZWZlclwiOlxuICAgIGNhc2UgXCJkaXNhYmxlZFwiOlxuICAgIGNhc2UgXCJkaXNhYmxlUGljdHVyZUluUGljdHVyZVwiOlxuICAgIGNhc2UgXCJkaXNhYmxlUmVtb3RlUGxheWJhY2tcIjpcbiAgICBjYXNlIFwiZm9ybU5vVmFsaWRhdGVcIjpcbiAgICBjYXNlIFwiaGlkZGVuXCI6XG4gICAgY2FzZSBcImxvb3BcIjpcbiAgICBjYXNlIFwibm9Nb2R1bGVcIjpcbiAgICBjYXNlIFwibm9WYWxpZGF0ZVwiOlxuICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgY2FzZSBcInBsYXlzSW5saW5lXCI6XG4gICAgY2FzZSBcInJlYWRPbmx5XCI6XG4gICAgY2FzZSBcInJlcXVpcmVkXCI6XG4gICAgY2FzZSBcInJldmVyc2VkXCI6XG4gICAgY2FzZSBcInNjb3BlZFwiOlxuICAgIGNhc2UgXCJzZWFtbGVzc1wiOlxuICAgIGNhc2UgXCJpdGVtU2NvcGVcIjpcbiAgICAgIHZhbHVlICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmIFwic3ltYm9sXCIgIT09IHR5cGVvZiB2YWx1ZVxuICAgICAgICA/IGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgXCJcIilcbiAgICAgICAgOiBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImNhcHR1cmVcIjpcbiAgICBjYXNlIFwiZG93bmxvYWRcIjpcbiAgICAgICEwID09PSB2YWx1ZVxuICAgICAgICA/IGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgXCJcIilcbiAgICAgICAgOiAhMSAhPT0gdmFsdWUgJiZcbiAgICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgdmFsdWVcbiAgICAgICAgICA/IGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpXG4gICAgICAgICAgOiBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImNvbHNcIjpcbiAgICBjYXNlIFwicm93c1wiOlxuICAgIGNhc2UgXCJzaXplXCI6XG4gICAgY2FzZSBcInNwYW5cIjpcbiAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICFpc05hTih2YWx1ZSkgJiZcbiAgICAgIDEgPD0gdmFsdWVcbiAgICAgICAgPyBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKVxuICAgICAgICA6IGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwicm93U3BhblwiOlxuICAgIGNhc2UgXCJzdGFydFwiOlxuICAgICAgbnVsbCA9PSB2YWx1ZSB8fFxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgIFwic3ltYm9sXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgaXNOYU4odmFsdWUpXG4gICAgICAgID8gZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KVxuICAgICAgICA6IGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInBvcG92ZXJcIjpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJiZWZvcmV0b2dnbGVcIiwgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwidG9nZ2xlXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgc2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgXCJwb3BvdmVyXCIsIHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ4bGlua0FjdHVhdGVcIjpcbiAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgICAgIFwieGxpbms6YWN0dWF0ZVwiLFxuICAgICAgICB2YWx1ZVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ4bGlua0FyY3JvbGVcIjpcbiAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgICAgIFwieGxpbms6YXJjcm9sZVwiLFxuICAgICAgICB2YWx1ZVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ4bGlua1JvbGVcIjpcbiAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgICAgIFwieGxpbms6cm9sZVwiLFxuICAgICAgICB2YWx1ZVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ4bGlua1Nob3dcIjpcbiAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgICAgIFwieGxpbms6c2hvd1wiLFxuICAgICAgICB2YWx1ZVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ4bGlua1RpdGxlXCI6XG4gICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgICAgICBcInhsaW5rOnRpdGxlXCIsXG4gICAgICAgIHZhbHVlXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInhsaW5rVHlwZVwiOlxuICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKFxuICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICAgICAgXCJ4bGluazp0eXBlXCIsXG4gICAgICAgIHZhbHVlXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInhtbEJhc2VcIjpcbiAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcbiAgICAgICAgXCJ4bWw6YmFzZVwiLFxuICAgICAgICB2YWx1ZVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ4bWxMYW5nXCI6XG4gICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXG4gICAgICAgIFwieG1sOmxhbmdcIixcbiAgICAgICAgdmFsdWVcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwieG1sU3BhY2VcIjpcbiAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcbiAgICAgICAgXCJ4bWw6c3BhY2VcIixcbiAgICAgICAgdmFsdWVcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiaXNcIjpcbiAgICAgIHNldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIFwiaXNcIiwgdmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImlubmVyVGV4dFwiOlxuICAgIGNhc2UgXCJ0ZXh0Q29udGVudFwiOlxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChcbiAgICAgICAgISgyIDwga2V5Lmxlbmd0aCkgfHxcbiAgICAgICAgKFwib1wiICE9PSBrZXlbMF0gJiYgXCJPXCIgIT09IGtleVswXSkgfHxcbiAgICAgICAgKFwiblwiICE9PSBrZXlbMV0gJiYgXCJOXCIgIT09IGtleVsxXSlcbiAgICAgIClcbiAgICAgICAgKGtleSA9IGFsaWFzZXMuZ2V0KGtleSkgfHwga2V5KSxcbiAgICAgICAgICBzZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0UHJvcE9uQ3VzdG9tRWxlbWVudChkb21FbGVtZW50LCB0YWcsIGtleSwgdmFsdWUsIHByb3BzLCBwcmV2VmFsdWUpIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIHZhbHVlLCBwcmV2VmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICBpZiAobnVsbCAhPSB2YWx1ZSkge1xuICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIHZhbHVlIHx8ICEoXCJfX2h0bWxcIiBpbiB2YWx1ZSkpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg2MSkpO1xuICAgICAgICBrZXkgPSB2YWx1ZS5fX2h0bWw7XG4gICAgICAgIGlmIChudWxsICE9IGtleSkge1xuICAgICAgICAgIGlmIChudWxsICE9IHByb3BzLmNoaWxkcmVuKSB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDYwKSk7XG4gICAgICAgICAgZG9tRWxlbWVudC5pbm5lckhUTUwgPSBrZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHZhbHVlXG4gICAgICAgID8gc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgdmFsdWUpXG4gICAgICAgIDogKFwibnVtYmVyXCIgPT09IHR5cGVvZiB2YWx1ZSB8fCBcImJpZ2ludFwiID09PSB0eXBlb2YgdmFsdWUpICYmXG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgXCJcIiArIHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJvblNjcm9sbFwiOlxuICAgICAgbnVsbCAhPSB2YWx1ZSAmJiBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwic2Nyb2xsXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm9uU2Nyb2xsRW5kXCI6XG4gICAgICBudWxsICE9IHZhbHVlICYmIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJzY3JvbGxlbmRcIiwgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwib25DbGlja1wiOlxuICAgICAgbnVsbCAhPSB2YWx1ZSAmJiAoZG9tRWxlbWVudC5vbmNsaWNrID0gbm9vcCQxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIjpcbiAgICBjYXNlIFwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCI6XG4gICAgY2FzZSBcImlubmVySFRNTFwiOlxuICAgIGNhc2UgXCJyZWZcIjpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJpbm5lclRleHRcIjpcbiAgICBjYXNlIFwidGV4dENvbnRlbnRcIjpcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoIXJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgYToge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFwib1wiID09PSBrZXlbMF0gJiZcbiAgICAgICAgICAgIFwiblwiID09PSBrZXlbMV0gJiZcbiAgICAgICAgICAgICgocHJvcHMgPSBrZXkuZW5kc1dpdGgoXCJDYXB0dXJlXCIpKSxcbiAgICAgICAgICAgICh0YWcgPSBrZXkuc2xpY2UoMiwgcHJvcHMgPyBrZXkubGVuZ3RoIC0gNyA6IHZvaWQgMCkpLFxuICAgICAgICAgICAgKHByZXZWYWx1ZSA9IGRvbUVsZW1lbnRbaW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbCksXG4gICAgICAgICAgICAocHJldlZhbHVlID0gbnVsbCAhPSBwcmV2VmFsdWUgPyBwcmV2VmFsdWVba2V5XSA6IG51bGwpLFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcHJldlZhbHVlICYmXG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0YWcsIHByZXZWYWx1ZSwgcHJvcHMpLFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBwcmV2VmFsdWUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcHJldlZhbHVlICYmXG4gICAgICAgICAgICAgIChrZXkgaW4gZG9tRWxlbWVudFxuICAgICAgICAgICAgICAgID8gKGRvbUVsZW1lbnRba2V5XSA9IG51bGwpXG4gICAgICAgICAgICAgICAgOiBkb21FbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpICYmXG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpKTtcbiAgICAgICAgICAgIGRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0YWcsIHZhbHVlLCBwcm9wcyk7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBrZXkgaW4gZG9tRWxlbWVudFxuICAgICAgICAgICAgPyAoZG9tRWxlbWVudFtrZXldID0gdmFsdWUpXG4gICAgICAgICAgICA6ICEwID09PSB2YWx1ZVxuICAgICAgICAgICAgICA/IGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgXCJcIilcbiAgICAgICAgICAgICAgOiBzZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHByb3BzKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBcImRpdlwiOlxuICAgIGNhc2UgXCJzcGFuXCI6XG4gICAgY2FzZSBcInN2Z1wiOlxuICAgIGNhc2UgXCJwYXRoXCI6XG4gICAgY2FzZSBcImFcIjpcbiAgICBjYXNlIFwiZ1wiOlxuICAgIGNhc2UgXCJwXCI6XG4gICAgY2FzZSBcImxpXCI6XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiaW1nXCI6XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiZXJyb3JcIiwgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwibG9hZFwiLCBkb21FbGVtZW50KTtcbiAgICAgIHZhciBoYXNTcmMgPSAhMSxcbiAgICAgICAgaGFzU3JjU2V0ID0gITEsXG4gICAgICAgIHByb3BLZXk7XG4gICAgICBmb3IgKHByb3BLZXkgaW4gcHJvcHMpXG4gICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wS2V5XTtcbiAgICAgICAgICBpZiAobnVsbCAhPSBwcm9wVmFsdWUpXG4gICAgICAgICAgICBzd2l0Y2ggKHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgY2FzZSBcInNyY1wiOlxuICAgICAgICAgICAgICAgIGhhc1NyYyA9ICEwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwic3JjU2V0XCI6XG4gICAgICAgICAgICAgICAgaGFzU3JjU2V0ID0gITA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEzNywgdGFnKSk7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIHByb3BLZXksIHByb3BWYWx1ZSwgcHJvcHMsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBoYXNTcmNTZXQgJiZcbiAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIFwic3JjU2V0XCIsIHByb3BzLnNyY1NldCwgcHJvcHMsIG51bGwpO1xuICAgICAgaGFzU3JjICYmIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBcInNyY1wiLCBwcm9wcy5zcmMsIHByb3BzLCBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJpbnZhbGlkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IChwcm9wS2V5ID0gcHJvcFZhbHVlID0gaGFzU3JjU2V0ID0gbnVsbCksXG4gICAgICAgIGNoZWNrZWQgPSBudWxsLFxuICAgICAgICBkZWZhdWx0Q2hlY2tlZCA9IG51bGw7XG4gICAgICBmb3IgKGhhc1NyYyBpbiBwcm9wcylcbiAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KGhhc1NyYykpIHtcbiAgICAgICAgICB2YXIgcHJvcFZhbHVlJDE4NiA9IHByb3BzW2hhc1NyY107XG4gICAgICAgICAgaWYgKG51bGwgIT0gcHJvcFZhbHVlJDE4NilcbiAgICAgICAgICAgIHN3aXRjaCAoaGFzU3JjKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJuYW1lXCI6XG4gICAgICAgICAgICAgICAgaGFzU3JjU2V0ID0gcHJvcFZhbHVlJDE4NjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcInR5cGVcIjpcbiAgICAgICAgICAgICAgICBwcm9wVmFsdWUgPSBwcm9wVmFsdWUkMTg2O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgIGNoZWNrZWQgPSBwcm9wVmFsdWUkMTg2O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdENoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCA9IHByb3BWYWx1ZSQxODY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgIHByb3BLZXkgPSBwcm9wVmFsdWUkMTg2O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gcHJvcFZhbHVlJDE4NjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgIGlmIChudWxsICE9IHByb3BWYWx1ZSQxODYpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEzNywgdGFnKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGhhc1NyYywgcHJvcFZhbHVlJDE4NiwgcHJvcHMsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBpbml0SW5wdXQoXG4gICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgIHByb3BLZXksXG4gICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgZGVmYXVsdENoZWNrZWQsXG4gICAgICAgIHByb3BWYWx1ZSxcbiAgICAgICAgaGFzU3JjU2V0LFxuICAgICAgICAhMVxuICAgICAgKTtcbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJpbnZhbGlkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgaGFzU3JjID0gcHJvcFZhbHVlID0gcHJvcEtleSA9IG51bGw7XG4gICAgICBmb3IgKGhhc1NyY1NldCBpbiBwcm9wcylcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByb3BzLmhhc093blByb3BlcnR5KGhhc1NyY1NldCkgJiZcbiAgICAgICAgICAoKGRlZmF1bHRWYWx1ZSA9IHByb3BzW2hhc1NyY1NldF0pLCBudWxsICE9IGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgKVxuICAgICAgICAgIHN3aXRjaCAoaGFzU3JjU2V0KSB7XG4gICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgcHJvcEtleSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgIHByb3BWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgICAgaGFzU3JjID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGhhc1NyY1NldCwgZGVmYXVsdFZhbHVlLCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgdGFnID0gcHJvcEtleTtcbiAgICAgIHByb3BzID0gcHJvcFZhbHVlO1xuICAgICAgZG9tRWxlbWVudC5tdWx0aXBsZSA9ICEhaGFzU3JjO1xuICAgICAgbnVsbCAhPSB0YWdcbiAgICAgICAgPyB1cGRhdGVPcHRpb25zKGRvbUVsZW1lbnQsICEhaGFzU3JjLCB0YWcsICExKVxuICAgICAgICA6IG51bGwgIT0gcHJvcHMgJiYgdXBkYXRlT3B0aW9ucyhkb21FbGVtZW50LCAhIWhhc1NyYywgcHJvcHMsICEwKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwidGV4dGFyZWFcIjpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJpbnZhbGlkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcEtleSA9IGhhc1NyY1NldCA9IGhhc1NyYyA9IG51bGw7XG4gICAgICBmb3IgKHByb3BWYWx1ZSBpbiBwcm9wcylcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByb3BzLmhhc093blByb3BlcnR5KHByb3BWYWx1ZSkgJiZcbiAgICAgICAgICAoKGRlZmF1bHRWYWx1ZSA9IHByb3BzW3Byb3BWYWx1ZV0pLCBudWxsICE9IGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgKVxuICAgICAgICAgIHN3aXRjaCAocHJvcFZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgaGFzU3JjID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgaGFzU3JjU2V0ID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICBwcm9wS2V5ID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICBpZiAobnVsbCAhPSBkZWZhdWx0VmFsdWUpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoOTEpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgcHJvcFZhbHVlLCBkZWZhdWx0VmFsdWUsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICBpbml0VGV4dGFyZWEoZG9tRWxlbWVudCwgaGFzU3JjLCBoYXNTcmNTZXQsIHByb3BLZXkpO1xuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcIm9wdGlvblwiOlxuICAgICAgZm9yIChjaGVja2VkIGluIHByb3BzKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvcHMuaGFzT3duUHJvcGVydHkoY2hlY2tlZCkgJiZcbiAgICAgICAgICAoKGhhc1NyYyA9IHByb3BzW2NoZWNrZWRdKSwgbnVsbCAhPSBoYXNTcmMpXG4gICAgICAgIClcbiAgICAgICAgICBzd2l0Y2ggKGNoZWNrZWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOlxuICAgICAgICAgICAgICBkb21FbGVtZW50LnNlbGVjdGVkID1cbiAgICAgICAgICAgICAgICBoYXNTcmMgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBoYXNTcmMgJiZcbiAgICAgICAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgaGFzU3JjO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBjaGVja2VkLCBoYXNTcmMsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcImRpYWxvZ1wiOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImNhbmNlbFwiLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJjbG9zZVwiLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJpZnJhbWVcIjpcbiAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwibG9hZFwiLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ2aWRlb1wiOlxuICAgIGNhc2UgXCJhdWRpb1wiOlxuICAgICAgZm9yIChoYXNTcmMgPSAwOyBoYXNTcmMgPCBtZWRpYUV2ZW50VHlwZXMubGVuZ3RoOyBoYXNTcmMrKylcbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChtZWRpYUV2ZW50VHlwZXNbaGFzU3JjXSwgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiaW1hZ2VcIjpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJlcnJvclwiLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJsb2FkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImRldGFpbHNcIjpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJ0b2dnbGVcIiwgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZW1iZWRcIjpcbiAgICBjYXNlIFwic291cmNlXCI6XG4gICAgY2FzZSBcImxpbmtcIjpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJlcnJvclwiLCBkb21FbGVtZW50KSxcbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImxvYWRcIiwgZG9tRWxlbWVudCk7XG4gICAgY2FzZSBcImFyZWFcIjpcbiAgICBjYXNlIFwiYmFzZVwiOlxuICAgIGNhc2UgXCJiclwiOlxuICAgIGNhc2UgXCJjb2xcIjpcbiAgICBjYXNlIFwiaHJcIjpcbiAgICBjYXNlIFwia2V5Z2VuXCI6XG4gICAgY2FzZSBcIm1ldGFcIjpcbiAgICBjYXNlIFwicGFyYW1cIjpcbiAgICBjYXNlIFwidHJhY2tcIjpcbiAgICBjYXNlIFwid2JyXCI6XG4gICAgY2FzZSBcIm1lbnVpdGVtXCI6XG4gICAgICBmb3IgKGRlZmF1bHRDaGVja2VkIGluIHByb3BzKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvcHMuaGFzT3duUHJvcGVydHkoZGVmYXVsdENoZWNrZWQpICYmXG4gICAgICAgICAgKChoYXNTcmMgPSBwcm9wc1tkZWZhdWx0Q2hlY2tlZF0pLCBudWxsICE9IGhhc1NyYylcbiAgICAgICAgKVxuICAgICAgICAgIHN3aXRjaCAoZGVmYXVsdENoZWNrZWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTM3LCB0YWcpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBkZWZhdWx0Q2hlY2tlZCwgaGFzU3JjLCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoaXNDdXN0b21FbGVtZW50KHRhZykpIHtcbiAgICAgICAgZm9yIChwcm9wVmFsdWUkMTg2IGluIHByb3BzKVxuICAgICAgICAgIHByb3BzLmhhc093blByb3BlcnR5KHByb3BWYWx1ZSQxODYpICYmXG4gICAgICAgICAgICAoKGhhc1NyYyA9IHByb3BzW3Byb3BWYWx1ZSQxODZdKSxcbiAgICAgICAgICAgIHZvaWQgMCAhPT0gaGFzU3JjICYmXG4gICAgICAgICAgICAgIHNldFByb3BPbkN1c3RvbUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgcHJvcFZhbHVlJDE4NixcbiAgICAgICAgICAgICAgICBoYXNTcmMsXG4gICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgdm9pZCAwXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cbiAgZm9yIChkZWZhdWx0VmFsdWUgaW4gcHJvcHMpXG4gICAgcHJvcHMuaGFzT3duUHJvcGVydHkoZGVmYXVsdFZhbHVlKSAmJlxuICAgICAgKChoYXNTcmMgPSBwcm9wc1tkZWZhdWx0VmFsdWVdKSxcbiAgICAgIG51bGwgIT0gaGFzU3JjICYmXG4gICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBkZWZhdWx0VmFsdWUsIGhhc1NyYywgcHJvcHMsIG51bGwpKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCBsYXN0UHJvcHMsIG5leHRQcm9wcykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgXCJkaXZcIjpcbiAgICBjYXNlIFwic3BhblwiOlxuICAgIGNhc2UgXCJzdmdcIjpcbiAgICBjYXNlIFwicGF0aFwiOlxuICAgIGNhc2UgXCJhXCI6XG4gICAgY2FzZSBcImdcIjpcbiAgICBjYXNlIFwicFwiOlxuICAgIGNhc2UgXCJsaVwiOlxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImlucHV0XCI6XG4gICAgICB2YXIgbmFtZSA9IG51bGwsXG4gICAgICAgIHR5cGUgPSBudWxsLFxuICAgICAgICB2YWx1ZSA9IG51bGwsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IG51bGwsXG4gICAgICAgIGxhc3REZWZhdWx0VmFsdWUgPSBudWxsLFxuICAgICAgICBjaGVja2VkID0gbnVsbCxcbiAgICAgICAgZGVmYXVsdENoZWNrZWQgPSBudWxsO1xuICAgICAgZm9yIChwcm9wS2V5IGluIGxhc3RQcm9wcykge1xuICAgICAgICB2YXIgbGFzdFByb3AgPSBsYXN0UHJvcHNbcHJvcEtleV07XG4gICAgICAgIGlmIChsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgJiYgbnVsbCAhPSBsYXN0UHJvcClcbiAgICAgICAgICBzd2l0Y2ggKHByb3BLZXkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICBsYXN0RGVmYXVsdFZhbHVlID0gbGFzdFByb3A7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHxcbiAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgcHJvcEtleSwgbnVsbCwgbmV4dFByb3BzLCBsYXN0UHJvcCk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yICh2YXIgcHJvcEtleSQyMDMgaW4gbmV4dFByb3BzKSB7XG4gICAgICAgIHZhciBwcm9wS2V5ID0gbmV4dFByb3BzW3Byb3BLZXkkMjAzXTtcbiAgICAgICAgbGFzdFByb3AgPSBsYXN0UHJvcHNbcHJvcEtleSQyMDNdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkkMjAzKSAmJlxuICAgICAgICAgIChudWxsICE9IHByb3BLZXkgfHwgbnVsbCAhPSBsYXN0UHJvcClcbiAgICAgICAgKVxuICAgICAgICAgIHN3aXRjaCAocHJvcEtleSQyMDMpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0eXBlXCI6XG4gICAgICAgICAgICAgIHR5cGUgPSBwcm9wS2V5O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJuYW1lXCI6XG4gICAgICAgICAgICAgIG5hbWUgPSBwcm9wS2V5O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICAgIGNoZWNrZWQgPSBwcm9wS2V5O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0Q2hlY2tlZFwiOlxuICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCA9IHByb3BLZXk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvcEtleTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHByb3BLZXk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT0gcHJvcEtleSlcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEzNywgdGFnKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcHJvcEtleSAhPT0gbGFzdFByb3AgJiZcbiAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgIHByb3BLZXkkMjAzLFxuICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgIGxhc3RQcm9wXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICB1cGRhdGVJbnB1dChcbiAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgbGFzdERlZmF1bHRWYWx1ZSxcbiAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgZGVmYXVsdENoZWNrZWQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIG5hbWVcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgcHJvcEtleSA9IHZhbHVlID0gZGVmYXVsdFZhbHVlID0gcHJvcEtleSQyMDMgPSBudWxsO1xuICAgICAgZm9yICh0eXBlIGluIGxhc3RQcm9wcylcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgobGFzdERlZmF1bHRWYWx1ZSA9IGxhc3RQcm9wc1t0eXBlXSksXG4gICAgICAgICAgbGFzdFByb3BzLmhhc093blByb3BlcnR5KHR5cGUpICYmIG51bGwgIT0gbGFzdERlZmF1bHRWYWx1ZSlcbiAgICAgICAgKVxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICAgICAgICAgIHByb3BLZXkgPSBsYXN0RGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgbmV4dFByb3BzLmhhc093blByb3BlcnR5KHR5cGUpIHx8XG4gICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgIGxhc3REZWZhdWx0VmFsdWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgIGZvciAobmFtZSBpbiBuZXh0UHJvcHMpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKHR5cGUgPSBuZXh0UHJvcHNbbmFtZV0pLFxuICAgICAgICAgIChsYXN0RGVmYXVsdFZhbHVlID0gbGFzdFByb3BzW25hbWVdKSxcbiAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgICAgIChudWxsICE9IHR5cGUgfHwgbnVsbCAhPSBsYXN0RGVmYXVsdFZhbHVlKSlcbiAgICAgICAgKVxuICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgIHByb3BLZXkkMjAzID0gdHlwZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHR5cGU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICAgICAgICAgIHZhbHVlID0gdHlwZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHR5cGUgIT09IGxhc3REZWZhdWx0VmFsdWUgJiZcbiAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgbGFzdERlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgdGFnID0gZGVmYXVsdFZhbHVlO1xuICAgICAgbGFzdFByb3BzID0gdmFsdWU7XG4gICAgICBuZXh0UHJvcHMgPSBwcm9wS2V5O1xuICAgICAgbnVsbCAhPSBwcm9wS2V5JDIwM1xuICAgICAgICA/IHVwZGF0ZU9wdGlvbnMoZG9tRWxlbWVudCwgISFsYXN0UHJvcHMsIHByb3BLZXkkMjAzLCAhMSlcbiAgICAgICAgOiAhIW5leHRQcm9wcyAhPT0gISFsYXN0UHJvcHMgJiZcbiAgICAgICAgICAobnVsbCAhPSB0YWdcbiAgICAgICAgICAgID8gdXBkYXRlT3B0aW9ucyhkb21FbGVtZW50LCAhIWxhc3RQcm9wcywgdGFnLCAhMClcbiAgICAgICAgICAgIDogdXBkYXRlT3B0aW9ucyhkb21FbGVtZW50LCAhIWxhc3RQcm9wcywgbGFzdFByb3BzID8gW10gOiBcIlwiLCAhMSkpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgcHJvcEtleSA9IHByb3BLZXkkMjAzID0gbnVsbDtcbiAgICAgIGZvciAoZGVmYXVsdFZhbHVlIGluIGxhc3RQcm9wcylcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgobmFtZSA9IGxhc3RQcm9wc1tkZWZhdWx0VmFsdWVdKSxcbiAgICAgICAgICBsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkoZGVmYXVsdFZhbHVlKSAmJlxuICAgICAgICAgICAgbnVsbCAhPSBuYW1lICYmXG4gICAgICAgICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KGRlZmF1bHRWYWx1ZSkpXG4gICAgICAgIClcbiAgICAgICAgICBzd2l0Y2ggKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGRlZmF1bHRWYWx1ZSwgbnVsbCwgbmV4dFByb3BzLCBuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICBmb3IgKHZhbHVlIGluIG5leHRQcm9wcylcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgobmFtZSA9IG5leHRQcm9wc1t2YWx1ZV0pLFxuICAgICAgICAgICh0eXBlID0gbGFzdFByb3BzW3ZhbHVlXSksXG4gICAgICAgICAgbmV4dFByb3BzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJiAobnVsbCAhPSBuYW1lIHx8IG51bGwgIT0gdHlwZSkpXG4gICAgICAgIClcbiAgICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgcHJvcEtleSQyMDMgPSBuYW1lO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgcHJvcEtleSA9IG5hbWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgIGlmIChudWxsICE9IG5hbWUpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoOTEpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBuYW1lICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIHZhbHVlLCBuYW1lLCBuZXh0UHJvcHMsIHR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgIHVwZGF0ZVRleHRhcmVhKGRvbUVsZW1lbnQsIHByb3BLZXkkMjAzLCBwcm9wS2V5KTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwib3B0aW9uXCI6XG4gICAgICBmb3IgKHZhciBwcm9wS2V5JDIxOSBpbiBsYXN0UHJvcHMpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKHByb3BLZXkkMjAzID0gbGFzdFByb3BzW3Byb3BLZXkkMjE5XSksXG4gICAgICAgICAgbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkkMjE5KSAmJlxuICAgICAgICAgICAgbnVsbCAhPSBwcm9wS2V5JDIwMyAmJlxuICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5JDIxOSkpXG4gICAgICAgIClcbiAgICAgICAgICBzd2l0Y2ggKHByb3BLZXkkMjE5KSB7XG4gICAgICAgICAgICBjYXNlIFwic2VsZWN0ZWRcIjpcbiAgICAgICAgICAgICAgZG9tRWxlbWVudC5zZWxlY3RlZCA9ICExO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgcHJvcEtleSQyMTksXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgcHJvcEtleSQyMDNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICBmb3IgKGxhc3REZWZhdWx0VmFsdWUgaW4gbmV4dFByb3BzKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKChwcm9wS2V5JDIwMyA9IG5leHRQcm9wc1tsYXN0RGVmYXVsdFZhbHVlXSksXG4gICAgICAgICAgKHByb3BLZXkgPSBsYXN0UHJvcHNbbGFzdERlZmF1bHRWYWx1ZV0pLFxuICAgICAgICAgIG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShsYXN0RGVmYXVsdFZhbHVlKSAmJlxuICAgICAgICAgICAgcHJvcEtleSQyMDMgIT09IHByb3BLZXkgJiZcbiAgICAgICAgICAgIChudWxsICE9IHByb3BLZXkkMjAzIHx8IG51bGwgIT0gcHJvcEtleSkpXG4gICAgICAgIClcbiAgICAgICAgICBzd2l0Y2ggKGxhc3REZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOlxuICAgICAgICAgICAgICBkb21FbGVtZW50LnNlbGVjdGVkID1cbiAgICAgICAgICAgICAgICBwcm9wS2V5JDIwMyAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHByb3BLZXkkMjAzICYmXG4gICAgICAgICAgICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHByb3BLZXkkMjAzO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgbGFzdERlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICBwcm9wS2V5JDIwMyxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgcHJvcEtleVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwiaW1nXCI6XG4gICAgY2FzZSBcImxpbmtcIjpcbiAgICBjYXNlIFwiYXJlYVwiOlxuICAgIGNhc2UgXCJiYXNlXCI6XG4gICAgY2FzZSBcImJyXCI6XG4gICAgY2FzZSBcImNvbFwiOlxuICAgIGNhc2UgXCJlbWJlZFwiOlxuICAgIGNhc2UgXCJoclwiOlxuICAgIGNhc2UgXCJrZXlnZW5cIjpcbiAgICBjYXNlIFwibWV0YVwiOlxuICAgIGNhc2UgXCJwYXJhbVwiOlxuICAgIGNhc2UgXCJzb3VyY2VcIjpcbiAgICBjYXNlIFwidHJhY2tcIjpcbiAgICBjYXNlIFwid2JyXCI6XG4gICAgY2FzZSBcIm1lbnVpdGVtXCI6XG4gICAgICBmb3IgKHZhciBwcm9wS2V5JDIyNCBpbiBsYXN0UHJvcHMpXG4gICAgICAgIChwcm9wS2V5JDIwMyA9IGxhc3RQcm9wc1twcm9wS2V5JDIyNF0pLFxuICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5JDIyNCkgJiZcbiAgICAgICAgICAgIG51bGwgIT0gcHJvcEtleSQyMDMgJiZcbiAgICAgICAgICAgICFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSQyMjQpICYmXG4gICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgcHJvcEtleSQyMjQsIG51bGwsIG5leHRQcm9wcywgcHJvcEtleSQyMDMpO1xuICAgICAgZm9yIChjaGVja2VkIGluIG5leHRQcm9wcylcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgocHJvcEtleSQyMDMgPSBuZXh0UHJvcHNbY2hlY2tlZF0pLFxuICAgICAgICAgIChwcm9wS2V5ID0gbGFzdFByb3BzW2NoZWNrZWRdKSxcbiAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoY2hlY2tlZCkgJiZcbiAgICAgICAgICAgIHByb3BLZXkkMjAzICE9PSBwcm9wS2V5ICYmXG4gICAgICAgICAgICAobnVsbCAhPSBwcm9wS2V5JDIwMyB8fCBudWxsICE9IHByb3BLZXkpKVxuICAgICAgICApXG4gICAgICAgICAgc3dpdGNoIChjaGVja2VkKSB7XG4gICAgICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICBpZiAobnVsbCAhPSBwcm9wS2V5JDIwMylcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEzNywgdGFnKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICBjaGVja2VkLFxuICAgICAgICAgICAgICAgIHByb3BLZXkkMjAzLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICBwcm9wS2V5XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoaXNDdXN0b21FbGVtZW50KHRhZykpIHtcbiAgICAgICAgZm9yICh2YXIgcHJvcEtleSQyMjkgaW4gbGFzdFByb3BzKVxuICAgICAgICAgIChwcm9wS2V5JDIwMyA9IGxhc3RQcm9wc1twcm9wS2V5JDIyOV0pLFxuICAgICAgICAgICAgbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkkMjI5KSAmJlxuICAgICAgICAgICAgICB2b2lkIDAgIT09IHByb3BLZXkkMjAzICYmXG4gICAgICAgICAgICAgICFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSQyMjkpICYmXG4gICAgICAgICAgICAgIHNldFByb3BPbkN1c3RvbUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgcHJvcEtleSQyMjksXG4gICAgICAgICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICBwcm9wS2V5JDIwM1xuICAgICAgICAgICAgICApO1xuICAgICAgICBmb3IgKGRlZmF1bHRDaGVja2VkIGluIG5leHRQcm9wcylcbiAgICAgICAgICAocHJvcEtleSQyMDMgPSBuZXh0UHJvcHNbZGVmYXVsdENoZWNrZWRdKSxcbiAgICAgICAgICAgIChwcm9wS2V5ID0gbGFzdFByb3BzW2RlZmF1bHRDaGVja2VkXSksXG4gICAgICAgICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KGRlZmF1bHRDaGVja2VkKSB8fFxuICAgICAgICAgICAgICBwcm9wS2V5JDIwMyA9PT0gcHJvcEtleSB8fFxuICAgICAgICAgICAgICAodm9pZCAwID09PSBwcm9wS2V5JDIwMyAmJiB2b2lkIDAgPT09IHByb3BLZXkpIHx8XG4gICAgICAgICAgICAgIHNldFByb3BPbkN1c3RvbUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQsXG4gICAgICAgICAgICAgICAgcHJvcEtleSQyMDMsXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgIHByb3BLZXlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG4gIGZvciAodmFyIHByb3BLZXkkMjM0IGluIGxhc3RQcm9wcylcbiAgICAocHJvcEtleSQyMDMgPSBsYXN0UHJvcHNbcHJvcEtleSQyMzRdKSxcbiAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5JDIzNCkgJiZcbiAgICAgICAgbnVsbCAhPSBwcm9wS2V5JDIwMyAmJlxuICAgICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkkMjM0KSAmJlxuICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgcHJvcEtleSQyMzQsIG51bGwsIG5leHRQcm9wcywgcHJvcEtleSQyMDMpO1xuICBmb3IgKGxhc3RQcm9wIGluIG5leHRQcm9wcylcbiAgICAocHJvcEtleSQyMDMgPSBuZXh0UHJvcHNbbGFzdFByb3BdKSxcbiAgICAgIChwcm9wS2V5ID0gbGFzdFByb3BzW2xhc3RQcm9wXSksXG4gICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KGxhc3RQcm9wKSB8fFxuICAgICAgICBwcm9wS2V5JDIwMyA9PT0gcHJvcEtleSB8fFxuICAgICAgICAobnVsbCA9PSBwcm9wS2V5JDIwMyAmJiBudWxsID09IHByb3BLZXkpIHx8XG4gICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBsYXN0UHJvcCwgcHJvcEtleSQyMDMsIG5leHRQcm9wcywgcHJvcEtleSk7XG59XG52YXIgZXZlbnRzRW5hYmxlZCA9IG51bGwsXG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbDtcbmZ1bmN0aW9uIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gOSA9PT0gcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGVcbiAgICA/IHJvb3RDb250YWluZXJFbGVtZW50XG4gICAgOiByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xufVxuZnVuY3Rpb24gZ2V0T3duSG9zdENvbnRleHQobmFtZXNwYWNlVVJJKSB7XG4gIHN3aXRjaCAobmFtZXNwYWNlVVJJKSB7XG4gICAgY2FzZSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI6XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiOlxuICAgICAgcmV0dXJuIDI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5mdW5jdGlvbiBnZXRDaGlsZEhvc3RDb250ZXh0UHJvZChwYXJlbnROYW1lc3BhY2UsIHR5cGUpIHtcbiAgaWYgKDAgPT09IHBhcmVudE5hbWVzcGFjZSlcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJzdmdcIjpcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBjYXNlIFwibWF0aFwiOlxuICAgICAgICByZXR1cm4gMjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgcmV0dXJuIDEgPT09IHBhcmVudE5hbWVzcGFjZSAmJiBcImZvcmVpZ25PYmplY3RcIiA9PT0gdHlwZVxuICAgID8gMFxuICAgIDogcGFyZW50TmFtZXNwYWNlO1xufVxuZnVuY3Rpb24gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICBcInRleHRhcmVhXCIgPT09IHR5cGUgfHxcbiAgICBcIm5vc2NyaXB0XCIgPT09IHR5cGUgfHxcbiAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gfHxcbiAgICBcIm51bWJlclwiID09PSB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gfHxcbiAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gfHxcbiAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmXG4gICAgICBudWxsICE9PSBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAmJlxuICAgICAgbnVsbCAhPSBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwpXG4gICk7XG59XG52YXIgY3VycmVudFBvcHN0YXRlVHJhbnNpdGlvbkV2ZW50ID0gbnVsbDtcbmZ1bmN0aW9uIHNob3VsZEF0dGVtcHRFYWdlclRyYW5zaXRpb24oKSB7XG4gIHZhciBldmVudCA9IHdpbmRvdy5ldmVudDtcbiAgaWYgKGV2ZW50ICYmIFwicG9wc3RhdGVcIiA9PT0gZXZlbnQudHlwZSkge1xuICAgIGlmIChldmVudCA9PT0gY3VycmVudFBvcHN0YXRlVHJhbnNpdGlvbkV2ZW50KSByZXR1cm4gITE7XG4gICAgY3VycmVudFBvcHN0YXRlVHJhbnNpdGlvbkV2ZW50ID0gZXZlbnQ7XG4gICAgcmV0dXJuICEwO1xuICB9XG4gIGN1cnJlbnRQb3BzdGF0ZVRyYW5zaXRpb25FdmVudCA9IG51bGw7XG4gIHJldHVybiAhMTtcbn1cbnZhciBzY2hlZHVsZVRpbWVvdXQgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBzZXRUaW1lb3V0ID8gc2V0VGltZW91dCA6IHZvaWQgMCxcbiAgY2FuY2VsVGltZW91dCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNsZWFyVGltZW91dCA/IGNsZWFyVGltZW91dCA6IHZvaWQgMCxcbiAgbG9jYWxQcm9taXNlID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgUHJvbWlzZSA/IFByb21pc2UgOiB2b2lkIDAsXG4gIHNjaGVkdWxlTWljcm90YXNrID1cbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBxdWV1ZU1pY3JvdGFza1xuICAgICAgPyBxdWV1ZU1pY3JvdGFza1xuICAgICAgOiBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgbG9jYWxQcm9taXNlXG4gICAgICAgID8gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxQcm9taXNlXG4gICAgICAgICAgICAgIC5yZXNvbHZlKG51bGwpXG4gICAgICAgICAgICAgIC50aGVuKGNhbGxiYWNrKVxuICAgICAgICAgICAgICAuY2F0Y2goaGFuZGxlRXJyb3JJbk5leHRUaWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIDogc2NoZWR1bGVUaW1lb3V0O1xuZnVuY3Rpb24gaGFuZGxlRXJyb3JJbk5leHRUaWNrKGVycm9yKSB7XG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIHRocm93IGVycm9yO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGNsZWFyU3VzcGVuc2VCb3VuZGFyeShwYXJlbnRJbnN0YW5jZSwgc3VzcGVuc2VJbnN0YW5jZSkge1xuICB2YXIgbm9kZSA9IHN1c3BlbnNlSW5zdGFuY2UsXG4gICAgZGVwdGggPSAwO1xuICBkbyB7XG4gICAgdmFyIG5leHROb2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICBwYXJlbnRJbnN0YW5jZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICBpZiAobmV4dE5vZGUgJiYgOCA9PT0gbmV4dE5vZGUubm9kZVR5cGUpXG4gICAgICBpZiAoKChub2RlID0gbmV4dE5vZGUuZGF0YSksIFwiLyRcIiA9PT0gbm9kZSkpIHtcbiAgICAgICAgaWYgKDAgPT09IGRlcHRoKSB7XG4gICAgICAgICAgcGFyZW50SW5zdGFuY2UucmVtb3ZlQ2hpbGQobmV4dE5vZGUpO1xuICAgICAgICAgIHJldHJ5SWZCbG9ja2VkT24oc3VzcGVuc2VJbnN0YW5jZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlcHRoLS07XG4gICAgICB9IGVsc2UgKFwiJFwiICE9PSBub2RlICYmIFwiJD9cIiAhPT0gbm9kZSAmJiBcIiQhXCIgIT09IG5vZGUpIHx8IGRlcHRoKys7XG4gICAgbm9kZSA9IG5leHROb2RlO1xuICB9IHdoaWxlIChub2RlKTtcbiAgcmV0cnlJZkJsb2NrZWRPbihzdXNwZW5zZUluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyU3BhcmluZ2x5KGNvbnRhaW5lcikge1xuICB2YXIgbmV4dE5vZGUgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgbmV4dE5vZGUgJiYgMTAgPT09IG5leHROb2RlLm5vZGVUeXBlICYmIChuZXh0Tm9kZSA9IG5leHROb2RlLm5leHRTaWJsaW5nKTtcbiAgZm9yICg7IG5leHROb2RlOyApIHtcbiAgICB2YXIgbm9kZSA9IG5leHROb2RlO1xuICAgIG5leHROb2RlID0gbmV4dE5vZGUubmV4dFNpYmxpbmc7XG4gICAgc3dpdGNoIChub2RlLm5vZGVOYW1lKSB7XG4gICAgICBjYXNlIFwiSFRNTFwiOlxuICAgICAgY2FzZSBcIkhFQURcIjpcbiAgICAgIGNhc2UgXCJCT0RZXCI6XG4gICAgICAgIGNsZWFyQ29udGFpbmVyU3BhcmluZ2x5KG5vZGUpO1xuICAgICAgICBkZXRhY2hEZWxldGVkSW5zdGFuY2Uobm9kZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgY2FzZSBcIlNDUklQVFwiOlxuICAgICAgY2FzZSBcIlNUWUxFXCI6XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgY2FzZSBcIkxJTktcIjpcbiAgICAgICAgaWYgKFwic3R5bGVzaGVldFwiID09PSBub2RlLnJlbC50b0xvd2VyQ2FzZSgpKSBjb250aW51ZTtcbiAgICB9XG4gICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKG5vZGUpO1xuICB9XG59XG5mdW5jdGlvbiBjYW5IeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCBpblJvb3RPclNpbmdsZXRvbikge1xuICBmb3IgKDsgMSA9PT0gaW5zdGFuY2Uubm9kZVR5cGU7ICkge1xuICAgIHZhciBhbnlQcm9wcyA9IHByb3BzO1xuICAgIGlmIChpbnN0YW5jZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSB0eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWluUm9vdE9yU2luZ2xldG9uICYmXG4gICAgICAgIChcIklOUFVUXCIgIT09IGluc3RhbmNlLm5vZGVOYW1lIHx8IFwiaGlkZGVuXCIgIT09IGluc3RhbmNlLnR5cGUpXG4gICAgICApXG4gICAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAoIWluUm9vdE9yU2luZ2xldG9uKVxuICAgICAgaWYgKFwiaW5wdXRcIiA9PT0gdHlwZSAmJiBcImhpZGRlblwiID09PSBpbnN0YW5jZS50eXBlKSB7XG4gICAgICAgIHZhciBuYW1lID0gbnVsbCA9PSBhbnlQcm9wcy5uYW1lID8gbnVsbCA6IFwiXCIgKyBhbnlQcm9wcy5uYW1lO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgXCJoaWRkZW5cIiA9PT0gYW55UHJvcHMudHlwZSAmJlxuICAgICAgICAgIGluc3RhbmNlLmdldEF0dHJpYnV0ZShcIm5hbWVcIikgPT09IG5hbWVcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgIH0gZWxzZSByZXR1cm4gaW5zdGFuY2U7XG4gICAgZWxzZSBpZiAoIWluc3RhbmNlW2ludGVybmFsSG9pc3RhYmxlTWFya2VyXSlcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwibWV0YVwiOlxuICAgICAgICAgIGlmICghaW5zdGFuY2UuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIikpIGJyZWFrO1xuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICBuYW1lID0gaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwicmVsXCIpO1xuICAgICAgICAgIGlmIChcInN0eWxlc2hlZXRcIiA9PT0gbmFtZSAmJiBpbnN0YW5jZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLXByZWNlZGVuY2VcIikpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgIG5hbWUgIT09IGFueVByb3BzLnJlbCB8fFxuICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSAhPT1cbiAgICAgICAgICAgICAgKG51bGwgPT0gYW55UHJvcHMuaHJlZiA/IG51bGwgOiBhbnlQcm9wcy5ocmVmKSB8fFxuICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIikgIT09XG4gICAgICAgICAgICAgIChudWxsID09IGFueVByb3BzLmNyb3NzT3JpZ2luID8gbnVsbCA6IGFueVByb3BzLmNyb3NzT3JpZ2luKSB8fFxuICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwidGl0bGVcIikgIT09XG4gICAgICAgICAgICAgIChudWxsID09IGFueVByb3BzLnRpdGxlID8gbnVsbCA6IGFueVByb3BzLnRpdGxlKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgaWYgKGluc3RhbmNlLmhhc0F0dHJpYnV0ZShcImRhdGEtcHJlY2VkZW5jZVwiKSkgYnJlYWs7XG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgbmFtZSA9IGluc3RhbmNlLmdldEF0dHJpYnV0ZShcInNyY1wiKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAobmFtZSAhPT0gKG51bGwgPT0gYW55UHJvcHMuc3JjID8gbnVsbCA6IGFueVByb3BzLnNyYykgfHxcbiAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSAhPT1cbiAgICAgICAgICAgICAgICAobnVsbCA9PSBhbnlQcm9wcy50eXBlID8gbnVsbCA6IGFueVByb3BzLnR5cGUpIHx8XG4gICAgICAgICAgICAgIGluc3RhbmNlLmdldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIpICE9PVxuICAgICAgICAgICAgICAgIChudWxsID09IGFueVByb3BzLmNyb3NzT3JpZ2luID8gbnVsbCA6IGFueVByb3BzLmNyb3NzT3JpZ2luKSkgJiZcbiAgICAgICAgICAgIG5hbWUgJiZcbiAgICAgICAgICAgIGluc3RhbmNlLmhhc0F0dHJpYnV0ZShcImFzeW5jXCIpICYmXG4gICAgICAgICAgICAhaW5zdGFuY2UuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIilcbiAgICAgICAgICApXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgfVxuICAgIGluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoaW5zdGFuY2UubmV4dFNpYmxpbmcpO1xuICAgIGlmIChudWxsID09PSBpbnN0YW5jZSkgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKGluc3RhbmNlLCB0ZXh0LCBpblJvb3RPclNpbmdsZXRvbikge1xuICBpZiAoXCJcIiA9PT0gdGV4dCkgcmV0dXJuIG51bGw7XG4gIGZvciAoOyAzICE9PSBpbnN0YW5jZS5ub2RlVHlwZTsgKSB7XG4gICAgaWYgKFxuICAgICAgKDEgIT09IGluc3RhbmNlLm5vZGVUeXBlIHx8XG4gICAgICAgIFwiSU5QVVRcIiAhPT0gaW5zdGFuY2Uubm9kZU5hbWUgfHxcbiAgICAgICAgXCJoaWRkZW5cIiAhPT0gaW5zdGFuY2UudHlwZSkgJiZcbiAgICAgICFpblJvb3RPclNpbmdsZXRvblxuICAgIClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoaW5zdGFuY2UubmV4dFNpYmxpbmcpO1xuICAgIGlmIChudWxsID09PSBpbnN0YW5jZSkgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGUobm9kZSkge1xuICBmb3IgKDsgbnVsbCAhPSBub2RlOyBub2RlID0gbm9kZS5uZXh0U2libGluZykge1xuICAgIHZhciBub2RlVHlwZSA9IG5vZGUubm9kZVR5cGU7XG4gICAgaWYgKDEgPT09IG5vZGVUeXBlIHx8IDMgPT09IG5vZGVUeXBlKSBicmVhaztcbiAgICBpZiAoOCA9PT0gbm9kZVR5cGUpIHtcbiAgICAgIG5vZGVUeXBlID0gbm9kZS5kYXRhO1xuICAgICAgaWYgKFxuICAgICAgICBcIiRcIiA9PT0gbm9kZVR5cGUgfHxcbiAgICAgICAgXCIkIVwiID09PSBub2RlVHlwZSB8fFxuICAgICAgICBcIiQ/XCIgPT09IG5vZGVUeXBlIHx8XG4gICAgICAgIFwiRiFcIiA9PT0gbm9kZVR5cGUgfHxcbiAgICAgICAgXCJGXCIgPT09IG5vZGVUeXBlXG4gICAgICApXG4gICAgICAgIGJyZWFrO1xuICAgICAgaWYgKFwiLyRcIiA9PT0gbm9kZVR5cGUpIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm9kZTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0SW5zdGFuY2UpIHtcbiAgdGFyZ2V0SW5zdGFuY2UgPSB0YXJnZXRJbnN0YW5jZS5wcmV2aW91c1NpYmxpbmc7XG4gIGZvciAodmFyIGRlcHRoID0gMDsgdGFyZ2V0SW5zdGFuY2U7ICkge1xuICAgIGlmICg4ID09PSB0YXJnZXRJbnN0YW5jZS5ub2RlVHlwZSkge1xuICAgICAgdmFyIGRhdGEgPSB0YXJnZXRJbnN0YW5jZS5kYXRhO1xuICAgICAgaWYgKFwiJFwiID09PSBkYXRhIHx8IFwiJCFcIiA9PT0gZGF0YSB8fCBcIiQ/XCIgPT09IGRhdGEpIHtcbiAgICAgICAgaWYgKDAgPT09IGRlcHRoKSByZXR1cm4gdGFyZ2V0SW5zdGFuY2U7XG4gICAgICAgIGRlcHRoLS07XG4gICAgICB9IGVsc2UgXCIvJFwiID09PSBkYXRhICYmIGRlcHRoKys7XG4gICAgfVxuICAgIHRhcmdldEluc3RhbmNlID0gdGFyZ2V0SW5zdGFuY2UucHJldmlvdXNTaWJsaW5nO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gcmVzb2x2ZVNpbmdsZXRvbkluc3RhbmNlKHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAgcHJvcHMgPSBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBcImh0bWxcIjpcbiAgICAgIHR5cGUgPSBwcm9wcy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICBpZiAoIXR5cGUpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDUyKSk7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICBjYXNlIFwiaGVhZFwiOlxuICAgICAgdHlwZSA9IHByb3BzLmhlYWQ7XG4gICAgICBpZiAoIXR5cGUpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDUzKSk7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICBjYXNlIFwiYm9keVwiOlxuICAgICAgdHlwZSA9IHByb3BzLmJvZHk7XG4gICAgICBpZiAoIXR5cGUpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDU0KSk7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg0NTEpKTtcbiAgfVxufVxudmFyIHByZWxvYWRQcm9wc01hcCA9IG5ldyBNYXAoKSxcbiAgcHJlY29ubmVjdHNTZXQgPSBuZXcgU2V0KCk7XG5mdW5jdGlvbiBnZXRIb2lzdGFibGVSb290KGNvbnRhaW5lcikge1xuICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGFpbmVyLmdldFJvb3ROb2RlXG4gICAgPyBjb250YWluZXIuZ2V0Um9vdE5vZGUoKVxuICAgIDogY29udGFpbmVyLm93bmVyRG9jdW1lbnQ7XG59XG52YXIgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMuZDtcblJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLmQgPSB7XG4gIGY6IGZsdXNoU3luY1dvcmssXG4gIHI6IHJlcXVlc3RGb3JtUmVzZXQsXG4gIEQ6IHByZWZldGNoRE5TLFxuICBDOiBwcmVjb25uZWN0LFxuICBMOiBwcmVsb2FkLFxuICBtOiBwcmVsb2FkTW9kdWxlLFxuICBYOiBwcmVpbml0U2NyaXB0LFxuICBTOiBwcmVpbml0U3R5bGUsXG4gIE06IHByZWluaXRNb2R1bGVTY3JpcHRcbn07XG5mdW5jdGlvbiBmbHVzaFN5bmNXb3JrKCkge1xuICB2YXIgcHJldmlvdXNXYXNSZW5kZXJpbmcgPSBwcmV2aW91c0Rpc3BhdGNoZXIuZigpLFxuICAgIHdhc1JlbmRlcmluZyA9IGZsdXNoU3luY1dvcmskMSgpO1xuICByZXR1cm4gcHJldmlvdXNXYXNSZW5kZXJpbmcgfHwgd2FzUmVuZGVyaW5nO1xufVxuZnVuY3Rpb24gcmVxdWVzdEZvcm1SZXNldChmb3JtKSB7XG4gIHZhciBmb3JtSW5zdCA9IGdldEluc3RhbmNlRnJvbU5vZGUoZm9ybSk7XG4gIG51bGwgIT09IGZvcm1JbnN0ICYmIDUgPT09IGZvcm1JbnN0LnRhZyAmJiBcImZvcm1cIiA9PT0gZm9ybUluc3QudHlwZVxuICAgID8gcmVxdWVzdEZvcm1SZXNldCQxKGZvcm1JbnN0KVxuICAgIDogcHJldmlvdXNEaXNwYXRjaGVyLnIoZm9ybSk7XG59XG52YXIgZ2xvYmFsRG9jdW1lbnQgPSBcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgZG9jdW1lbnQgPyBudWxsIDogZG9jdW1lbnQ7XG5mdW5jdGlvbiBwcmVjb25uZWN0QXMocmVsLCBocmVmLCBjcm9zc09yaWdpbikge1xuICB2YXIgb3duZXJEb2N1bWVudCA9IGdsb2JhbERvY3VtZW50O1xuICBpZiAob3duZXJEb2N1bWVudCAmJiBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBocmVmKSB7XG4gICAgdmFyIGxpbWl0ZWRFc2NhcGVkSHJlZiA9XG4gICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGhyZWYpO1xuICAgIGxpbWl0ZWRFc2NhcGVkSHJlZiA9XG4gICAgICAnbGlua1tyZWw9XCInICsgcmVsICsgJ1wiXVtocmVmPVwiJyArIGxpbWl0ZWRFc2NhcGVkSHJlZiArICdcIl0nO1xuICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBjcm9zc09yaWdpbiAmJlxuICAgICAgKGxpbWl0ZWRFc2NhcGVkSHJlZiArPSAnW2Nyb3Nzb3JpZ2luPVwiJyArIGNyb3NzT3JpZ2luICsgJ1wiXScpO1xuICAgIHByZWNvbm5lY3RzU2V0LmhhcyhsaW1pdGVkRXNjYXBlZEhyZWYpIHx8XG4gICAgICAocHJlY29ubmVjdHNTZXQuYWRkKGxpbWl0ZWRFc2NhcGVkSHJlZiksXG4gICAgICAocmVsID0geyByZWw6IHJlbCwgY3Jvc3NPcmlnaW46IGNyb3NzT3JpZ2luLCBocmVmOiBocmVmIH0pLFxuICAgICAgbnVsbCA9PT0gb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxpbWl0ZWRFc2NhcGVkSHJlZikgJiZcbiAgICAgICAgKChocmVmID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSksXG4gICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGhyZWYsIFwibGlua1wiLCByZWwpLFxuICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGhyZWYpLFxuICAgICAgICBvd25lckRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaHJlZikpKTtcbiAgfVxufVxuZnVuY3Rpb24gcHJlZmV0Y2hETlMoaHJlZikge1xuICBwcmV2aW91c0Rpc3BhdGNoZXIuRChocmVmKTtcbiAgcHJlY29ubmVjdEFzKFwiZG5zLXByZWZldGNoXCIsIGhyZWYsIG51bGwpO1xufVxuZnVuY3Rpb24gcHJlY29ubmVjdChocmVmLCBjcm9zc09yaWdpbikge1xuICBwcmV2aW91c0Rpc3BhdGNoZXIuQyhocmVmLCBjcm9zc09yaWdpbik7XG4gIHByZWNvbm5lY3RBcyhcInByZWNvbm5lY3RcIiwgaHJlZiwgY3Jvc3NPcmlnaW4pO1xufVxuZnVuY3Rpb24gcHJlbG9hZChocmVmLCBhcywgb3B0aW9ucykge1xuICBwcmV2aW91c0Rpc3BhdGNoZXIuTChocmVmLCBhcywgb3B0aW9ucyk7XG4gIHZhciBvd25lckRvY3VtZW50ID0gZ2xvYmFsRG9jdW1lbnQ7XG4gIGlmIChvd25lckRvY3VtZW50ICYmIGhyZWYgJiYgYXMpIHtcbiAgICB2YXIgcHJlbG9hZFNlbGVjdG9yID1cbiAgICAgICdsaW5rW3JlbD1cInByZWxvYWRcIl1bYXM9XCInICtcbiAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoYXMpICtcbiAgICAgICdcIl0nO1xuICAgIFwiaW1hZ2VcIiA9PT0gYXNcbiAgICAgID8gb3B0aW9ucyAmJiBvcHRpb25zLmltYWdlU3JjU2V0XG4gICAgICAgID8gKChwcmVsb2FkU2VsZWN0b3IgKz1cbiAgICAgICAgICAgICdbaW1hZ2VzcmNzZXQ9XCInICtcbiAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoXG4gICAgICAgICAgICAgIG9wdGlvbnMuaW1hZ2VTcmNTZXRcbiAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgJ1wiXScpLFxuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmltYWdlU2l6ZXMgJiZcbiAgICAgICAgICAgIChwcmVsb2FkU2VsZWN0b3IgKz1cbiAgICAgICAgICAgICAgJ1tpbWFnZXNpemVzPVwiJyArXG4gICAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5pbWFnZVNpemVzXG4gICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAnXCJdJykpXG4gICAgICAgIDogKHByZWxvYWRTZWxlY3RvciArPVxuICAgICAgICAgICAgJ1tocmVmPVwiJyArXG4gICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGhyZWYpICtcbiAgICAgICAgICAgICdcIl0nKVxuICAgICAgOiAocHJlbG9hZFNlbGVjdG9yICs9XG4gICAgICAgICAgJ1tocmVmPVwiJyArXG4gICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKSArXG4gICAgICAgICAgJ1wiXScpO1xuICAgIHZhciBrZXkgPSBwcmVsb2FkU2VsZWN0b3I7XG4gICAgc3dpdGNoIChhcykge1xuICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgIGtleSA9IGdldFN0eWxlS2V5KGhyZWYpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAga2V5ID0gZ2V0U2NyaXB0S2V5KGhyZWYpO1xuICAgIH1cbiAgICBwcmVsb2FkUHJvcHNNYXAuaGFzKGtleSkgfHxcbiAgICAgICgoaHJlZiA9IGFzc2lnbihcbiAgICAgICAge1xuICAgICAgICAgIHJlbDogXCJwcmVsb2FkXCIsXG4gICAgICAgICAgaHJlZjpcbiAgICAgICAgICAgIFwiaW1hZ2VcIiA9PT0gYXMgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmltYWdlU3JjU2V0ID8gdm9pZCAwIDogaHJlZixcbiAgICAgICAgICBhczogYXNcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKSksXG4gICAgICBwcmVsb2FkUHJvcHNNYXAuc2V0KGtleSwgaHJlZiksXG4gICAgICBudWxsICE9PSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocHJlbG9hZFNlbGVjdG9yKSB8fFxuICAgICAgICAoXCJzdHlsZVwiID09PSBhcyAmJlxuICAgICAgICAgIG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihnZXRTdHlsZXNoZWV0U2VsZWN0b3JGcm9tS2V5KGtleSkpKSB8fFxuICAgICAgICAoXCJzY3JpcHRcIiA9PT0gYXMgJiZcbiAgICAgICAgICBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KGtleSkpKSB8fFxuICAgICAgICAoKGFzID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSksXG4gICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGFzLCBcImxpbmtcIiwgaHJlZiksXG4gICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoYXMpLFxuICAgICAgICBvd25lckRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYXMpKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHByZWxvYWRNb2R1bGUoaHJlZiwgb3B0aW9ucykge1xuICBwcmV2aW91c0Rpc3BhdGNoZXIubShocmVmLCBvcHRpb25zKTtcbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxEb2N1bWVudDtcbiAgaWYgKG93bmVyRG9jdW1lbnQgJiYgaHJlZikge1xuICAgIHZhciBhcyA9IG9wdGlvbnMgJiYgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuYXMgPyBvcHRpb25zLmFzIDogXCJzY3JpcHRcIixcbiAgICAgIHByZWxvYWRTZWxlY3RvciA9XG4gICAgICAgICdsaW5rW3JlbD1cIm1vZHVsZXByZWxvYWRcIl1bYXM9XCInICtcbiAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhhcykgK1xuICAgICAgICAnXCJdW2hyZWY9XCInICtcbiAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKSArXG4gICAgICAgICdcIl0nLFxuICAgICAga2V5ID0gcHJlbG9hZFNlbGVjdG9yO1xuICAgIHN3aXRjaCAoYXMpIHtcbiAgICAgIGNhc2UgXCJhdWRpb3dvcmtsZXRcIjpcbiAgICAgIGNhc2UgXCJwYWludHdvcmtsZXRcIjpcbiAgICAgIGNhc2UgXCJzZXJ2aWNld29ya2VyXCI6XG4gICAgICBjYXNlIFwic2hhcmVkd29ya2VyXCI6XG4gICAgICBjYXNlIFwid29ya2VyXCI6XG4gICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgIGtleSA9IGdldFNjcmlwdEtleShocmVmKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgIXByZWxvYWRQcm9wc01hcC5oYXMoa2V5KSAmJlxuICAgICAgKChocmVmID0gYXNzaWduKHsgcmVsOiBcIm1vZHVsZXByZWxvYWRcIiwgaHJlZjogaHJlZiB9LCBvcHRpb25zKSksXG4gICAgICBwcmVsb2FkUHJvcHNNYXAuc2V0KGtleSwgaHJlZiksXG4gICAgICBudWxsID09PSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocHJlbG9hZFNlbGVjdG9yKSlcbiAgICApIHtcbiAgICAgIHN3aXRjaCAoYXMpIHtcbiAgICAgICAgY2FzZSBcImF1ZGlvd29ya2xldFwiOlxuICAgICAgICBjYXNlIFwicGFpbnR3b3JrbGV0XCI6XG4gICAgICAgIGNhc2UgXCJzZXJ2aWNld29ya2VyXCI6XG4gICAgICAgIGNhc2UgXCJzaGFyZWR3b3JrZXJcIjpcbiAgICAgICAgY2FzZSBcIndvcmtlclwiOlxuICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgaWYgKG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihnZXRTY3JpcHRTZWxlY3RvckZyb21LZXkoa2V5KSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhcyA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG4gICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhhcywgXCJsaW5rXCIsIGhyZWYpO1xuICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShhcyk7XG4gICAgICBvd25lckRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYXMpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJlaW5pdFN0eWxlKGhyZWYsIHByZWNlZGVuY2UsIG9wdGlvbnMpIHtcbiAgcHJldmlvdXNEaXNwYXRjaGVyLlMoaHJlZiwgcHJlY2VkZW5jZSwgb3B0aW9ucyk7XG4gIHZhciBvd25lckRvY3VtZW50ID0gZ2xvYmFsRG9jdW1lbnQ7XG4gIGlmIChvd25lckRvY3VtZW50ICYmIGhyZWYpIHtcbiAgICB2YXIgc3R5bGVzID0gZ2V0UmVzb3VyY2VzRnJvbVJvb3Qob3duZXJEb2N1bWVudCkuaG9pc3RhYmxlU3R5bGVzLFxuICAgICAga2V5ID0gZ2V0U3R5bGVLZXkoaHJlZik7XG4gICAgcHJlY2VkZW5jZSA9IHByZWNlZGVuY2UgfHwgXCJkZWZhdWx0XCI7XG4gICAgdmFyIHJlc291cmNlID0gc3R5bGVzLmdldChrZXkpO1xuICAgIGlmICghcmVzb3VyY2UpIHtcbiAgICAgIHZhciBzdGF0ZSA9IHsgbG9hZGluZzogMCwgcHJlbG9hZDogbnVsbCB9O1xuICAgICAgaWYgKFxuICAgICAgICAocmVzb3VyY2UgPSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShrZXkpXG4gICAgICAgICkpXG4gICAgICApXG4gICAgICAgIHN0YXRlLmxvYWRpbmcgPSA1O1xuICAgICAgZWxzZSB7XG4gICAgICAgIGhyZWYgPSBhc3NpZ24oXG4gICAgICAgICAgeyByZWw6IFwic3R5bGVzaGVldFwiLCBocmVmOiBocmVmLCBcImRhdGEtcHJlY2VkZW5jZVwiOiBwcmVjZWRlbmNlIH0sXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICAob3B0aW9ucyA9IHByZWxvYWRQcm9wc01hcC5nZXQoa2V5KSkgJiZcbiAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclN0eWxlc2hlZXQoaHJlZiwgb3B0aW9ucyk7XG4gICAgICAgIHZhciBsaW5rID0gKHJlc291cmNlID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSk7XG4gICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUobGluayk7XG4gICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGxpbmssIFwibGlua1wiLCBocmVmKTtcbiAgICAgICAgbGluay5fcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBsaW5rLm9ubG9hZCA9IHJlc29sdmU7XG4gICAgICAgICAgbGluay5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3RhdGUubG9hZGluZyB8PSAxO1xuICAgICAgICB9KTtcbiAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0YXRlLmxvYWRpbmcgfD0gMjtcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YXRlLmxvYWRpbmcgfD0gNDtcbiAgICAgICAgaW5zZXJ0U3R5bGVzaGVldChyZXNvdXJjZSwgcHJlY2VkZW5jZSwgb3duZXJEb2N1bWVudCk7XG4gICAgICB9XG4gICAgICByZXNvdXJjZSA9IHtcbiAgICAgICAgdHlwZTogXCJzdHlsZXNoZWV0XCIsXG4gICAgICAgIGluc3RhbmNlOiByZXNvdXJjZSxcbiAgICAgICAgY291bnQ6IDEsXG4gICAgICAgIHN0YXRlOiBzdGF0ZVxuICAgICAgfTtcbiAgICAgIHN0eWxlcy5zZXQoa2V5LCByZXNvdXJjZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwcmVpbml0U2NyaXB0KHNyYywgb3B0aW9ucykge1xuICBwcmV2aW91c0Rpc3BhdGNoZXIuWChzcmMsIG9wdGlvbnMpO1xuICB2YXIgb3duZXJEb2N1bWVudCA9IGdsb2JhbERvY3VtZW50O1xuICBpZiAob3duZXJEb2N1bWVudCAmJiBzcmMpIHtcbiAgICB2YXIgc2NyaXB0cyA9IGdldFJlc291cmNlc0Zyb21Sb290KG93bmVyRG9jdW1lbnQpLmhvaXN0YWJsZVNjcmlwdHMsXG4gICAgICBrZXkgPSBnZXRTY3JpcHRLZXkoc3JjKSxcbiAgICAgIHJlc291cmNlID0gc2NyaXB0cy5nZXQoa2V5KTtcbiAgICByZXNvdXJjZSB8fFxuICAgICAgKChyZXNvdXJjZSA9IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihnZXRTY3JpcHRTZWxlY3RvckZyb21LZXkoa2V5KSkpLFxuICAgICAgcmVzb3VyY2UgfHxcbiAgICAgICAgKChzcmMgPSBhc3NpZ24oeyBzcmM6IHNyYywgYXN5bmM6ICEwIH0sIG9wdGlvbnMpKSxcbiAgICAgICAgKG9wdGlvbnMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KGtleSkpICYmXG4gICAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTY3JpcHQoc3JjLCBvcHRpb25zKSxcbiAgICAgICAgKHJlc291cmNlID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSxcbiAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShyZXNvdXJjZSksXG4gICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKHJlc291cmNlLCBcImxpbmtcIiwgc3JjKSxcbiAgICAgICAgb3duZXJEb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHJlc291cmNlKSksXG4gICAgICAocmVzb3VyY2UgPSB7XG4gICAgICAgIHR5cGU6IFwic2NyaXB0XCIsXG4gICAgICAgIGluc3RhbmNlOiByZXNvdXJjZSxcbiAgICAgICAgY291bnQ6IDEsXG4gICAgICAgIHN0YXRlOiBudWxsXG4gICAgICB9KSxcbiAgICAgIHNjcmlwdHMuc2V0KGtleSwgcmVzb3VyY2UpKTtcbiAgfVxufVxuZnVuY3Rpb24gcHJlaW5pdE1vZHVsZVNjcmlwdChzcmMsIG9wdGlvbnMpIHtcbiAgcHJldmlvdXNEaXNwYXRjaGVyLk0oc3JjLCBvcHRpb25zKTtcbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxEb2N1bWVudDtcbiAgaWYgKG93bmVyRG9jdW1lbnQgJiYgc3JjKSB7XG4gICAgdmFyIHNjcmlwdHMgPSBnZXRSZXNvdXJjZXNGcm9tUm9vdChvd25lckRvY3VtZW50KS5ob2lzdGFibGVTY3JpcHRzLFxuICAgICAga2V5ID0gZ2V0U2NyaXB0S2V5KHNyYyksXG4gICAgICByZXNvdXJjZSA9IHNjcmlwdHMuZ2V0KGtleSk7XG4gICAgcmVzb3VyY2UgfHxcbiAgICAgICgocmVzb3VyY2UgPSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KGtleSkpKSxcbiAgICAgIHJlc291cmNlIHx8XG4gICAgICAgICgoc3JjID0gYXNzaWduKHsgc3JjOiBzcmMsIGFzeW5jOiAhMCwgdHlwZTogXCJtb2R1bGVcIiB9LCBvcHRpb25zKSksXG4gICAgICAgIChvcHRpb25zID0gcHJlbG9hZFByb3BzTWFwLmdldChrZXkpKSAmJlxuICAgICAgICAgIGFkb3B0UHJlbG9hZFByb3BzRm9yU2NyaXB0KHNyYywgb3B0aW9ucyksXG4gICAgICAgIChyZXNvdXJjZSA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSksXG4gICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUocmVzb3VyY2UpLFxuICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhyZXNvdXJjZSwgXCJsaW5rXCIsIHNyYyksXG4gICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyZXNvdXJjZSkpLFxuICAgICAgKHJlc291cmNlID0ge1xuICAgICAgICB0eXBlOiBcInNjcmlwdFwiLFxuICAgICAgICBpbnN0YW5jZTogcmVzb3VyY2UsXG4gICAgICAgIGNvdW50OiAxLFxuICAgICAgICBzdGF0ZTogbnVsbFxuICAgICAgfSksXG4gICAgICBzY3JpcHRzLnNldChrZXksIHJlc291cmNlKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFJlc291cmNlKHR5cGUsIGN1cnJlbnRQcm9wcywgcGVuZGluZ1Byb3BzLCBjdXJyZW50UmVzb3VyY2UpIHtcbiAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPVxuICAgIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpXG4gICAgPyBnZXRIb2lzdGFibGVSb290KEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdClcbiAgICA6IG51bGw7XG4gIGlmICghSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KSB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQ0NikpO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwibWV0YVwiOlxuICAgIGNhc2UgXCJ0aXRsZVwiOlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHBlbmRpbmdQcm9wcy5wcmVjZWRlbmNlICYmXG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwZW5kaW5nUHJvcHMuaHJlZlxuICAgICAgICA/ICgoY3VycmVudFByb3BzID0gZ2V0U3R5bGVLZXkocGVuZGluZ1Byb3BzLmhyZWYpKSxcbiAgICAgICAgICAocGVuZGluZ1Byb3BzID0gZ2V0UmVzb3VyY2VzRnJvbVJvb3QoXG4gICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRcbiAgICAgICAgICApLmhvaXN0YWJsZVN0eWxlcyksXG4gICAgICAgICAgKGN1cnJlbnRSZXNvdXJjZSA9IHBlbmRpbmdQcm9wcy5nZXQoY3VycmVudFByb3BzKSksXG4gICAgICAgICAgY3VycmVudFJlc291cmNlIHx8XG4gICAgICAgICAgICAoKGN1cnJlbnRSZXNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHlsZVwiLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogbnVsbCxcbiAgICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBudWxsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHBlbmRpbmdQcm9wcy5zZXQoY3VycmVudFByb3BzLCBjdXJyZW50UmVzb3VyY2UpKSxcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2UpXG4gICAgICAgIDogeyB0eXBlOiBcInZvaWRcIiwgaW5zdGFuY2U6IG51bGwsIGNvdW50OiAwLCBzdGF0ZTogbnVsbCB9O1xuICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICBpZiAoXG4gICAgICAgIFwic3R5bGVzaGVldFwiID09PSBwZW5kaW5nUHJvcHMucmVsICYmXG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwZW5kaW5nUHJvcHMuaHJlZiAmJlxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcGVuZGluZ1Byb3BzLnByZWNlZGVuY2VcbiAgICAgICkge1xuICAgICAgICB0eXBlID0gZ2V0U3R5bGVLZXkocGVuZGluZ1Byb3BzLmhyZWYpO1xuICAgICAgICB2YXIgc3R5bGVzJDI0MiA9IGdldFJlc291cmNlc0Zyb21Sb290KFxuICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICAgICAgICAgKS5ob2lzdGFibGVTdHlsZXMsXG4gICAgICAgICAgcmVzb3VyY2UkMjQzID0gc3R5bGVzJDI0Mi5nZXQodHlwZSk7XG4gICAgICAgIHJlc291cmNlJDI0MyB8fFxuICAgICAgICAgICgoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5vd25lckRvY3VtZW50IHx8IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCksXG4gICAgICAgICAgKHJlc291cmNlJDI0MyA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwic3R5bGVzaGVldFwiLFxuICAgICAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgIHN0YXRlOiB7IGxvYWRpbmc6IDAsIHByZWxvYWQ6IG51bGwgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHN0eWxlcyQyNDIuc2V0KHR5cGUsIHJlc291cmNlJDI0MyksXG4gICAgICAgICAgKHN0eWxlcyQyNDIgPSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgIGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkodHlwZSlcbiAgICAgICAgICApKSAmJlxuICAgICAgICAgICAgIXN0eWxlcyQyNDIuX3AgJiZcbiAgICAgICAgICAgICgocmVzb3VyY2UkMjQzLmluc3RhbmNlID0gc3R5bGVzJDI0MiksXG4gICAgICAgICAgICAocmVzb3VyY2UkMjQzLnN0YXRlLmxvYWRpbmcgPSA1KSksXG4gICAgICAgICAgcHJlbG9hZFByb3BzTWFwLmhhcyh0eXBlKSB8fFxuICAgICAgICAgICAgKChwZW5kaW5nUHJvcHMgPSB7XG4gICAgICAgICAgICAgIHJlbDogXCJwcmVsb2FkXCIsXG4gICAgICAgICAgICAgIGFzOiBcInN0eWxlXCIsXG4gICAgICAgICAgICAgIGhyZWY6IHBlbmRpbmdQcm9wcy5ocmVmLFxuICAgICAgICAgICAgICBjcm9zc09yaWdpbjogcGVuZGluZ1Byb3BzLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHBlbmRpbmdQcm9wcy5pbnRlZ3JpdHksXG4gICAgICAgICAgICAgIG1lZGlhOiBwZW5kaW5nUHJvcHMubWVkaWEsXG4gICAgICAgICAgICAgIGhyZWZMYW5nOiBwZW5kaW5nUHJvcHMuaHJlZkxhbmcsXG4gICAgICAgICAgICAgIHJlZmVycmVyUG9saWN5OiBwZW5kaW5nUHJvcHMucmVmZXJyZXJQb2xpY3lcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcHJlbG9hZFByb3BzTWFwLnNldCh0eXBlLCBwZW5kaW5nUHJvcHMpLFxuICAgICAgICAgICAgc3R5bGVzJDI0MiB8fFxuICAgICAgICAgICAgICBwcmVsb2FkU3R5bGVzaGVldChcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQsXG4gICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICBwZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UkMjQzLnN0YXRlXG4gICAgICAgICAgICAgICkpKTtcbiAgICAgICAgaWYgKGN1cnJlbnRQcm9wcyAmJiBudWxsID09PSBjdXJyZW50UmVzb3VyY2UpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg1MjgsIFwiXCIpKTtcbiAgICAgICAgcmV0dXJuIHJlc291cmNlJDI0MztcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50UHJvcHMgJiYgbnVsbCAhPT0gY3VycmVudFJlc291cmNlKVxuICAgICAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDUyOSwgXCJcIikpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSBcInNjcmlwdFwiOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGN1cnJlbnRQcm9wcyA9IHBlbmRpbmdQcm9wcy5hc3luYyksXG4gICAgICAgIChwZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHMuc3JjKSxcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHBlbmRpbmdQcm9wcyAmJlxuICAgICAgICBjdXJyZW50UHJvcHMgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY3VycmVudFByb3BzICYmXG4gICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBjdXJyZW50UHJvcHNcbiAgICAgICAgICA/ICgoY3VycmVudFByb3BzID0gZ2V0U2NyaXB0S2V5KHBlbmRpbmdQcm9wcykpLFxuICAgICAgICAgICAgKHBlbmRpbmdQcm9wcyA9IGdldFJlc291cmNlc0Zyb21Sb290KFxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRcbiAgICAgICAgICAgICkuaG9pc3RhYmxlU2NyaXB0cyksXG4gICAgICAgICAgICAoY3VycmVudFJlc291cmNlID0gcGVuZGluZ1Byb3BzLmdldChjdXJyZW50UHJvcHMpKSxcbiAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZSB8fFxuICAgICAgICAgICAgICAoKGN1cnJlbnRSZXNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNjcmlwdFwiLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICAgIHN0YXRlOiBudWxsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBwZW5kaW5nUHJvcHMuc2V0KGN1cnJlbnRQcm9wcywgY3VycmVudFJlc291cmNlKSksXG4gICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UpXG4gICAgICAgICAgOiB7IHR5cGU6IFwidm9pZFwiLCBpbnN0YW5jZTogbnVsbCwgY291bnQ6IDAsIHN0YXRlOiBudWxsIH1cbiAgICAgICk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDQ0LCB0eXBlKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFN0eWxlS2V5KGhyZWYpIHtcbiAgcmV0dXJuICdocmVmPVwiJyArIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoaHJlZikgKyAnXCInO1xufVxuZnVuY3Rpb24gZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShrZXkpIHtcbiAgcmV0dXJuICdsaW5rW3JlbD1cInN0eWxlc2hlZXRcIl1bJyArIGtleSArIFwiXVwiO1xufVxuZnVuY3Rpb24gc3R5bGVzaGVldFByb3BzRnJvbVJhd1Byb3BzKHJhd1Byb3BzKSB7XG4gIHJldHVybiBhc3NpZ24oe30sIHJhd1Byb3BzLCB7XG4gICAgXCJkYXRhLXByZWNlZGVuY2VcIjogcmF3UHJvcHMucHJlY2VkZW5jZSxcbiAgICBwcmVjZWRlbmNlOiBudWxsXG4gIH0pO1xufVxuZnVuY3Rpb24gcHJlbG9hZFN0eWxlc2hlZXQob3duZXJEb2N1bWVudCwga2V5LCBwcmVsb2FkUHJvcHMsIHN0YXRlKSB7XG4gIG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcignbGlua1tyZWw9XCJwcmVsb2FkXCJdW2FzPVwic3R5bGVcIl1bJyArIGtleSArIFwiXVwiKVxuICAgID8gKHN0YXRlLmxvYWRpbmcgPSAxKVxuICAgIDogKChrZXkgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpKSxcbiAgICAgIChzdGF0ZS5wcmVsb2FkID0ga2V5KSxcbiAgICAgIGtleS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoc3RhdGUubG9hZGluZyB8PSAxKTtcbiAgICAgIH0pLFxuICAgICAga2V5LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoc3RhdGUubG9hZGluZyB8PSAyKTtcbiAgICAgIH0pLFxuICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoa2V5LCBcImxpbmtcIiwgcHJlbG9hZFByb3BzKSxcbiAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoa2V5KSxcbiAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChrZXkpKTtcbn1cbmZ1bmN0aW9uIGdldFNjcmlwdEtleShzcmMpIHtcbiAgcmV0dXJuICdbc3JjPVwiJyArIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoc3JjKSArICdcIl0nO1xufVxuZnVuY3Rpb24gZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KGtleSkge1xuICByZXR1cm4gXCJzY3JpcHRbYXN5bmNdXCIgKyBrZXk7XG59XG5mdW5jdGlvbiBhY3F1aXJlUmVzb3VyY2UoaG9pc3RhYmxlUm9vdCwgcmVzb3VyY2UsIHByb3BzKSB7XG4gIHJlc291cmNlLmNvdW50Kys7XG4gIGlmIChudWxsID09PSByZXNvdXJjZS5pbnN0YW5jZSlcbiAgICBzd2l0Y2ggKHJlc291cmNlLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICB2YXIgaW5zdGFuY2UgPSBob2lzdGFibGVSb290LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgJ3N0eWxlW2RhdGEtaHJlZn49XCInICtcbiAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMocHJvcHMuaHJlZikgK1xuICAgICAgICAgICAgJ1wiXSdcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGluc3RhbmNlKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocmVzb3VyY2UuaW5zdGFuY2UgPSBpbnN0YW5jZSksXG4gICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGluc3RhbmNlKSxcbiAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgKTtcbiAgICAgICAgdmFyIHN0eWxlUHJvcHMgPSBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgXCJkYXRhLWhyZWZcIjogcHJvcHMuaHJlZixcbiAgICAgICAgICBcImRhdGEtcHJlY2VkZW5jZVwiOiBwcm9wcy5wcmVjZWRlbmNlLFxuICAgICAgICAgIGhyZWY6IG51bGwsXG4gICAgICAgICAgcHJlY2VkZW5jZTogbnVsbFxuICAgICAgICB9KTtcbiAgICAgICAgaW5zdGFuY2UgPSAoaG9pc3RhYmxlUm9vdC5vd25lckRvY3VtZW50IHx8IGhvaXN0YWJsZVJvb3QpLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgXCJzdHlsZVwiXG4gICAgICAgICk7XG4gICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpO1xuICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhpbnN0YW5jZSwgXCJzdHlsZVwiLCBzdHlsZVByb3BzKTtcbiAgICAgICAgaW5zZXJ0U3R5bGVzaGVldChpbnN0YW5jZSwgcHJvcHMucHJlY2VkZW5jZSwgaG9pc3RhYmxlUm9vdCk7XG4gICAgICAgIHJldHVybiAocmVzb3VyY2UuaW5zdGFuY2UgPSBpbnN0YW5jZSk7XG4gICAgICBjYXNlIFwic3R5bGVzaGVldFwiOlxuICAgICAgICBzdHlsZVByb3BzID0gZ2V0U3R5bGVLZXkocHJvcHMuaHJlZik7XG4gICAgICAgIHZhciBpbnN0YW5jZSQyNDggPSBob2lzdGFibGVSb290LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShzdHlsZVByb3BzKVxuICAgICAgICApO1xuICAgICAgICBpZiAoaW5zdGFuY2UkMjQ4KVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyB8PSA0KSxcbiAgICAgICAgICAgIChyZXNvdXJjZS5pbnN0YW5jZSA9IGluc3RhbmNlJDI0OCksXG4gICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGluc3RhbmNlJDI0OCksXG4gICAgICAgICAgICBpbnN0YW5jZSQyNDhcbiAgICAgICAgICApO1xuICAgICAgICBpbnN0YW5jZSA9IHN0eWxlc2hlZXRQcm9wc0Zyb21SYXdQcm9wcyhwcm9wcyk7XG4gICAgICAgIChzdHlsZVByb3BzID0gcHJlbG9hZFByb3BzTWFwLmdldChzdHlsZVByb3BzKSkgJiZcbiAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclN0eWxlc2hlZXQoaW5zdGFuY2UsIHN0eWxlUHJvcHMpO1xuICAgICAgICBpbnN0YW5jZSQyNDggPSAoXG4gICAgICAgICAgaG9pc3RhYmxlUm9vdC5vd25lckRvY3VtZW50IHx8IGhvaXN0YWJsZVJvb3RcbiAgICAgICAgKS5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcbiAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShpbnN0YW5jZSQyNDgpO1xuICAgICAgICB2YXIgbGlua0luc3RhbmNlID0gaW5zdGFuY2UkMjQ4O1xuICAgICAgICBsaW5rSW5zdGFuY2UuX3AgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgbGlua0luc3RhbmNlLm9ubG9hZCA9IHJlc29sdmU7XG4gICAgICAgICAgbGlua0luc3RhbmNlLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhpbnN0YW5jZSQyNDgsIFwibGlua1wiLCBpbnN0YW5jZSk7XG4gICAgICAgIHJlc291cmNlLnN0YXRlLmxvYWRpbmcgfD0gNDtcbiAgICAgICAgaW5zZXJ0U3R5bGVzaGVldChpbnN0YW5jZSQyNDgsIHByb3BzLnByZWNlZGVuY2UsIGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICByZXR1cm4gKHJlc291cmNlLmluc3RhbmNlID0gaW5zdGFuY2UkMjQ4KTtcbiAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgaW5zdGFuY2UkMjQ4ID0gZ2V0U2NyaXB0S2V5KHByb3BzLnNyYyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoc3R5bGVQcm9wcyA9IGhvaXN0YWJsZVJvb3QucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgIGdldFNjcmlwdFNlbGVjdG9yRnJvbUtleShpbnN0YW5jZSQyNDgpXG4gICAgICAgICAgKSlcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocmVzb3VyY2UuaW5zdGFuY2UgPSBzdHlsZVByb3BzKSxcbiAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoc3R5bGVQcm9wcyksXG4gICAgICAgICAgICBzdHlsZVByb3BzXG4gICAgICAgICAgKTtcbiAgICAgICAgaW5zdGFuY2UgPSBwcm9wcztcbiAgICAgICAgaWYgKChzdHlsZVByb3BzID0gcHJlbG9hZFByb3BzTWFwLmdldChpbnN0YW5jZSQyNDgpKSlcbiAgICAgICAgICAoaW5zdGFuY2UgPSBhc3NpZ24oe30sIHByb3BzKSksXG4gICAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclNjcmlwdChpbnN0YW5jZSwgc3R5bGVQcm9wcyk7XG4gICAgICAgIGhvaXN0YWJsZVJvb3QgPSBob2lzdGFibGVSb290Lm93bmVyRG9jdW1lbnQgfHwgaG9pc3RhYmxlUm9vdDtcbiAgICAgICAgc3R5bGVQcm9wcyA9IGhvaXN0YWJsZVJvb3QuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShzdHlsZVByb3BzKTtcbiAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoc3R5bGVQcm9wcywgXCJsaW5rXCIsIGluc3RhbmNlKTtcbiAgICAgICAgaG9pc3RhYmxlUm9vdC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlUHJvcHMpO1xuICAgICAgICByZXR1cm4gKHJlc291cmNlLmluc3RhbmNlID0gc3R5bGVQcm9wcyk7XG4gICAgICBjYXNlIFwidm9pZFwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDQzLCByZXNvdXJjZS50eXBlKSk7XG4gICAgfVxuICBlbHNlXG4gICAgXCJzdHlsZXNoZWV0XCIgPT09IHJlc291cmNlLnR5cGUgJiZcbiAgICAgIDAgPT09IChyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nICYgNCkgJiZcbiAgICAgICgoaW5zdGFuY2UgPSByZXNvdXJjZS5pbnN0YW5jZSksXG4gICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyB8PSA0KSxcbiAgICAgIGluc2VydFN0eWxlc2hlZXQoaW5zdGFuY2UsIHByb3BzLnByZWNlZGVuY2UsIGhvaXN0YWJsZVJvb3QpKTtcbiAgcmV0dXJuIHJlc291cmNlLmluc3RhbmNlO1xufVxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVzaGVldChpbnN0YW5jZSwgcHJlY2VkZW5jZSwgcm9vdCkge1xuICBmb3IgKFxuICAgIHZhciBub2RlcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgJ2xpbmtbcmVsPVwic3R5bGVzaGVldFwiXVtkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV0nXG4gICAgICApLFxuICAgICAgbGFzdCA9IG5vZGVzLmxlbmd0aCA/IG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdIDogbnVsbCxcbiAgICAgIHByaW9yID0gbGFzdCxcbiAgICAgIGkgPSAwO1xuICAgIGkgPCBub2Rlcy5sZW5ndGg7XG4gICAgaSsrXG4gICkge1xuICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgaWYgKG5vZGUuZGF0YXNldC5wcmVjZWRlbmNlID09PSBwcmVjZWRlbmNlKSBwcmlvciA9IG5vZGU7XG4gICAgZWxzZSBpZiAocHJpb3IgIT09IGxhc3QpIGJyZWFrO1xuICB9XG4gIHByaW9yXG4gICAgPyBwcmlvci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpbnN0YW5jZSwgcHJpb3IubmV4dFNpYmxpbmcpXG4gICAgOiAoKHByZWNlZGVuY2UgPSA5ID09PSByb290Lm5vZGVUeXBlID8gcm9vdC5oZWFkIDogcm9vdCksXG4gICAgICBwcmVjZWRlbmNlLmluc2VydEJlZm9yZShpbnN0YW5jZSwgcHJlY2VkZW5jZS5maXJzdENoaWxkKSk7XG59XG5mdW5jdGlvbiBhZG9wdFByZWxvYWRQcm9wc0ZvclN0eWxlc2hlZXQoc3R5bGVzaGVldFByb3BzLCBwcmVsb2FkUHJvcHMpIHtcbiAgbnVsbCA9PSBzdHlsZXNoZWV0UHJvcHMuY3Jvc3NPcmlnaW4gJiZcbiAgICAoc3R5bGVzaGVldFByb3BzLmNyb3NzT3JpZ2luID0gcHJlbG9hZFByb3BzLmNyb3NzT3JpZ2luKTtcbiAgbnVsbCA9PSBzdHlsZXNoZWV0UHJvcHMucmVmZXJyZXJQb2xpY3kgJiZcbiAgICAoc3R5bGVzaGVldFByb3BzLnJlZmVycmVyUG9saWN5ID0gcHJlbG9hZFByb3BzLnJlZmVycmVyUG9saWN5KTtcbiAgbnVsbCA9PSBzdHlsZXNoZWV0UHJvcHMudGl0bGUgJiYgKHN0eWxlc2hlZXRQcm9wcy50aXRsZSA9IHByZWxvYWRQcm9wcy50aXRsZSk7XG59XG5mdW5jdGlvbiBhZG9wdFByZWxvYWRQcm9wc0ZvclNjcmlwdChzY3JpcHRQcm9wcywgcHJlbG9hZFByb3BzKSB7XG4gIG51bGwgPT0gc2NyaXB0UHJvcHMuY3Jvc3NPcmlnaW4gJiZcbiAgICAoc2NyaXB0UHJvcHMuY3Jvc3NPcmlnaW4gPSBwcmVsb2FkUHJvcHMuY3Jvc3NPcmlnaW4pO1xuICBudWxsID09IHNjcmlwdFByb3BzLnJlZmVycmVyUG9saWN5ICYmXG4gICAgKHNjcmlwdFByb3BzLnJlZmVycmVyUG9saWN5ID0gcHJlbG9hZFByb3BzLnJlZmVycmVyUG9saWN5KTtcbiAgbnVsbCA9PSBzY3JpcHRQcm9wcy5pbnRlZ3JpdHkgJiZcbiAgICAoc2NyaXB0UHJvcHMuaW50ZWdyaXR5ID0gcHJlbG9hZFByb3BzLmludGVncml0eSk7XG59XG52YXIgdGFnQ2FjaGVzID0gbnVsbDtcbmZ1bmN0aW9uIGdldEh5ZHJhdGFibGVIb2lzdGFibGVDYWNoZSh0eXBlLCBrZXlBdHRyaWJ1dGUsIG93bmVyRG9jdW1lbnQpIHtcbiAgaWYgKG51bGwgPT09IHRhZ0NhY2hlcykge1xuICAgIHZhciBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgICB2YXIgY2FjaGVzID0gKHRhZ0NhY2hlcyA9IG5ldyBNYXAoKSk7XG4gICAgY2FjaGVzLnNldChvd25lckRvY3VtZW50LCBjYWNoZSk7XG4gIH0gZWxzZVxuICAgIChjYWNoZXMgPSB0YWdDYWNoZXMpLFxuICAgICAgKGNhY2hlID0gY2FjaGVzLmdldChvd25lckRvY3VtZW50KSksXG4gICAgICBjYWNoZSB8fCAoKGNhY2hlID0gbmV3IE1hcCgpKSwgY2FjaGVzLnNldChvd25lckRvY3VtZW50LCBjYWNoZSkpO1xuICBpZiAoY2FjaGUuaGFzKHR5cGUpKSByZXR1cm4gY2FjaGU7XG4gIGNhY2hlLnNldCh0eXBlLCBudWxsKTtcbiAgb3duZXJEb2N1bWVudCA9IG93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHlwZSk7XG4gIGZvciAoY2FjaGVzID0gMDsgY2FjaGVzIDwgb3duZXJEb2N1bWVudC5sZW5ndGg7IGNhY2hlcysrKSB7XG4gICAgdmFyIG5vZGUgPSBvd25lckRvY3VtZW50W2NhY2hlc107XG4gICAgaWYgKFxuICAgICAgIShcbiAgICAgICAgbm9kZVtpbnRlcm5hbEhvaXN0YWJsZU1hcmtlcl0gfHxcbiAgICAgICAgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSB8fFxuICAgICAgICAoXCJsaW5rXCIgPT09IHR5cGUgJiYgXCJzdHlsZXNoZWV0XCIgPT09IG5vZGUuZ2V0QXR0cmlidXRlKFwicmVsXCIpKVxuICAgICAgKSAmJlxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiICE9PSBub2RlLm5hbWVzcGFjZVVSSVxuICAgICkge1xuICAgICAgdmFyIG5vZGVLZXkgPSBub2RlLmdldEF0dHJpYnV0ZShrZXlBdHRyaWJ1dGUpIHx8IFwiXCI7XG4gICAgICBub2RlS2V5ID0gdHlwZSArIG5vZGVLZXk7XG4gICAgICB2YXIgZXhpc3RpbmcgPSBjYWNoZS5nZXQobm9kZUtleSk7XG4gICAgICBleGlzdGluZyA/IGV4aXN0aW5nLnB1c2gobm9kZSkgOiBjYWNoZS5zZXQobm9kZUtleSwgW25vZGVdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhY2hlO1xufVxuZnVuY3Rpb24gbW91bnRIb2lzdGFibGUoaG9pc3RhYmxlUm9vdCwgdHlwZSwgaW5zdGFuY2UpIHtcbiAgaG9pc3RhYmxlUm9vdCA9IGhvaXN0YWJsZVJvb3Qub3duZXJEb2N1bWVudCB8fCBob2lzdGFibGVSb290O1xuICBob2lzdGFibGVSb290LmhlYWQuaW5zZXJ0QmVmb3JlKFxuICAgIGluc3RhbmNlLFxuICAgIFwidGl0bGVcIiA9PT0gdHlwZSA/IGhvaXN0YWJsZVJvb3QucXVlcnlTZWxlY3RvcihcImhlYWQgPiB0aXRsZVwiKSA6IG51bGxcbiAgKTtcbn1cbmZ1bmN0aW9uIGlzSG9zdEhvaXN0YWJsZVR5cGUodHlwZSwgcHJvcHMsIGhvc3RDb250ZXh0KSB7XG4gIGlmICgxID09PSBob3N0Q29udGV4dCB8fCBudWxsICE9IHByb3BzLml0ZW1Qcm9wKSByZXR1cm4gITE7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgY2FzZSBcInRpdGxlXCI6XG4gICAgICByZXR1cm4gITA7XG4gICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICBpZiAoXG4gICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wcy5wcmVjZWRlbmNlIHx8XG4gICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wcy5ocmVmIHx8XG4gICAgICAgIFwiXCIgPT09IHByb3BzLmhyZWZcbiAgICAgIClcbiAgICAgICAgYnJlYWs7XG4gICAgICByZXR1cm4gITA7XG4gICAgY2FzZSBcImxpbmtcIjpcbiAgICAgIGlmIChcbiAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHByb3BzLnJlbCB8fFxuICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMuaHJlZiB8fFxuICAgICAgICBcIlwiID09PSBwcm9wcy5ocmVmIHx8XG4gICAgICAgIHByb3BzLm9uTG9hZCB8fFxuICAgICAgICBwcm9wcy5vbkVycm9yXG4gICAgICApXG4gICAgICAgIGJyZWFrO1xuICAgICAgc3dpdGNoIChwcm9wcy5yZWwpIHtcbiAgICAgICAgY2FzZSBcInN0eWxlc2hlZXRcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHR5cGUgPSBwcm9wcy5kaXNhYmxlZCksXG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcHJvcHMucHJlY2VkZW5jZSAmJiBudWxsID09IHR5cGVcbiAgICAgICAgICApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgIH1cbiAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICBpZiAoXG4gICAgICAgIHByb3BzLmFzeW5jICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHByb3BzLmFzeW5jICYmXG4gICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBwcm9wcy5hc3luYyAmJlxuICAgICAgICAhcHJvcHMub25Mb2FkICYmXG4gICAgICAgICFwcm9wcy5vbkVycm9yICYmXG4gICAgICAgIHByb3BzLnNyYyAmJlxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcHJvcHMuc3JjXG4gICAgICApXG4gICAgICAgIHJldHVybiAhMDtcbiAgfVxuICByZXR1cm4gITE7XG59XG5mdW5jdGlvbiBwcmVsb2FkUmVzb3VyY2UocmVzb3VyY2UpIHtcbiAgcmV0dXJuIFwic3R5bGVzaGVldFwiID09PSByZXNvdXJjZS50eXBlICYmIDAgPT09IChyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nICYgMylcbiAgICA/ICExXG4gICAgOiAhMDtcbn1cbnZhciBzdXNwZW5kZWRTdGF0ZSA9IG51bGw7XG5mdW5jdGlvbiBub29wKCkge31cbmZ1bmN0aW9uIHN1c3BlbmRSZXNvdXJjZShob2lzdGFibGVSb290LCByZXNvdXJjZSwgcHJvcHMpIHtcbiAgaWYgKG51bGwgPT09IHN1c3BlbmRlZFN0YXRlKSB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQ3NSkpO1xuICB2YXIgc3RhdGUgPSBzdXNwZW5kZWRTdGF0ZTtcbiAgaWYgKFxuICAgIFwic3R5bGVzaGVldFwiID09PSByZXNvdXJjZS50eXBlICYmXG4gICAgKFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wcy5tZWRpYSB8fFxuICAgICAgITEgIT09IG1hdGNoTWVkaWEocHJvcHMubWVkaWEpLm1hdGNoZXMpICYmXG4gICAgMCA9PT0gKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiA0KVxuICApIHtcbiAgICBpZiAobnVsbCA9PT0gcmVzb3VyY2UuaW5zdGFuY2UpIHtcbiAgICAgIHZhciBrZXkgPSBnZXRTdHlsZUtleShwcm9wcy5ocmVmKSxcbiAgICAgICAgaW5zdGFuY2UgPSBob2lzdGFibGVSb290LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShrZXkpXG4gICAgICAgICk7XG4gICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgaG9pc3RhYmxlUm9vdCA9IGluc3RhbmNlLl9wO1xuICAgICAgICBudWxsICE9PSBob2lzdGFibGVSb290ICYmXG4gICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGhvaXN0YWJsZVJvb3QgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBob2lzdGFibGVSb290LnRoZW4gJiZcbiAgICAgICAgICAoc3RhdGUuY291bnQrKyxcbiAgICAgICAgICAoc3RhdGUgPSBvblVuc3VzcGVuZC5iaW5kKHN0YXRlKSksXG4gICAgICAgICAgaG9pc3RhYmxlUm9vdC50aGVuKHN0YXRlLCBzdGF0ZSkpO1xuICAgICAgICByZXNvdXJjZS5zdGF0ZS5sb2FkaW5nIHw9IDQ7XG4gICAgICAgIHJlc291cmNlLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpbnN0YW5jZSA9IGhvaXN0YWJsZVJvb3Qub3duZXJEb2N1bWVudCB8fCBob2lzdGFibGVSb290O1xuICAgICAgcHJvcHMgPSBzdHlsZXNoZWV0UHJvcHNGcm9tUmF3UHJvcHMocHJvcHMpO1xuICAgICAgKGtleSA9IHByZWxvYWRQcm9wc01hcC5nZXQoa2V5KSkgJiZcbiAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTdHlsZXNoZWV0KHByb3BzLCBrZXkpO1xuICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcbiAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpO1xuICAgICAgdmFyIGxpbmtJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgbGlua0luc3RhbmNlLl9wID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBsaW5rSW5zdGFuY2Uub25sb2FkID0gcmVzb2x2ZTtcbiAgICAgICAgbGlua0luc3RhbmNlLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICB9KTtcbiAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGluc3RhbmNlLCBcImxpbmtcIiwgcHJvcHMpO1xuICAgICAgcmVzb3VyY2UuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICB9XG4gICAgbnVsbCA9PT0gc3RhdGUuc3R5bGVzaGVldHMgJiYgKHN0YXRlLnN0eWxlc2hlZXRzID0gbmV3IE1hcCgpKTtcbiAgICBzdGF0ZS5zdHlsZXNoZWV0cy5zZXQocmVzb3VyY2UsIGhvaXN0YWJsZVJvb3QpO1xuICAgIChob2lzdGFibGVSb290ID0gcmVzb3VyY2Uuc3RhdGUucHJlbG9hZCkgJiZcbiAgICAgIDAgPT09IChyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nICYgMykgJiZcbiAgICAgIChzdGF0ZS5jb3VudCsrLFxuICAgICAgKHJlc291cmNlID0gb25VbnN1c3BlbmQuYmluZChzdGF0ZSkpLFxuICAgICAgaG9pc3RhYmxlUm9vdC5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCByZXNvdXJjZSksXG4gICAgICBob2lzdGFibGVSb290LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZXNvdXJjZSkpO1xuICB9XG59XG5mdW5jdGlvbiB3YWl0Rm9yQ29tbWl0VG9CZVJlYWR5KCkge1xuICBpZiAobnVsbCA9PT0gc3VzcGVuZGVkU3RhdGUpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNDc1KSk7XG4gIHZhciBzdGF0ZSA9IHN1c3BlbmRlZFN0YXRlO1xuICBzdGF0ZS5zdHlsZXNoZWV0cyAmJlxuICAgIDAgPT09IHN0YXRlLmNvdW50ICYmXG4gICAgaW5zZXJ0U3VzcGVuZGVkU3R5bGVzaGVldHMoc3RhdGUsIHN0YXRlLnN0eWxlc2hlZXRzKTtcbiAgcmV0dXJuIDAgPCBzdGF0ZS5jb3VudFxuICAgID8gZnVuY3Rpb24gKGNvbW1pdCkge1xuICAgICAgICB2YXIgc3R5bGVzaGVldFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3RhdGUuc3R5bGVzaGVldHMgJiZcbiAgICAgICAgICAgIGluc2VydFN1c3BlbmRlZFN0eWxlc2hlZXRzKHN0YXRlLCBzdGF0ZS5zdHlsZXNoZWV0cyk7XG4gICAgICAgICAgaWYgKHN0YXRlLnVuc3VzcGVuZCkge1xuICAgICAgICAgICAgdmFyIHVuc3VzcGVuZCA9IHN0YXRlLnVuc3VzcGVuZDtcbiAgICAgICAgICAgIHN0YXRlLnVuc3VzcGVuZCA9IG51bGw7XG4gICAgICAgICAgICB1bnN1c3BlbmQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDZlNCk7XG4gICAgICAgIHN0YXRlLnVuc3VzcGVuZCA9IGNvbW1pdDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzdGF0ZS51bnN1c3BlbmQgPSBudWxsO1xuICAgICAgICAgIGNsZWFyVGltZW91dChzdHlsZXNoZWV0VGltZXIpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIDogbnVsbDtcbn1cbmZ1bmN0aW9uIG9uVW5zdXNwZW5kKCkge1xuICB0aGlzLmNvdW50LS07XG4gIGlmICgwID09PSB0aGlzLmNvdW50KVxuICAgIGlmICh0aGlzLnN0eWxlc2hlZXRzKSBpbnNlcnRTdXNwZW5kZWRTdHlsZXNoZWV0cyh0aGlzLCB0aGlzLnN0eWxlc2hlZXRzKTtcbiAgICBlbHNlIGlmICh0aGlzLnVuc3VzcGVuZCkge1xuICAgICAgdmFyIHVuc3VzcGVuZCA9IHRoaXMudW5zdXNwZW5kO1xuICAgICAgdGhpcy51bnN1c3BlbmQgPSBudWxsO1xuICAgICAgdW5zdXNwZW5kKCk7XG4gICAgfVxufVxudmFyIHByZWNlZGVuY2VzQnlSb290ID0gbnVsbDtcbmZ1bmN0aW9uIGluc2VydFN1c3BlbmRlZFN0eWxlc2hlZXRzKHN0YXRlLCByZXNvdXJjZXMpIHtcbiAgc3RhdGUuc3R5bGVzaGVldHMgPSBudWxsO1xuICBudWxsICE9PSBzdGF0ZS51bnN1c3BlbmQgJiZcbiAgICAoc3RhdGUuY291bnQrKyxcbiAgICAocHJlY2VkZW5jZXNCeVJvb3QgPSBuZXcgTWFwKCkpLFxuICAgIHJlc291cmNlcy5mb3JFYWNoKGluc2VydFN0eWxlc2hlZXRJbnRvUm9vdCwgc3RhdGUpLFxuICAgIChwcmVjZWRlbmNlc0J5Um9vdCA9IG51bGwpLFxuICAgIG9uVW5zdXNwZW5kLmNhbGwoc3RhdGUpKTtcbn1cbmZ1bmN0aW9uIGluc2VydFN0eWxlc2hlZXRJbnRvUm9vdChyb290LCByZXNvdXJjZSkge1xuICBpZiAoIShyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nICYgNCkpIHtcbiAgICB2YXIgcHJlY2VkZW5jZXMgPSBwcmVjZWRlbmNlc0J5Um9vdC5nZXQocm9vdCk7XG4gICAgaWYgKHByZWNlZGVuY2VzKSB2YXIgbGFzdCA9IHByZWNlZGVuY2VzLmdldChudWxsKTtcbiAgICBlbHNlIHtcbiAgICAgIHByZWNlZGVuY2VzID0gbmV3IE1hcCgpO1xuICAgICAgcHJlY2VkZW5jZXNCeVJvb3Quc2V0KHJvb3QsIHByZWNlZGVuY2VzKTtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBub2RlcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgIFwibGlua1tkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV1cIlxuICAgICAgICAgICksXG4gICAgICAgICAgaSA9IDA7XG4gICAgICAgIGkgPCBub2Rlcy5sZW5ndGg7XG4gICAgICAgIGkrK1xuICAgICAgKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBcIkxJTktcIiA9PT0gbm9kZS5ub2RlTmFtZSB8fFxuICAgICAgICAgIFwibm90IGFsbFwiICE9PSBub2RlLmdldEF0dHJpYnV0ZShcIm1lZGlhXCIpXG4gICAgICAgIClcbiAgICAgICAgICBwcmVjZWRlbmNlcy5zZXQobm9kZS5kYXRhc2V0LnByZWNlZGVuY2UsIG5vZGUpLCAobGFzdCA9IG5vZGUpO1xuICAgICAgfVxuICAgICAgbGFzdCAmJiBwcmVjZWRlbmNlcy5zZXQobnVsbCwgbGFzdCk7XG4gICAgfVxuICAgIG5vZGVzID0gcmVzb3VyY2UuaW5zdGFuY2U7XG4gICAgbm9kZSA9IG5vZGVzLmdldEF0dHJpYnV0ZShcImRhdGEtcHJlY2VkZW5jZVwiKTtcbiAgICBpID0gcHJlY2VkZW5jZXMuZ2V0KG5vZGUpIHx8IGxhc3Q7XG4gICAgaSA9PT0gbGFzdCAmJiBwcmVjZWRlbmNlcy5zZXQobnVsbCwgbm9kZXMpO1xuICAgIHByZWNlZGVuY2VzLnNldChub2RlLCBub2Rlcyk7XG4gICAgdGhpcy5jb3VudCsrO1xuICAgIGxhc3QgPSBvblVuc3VzcGVuZC5iaW5kKHRoaXMpO1xuICAgIG5vZGVzLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGxhc3QpO1xuICAgIG5vZGVzLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBsYXN0KTtcbiAgICBpXG4gICAgICA/IGkucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZXMsIGkubmV4dFNpYmxpbmcpXG4gICAgICA6ICgocm9vdCA9IDkgPT09IHJvb3Qubm9kZVR5cGUgPyByb290LmhlYWQgOiByb290KSxcbiAgICAgICAgcm9vdC5pbnNlcnRCZWZvcmUobm9kZXMsIHJvb3QuZmlyc3RDaGlsZCkpO1xuICAgIHJlc291cmNlLnN0YXRlLmxvYWRpbmcgfD0gNDtcbiAgfVxufVxudmFyIEhvc3RUcmFuc2l0aW9uQ29udGV4dCA9IHtcbiAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgUHJvdmlkZXI6IG51bGwsXG4gIENvbnN1bWVyOiBudWxsLFxuICBfY3VycmVudFZhbHVlOiBzaGFyZWROb3RQZW5kaW5nT2JqZWN0LFxuICBfY3VycmVudFZhbHVlMjogc2hhcmVkTm90UGVuZGluZ09iamVjdCxcbiAgX3RocmVhZENvdW50OiAwXG59O1xuZnVuY3Rpb24gRmliZXJSb290Tm9kZShcbiAgY29udGFpbmVySW5mbyxcbiAgdGFnLFxuICBoeWRyYXRlLFxuICBpZGVudGlmaWVyUHJlZml4LFxuICBvblVuY2F1Z2h0RXJyb3IsXG4gIG9uQ2F1Z2h0RXJyb3IsXG4gIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgZm9ybVN0YXRlXG4pIHtcbiAgdGhpcy50YWcgPSAxO1xuICB0aGlzLmNvbnRhaW5lckluZm8gPSBjb250YWluZXJJbmZvO1xuICB0aGlzLmZpbmlzaGVkV29yayA9XG4gICAgdGhpcy5waW5nQ2FjaGUgPVxuICAgIHRoaXMuY3VycmVudCA9XG4gICAgdGhpcy5wZW5kaW5nQ2hpbGRyZW4gPVxuICAgICAgbnVsbDtcbiAgdGhpcy50aW1lb3V0SGFuZGxlID0gLTE7XG4gIHRoaXMuY2FsbGJhY2tOb2RlID1cbiAgICB0aGlzLm5leHQgPVxuICAgIHRoaXMucGVuZGluZ0NvbnRleHQgPVxuICAgIHRoaXMuY29udGV4dCA9XG4gICAgdGhpcy5jYW5jZWxQZW5kaW5nQ29tbWl0ID1cbiAgICAgIG51bGw7XG4gIHRoaXMuY2FsbGJhY2tQcmlvcml0eSA9IDA7XG4gIHRoaXMuZXhwaXJhdGlvblRpbWVzID0gY3JlYXRlTGFuZU1hcCgtMSk7XG4gIHRoaXMuZW50YW5nbGVkTGFuZXMgPVxuICAgIHRoaXMuc2hlbGxTdXNwZW5kQ291bnRlciA9XG4gICAgdGhpcy5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyA9XG4gICAgdGhpcy5maW5pc2hlZExhbmVzID1cbiAgICB0aGlzLmV4cGlyZWRMYW5lcyA9XG4gICAgdGhpcy53YXJtTGFuZXMgPVxuICAgIHRoaXMucGluZ2VkTGFuZXMgPVxuICAgIHRoaXMuc3VzcGVuZGVkTGFuZXMgPVxuICAgIHRoaXMucGVuZGluZ0xhbmVzID1cbiAgICAgIDA7XG4gIHRoaXMuZW50YW5nbGVtZW50cyA9IGNyZWF0ZUxhbmVNYXAoMCk7XG4gIHRoaXMuaGlkZGVuVXBkYXRlcyA9IGNyZWF0ZUxhbmVNYXAobnVsbCk7XG4gIHRoaXMuaWRlbnRpZmllclByZWZpeCA9IGlkZW50aWZpZXJQcmVmaXg7XG4gIHRoaXMub25VbmNhdWdodEVycm9yID0gb25VbmNhdWdodEVycm9yO1xuICB0aGlzLm9uQ2F1Z2h0RXJyb3IgPSBvbkNhdWdodEVycm9yO1xuICB0aGlzLm9uUmVjb3ZlcmFibGVFcnJvciA9IG9uUmVjb3ZlcmFibGVFcnJvcjtcbiAgdGhpcy5wb29sZWRDYWNoZSA9IG51bGw7XG4gIHRoaXMucG9vbGVkQ2FjaGVMYW5lcyA9IDA7XG4gIHRoaXMuZm9ybVN0YXRlID0gZm9ybVN0YXRlO1xuICB0aGlzLmluY29tcGxldGVUcmFuc2l0aW9ucyA9IG5ldyBNYXAoKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyUm9vdChcbiAgY29udGFpbmVySW5mbyxcbiAgdGFnLFxuICBoeWRyYXRlLFxuICBpbml0aWFsQ2hpbGRyZW4sXG4gIGh5ZHJhdGlvbkNhbGxiYWNrcyxcbiAgaXNTdHJpY3RNb2RlLFxuICBpZGVudGlmaWVyUHJlZml4LFxuICBvblVuY2F1Z2h0RXJyb3IsXG4gIG9uQ2F1Z2h0RXJyb3IsXG4gIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgdHJhbnNpdGlvbkNhbGxiYWNrcyxcbiAgZm9ybVN0YXRlXG4pIHtcbiAgY29udGFpbmVySW5mbyA9IG5ldyBGaWJlclJvb3ROb2RlKFxuICAgIGNvbnRhaW5lckluZm8sXG4gICAgdGFnLFxuICAgIGh5ZHJhdGUsXG4gICAgaWRlbnRpZmllclByZWZpeCxcbiAgICBvblVuY2F1Z2h0RXJyb3IsXG4gICAgb25DYXVnaHRFcnJvcixcbiAgICBvblJlY292ZXJhYmxlRXJyb3IsXG4gICAgZm9ybVN0YXRlXG4gICk7XG4gIHRhZyA9IDE7XG4gICEwID09PSBpc1N0cmljdE1vZGUgJiYgKHRhZyB8PSAyNCk7XG4gIGlzU3RyaWN0TW9kZSA9IGNyZWF0ZUZpYmVySW1wbENsYXNzKDMsIG51bGwsIG51bGwsIHRhZyk7XG4gIGNvbnRhaW5lckluZm8uY3VycmVudCA9IGlzU3RyaWN0TW9kZTtcbiAgaXNTdHJpY3RNb2RlLnN0YXRlTm9kZSA9IGNvbnRhaW5lckluZm87XG4gIHRhZyA9IGNyZWF0ZUNhY2hlKCk7XG4gIHRhZy5yZWZDb3VudCsrO1xuICBjb250YWluZXJJbmZvLnBvb2xlZENhY2hlID0gdGFnO1xuICB0YWcucmVmQ291bnQrKztcbiAgaXNTdHJpY3RNb2RlLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgZWxlbWVudDogaW5pdGlhbENoaWxkcmVuLFxuICAgIGlzRGVoeWRyYXRlZDogaHlkcmF0ZSxcbiAgICBjYWNoZTogdGFnXG4gIH07XG4gIGluaXRpYWxpemVVcGRhdGVRdWV1ZShpc1N0cmljdE1vZGUpO1xuICByZXR1cm4gY29udGFpbmVySW5mbztcbn1cbmZ1bmN0aW9uIGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCkge1xuICBpZiAoIXBhcmVudENvbXBvbmVudCkgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgcGFyZW50Q29tcG9uZW50ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICByZXR1cm4gcGFyZW50Q29tcG9uZW50O1xufVxuZnVuY3Rpb24gdXBkYXRlQ29udGFpbmVySW1wbChcbiAgcm9vdEZpYmVyLFxuICBsYW5lLFxuICBlbGVtZW50LFxuICBjb250YWluZXIsXG4gIHBhcmVudENvbXBvbmVudCxcbiAgY2FsbGJhY2tcbikge1xuICBwYXJlbnRDb21wb25lbnQgPSBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpO1xuICBudWxsID09PSBjb250YWluZXIuY29udGV4dFxuICAgID8gKGNvbnRhaW5lci5jb250ZXh0ID0gcGFyZW50Q29tcG9uZW50KVxuICAgIDogKGNvbnRhaW5lci5wZW5kaW5nQ29udGV4dCA9IHBhcmVudENvbXBvbmVudCk7XG4gIGNvbnRhaW5lciA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgY29udGFpbmVyLnBheWxvYWQgPSB7IGVsZW1lbnQ6IGVsZW1lbnQgfTtcbiAgY2FsbGJhY2sgPSB2b2lkIDAgPT09IGNhbGxiYWNrID8gbnVsbCA6IGNhbGxiYWNrO1xuICBudWxsICE9PSBjYWxsYmFjayAmJiAoY29udGFpbmVyLmNhbGxiYWNrID0gY2FsbGJhY2spO1xuICBlbGVtZW50ID0gZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIGNvbnRhaW5lciwgbGFuZSk7XG4gIG51bGwgIT09IGVsZW1lbnQgJiZcbiAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGVsZW1lbnQsIHJvb3RGaWJlciwgbGFuZSksXG4gICAgZW50YW5nbGVUcmFuc2l0aW9ucyhlbGVtZW50LCByb290RmliZXIsIGxhbmUpKTtcbn1cbmZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgZmliZXIgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICBpZiAobnVsbCAhPT0gZmliZXIgJiYgbnVsbCAhPT0gZmliZXIuZGVoeWRyYXRlZCkge1xuICAgIHZhciBhID0gZmliZXIucmV0cnlMYW5lO1xuICAgIGZpYmVyLnJldHJ5TGFuZSA9IDAgIT09IGEgJiYgYSA8IHJldHJ5TGFuZSA/IGEgOiByZXRyeUxhbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSk7XG4gIChmaWJlciA9IGZpYmVyLmFsdGVybmF0ZSkgJiYgbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSk7XG59XG5mdW5jdGlvbiBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihmaWJlcikge1xuICBpZiAoMTMgPT09IGZpYmVyLnRhZykge1xuICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCA2NzEwODg2NCk7XG4gICAgbnVsbCAhPT0gcm9vdCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIDY3MTA4ODY0KTtcbiAgICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgNjcxMDg4NjQpO1xuICB9XG59XG52YXIgX2VuYWJsZWQgPSAhMDtcbmZ1bmN0aW9uIGRpc3BhdGNoRGlzY3JldGVFdmVudChcbiAgZG9tRXZlbnROYW1lLFxuICBldmVudFN5c3RlbUZsYWdzLFxuICBjb250YWluZXIsXG4gIG5hdGl2ZUV2ZW50XG4pIHtcbiAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVDtcbiAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGw7XG4gIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgdHJ5IHtcbiAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IDIpLFxuICAgICAgZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICB9IGZpbmFsbHkge1xuICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJldmlvdXNQcmlvcml0eSksXG4gICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHByZXZUcmFuc2l0aW9uKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlzcGF0Y2hDb250aW51b3VzRXZlbnQoXG4gIGRvbUV2ZW50TmFtZSxcbiAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgY29udGFpbmVyLFxuICBuYXRpdmVFdmVudFxuKSB7XG4gIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBudWxsO1xuICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gIHRyeSB7XG4gICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSA4KSxcbiAgICAgIGRpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgfSBmaW5hbGx5IHtcbiAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByZXZpb3VzUHJpb3JpdHkpLFxuICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbik7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoXG4gIGRvbUV2ZW50TmFtZSxcbiAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgdGFyZ2V0Q29udGFpbmVyLFxuICBuYXRpdmVFdmVudFxuKSB7XG4gIGlmIChfZW5hYmxlZCkge1xuICAgIHZhciBibG9ja2VkT24gPSBmaW5kSW5zdGFuY2VCbG9ja2luZ0V2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICBpZiAobnVsbCA9PT0gYmxvY2tlZE9uKVxuICAgICAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKFxuICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICByZXR1cm5fdGFyZ2V0SW5zdCxcbiAgICAgICAgdGFyZ2V0Q29udGFpbmVyXG4gICAgICApLFxuICAgICAgICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICAgIGVsc2UgaWYgKFxuICAgICAgcXVldWVJZkNvbnRpbnVvdXNFdmVudChcbiAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgIClcbiAgICApXG4gICAgICBuYXRpdmVFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBlbHNlIGlmIChcbiAgICAgIChjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpLFxuICAgICAgZXZlbnRTeXN0ZW1GbGFncyAmIDQgJiZcbiAgICAgICAgLTEgPCBkaXNjcmV0ZVJlcGxheWFibGVFdmVudHMuaW5kZXhPZihkb21FdmVudE5hbWUpKVxuICAgICkge1xuICAgICAgZm9yICg7IG51bGwgIT09IGJsb2NrZWRPbjsgKSB7XG4gICAgICAgIHZhciBmaWJlciA9IGdldEluc3RhbmNlRnJvbU5vZGUoYmxvY2tlZE9uKTtcbiAgICAgICAgaWYgKG51bGwgIT09IGZpYmVyKVxuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGZpYmVyID0gZmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICBpZiAoZmliZXIuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCkge1xuICAgICAgICAgICAgICAgIHZhciBsYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGZpYmVyLnBlbmRpbmdMYW5lcyk7XG4gICAgICAgICAgICAgICAgaWYgKDAgIT09IGxhbmVzKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgcm9vdCA9IGZpYmVyO1xuICAgICAgICAgICAgICAgICAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gMjtcbiAgICAgICAgICAgICAgICAgIGZvciAocm9vdC5lbnRhbmdsZWRMYW5lcyB8PSAyOyBsYW5lczsgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gMSA8PCAoMzEgLSBjbHozMihsYW5lcykpO1xuICAgICAgICAgICAgICAgICAgICByb290LmVudGFuZ2xlbWVudHNbMV0gfD0gbGFuZTtcbiAgICAgICAgICAgICAgICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQoZmliZXIpO1xuICAgICAgICAgICAgICAgICAgMCA9PT0gKGV4ZWN1dGlvbkNvbnRleHQgJiA2KSAmJlxuICAgICAgICAgICAgICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBub3coKSArIDUwMCksXG4gICAgICAgICAgICAgICAgICAgIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKDAsICExKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgKHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpKSxcbiAgICAgICAgICAgICAgICBudWxsICE9PSByb290ICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgMiksXG4gICAgICAgICAgICAgICAgZmx1c2hTeW5jV29yayQxKCksXG4gICAgICAgICAgICAgICAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgZmliZXIgPSBmaW5kSW5zdGFuY2VCbG9ja2luZ0V2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgbnVsbCA9PT0gZmliZXIgJiZcbiAgICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oXG4gICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICByZXR1cm5fdGFyZ2V0SW5zdCxcbiAgICAgICAgICAgIHRhcmdldENvbnRhaW5lclxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChmaWJlciA9PT0gYmxvY2tlZE9uKSBicmVhaztcbiAgICAgICAgYmxvY2tlZE9uID0gZmliZXI7XG4gICAgICB9XG4gICAgICBudWxsICE9PSBibG9ja2VkT24gJiYgbmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSBlbHNlXG4gICAgICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oXG4gICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRhcmdldENvbnRhaW5lclxuICAgICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gZmluZEluc3RhbmNlQmxvY2tpbmdFdmVudChuYXRpdmVFdmVudCkge1xuICBuYXRpdmVFdmVudCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgcmV0dXJuIGZpbmRJbnN0YW5jZUJsb2NraW5nVGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbn1cbnZhciByZXR1cm5fdGFyZ2V0SW5zdCA9IG51bGw7XG5mdW5jdGlvbiBmaW5kSW5zdGFuY2VCbG9ja2luZ1RhcmdldCh0YXJnZXROb2RlKSB7XG4gIHJldHVybl90YXJnZXRJbnN0ID0gbnVsbDtcbiAgdGFyZ2V0Tm9kZSA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldE5vZGUpO1xuICBpZiAobnVsbCAhPT0gdGFyZ2V0Tm9kZSkge1xuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodGFyZ2V0Tm9kZSk7XG4gICAgaWYgKG51bGwgPT09IG5lYXJlc3RNb3VudGVkKSB0YXJnZXROb2RlID0gbnVsbDtcbiAgICBlbHNlIHtcbiAgICAgIHZhciB0YWcgPSBuZWFyZXN0TW91bnRlZC50YWc7XG4gICAgICBpZiAoMTMgPT09IHRhZykge1xuICAgICAgICB0YXJnZXROb2RlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgIGlmIChudWxsICE9PSB0YXJnZXROb2RlKSByZXR1cm4gdGFyZ2V0Tm9kZTtcbiAgICAgICAgdGFyZ2V0Tm9kZSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKDMgPT09IHRhZykge1xuICAgICAgICBpZiAobmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpXG4gICAgICAgICAgcmV0dXJuIDMgPT09IG5lYXJlc3RNb3VudGVkLnRhZ1xuICAgICAgICAgICAgPyBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB0YXJnZXROb2RlID0gbnVsbDtcbiAgICAgIH0gZWxzZSBuZWFyZXN0TW91bnRlZCAhPT0gdGFyZ2V0Tm9kZSAmJiAodGFyZ2V0Tm9kZSA9IG51bGwpO1xuICAgIH1cbiAgfVxuICByZXR1cm5fdGFyZ2V0SW5zdCA9IHRhcmdldE5vZGU7XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0RXZlbnRQcmlvcml0eShkb21FdmVudE5hbWUpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlIFwiYmVmb3JldG9nZ2xlXCI6XG4gICAgY2FzZSBcImNhbmNlbFwiOlxuICAgIGNhc2UgXCJjbGlja1wiOlxuICAgIGNhc2UgXCJjbG9zZVwiOlxuICAgIGNhc2UgXCJjb250ZXh0bWVudVwiOlxuICAgIGNhc2UgXCJjb3B5XCI6XG4gICAgY2FzZSBcImN1dFwiOlxuICAgIGNhc2UgXCJhdXhjbGlja1wiOlxuICAgIGNhc2UgXCJkYmxjbGlja1wiOlxuICAgIGNhc2UgXCJkcmFnZW5kXCI6XG4gICAgY2FzZSBcImRyYWdzdGFydFwiOlxuICAgIGNhc2UgXCJkcm9wXCI6XG4gICAgY2FzZSBcImZvY3VzaW5cIjpcbiAgICBjYXNlIFwiZm9jdXNvdXRcIjpcbiAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICBjYXNlIFwiaW52YWxpZFwiOlxuICAgIGNhc2UgXCJrZXlkb3duXCI6XG4gICAgY2FzZSBcImtleXByZXNzXCI6XG4gICAgY2FzZSBcImtleXVwXCI6XG4gICAgY2FzZSBcIm1vdXNlZG93blwiOlxuICAgIGNhc2UgXCJtb3VzZXVwXCI6XG4gICAgY2FzZSBcInBhc3RlXCI6XG4gICAgY2FzZSBcInBhdXNlXCI6XG4gICAgY2FzZSBcInBsYXlcIjpcbiAgICBjYXNlIFwicG9pbnRlcmNhbmNlbFwiOlxuICAgIGNhc2UgXCJwb2ludGVyZG93blwiOlxuICAgIGNhc2UgXCJwb2ludGVydXBcIjpcbiAgICBjYXNlIFwicmF0ZWNoYW5nZVwiOlxuICAgIGNhc2UgXCJyZXNldFwiOlxuICAgIGNhc2UgXCJyZXNpemVcIjpcbiAgICBjYXNlIFwic2Vla2VkXCI6XG4gICAgY2FzZSBcInN1Ym1pdFwiOlxuICAgIGNhc2UgXCJ0b2dnbGVcIjpcbiAgICBjYXNlIFwidG91Y2hjYW5jZWxcIjpcbiAgICBjYXNlIFwidG91Y2hlbmRcIjpcbiAgICBjYXNlIFwidG91Y2hzdGFydFwiOlxuICAgIGNhc2UgXCJ2b2x1bWVjaGFuZ2VcIjpcbiAgICBjYXNlIFwiY2hhbmdlXCI6XG4gICAgY2FzZSBcInNlbGVjdGlvbmNoYW5nZVwiOlxuICAgIGNhc2UgXCJ0ZXh0SW5wdXRcIjpcbiAgICBjYXNlIFwiY29tcG9zaXRpb25zdGFydFwiOlxuICAgIGNhc2UgXCJjb21wb3NpdGlvbmVuZFwiOlxuICAgIGNhc2UgXCJjb21wb3NpdGlvbnVwZGF0ZVwiOlxuICAgIGNhc2UgXCJiZWZvcmVibHVyXCI6XG4gICAgY2FzZSBcImFmdGVyYmx1clwiOlxuICAgIGNhc2UgXCJiZWZvcmVpbnB1dFwiOlxuICAgIGNhc2UgXCJibHVyXCI6XG4gICAgY2FzZSBcImZ1bGxzY3JlZW5jaGFuZ2VcIjpcbiAgICBjYXNlIFwiZm9jdXNcIjpcbiAgICBjYXNlIFwiaGFzaGNoYW5nZVwiOlxuICAgIGNhc2UgXCJwb3BzdGF0ZVwiOlxuICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICBjYXNlIFwic2VsZWN0c3RhcnRcIjpcbiAgICAgIHJldHVybiAyO1xuICAgIGNhc2UgXCJkcmFnXCI6XG4gICAgY2FzZSBcImRyYWdlbnRlclwiOlxuICAgIGNhc2UgXCJkcmFnZXhpdFwiOlxuICAgIGNhc2UgXCJkcmFnbGVhdmVcIjpcbiAgICBjYXNlIFwiZHJhZ292ZXJcIjpcbiAgICBjYXNlIFwibW91c2Vtb3ZlXCI6XG4gICAgY2FzZSBcIm1vdXNlb3V0XCI6XG4gICAgY2FzZSBcIm1vdXNlb3ZlclwiOlxuICAgIGNhc2UgXCJwb2ludGVybW92ZVwiOlxuICAgIGNhc2UgXCJwb2ludGVyb3V0XCI6XG4gICAgY2FzZSBcInBvaW50ZXJvdmVyXCI6XG4gICAgY2FzZSBcInNjcm9sbFwiOlxuICAgIGNhc2UgXCJ0b3VjaG1vdmVcIjpcbiAgICBjYXNlIFwid2hlZWxcIjpcbiAgICBjYXNlIFwibW91c2VlbnRlclwiOlxuICAgIGNhc2UgXCJtb3VzZWxlYXZlXCI6XG4gICAgY2FzZSBcInBvaW50ZXJlbnRlclwiOlxuICAgIGNhc2UgXCJwb2ludGVybGVhdmVcIjpcbiAgICAgIHJldHVybiA4O1xuICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICBzd2l0Y2ggKGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkpIHtcbiAgICAgICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgY2FzZSBOb3JtYWxQcmlvcml0eSQxOlxuICAgICAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgICAgICAgIHJldHVybiAzMjtcbiAgICAgICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICAgICAgcmV0dXJuIDI2ODQzNTQ1NjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gMzI7XG4gICAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAzMjtcbiAgfVxufVxudmFyIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSAhMSxcbiAgcXVldWVkRm9jdXMgPSBudWxsLFxuICBxdWV1ZWREcmFnID0gbnVsbCxcbiAgcXVldWVkTW91c2UgPSBudWxsLFxuICBxdWV1ZWRQb2ludGVycyA9IG5ldyBNYXAoKSxcbiAgcXVldWVkUG9pbnRlckNhcHR1cmVzID0gbmV3IE1hcCgpLFxuICBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMgPSBbXSxcbiAgZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzID1cbiAgICBcIm1vdXNlZG93biBtb3VzZXVwIHRvdWNoY2FuY2VsIHRvdWNoZW5kIHRvdWNoc3RhcnQgYXV4Y2xpY2sgZGJsY2xpY2sgcG9pbnRlcmNhbmNlbCBwb2ludGVyZG93biBwb2ludGVydXAgZHJhZ2VuZCBkcmFnc3RhcnQgZHJvcCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnN0YXJ0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgaW5wdXQgdGV4dElucHV0IGNvcHkgY3V0IHBhc3RlIGNsaWNrIGNoYW5nZSBjb250ZXh0bWVudSByZXNldFwiLnNwbGl0KFxuICAgICAgXCIgXCJcbiAgICApO1xuZnVuY3Rpb24gY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSBcImZvY3VzaW5cIjpcbiAgICBjYXNlIFwiZm9jdXNvdXRcIjpcbiAgICAgIHF1ZXVlZEZvY3VzID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkcmFnZW50ZXJcIjpcbiAgICBjYXNlIFwiZHJhZ2xlYXZlXCI6XG4gICAgICBxdWV1ZWREcmFnID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJtb3VzZW92ZXJcIjpcbiAgICBjYXNlIFwibW91c2VvdXRcIjpcbiAgICAgIHF1ZXVlZE1vdXNlID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJwb2ludGVyb3ZlclwiOlxuICAgIGNhc2UgXCJwb2ludGVyb3V0XCI6XG4gICAgICBxdWV1ZWRQb2ludGVycy5kZWxldGUobmF0aXZlRXZlbnQucG9pbnRlcklkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOlxuICAgIGNhc2UgXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpcbiAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5kZWxldGUobmF0aXZlRXZlbnQucG9pbnRlcklkKTtcbiAgfVxufVxuZnVuY3Rpb24gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChcbiAgZXhpc3RpbmdRdWV1ZWRFdmVudCxcbiAgYmxvY2tlZE9uLFxuICBkb21FdmVudE5hbWUsXG4gIGV2ZW50U3lzdGVtRmxhZ3MsXG4gIHRhcmdldENvbnRhaW5lcixcbiAgbmF0aXZlRXZlbnRcbikge1xuICBpZiAoXG4gICAgbnVsbCA9PT0gZXhpc3RpbmdRdWV1ZWRFdmVudCB8fFxuICAgIGV4aXN0aW5nUXVldWVkRXZlbnQubmF0aXZlRXZlbnQgIT09IG5hdGl2ZUV2ZW50XG4gIClcbiAgICByZXR1cm4gKFxuICAgICAgKGV4aXN0aW5nUXVldWVkRXZlbnQgPSB7XG4gICAgICAgIGJsb2NrZWRPbjogYmxvY2tlZE9uLFxuICAgICAgICBkb21FdmVudE5hbWU6IGRvbUV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRTeXN0ZW1GbGFnczogZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgbmF0aXZlRXZlbnQ6IG5hdGl2ZUV2ZW50LFxuICAgICAgICB0YXJnZXRDb250YWluZXJzOiBbdGFyZ2V0Q29udGFpbmVyXVxuICAgICAgfSksXG4gICAgICBudWxsICE9PSBibG9ja2VkT24gJiZcbiAgICAgICAgKChibG9ja2VkT24gPSBnZXRJbnN0YW5jZUZyb21Ob2RlKGJsb2NrZWRPbikpLFxuICAgICAgICBudWxsICE9PSBibG9ja2VkT24gJiYgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oYmxvY2tlZE9uKSksXG4gICAgICBleGlzdGluZ1F1ZXVlZEV2ZW50XG4gICAgKTtcbiAgZXhpc3RpbmdRdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzIHw9IGV2ZW50U3lzdGVtRmxhZ3M7XG4gIGJsb2NrZWRPbiA9IGV4aXN0aW5nUXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcbiAgbnVsbCAhPT0gdGFyZ2V0Q29udGFpbmVyICYmXG4gICAgLTEgPT09IGJsb2NrZWRPbi5pbmRleE9mKHRhcmdldENvbnRhaW5lcikgJiZcbiAgICBibG9ja2VkT24ucHVzaCh0YXJnZXRDb250YWluZXIpO1xuICByZXR1cm4gZXhpc3RpbmdRdWV1ZWRFdmVudDtcbn1cbmZ1bmN0aW9uIHF1ZXVlSWZDb250aW51b3VzRXZlbnQoXG4gIGJsb2NrZWRPbixcbiAgZG9tRXZlbnROYW1lLFxuICBldmVudFN5c3RlbUZsYWdzLFxuICB0YXJnZXRDb250YWluZXIsXG4gIG5hdGl2ZUV2ZW50XG4pIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlIFwiZm9jdXNpblwiOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHF1ZXVlZEZvY3VzID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChcbiAgICAgICAgICBxdWV1ZWRGb2N1cyxcbiAgICAgICAgICBibG9ja2VkT24sXG4gICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgICAgIG5hdGl2ZUV2ZW50XG4gICAgICAgICkpLFxuICAgICAgICAhMFxuICAgICAgKTtcbiAgICBjYXNlIFwiZHJhZ2VudGVyXCI6XG4gICAgICByZXR1cm4gKFxuICAgICAgICAocXVldWVkRHJhZyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoXG4gICAgICAgICAgcXVldWVkRHJhZyxcbiAgICAgICAgICBibG9ja2VkT24sXG4gICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgICAgIG5hdGl2ZUV2ZW50XG4gICAgICAgICkpLFxuICAgICAgICAhMFxuICAgICAgKTtcbiAgICBjYXNlIFwibW91c2VvdmVyXCI6XG4gICAgICByZXR1cm4gKFxuICAgICAgICAocXVldWVkTW91c2UgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgICAgIHF1ZXVlZE1vdXNlLFxuICAgICAgICAgIGJsb2NrZWRPbixcbiAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICB0YXJnZXRDb250YWluZXIsXG4gICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgKSksXG4gICAgICAgICEwXG4gICAgICApO1xuICAgIGNhc2UgXCJwb2ludGVyb3ZlclwiOlxuICAgICAgdmFyIHBvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZDtcbiAgICAgIHF1ZXVlZFBvaW50ZXJzLnNldChcbiAgICAgICAgcG9pbnRlcklkLFxuICAgICAgICBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgICAgIHF1ZXVlZFBvaW50ZXJzLmdldChwb2ludGVySWQpIHx8IG51bGwsXG4gICAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuICEwO1xuICAgIGNhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHBvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZCksXG4gICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5zZXQoXG4gICAgICAgICAgcG9pbnRlcklkLFxuICAgICAgICAgIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoXG4gICAgICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZ2V0KHBvaW50ZXJJZCkgfHwgbnVsbCxcbiAgICAgICAgICAgIGJsb2NrZWRPbixcbiAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICB0YXJnZXRDb250YWluZXIsXG4gICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgITBcbiAgICAgICk7XG4gIH1cbiAgcmV0dXJuICExO1xufVxuZnVuY3Rpb24gYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHF1ZXVlZFRhcmdldCkge1xuICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHF1ZXVlZFRhcmdldC50YXJnZXQpO1xuICBpZiAobnVsbCAhPT0gdGFyZ2V0SW5zdCkge1xuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodGFyZ2V0SW5zdCk7XG4gICAgaWYgKG51bGwgIT09IG5lYXJlc3RNb3VudGVkKVxuICAgICAgaWYgKCgodGFyZ2V0SW5zdCA9IG5lYXJlc3RNb3VudGVkLnRhZyksIDEzID09PSB0YXJnZXRJbnN0KSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKCh0YXJnZXRJbnN0ID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCkpLFxuICAgICAgICAgIG51bGwgIT09IHRhcmdldEluc3QpXG4gICAgICAgICkge1xuICAgICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSB0YXJnZXRJbnN0O1xuICAgICAgICAgIHJ1bldpdGhQcmlvcml0eShxdWV1ZWRUYXJnZXQucHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICgxMyA9PT0gbmVhcmVzdE1vdW50ZWQudGFnKSB7XG4gICAgICAgICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoKSxcbiAgICAgICAgICAgICAgICByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKG5lYXJlc3RNb3VudGVkLCBsYW5lKTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcm9vdCAmJlxuICAgICAgICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBuZWFyZXN0TW91bnRlZCwgbGFuZSk7XG4gICAgICAgICAgICAgIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKG5lYXJlc3RNb3VudGVkLCBsYW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIDMgPT09IHRhcmdldEluc3QgJiZcbiAgICAgICAgbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWRcbiAgICAgICkge1xuICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID1cbiAgICAgICAgICAzID09PSBuZWFyZXN0TW91bnRlZC50YWdcbiAgICAgICAgICAgID8gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG4gIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBudWxsO1xufVxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkge1xuICBpZiAobnVsbCAhPT0gcXVldWVkRXZlbnQuYmxvY2tlZE9uKSByZXR1cm4gITE7XG4gIGZvciAoXG4gICAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBxdWV1ZWRFdmVudC50YXJnZXRDb250YWluZXJzO1xuICAgIDAgPCB0YXJnZXRDb250YWluZXJzLmxlbmd0aDtcblxuICApIHtcbiAgICB2YXIgbmV4dEJsb2NrZWRPbiA9IGZpbmRJbnN0YW5jZUJsb2NraW5nRXZlbnQocXVldWVkRXZlbnQubmF0aXZlRXZlbnQpO1xuICAgIGlmIChudWxsID09PSBuZXh0QmxvY2tlZE9uKSB7XG4gICAgICBuZXh0QmxvY2tlZE9uID0gcXVldWVkRXZlbnQubmF0aXZlRXZlbnQ7XG4gICAgICB2YXIgbmF0aXZlRXZlbnRDbG9uZSA9IG5ldyBuZXh0QmxvY2tlZE9uLmNvbnN0cnVjdG9yKFxuICAgICAgICBuZXh0QmxvY2tlZE9uLnR5cGUsXG4gICAgICAgIG5leHRCbG9ja2VkT25cbiAgICAgICk7XG4gICAgICBjdXJyZW50UmVwbGF5aW5nRXZlbnQgPSBuYXRpdmVFdmVudENsb25lO1xuICAgICAgbmV4dEJsb2NrZWRPbi50YXJnZXQuZGlzcGF0Y2hFdmVudChuYXRpdmVFdmVudENsb25lKTtcbiAgICAgIGN1cnJlbnRSZXBsYXlpbmdFdmVudCA9IG51bGw7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm4gKFxuICAgICAgICAodGFyZ2V0Q29udGFpbmVycyA9IGdldEluc3RhbmNlRnJvbU5vZGUobmV4dEJsb2NrZWRPbikpLFxuICAgICAgICBudWxsICE9PSB0YXJnZXRDb250YWluZXJzICYmXG4gICAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24odGFyZ2V0Q29udGFpbmVycyksXG4gICAgICAgIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uKSxcbiAgICAgICAgITFcbiAgICAgICk7XG4gICAgdGFyZ2V0Q29udGFpbmVycy5zaGlmdCgpO1xuICB9XG4gIHJldHVybiAhMDtcbn1cbmZ1bmN0aW9uIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcChxdWV1ZWRFdmVudCwga2V5LCBtYXApIHtcbiAgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkgJiYgbWFwLmRlbGV0ZShrZXkpO1xufVxuZnVuY3Rpb24gcmVwbGF5VW5ibG9ja2VkRXZlbnRzKCkge1xuICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gITE7XG4gIG51bGwgIT09IHF1ZXVlZEZvY3VzICYmXG4gICAgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRGb2N1cykgJiZcbiAgICAocXVldWVkRm9jdXMgPSBudWxsKTtcbiAgbnVsbCAhPT0gcXVldWVkRHJhZyAmJlxuICAgIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRHJhZykgJiZcbiAgICAocXVldWVkRHJhZyA9IG51bGwpO1xuICBudWxsICE9PSBxdWV1ZWRNb3VzZSAmJlxuICAgIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkTW91c2UpICYmXG4gICAgKHF1ZXVlZE1vdXNlID0gbnVsbCk7XG4gIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2goYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKTtcbiAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmZvckVhY2goYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKSB7XG4gIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkICYmXG4gICAgKChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBudWxsKSxcbiAgICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0IHx8XG4gICAgICAoKGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSAhMCksXG4gICAgICBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhcbiAgICAgICAgU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICAgICAgICByZXBsYXlVbmJsb2NrZWRFdmVudHNcbiAgICAgICkpKTtcbn1cbnZhciBsYXN0U2NoZWR1bGVkUmVwbGF5UXVldWUgPSBudWxsO1xuZnVuY3Rpb24gc2NoZWR1bGVSZXBsYXlRdWV1ZUlmTmVlZGVkKGZvcm1SZXBsYXlpbmdRdWV1ZSkge1xuICBsYXN0U2NoZWR1bGVkUmVwbGF5UXVldWUgIT09IGZvcm1SZXBsYXlpbmdRdWV1ZSAmJlxuICAgICgobGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlID0gZm9ybVJlcGxheWluZ1F1ZXVlKSxcbiAgICBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhcbiAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlID09PSBmb3JtUmVwbGF5aW5nUXVldWUgJiZcbiAgICAgICAgICAobGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlID0gbnVsbCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybVJlcGxheWluZ1F1ZXVlLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgICAgdmFyIGZvcm0gPSBmb3JtUmVwbGF5aW5nUXVldWVbaV0sXG4gICAgICAgICAgICBzdWJtaXR0ZXJPckFjdGlvbiA9IGZvcm1SZXBsYXlpbmdRdWV1ZVtpICsgMV0sXG4gICAgICAgICAgICBmb3JtRGF0YSA9IGZvcm1SZXBsYXlpbmdRdWV1ZVtpICsgMl07XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHN1Ym1pdHRlck9yQWN0aW9uKVxuICAgICAgICAgICAgaWYgKG51bGwgPT09IGZpbmRJbnN0YW5jZUJsb2NraW5nVGFyZ2V0KHN1Ym1pdHRlck9yQWN0aW9uIHx8IGZvcm0pKVxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGVsc2UgYnJlYWs7XG4gICAgICAgICAgdmFyIGZvcm1JbnN0ID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShmb3JtKTtcbiAgICAgICAgICBudWxsICE9PSBmb3JtSW5zdCAmJlxuICAgICAgICAgICAgKGZvcm1SZXBsYXlpbmdRdWV1ZS5zcGxpY2UoaSwgMyksXG4gICAgICAgICAgICAoaSAtPSAzKSxcbiAgICAgICAgICAgIHN0YXJ0SG9zdFRyYW5zaXRpb24oXG4gICAgICAgICAgICAgIGZvcm1JbnN0LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGVuZGluZzogITAsXG4gICAgICAgICAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBmb3JtLm1ldGhvZCxcbiAgICAgICAgICAgICAgICBhY3Rpb246IHN1Ym1pdHRlck9yQWN0aW9uXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHN1Ym1pdHRlck9yQWN0aW9uLFxuICAgICAgICAgICAgICBmb3JtRGF0YVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKTtcbn1cbmZ1bmN0aW9uIHJldHJ5SWZCbG9ja2VkT24odW5ibG9ja2VkKSB7XG4gIGZ1bmN0aW9uIHVuYmxvY2socXVldWVkRXZlbnQpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpO1xuICB9XG4gIG51bGwgIT09IHF1ZXVlZEZvY3VzICYmIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRGb2N1cywgdW5ibG9ja2VkKTtcbiAgbnVsbCAhPT0gcXVldWVkRHJhZyAmJiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRHJhZywgdW5ibG9ja2VkKTtcbiAgbnVsbCAhPT0gcXVldWVkTW91c2UgJiYgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZE1vdXNlLCB1bmJsb2NrZWQpO1xuICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKHVuYmxvY2spO1xuICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaCh1bmJsb2NrKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcXVldWVkVGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzW2ldO1xuICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCAmJiAocXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGwpO1xuICB9XG4gIGZvciAoXG4gICAgO1xuICAgIDAgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoICYmXG4gICAgKChpID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzWzBdKSwgbnVsbCA9PT0gaS5ibG9ja2VkT24pO1xuXG4gIClcbiAgICBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQoaSksXG4gICAgICBudWxsID09PSBpLmJsb2NrZWRPbiAmJiBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMuc2hpZnQoKTtcbiAgaSA9ICh1bmJsb2NrZWQub3duZXJEb2N1bWVudCB8fCB1bmJsb2NrZWQpLiQkcmVhY3RGb3JtUmVwbGF5O1xuICBpZiAobnVsbCAhPSBpKVxuICAgIGZvciAocXVldWVkVGFyZ2V0ID0gMDsgcXVldWVkVGFyZ2V0IDwgaS5sZW5ndGg7IHF1ZXVlZFRhcmdldCArPSAzKSB7XG4gICAgICB2YXIgZm9ybSA9IGlbcXVldWVkVGFyZ2V0XSxcbiAgICAgICAgc3VibWl0dGVyT3JBY3Rpb24gPSBpW3F1ZXVlZFRhcmdldCArIDFdLFxuICAgICAgICBmb3JtUHJvcHMgPSBmb3JtW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGw7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygc3VibWl0dGVyT3JBY3Rpb24pXG4gICAgICAgIGZvcm1Qcm9wcyB8fCBzY2hlZHVsZVJlcGxheVF1ZXVlSWZOZWVkZWQoaSk7XG4gICAgICBlbHNlIGlmIChmb3JtUHJvcHMpIHtcbiAgICAgICAgdmFyIGFjdGlvbiA9IG51bGw7XG4gICAgICAgIGlmIChzdWJtaXR0ZXJPckFjdGlvbiAmJiBzdWJtaXR0ZXJPckFjdGlvbi5oYXNBdHRyaWJ1dGUoXCJmb3JtQWN0aW9uXCIpKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICgoZm9ybSA9IHN1Ym1pdHRlck9yQWN0aW9uKSxcbiAgICAgICAgICAgIChmb3JtUHJvcHMgPSBzdWJtaXR0ZXJPckFjdGlvbltpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsKSlcbiAgICAgICAgICApXG4gICAgICAgICAgICBhY3Rpb24gPSBmb3JtUHJvcHMuZm9ybUFjdGlvbjtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBmaW5kSW5zdGFuY2VCbG9ja2luZ1RhcmdldChmb3JtKSkgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIGFjdGlvbiA9IGZvcm1Qcm9wcy5hY3Rpb247XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGFjdGlvblxuICAgICAgICAgID8gKGlbcXVldWVkVGFyZ2V0ICsgMV0gPSBhY3Rpb24pXG4gICAgICAgICAgOiAoaS5zcGxpY2UocXVldWVkVGFyZ2V0LCAzKSwgKHF1ZXVlZFRhcmdldCAtPSAzKSk7XG4gICAgICAgIHNjaGVkdWxlUmVwbGF5UXVldWVJZk5lZWRlZChpKTtcbiAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBSZWFjdERPTVJvb3QoaW50ZXJuYWxSb290KSB7XG4gIHRoaXMuX2ludGVybmFsUm9vdCA9IGludGVybmFsUm9vdDtcbn1cblJlYWN0RE9NSHlkcmF0aW9uUm9vdC5wcm90b3R5cGUucmVuZGVyID0gUmVhY3RET01Sb290LnByb3RvdHlwZS5yZW5kZXIgPVxuICBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcbiAgICBpZiAobnVsbCA9PT0gcm9vdCkgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg0MDkpKTtcbiAgICB2YXIgY3VycmVudCA9IHJvb3QuY3VycmVudCxcbiAgICAgIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZSgpO1xuICAgIHVwZGF0ZUNvbnRhaW5lckltcGwoY3VycmVudCwgbGFuZSwgY2hpbGRyZW4sIHJvb3QsIG51bGwsIG51bGwpO1xuICB9O1xuUmVhY3RET01IeWRyYXRpb25Sb290LnByb3RvdHlwZS51bm1vdW50ID0gUmVhY3RET01Sb290LnByb3RvdHlwZS51bm1vdW50ID1cbiAgZnVuY3Rpb24gKCkge1xuICAgIHZhciByb290ID0gdGhpcy5faW50ZXJuYWxSb290O1xuICAgIGlmIChudWxsICE9PSByb290KSB7XG4gICAgICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBudWxsO1xuICAgICAgdmFyIGNvbnRhaW5lciA9IHJvb3QuY29udGFpbmVySW5mbztcbiAgICAgIDAgPT09IHJvb3QudGFnICYmIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIHVwZGF0ZUNvbnRhaW5lckltcGwocm9vdC5jdXJyZW50LCAyLCBudWxsLCByb290LCBudWxsLCBudWxsKTtcbiAgICAgIGZsdXNoU3luY1dvcmskMSgpO1xuICAgICAgY29udGFpbmVyW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gbnVsbDtcbiAgICB9XG4gIH07XG5mdW5jdGlvbiBSZWFjdERPTUh5ZHJhdGlvblJvb3QoaW50ZXJuYWxSb290KSB7XG4gIHRoaXMuX2ludGVybmFsUm9vdCA9IGludGVybmFsUm9vdDtcbn1cblJlYWN0RE9NSHlkcmF0aW9uUm9vdC5wcm90b3R5cGUudW5zdGFibGVfc2NoZWR1bGVIeWRyYXRpb24gPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIGlmICh0YXJnZXQpIHtcbiAgICB2YXIgdXBkYXRlUHJpb3JpdHkgPSByZXNvbHZlVXBkYXRlUHJpb3JpdHkoKTtcbiAgICB0YXJnZXQgPSB7IGJsb2NrZWRPbjogbnVsbCwgdGFyZ2V0OiB0YXJnZXQsIHByaW9yaXR5OiB1cGRhdGVQcmlvcml0eSB9O1xuICAgIGZvciAoXG4gICAgICB2YXIgaSA9IDA7XG4gICAgICBpIDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aCAmJlxuICAgICAgMCAhPT0gdXBkYXRlUHJpb3JpdHkgJiZcbiAgICAgIHVwZGF0ZVByaW9yaXR5IDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzW2ldLnByaW9yaXR5O1xuICAgICAgaSsrXG4gICAgKTtcbiAgICBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMuc3BsaWNlKGksIDAsIHRhcmdldCk7XG4gICAgMCA9PT0gaSAmJiBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQodGFyZ2V0KTtcbiAgfVxufTtcbnZhciBpc29tb3JwaGljUmVhY3RQYWNrYWdlVmVyc2lvbiRqc2NvbXAkaW5saW5lXzE2ODYgPSBSZWFjdC52ZXJzaW9uO1xuaWYgKFxuICBcIjE5LjAuMFwiICE9PVxuICBpc29tb3JwaGljUmVhY3RQYWNrYWdlVmVyc2lvbiRqc2NvbXAkaW5saW5lXzE2ODZcbilcbiAgdGhyb3cgRXJyb3IoXG4gICAgZm9ybWF0UHJvZEVycm9yTWVzc2FnZShcbiAgICAgIDUyNyxcbiAgICAgIGlzb21vcnBoaWNSZWFjdFBhY2thZ2VWZXJzaW9uJGpzY29tcCRpbmxpbmVfMTY4NixcbiAgICAgIFwiMTkuMC4wXCJcbiAgICApXG4gICk7XG5SZWFjdERPTVNoYXJlZEludGVybmFscy5maW5kRE9NTm9kZSA9IGZ1bmN0aW9uIChjb21wb25lbnRPckVsZW1lbnQpIHtcbiAgdmFyIGZpYmVyID0gY29tcG9uZW50T3JFbGVtZW50Ll9yZWFjdEludGVybmFscztcbiAgaWYgKHZvaWQgMCA9PT0gZmliZXIpIHtcbiAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29tcG9uZW50T3JFbGVtZW50LnJlbmRlcilcbiAgICAgIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTg4KSk7XG4gICAgY29tcG9uZW50T3JFbGVtZW50ID0gT2JqZWN0LmtleXMoY29tcG9uZW50T3JFbGVtZW50KS5qb2luKFwiLFwiKTtcbiAgICB0aHJvdyBFcnJvcihmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDI2OCwgY29tcG9uZW50T3JFbGVtZW50KSk7XG4gIH1cbiAgY29tcG9uZW50T3JFbGVtZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgoZmliZXIpO1xuICBjb21wb25lbnRPckVsZW1lbnQgPVxuICAgIG51bGwgIT09IGNvbXBvbmVudE9yRWxlbWVudFxuICAgICAgPyBmaW5kQ3VycmVudEhvc3RGaWJlckltcGwoY29tcG9uZW50T3JFbGVtZW50KVxuICAgICAgOiBudWxsO1xuICBjb21wb25lbnRPckVsZW1lbnQgPVxuICAgIG51bGwgPT09IGNvbXBvbmVudE9yRWxlbWVudCA/IG51bGwgOiBjb21wb25lbnRPckVsZW1lbnQuc3RhdGVOb2RlO1xuICByZXR1cm4gY29tcG9uZW50T3JFbGVtZW50O1xufTtcbnZhciBpbnRlcm5hbHMkanNjb21wJGlubGluZV8yMTY1ID0ge1xuICBidW5kbGVUeXBlOiAwLFxuICB2ZXJzaW9uOiBcIjE5LjAuMFwiLFxuICByZW5kZXJlclBhY2thZ2VOYW1lOiBcInJlYWN0LWRvbVwiLFxuICBjdXJyZW50RGlzcGF0Y2hlclJlZjogUmVhY3RTaGFyZWRJbnRlcm5hbHMsXG4gIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxcbiAgcmVjb25jaWxlclZlcnNpb246IFwiMTkuMC4wXCJcbn07XG5pZiAoXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXykge1xuICB2YXIgaG9vayRqc2NvbXAkaW5saW5lXzIxNjYgPSBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG4gIGlmIChcbiAgICAhaG9vayRqc2NvbXAkaW5saW5lXzIxNjYuaXNEaXNhYmxlZCAmJlxuICAgIGhvb2skanNjb21wJGlubGluZV8yMTY2LnN1cHBvcnRzRmliZXJcbiAgKVxuICAgIHRyeSB7XG4gICAgICAocmVuZGVyZXJJRCA9IGhvb2skanNjb21wJGlubGluZV8yMTY2LmluamVjdChcbiAgICAgICAgaW50ZXJuYWxzJGpzY29tcCRpbmxpbmVfMjE2NVxuICAgICAgKSksXG4gICAgICAgIChpbmplY3RlZEhvb2sgPSBob29rJGpzY29tcCRpbmxpbmVfMjE2Nik7XG4gICAgfSBjYXRjaCAoZXJyKSB7fVxufVxuZXhwb3J0cy5jcmVhdGVSb290ID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgb3B0aW9ucykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkgdGhyb3cgRXJyb3IoZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyOTkpKTtcbiAgdmFyIGlzU3RyaWN0TW9kZSA9ICExLFxuICAgIGlkZW50aWZpZXJQcmVmaXggPSBcIlwiLFxuICAgIG9uVW5jYXVnaHRFcnJvciA9IGRlZmF1bHRPblVuY2F1Z2h0RXJyb3IsXG4gICAgb25DYXVnaHRFcnJvciA9IGRlZmF1bHRPbkNhdWdodEVycm9yLFxuICAgIG9uUmVjb3ZlcmFibGVFcnJvciA9IGRlZmF1bHRPblJlY292ZXJhYmxlRXJyb3IsXG4gICAgdHJhbnNpdGlvbkNhbGxiYWNrcyA9IG51bGw7XG4gIG51bGwgIT09IG9wdGlvbnMgJiZcbiAgICB2b2lkIDAgIT09IG9wdGlvbnMgJiZcbiAgICAoITAgPT09IG9wdGlvbnMudW5zdGFibGVfc3RyaWN0TW9kZSAmJiAoaXNTdHJpY3RNb2RlID0gITApLFxuICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5pZGVudGlmaWVyUHJlZml4ICYmXG4gICAgICAoaWRlbnRpZmllclByZWZpeCA9IG9wdGlvbnMuaWRlbnRpZmllclByZWZpeCksXG4gICAgdm9pZCAwICE9PSBvcHRpb25zLm9uVW5jYXVnaHRFcnJvciAmJlxuICAgICAgKG9uVW5jYXVnaHRFcnJvciA9IG9wdGlvbnMub25VbmNhdWdodEVycm9yKSxcbiAgICB2b2lkIDAgIT09IG9wdGlvbnMub25DYXVnaHRFcnJvciAmJiAob25DYXVnaHRFcnJvciA9IG9wdGlvbnMub25DYXVnaHRFcnJvciksXG4gICAgdm9pZCAwICE9PSBvcHRpb25zLm9uUmVjb3ZlcmFibGVFcnJvciAmJlxuICAgICAgKG9uUmVjb3ZlcmFibGVFcnJvciA9IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yKSxcbiAgICB2b2lkIDAgIT09IG9wdGlvbnMudW5zdGFibGVfdHJhbnNpdGlvbkNhbGxiYWNrcyAmJlxuICAgICAgKHRyYW5zaXRpb25DYWxsYmFja3MgPSBvcHRpb25zLnVuc3RhYmxlX3RyYW5zaXRpb25DYWxsYmFja3MpKTtcbiAgb3B0aW9ucyA9IGNyZWF0ZUZpYmVyUm9vdChcbiAgICBjb250YWluZXIsXG4gICAgMSxcbiAgICAhMSxcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgaXNTdHJpY3RNb2RlLFxuICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgb25VbmNhdWdodEVycm9yLFxuICAgIG9uQ2F1Z2h0RXJyb3IsXG4gICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgIHRyYW5zaXRpb25DYWxsYmFja3MsXG4gICAgbnVsbFxuICApO1xuICBjb250YWluZXJbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gPSBvcHRpb25zLmN1cnJlbnQ7XG4gIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKFxuICAgIDggPT09IGNvbnRhaW5lci5ub2RlVHlwZSA/IGNvbnRhaW5lci5wYXJlbnROb2RlIDogY29udGFpbmVyXG4gICk7XG4gIHJldHVybiBuZXcgUmVhY3RET01Sb290KG9wdGlvbnMpO1xufTtcbmV4cG9ydHMuaHlkcmF0ZVJvb3QgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBpbml0aWFsQ2hpbGRyZW4sIG9wdGlvbnMpIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHRocm93IEVycm9yKGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjk5KSk7XG4gIHZhciBpc1N0cmljdE1vZGUgPSAhMSxcbiAgICBpZGVudGlmaWVyUHJlZml4ID0gXCJcIixcbiAgICBvblVuY2F1Z2h0RXJyb3IgPSBkZWZhdWx0T25VbmNhdWdodEVycm9yLFxuICAgIG9uQ2F1Z2h0RXJyb3IgPSBkZWZhdWx0T25DYXVnaHRFcnJvcixcbiAgICBvblJlY292ZXJhYmxlRXJyb3IgPSBkZWZhdWx0T25SZWNvdmVyYWJsZUVycm9yLFxuICAgIHRyYW5zaXRpb25DYWxsYmFja3MgPSBudWxsLFxuICAgIGZvcm1TdGF0ZSA9IG51bGw7XG4gIG51bGwgIT09IG9wdGlvbnMgJiZcbiAgICB2b2lkIDAgIT09IG9wdGlvbnMgJiZcbiAgICAoITAgPT09IG9wdGlvbnMudW5zdGFibGVfc3RyaWN0TW9kZSAmJiAoaXNTdHJpY3RNb2RlID0gITApLFxuICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5pZGVudGlmaWVyUHJlZml4ICYmXG4gICAgICAoaWRlbnRpZmllclByZWZpeCA9IG9wdGlvbnMuaWRlbnRpZmllclByZWZpeCksXG4gICAgdm9pZCAwICE9PSBvcHRpb25zLm9uVW5jYXVnaHRFcnJvciAmJlxuICAgICAgKG9uVW5jYXVnaHRFcnJvciA9IG9wdGlvbnMub25VbmNhdWdodEVycm9yKSxcbiAgICB2b2lkIDAgIT09IG9wdGlvbnMub25DYXVnaHRFcnJvciAmJiAob25DYXVnaHRFcnJvciA9IG9wdGlvbnMub25DYXVnaHRFcnJvciksXG4gICAgdm9pZCAwICE9PSBvcHRpb25zLm9uUmVjb3ZlcmFibGVFcnJvciAmJlxuICAgICAgKG9uUmVjb3ZlcmFibGVFcnJvciA9IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yKSxcbiAgICB2b2lkIDAgIT09IG9wdGlvbnMudW5zdGFibGVfdHJhbnNpdGlvbkNhbGxiYWNrcyAmJlxuICAgICAgKHRyYW5zaXRpb25DYWxsYmFja3MgPSBvcHRpb25zLnVuc3RhYmxlX3RyYW5zaXRpb25DYWxsYmFja3MpLFxuICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5mb3JtU3RhdGUgJiYgKGZvcm1TdGF0ZSA9IG9wdGlvbnMuZm9ybVN0YXRlKSk7XG4gIGluaXRpYWxDaGlsZHJlbiA9IGNyZWF0ZUZpYmVyUm9vdChcbiAgICBjb250YWluZXIsXG4gICAgMSxcbiAgICAhMCxcbiAgICBpbml0aWFsQ2hpbGRyZW4sXG4gICAgbnVsbCAhPSBvcHRpb25zID8gb3B0aW9ucyA6IG51bGwsXG4gICAgaXNTdHJpY3RNb2RlLFxuICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgb25VbmNhdWdodEVycm9yLFxuICAgIG9uQ2F1Z2h0RXJyb3IsXG4gICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgIHRyYW5zaXRpb25DYWxsYmFja3MsXG4gICAgZm9ybVN0YXRlXG4gICk7XG4gIGluaXRpYWxDaGlsZHJlbi5jb250ZXh0ID0gZ2V0Q29udGV4dEZvclN1YnRyZWUobnVsbCk7XG4gIG9wdGlvbnMgPSBpbml0aWFsQ2hpbGRyZW4uY3VycmVudDtcbiAgaXNTdHJpY3RNb2RlID0gcmVxdWVzdFVwZGF0ZUxhbmUoKTtcbiAgaWRlbnRpZmllclByZWZpeCA9IGNyZWF0ZVVwZGF0ZShpc1N0cmljdE1vZGUpO1xuICBpZGVudGlmaWVyUHJlZml4LmNhbGxiYWNrID0gbnVsbDtcbiAgZW5xdWV1ZVVwZGF0ZShvcHRpb25zLCBpZGVudGlmaWVyUHJlZml4LCBpc1N0cmljdE1vZGUpO1xuICBpbml0aWFsQ2hpbGRyZW4uY3VycmVudC5sYW5lcyA9IGlzU3RyaWN0TW9kZTtcbiAgbWFya1Jvb3RVcGRhdGVkJDEoaW5pdGlhbENoaWxkcmVuLCBpc1N0cmljdE1vZGUpO1xuICBlbnN1cmVSb290SXNTY2hlZHVsZWQoaW5pdGlhbENoaWxkcmVuKTtcbiAgY29udGFpbmVyW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gaW5pdGlhbENoaWxkcmVuLmN1cnJlbnQ7XG4gIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKGNvbnRhaW5lcik7XG4gIHJldHVybiBuZXcgUmVhY3RET01IeWRyYXRpb25Sb290KGluaXRpYWxDaGlsZHJlbik7XG59O1xuZXhwb3J0cy52ZXJzaW9uID0gXCIxOS4wLjBcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGNoZWNrRENFKCkge1xuICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gIGlmIChcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJyB8fFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkXG4gICAgLy8gaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBjb25kaXRpb24gaXMgdHJ1ZSBvbmx5IGluIGRldmVsb3BtZW50LlxuICAgIC8vIFRoZXJlZm9yZSBpZiB0aGUgYnJhbmNoIGlzIHN0aWxsIGhlcmUsIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3YXNuJ3RcbiAgICAvLyBwcm9wZXJseSBhcHBsaWVkLlxuICAgIC8vIERvbid0IGNoYW5nZSB0aGUgbWVzc2FnZS4gUmVhY3QgRGV2VG9vbHMgcmVsaWVzIG9uIGl0LiBBbHNvIG1ha2Ugc3VyZVxuICAgIC8vIHRoaXMgbWVzc2FnZSBkb2Vzbid0IG9jY3VyIGVsc2V3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLCBvciBpdCB3aWxsIGNhdXNlXG4gICAgLy8gYSBmYWxzZSBwb3NpdGl2ZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ15fXicpO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvZGUgYWJvdmUgaGFzIGJlZW4gZGVhZCBjb2RlIGVsaW1pbmF0ZWQgKERDRSdkKS5cbiAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoY2hlY2tEQ0UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBEZXZUb29scyBzaG91bGRuJ3QgY3Jhc2ggUmVhY3QsIG5vIG1hdHRlciB3aGF0LlxuICAgIC8vIFdlIHNob3VsZCBzdGlsbCByZXBvcnQgaW4gY2FzZSB3ZSBicmVhayB0aGlzIGNvZGUuXG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIERDRSBjaGVjayBzaG91bGQgaGFwcGVuIGJlZm9yZSBSZWFjdERPTSBidW5kbGUgZXhlY3V0ZXMgc28gdGhhdFxuICAvLyBEZXZUb29scyBjYW4gcmVwb3J0IGJhZCBtaW5pZmljYXRpb24gZHVyaW5nIGluamVjdGlvbi5cbiAgY2hlY2tEQ0UoKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20tY2xpZW50LnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLWNsaWVudC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUmVuZGVyLCB1c2VNb2RlbFN0YXRlIH0gZnJvbSBcIkBhbnl3aWRnZXQvcmVhY3RcIjtcbmltcG9ydCBcIi4vd2lkZ2V0LmNzc1wiO1xuXG5jb25zdCBTZXF1ZW5jZUNvbXBvbmVudCA9ICh7IGMsIHBhcnRpY2lwYW50U2VxdWVuY2VzQ291bnQsIG1heCwgc3VtIH06IHsgYzogYW55LCBwYXJ0aWNpcGFudFNlcXVlbmNlc0NvdW50OiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9LCBtYXg6IG51bWJlciwgc3VtOiBudW1iZXIgfSkgPT4ge1xuICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwic2VxdWVuY2VDb21wb25lbnRcIj5cbiAgICB7dHlwZW9mIGMgPT09IFwic3RyaW5nXCIgPyA8ZGl2IGNsYXNzTmFtZT1cInNlcXVlbmNlQ29tcG9uZW50SW5kaXZpZHVhbFwiIHRpdGxlPXtgJHtjfSA9ICR7cGFydGljaXBhbnRTZXF1ZW5jZXNDb3VudFtjXSAvIG1heH1gfSBzdHlsZT17eyBvcGFjaXR5OiBwYXJ0aWNpcGFudFNlcXVlbmNlc0NvdW50W2NdIC8gbWF4IH19IC8+IDpcbiAgICAgICg8PntjLmNvbXBvbmVudHMubWFwKChjaTogYW55LCBpZHg6IG51bWJlcikgPT4gPFNlcXVlbmNlQ29tcG9uZW50IGtleT17aWR4fSBjPXtjaX0gcGFydGljaXBhbnRTZXF1ZW5jZXNDb3VudD17cGFydGljaXBhbnRTZXF1ZW5jZXNDb3VudH0gbWF4PXttYXh9IHN1bT17c3VtfSAvPil9PC8+KX1cbiAgPC9kaXY+KTtcbn1cblxuY29uc3QgZ2V0RmxhdHRlbmVkU2VxdWVuY2VMaXN0ID0gKGQ6IGFueVtdKTogYW55W10gPT4ge1xuICByZXR1cm4gZC5tYXAoKGE6IGFueSkgPT4gdHlwZW9mIGEgPT09IFwic3RyaW5nXCIgPyBhIDogZ2V0RmxhdHRlbmVkU2VxdWVuY2VMaXN0KGEuY29tcG9uZW50cykuZmxhdCgpKTtcbn07XG5cblxuZnVuY3Rpb24gZXh0cmFjdEludGVycnVwdGlvbnMoZDogYW55KSB7XG4gIGxldCBpbnRlcnJ1cHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIFJlY3Vyc2l2ZSBmdW5jdGlvbiB0byB0cmF2ZXJzZSB0aGUgSlNPTiBvYmplY3RcbiAgZnVuY3Rpb24gdHJhdmVyc2Uobm9kZTogYW55KSB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgbm9kZSBoYXMgaW50ZXJydXB0aW9uc1xuICAgIGlmIChub2RlLmludGVycnVwdGlvbnMpIHtcbiAgICAgIG5vZGUuaW50ZXJydXB0aW9ucy5mb3JFYWNoKChpbnRlcnJ1cHRpb246IGFueSkgPT4ge1xuICAgICAgICBpZiAoaW50ZXJydXB0aW9uLmNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpbnRlcnJ1cHRpb25zLnB1c2goLi4uaW50ZXJydXB0aW9uLmNvbXBvbmVudHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBub2RlIGhhcyBjb21wb25lbnRzIGFuZCBwcm9jZXNzIHRoZW0gcmVjdXJzaXZlbHlcbiAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlLmNvbXBvbmVudHMpKSB7XG4gICAgICBub2RlLmNvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICB0cmF2ZXJzZShjb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBTdGFydCB0cmF2ZXJzYWwgZnJvbSB0aGUgcm9vdCBKU09OIG9iamVjdFxuICB0cmF2ZXJzZShkKTtcblxuICByZXR1cm4gaW50ZXJydXB0aW9ucztcbn1cblxuY29uc3QgU2VxdWVuY2UgPSAoeyBkLCBwYXJ0aWNpcGFudFNlcXVlbmNlcyB9OiB7IGQ6IGFueSwgcGFydGljaXBhbnRTZXF1ZW5jZXM6IGFueVtdIH0pID0+IHtcbiAgY29uc3QgW3BhcnRpY2lwYW50U2VxdWVuY2VzQ291bnQsIG1heCwgc3VtXSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHI6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcblxuICAgIGlmIChwYXJ0aWNpcGFudFNlcXVlbmNlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGFsbFN0aW11bGkgPSBnZXRGbGF0dGVuZWRTZXF1ZW5jZUxpc3QocGFydGljaXBhbnRTZXF1ZW5jZXMpLmZsYXQoKTtcblxuICAgICAgY29uc3QgaW50ZXJydXB0aW9ucyA9IGV4dHJhY3RJbnRlcnJ1cHRpb25zKGQpO1xuICAgICAgY29uc29sZS5sb2coaW50ZXJydXB0aW9ucyk7XG5cblxuICAgICAgYWxsU3RpbXVsaS5mb3JFYWNoKChzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFyW3NdKSB7XG4gICAgICAgICAgcltzXSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcltzXSsrO1xuICAgICAgfSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW50ZXJydXB0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBjaGVjayBpZiBrZXkgaXMgaW4gclxuICAgICAgICBpZiAoaW50ZXJydXB0aW9uc1tpXSBpbiByKSB7XG4gICAgICAgICAgZGVsZXRlIHJbaW50ZXJydXB0aW9uc1tpXV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cblxuICAgIGNvbnN0IHN1bSA9IE9iamVjdC52YWx1ZXMocikucmVkdWNlKChhY2MsIHYpID0+IGFjYyArIHYsIDApO1xuXG4gICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoLi4uT2JqZWN0LnZhbHVlcyhyKSk7XG5cbiAgICByZXR1cm4gW3IsIG1heCwgc3VtXTtcblxuICB9LCBbcGFydGljaXBhbnRTZXF1ZW5jZXNdKTtcblxuICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwic2VxdWVuY2VcIj5cbiAgICB7ZC5jb21wb25lbnRzLm1hcCgoYzogYW55LCBpZHg6IG51bWJlcikgPT4gPFNlcXVlbmNlQ29tcG9uZW50IGtleT17aWR4fSBjPXtjfSBwYXJ0aWNpcGFudFNlcXVlbmNlc0NvdW50PXtwYXJ0aWNpcGFudFNlcXVlbmNlc0NvdW50fSBtYXg9e21heH0gc3VtPXtzdW19IC8+KX1cbiAgPC9kaXY+KTtcbn07XG5cbmNvbnN0IHJlbmRlciA9IGNyZWF0ZVJlbmRlcigoKSA9PiB7XG4gIGNvbnN0IFtjb25maWddID0gdXNlTW9kZWxTdGF0ZTxhbnk+KFwiY29uZmlnXCIpO1xuICBjb25zdCBbaWZyYW1lUmVhZHksIHNldElmcmFtZVJlYWR5XSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICBjb25zdCBbcGFnZSwgc2V0UGFnZV0gPSBSZWFjdC51c2VTdGF0ZShcInN0dWR5XCIpO1xuICBjb25zdCBbc2VxdWVuY2VzLCBzZXRTZXF1ZW5jZV0gPSB1c2VNb2RlbFN0YXRlPGFueT4oXCJzZXF1ZW5jZVwiKTtcbiAgY29uc3QgW3BhcnRpY2lwYW50c0RhdGFKU09OLCBzZXRQYXJ0aWNpcGFudHNEYXRhSlNPTl0gPSB1c2VNb2RlbFN0YXRlPGFueT4oXCJwYXJ0aWNpcGFudHNfZGF0YV9qc29uXCIpO1xuICBjb25zdCBbcGFydGljaXBhbnRzRGF0YVRJRFksIHNldFBhcnRpY2lwYW50c0RhdGFUSURZXSA9IHVzZU1vZGVsU3RhdGU8YW55PihcInBhcnRpY2lwYW50c19kYXRhX3RpZHlcIik7XG5cbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmPEhUTUxJRnJhbWVFbGVtZW50PihudWxsKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpZnJhbWVSZWFkeSkge1xuICAgICAgcmVmLmN1cnJlbnQ/LmNvbnRlbnRXaW5kb3c/LnBvc3RNZXNzYWdlKFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJyZXZpc2l0V2lkZ2V0L0NPTkZJR1wiLFxuICAgICAgICAgIHBheWxvYWQ6IEpTT04uc3RyaW5naWZ5KGNvbmZpZyksXG4gICAgICAgIH0sXG4gICAgICAgIFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCJcbiAgICAgICk7XG4gICAgfVxuICB9LCBbY29uZmlnLCBpZnJhbWVSZWFkeV0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZUxpc3RlbmVyID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5kYXRhLnR5cGUgPT09IFwicmV2aXNpdFdpZGdldC9SRUFEWVwiKSB7XG4gICAgICAgIHNldElmcmFtZVJlYWR5KGkgPT4gaSArIDEpO1xuICAgICAgfSBlbHNlIGlmIChldmVudC5kYXRhLnR5cGUgPT09IFwicmV2aXNpdFdpZGdldC9QWVRIT05fRVhQT1JUX0pTT05cIikge1xuICAgICAgICBzZXRQYXJ0aWNpcGFudHNEYXRhSlNPTihldmVudC5kYXRhLnBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudC5kYXRhLnR5cGUgPT09IFwicmV2aXNpdFdpZGdldC9QWVRIT05fRVhQT1JUX1RJRFlcIikge1xuICAgICAgICBzZXRQYXJ0aWNpcGFudHNEYXRhVElEWShldmVudC5kYXRhLnBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudC5kYXRhLnR5cGUgPT09IFwicmV2aXNpdFdpZGdldC9TRVFVRU5DRV9BUlJBWVwiKSB7XG4gICAgICAgIHNldFNlcXVlbmNlKGV2ZW50LmRhdGEucGF5bG9hZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtZXNzYWdlTGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtZXNzYWdlTGlzdGVuZXIpO1xuICAgIH07XG4gIH0sIFtjb25maWddKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmV2aXNpdF9ub3RlYm9va193aWRnZXRcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4geyBzZXRQYWdlKFwic3R1ZHlcIik7IH19IGRpc2FibGVkPXtwYWdlID09PSBcInN0dWR5XCJ9PlN0dWR5PC9idXR0b24+XG4gICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4geyBzZXRQYWdlKFwiYW5hbHlzaXNcIik7IH19IGRpc2FibGVkPXtwYWdlID09PSBcImFuYWx5c2lzXCJ9PkFuYWx5c2lzPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpZnJhbWVcbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIHNyYz17cGFnZSA9PT0gXCJzdHVkeVwiID8gXCJodHRwOi8vbG9jYWxob3N0OjgwODAvX19yZXZpc2l0LXdpZGdldFwiIDogXCJodHRwOi8vbG9jYWxob3N0OjgwODAvYW5hbHlzaXMvc3RhdHMvX19yZXZpc2l0LXdpZGdldFwifVxuICAgICAgICBzdHlsZT17eyB3aWR0aDogXCIxMDAlXCIsIGhlaWdodDogXCI4MDBweFwiIH19XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHsgcmVuZGVyIH07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tL2NsaWVudFwiO1xuXG4vKipcbiAqIEB0eXBlZGVmIFJlbmRlckNvbnRleHRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiQGFueXdpZGdldC90eXBlc1wiKS5BbnlNb2RlbH0gbW9kZWxcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiQGFueXdpZGdldC90eXBlc1wiKS5FeHBlcmltZW50YWx9IGV4cGVyaW1lbnRhbFxuICovXG5cbi8qKiBAdHlwZSB7UmVhY3QuQ29udGV4dDxSZW5kZXJDb250ZXh0Pn0gKi9cbmxldCBSZW5kZXJDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCgvKiogQHR5cGUge2FueX0gKi8gKG51bGwpKTtcblxuLyoqIEByZXR1cm5zIHtSZW5kZXJDb250ZXh0fSAqL1xuZnVuY3Rpb24gdXNlUmVuZGVyQ29udGV4dCgpIHtcblx0bGV0IGN0eCA9IFJlYWN0LnVzZUNvbnRleHQoUmVuZGVyQ29udGV4dCk7XG5cdGlmICghY3R4KSB0aHJvdyBuZXcgRXJyb3IoXCJSZW5kZXJDb250ZXh0IG5vdCBmb3VuZFwiKTtcblx0cmV0dXJuIGN0eDtcbn1cblxuLyoqIEByZXR1cm5zIHtpbXBvcnQoXCJAYW55d2lkZ2V0L3R5cGVzXCIpLkFueU1vZGVsfSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1vZGVsKCkge1xuXHRsZXQgY3R4ID0gdXNlUmVuZGVyQ29udGV4dCgpO1xuXHRyZXR1cm4gY3R4Lm1vZGVsO1xufVxuXG4vKiogQHJldHVybnMge2ltcG9ydChcIkBhbnl3aWRnZXQvdHlwZXNcIikuRXhwZXJpbWVudGFsfSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUV4cGVyaW1lbnRhbCgpIHtcblx0bGV0IGN0eCA9IHVzZVJlbmRlckNvbnRleHQoKTtcblx0cmV0dXJuIGN0eC5leHBlcmltZW50YWw7XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcmV0dXJucyB7W1QsICh2YWx1ZTogVCkgPT4gdm9pZF19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNb2RlbFN0YXRlKGtleSkge1xuXHRsZXQgbW9kZWwgPSB1c2VNb2RlbCgpO1xuXHRsZXQgW3ZhbHVlLCBzZXRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZShtb2RlbC5nZXQoa2V5KSk7XG5cdFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0bGV0IGNhbGxiYWNrID0gKCkgPT4gc2V0VmFsdWUobW9kZWwuZ2V0KGtleSkpO1xuXHRcdG1vZGVsLm9uKGBjaGFuZ2U6JHtrZXl9YCwgY2FsbGJhY2spO1xuXHRcdHJldHVybiAoKSA9PiBtb2RlbC5vZmYoYGNoYW5nZToke2tleX1gLCBjYWxsYmFjayk7XG5cdH0sIFttb2RlbCwga2V5XSk7XG5cdHJldHVybiBbXG5cdFx0dmFsdWUsXG5cdFx0KHZhbHVlKSA9PiB7XG5cdFx0XHRtb2RlbC5zZXQoa2V5LCB2YWx1ZSk7XG5cdFx0XHRtb2RlbC5zYXZlX2NoYW5nZXMoKTtcblx0XHR9LFxuXHRdO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVhY3QuRkN9IFdpZGdldFxuICogQHJldHVybnMge2ltcG9ydChcIkBhbnl3aWRnZXQvdHlwZXNcIikuUmVuZGVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVuZGVyKFdpZGdldCkge1xuXHRyZXR1cm4gKHsgZWwsIG1vZGVsLCBleHBlcmltZW50YWwgfSkgPT4ge1xuXHRcdGxldCByb290ID0gUmVhY3RET00uY3JlYXRlUm9vdChlbCk7XG5cdFx0cm9vdC5yZW5kZXIoXG5cdFx0XHRSZWFjdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRSZWFjdC5TdHJpY3RNb2RlLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRSZWFjdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFJlbmRlckNvbnRleHQuUHJvdmlkZXIsXG5cdFx0XHRcdFx0eyB2YWx1ZTogeyBtb2RlbCwgZXhwZXJpbWVudGFsIH0gfSxcblx0XHRcdFx0XHRSZWFjdC5jcmVhdGVFbGVtZW50KFdpZGdldCksXG5cdFx0XHRcdCksXG5cdFx0XHQpLFxuXHRcdCk7XG5cdFx0cmV0dXJuICgpID0+IHJvb3QudW5tb3VudCgpO1xuXHR9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjBoQkFBQSxJQUFBQSxHQUFBQyxHQUFBQyxHQUFBLGNBV0EsSUFBSUMsR0FBcUIsT0FBTyxJQUFJLDRCQUE0QixFQUM5REMsR0FBb0IsT0FBTyxJQUFJLGNBQWMsRUFDN0NDLEdBQXNCLE9BQU8sSUFBSSxnQkFBZ0IsRUFDakRDLEdBQXlCLE9BQU8sSUFBSSxtQkFBbUIsRUFDdkRDLEdBQXNCLE9BQU8sSUFBSSxnQkFBZ0IsRUFDakRDLEdBQXNCLE9BQU8sSUFBSSxnQkFBZ0IsRUFDakRDLEdBQXFCLE9BQU8sSUFBSSxlQUFlLEVBQy9DQyxHQUF5QixPQUFPLElBQUksbUJBQW1CLEVBQ3ZEQyxHQUFzQixPQUFPLElBQUksZ0JBQWdCLEVBQ2pEQyxHQUFrQixPQUFPLElBQUksWUFBWSxFQUN6Q0MsR0FBa0IsT0FBTyxJQUFJLFlBQVksRUFDekNDLEdBQXdCLE9BQU8sU0FDakMsU0FBU0MsR0FB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QUFlLFlBQzFCLENBQ0UsS0FBTSx1QkFDTixRQUFTLEtBQUssVUFBVVosQ0FBTSxDQUNoQyxFQUNBLHVCQUNGLENBRUosRUFBRyxDQUFDQSxFQUFRRSxDQUFXLENBQUMsRUFFbEIsYUFBVSxJQUFNLENBQ3BCLElBQU1XLEVBQW1CQyxHQUF3QixDQUMzQ0EsRUFBTSxLQUFLLE9BQVMsc0JBQ3RCWCxFQUFlWSxHQUFLQSxFQUFJLENBQUMsRUFDaEJELEVBQU0sS0FBSyxPQUFTLG1DQUM3QkwsRUFBd0JLLEVBQU0sS0FBSyxPQUFPLEVBQ2pDQSxFQUFNLEtBQUssT0FBUyxtQ0FDN0JILEVBQXdCRyxFQUFNLEtBQUssT0FBTyxFQUNqQ0EsRUFBTSxLQUFLLE9BQVMsZ0NBQzdCUCxFQUFZTyxFQUFNLEtBQUssT0FBTyxDQUVsQyxFQUVBLGNBQU8saUJBQWlCLFVBQVdELENBQWUsRUFFM0MsSUFBTSxDQUNYLE9BQU8sb0JBQW9CLFVBQVdBLENBQWUsQ0FDdkQsQ0FDRixFQUFHLENBQUNiLENBQU0sQ0FBQyxFQUdULGlCQUFDLE9BQUksVUFBVSwyQkFDYixpQkFBQyxXQUNDLGlCQUFDLFVBQU8sUUFBUyxJQUFNLENBQUVLLEVBQVEsT0FBTyxDQUFHLEVBQUcsU0FBVUQsSUFBUyxTQUFTLE9BQUssRUFDL0UsaUJBQUMsVUFBTyxRQUFTLElBQU0sQ0FBRUMsRUFBUSxVQUFVLENBQUcsRUFBRyxTQUFVRCxJQUFTLFlBQVksVUFBUSxDQUMxRixFQUNBLGlCQUFDLFVBQ0MsSUFBS1EsRUFDTCxJQUFLUixJQUFTLFFBQVUseUNBQTJDLHdEQUNuRSxNQUFPLENBQUUsTUFBTyxPQUFRLE9BQVEsT0FBUSxFQUMxQyxDQUNGLENBRUosQ0FBQyxFQUVNWSxHQUFRLENBQUUsT0FBQWxCLEVBQU8iLAogICJuYW1lcyI6IFsicmVxdWlyZV9yZWFjdF9wcm9kdWN0aW9uIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJSRUFDVF9FTEVNRU5UX1RZUEUiLCAiUkVBQ1RfUE9SVEFMX1RZUEUiLCAiUkVBQ1RfRlJBR01FTlRfVFlQRSIsICJSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIiwgIlJFQUNUX1BST0ZJTEVSX1RZUEUiLCAiUkVBQ1RfQ09OU1VNRVJfVFlQRSIsICJSRUFDVF9DT05URVhUX1RZUEUiLCAiUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSIsICJSRUFDVF9TVVNQRU5TRV9UWVBFIiwgIlJFQUNUX01FTU9fVFlQRSIsICJSRUFDVF9MQVpZX1RZUEUiLCAiTUFZQkVfSVRFUkFUT1JfU1lNQk9MIiwgImdldEl0ZXJhdG9yRm4iLCAibWF5YmVJdGVyYWJsZSIsICJSZWFjdE5vb3BVcGRhdGVRdWV1ZSIsICJhc3NpZ24iLCAiZW1wdHlPYmplY3QiLCAiQ29tcG9uZW50IiwgInByb3BzIiwgImNvbnRleHQiLCAidXBkYXRlciIsICJwYXJ0aWFsU3RhdGUiLCAiY2FsbGJhY2siLCAiQ29tcG9uZW50RHVtbXkiLCAiUHVyZUNvbXBvbmVudCIsICJwdXJlQ29tcG9uZW50UHJvdG90eXBlIiwgImlzQXJyYXlJbXBsIiwgIlJlYWN0U2hhcmVkSW50ZXJuYWxzIiwgImhhc093blByb3BlcnR5IiwgIlJlYWN0RWxlbWVudCIsICJ0eXBlIiwgImtleSIsICJzZWxmIiwgInNvdXJjZSIsICJvd25lciIsICJjbG9uZUFuZFJlcGxhY2VLZXkiLCAib2xkRWxlbWVudCIsICJuZXdLZXkiLCAiaXNWYWxpZEVsZW1lbnQiLCAib2JqZWN0IiwgImVzY2FwZSIsICJlc2NhcGVyTG9va3VwIiwgIm1hdGNoIiwgInVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4IiwgImdldEVsZW1lbnRLZXkiLCAiZWxlbWVudCIsICJpbmRleCIsICJub29wJDEiLCAicmVzb2x2ZVRoZW5hYmxlIiwgInRoZW5hYmxlIiwgImZ1bGZpbGxlZFZhbHVlIiwgImVycm9yIiwgIm1hcEludG9BcnJheSIsICJjaGlsZHJlbiIsICJhcnJheSIsICJlc2NhcGVkUHJlZml4IiwgIm5hbWVTb0ZhciIsICJpbnZva2VDYWxsYmFjayIsICJjIiwgIm5leHROYW1lUHJlZml4IiwgIm1hcENoaWxkcmVuIiwgImZ1bmMiLCAicmVzdWx0IiwgImNvdW50IiwgImNoaWxkIiwgImxhenlJbml0aWFsaXplciIsICJwYXlsb2FkIiwgImN0b3IiLCAibW9kdWxlT2JqZWN0IiwgInJlcG9ydEdsb2JhbEVycm9yIiwgImV2ZW50IiwgIm5vb3AiLCAiZm9yRWFjaEZ1bmMiLCAiZm9yRWFjaENvbnRleHQiLCAibiIsICJmbiIsICJjb25maWciLCAicHJvcE5hbWUiLCAiY2hpbGRBcnJheSIsICJkZWZhdWx0VmFsdWUiLCAiY2hpbGRyZW5MZW5ndGgiLCAicmVuZGVyIiwgImNvbXBhcmUiLCAic2NvcGUiLCAicHJldlRyYW5zaXRpb24iLCAiY3VycmVudFRyYW5zaXRpb24iLCAicmV0dXJuVmFsdWUiLCAib25TdGFydFRyYW5zaXRpb25GaW5pc2giLCAidXNhYmxlIiwgImFjdGlvbiIsICJpbml0aWFsU3RhdGUiLCAicGVybWFsaW5rIiwgImRlcHMiLCAiQ29udGV4dCIsICJ2YWx1ZSIsICJpbml0aWFsVmFsdWUiLCAiY3JlYXRlIiwgInJlZiIsICJwYXNzdGhyb3VnaCIsICJyZWR1Y2VyIiwgImluaXRpYWxBcmciLCAiaW5pdCIsICJzdWJzY3JpYmUiLCAiZ2V0U25hcHNob3QiLCAiZ2V0U2VydmVyU25hcHNob3QiLCAicmVxdWlyZV9yZWFjdCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfc2NoZWR1bGVyX3Byb2R1Y3Rpb24iLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgInB1c2giLCAiaGVhcCIsICJub2RlIiwgImluZGV4IiwgImEiLCAicGFyZW50SW5kZXgiLCAicGFyZW50IiwgImNvbXBhcmUiLCAicGVlayIsICJwb3AiLCAiZmlyc3QiLCAibGFzdCIsICJsZW5ndGgiLCAiaGFsZkxlbmd0aCIsICJsZWZ0SW5kZXgiLCAibGVmdCIsICJyaWdodEluZGV4IiwgInJpZ2h0IiwgImIiLCAiZGlmZiIsICJsb2NhbFBlcmZvcm1hbmNlIiwgImxvY2FsRGF0ZSIsICJpbml0aWFsVGltZSIsICJ0YXNrUXVldWUiLCAidGltZXJRdWV1ZSIsICJ0YXNrSWRDb3VudGVyIiwgImN1cnJlbnRUYXNrIiwgImN1cnJlbnRQcmlvcml0eUxldmVsIiwgImlzUGVyZm9ybWluZ1dvcmsiLCAiaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQiLCAiaXNIb3N0VGltZW91dFNjaGVkdWxlZCIsICJsb2NhbFNldFRpbWVvdXQiLCAibG9jYWxDbGVhclRpbWVvdXQiLCAibG9jYWxTZXRJbW1lZGlhdGUiLCAiYWR2YW5jZVRpbWVycyIsICJjdXJyZW50VGltZSIsICJ0aW1lciIsICJoYW5kbGVUaW1lb3V0IiwgInJlcXVlc3RIb3N0Q2FsbGJhY2siLCAiZmlyc3RUaW1lciIsICJyZXF1ZXN0SG9zdFRpbWVvdXQiLCAiaXNNZXNzYWdlTG9vcFJ1bm5pbmciLCAidGFza1RpbWVvdXRJRCIsICJmcmFtZUludGVydmFsIiwgInN0YXJ0VGltZSIsICJzaG91bGRZaWVsZFRvSG9zdCIsICJwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUiLCAiaGFzTW9yZVdvcmsiLCAicHJldmlvdXNQcmlvcml0eUxldmVsIiwgImNhbGxiYWNrIiwgImNvbnRpbnVhdGlvbkNhbGxiYWNrIiwgInNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lIiwgImNoYW5uZWwiLCAicG9ydCIsICJtcyIsICJ0YXNrIiwgImZwcyIsICJldmVudEhhbmRsZXIiLCAicHJpb3JpdHlMZXZlbCIsICJvcHRpb25zIiwgInRpbWVvdXQiLCAicGFyZW50UHJpb3JpdHlMZXZlbCIsICJyZXF1aXJlX3NjaGVkdWxlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfcmVhY3RfZG9tX3Byb2R1Y3Rpb24iLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIlJlYWN0IiwgImZvcm1hdFByb2RFcnJvck1lc3NhZ2UiLCAiY29kZSIsICJ1cmwiLCAiaSIsICJub29wIiwgIkludGVybmFscyIsICJSRUFDVF9QT1JUQUxfVFlQRSIsICJjcmVhdGVQb3J0YWwkMSIsICJjaGlsZHJlbiIsICJjb250YWluZXJJbmZvIiwgImltcGxlbWVudGF0aW9uIiwgImtleSIsICJSZWFjdFNoYXJlZEludGVybmFscyIsICJnZXRDcm9zc09yaWdpblN0cmluZ0FzIiwgImFzIiwgImlucHV0IiwgImNvbnRhaW5lciIsICJmbiIsICJwcmV2aW91c1RyYW5zaXRpb24iLCAicHJldmlvdXNVcGRhdGVQcmlvcml0eSIsICJocmVmIiwgIm9wdGlvbnMiLCAiY3Jvc3NPcmlnaW4iLCAiaW50ZWdyaXR5IiwgImZldGNoUHJpb3JpdHkiLCAiZm9ybSIsICJhIiwgImFjdGlvbiIsICJpbml0aWFsU3RhdGUiLCAicGVybWFsaW5rIiwgInJlcXVpcmVfcmVhY3RfZG9tIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY2hlY2tEQ0UiLCAiZXJyIiwgInJlcXVpcmVfcmVhY3RfZG9tX2NsaWVudF9wcm9kdWN0aW9uIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJTY2hlZHVsZXIiLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiZm9ybWF0UHJvZEVycm9yTWVzc2FnZSIsICJjb2RlIiwgInVybCIsICJpIiwgImlzVmFsaWRDb250YWluZXIiLCAibm9kZSIsICJSRUFDVF9MRUdBQ1lfRUxFTUVOVF9UWVBFIiwgIlJFQUNUX0VMRU1FTlRfVFlQRSIsICJSRUFDVF9QT1JUQUxfVFlQRSIsICJSRUFDVF9GUkFHTUVOVF9UWVBFIiwgIlJFQUNUX1NUUklDVF9NT0RFX1RZUEUiLCAiUkVBQ1RfUFJPRklMRVJfVFlQRSIsICJSRUFDVF9QUk9WSURFUl9UWVBFIiwgIlJFQUNUX0NPTlNVTUVSX1RZUEUiLCAiUkVBQ1RfQ09OVEVYVF9UWVBFIiwgIlJFQUNUX0ZPUldBUkRfUkVGX1RZUEUiLCAiUkVBQ1RfU1VTUEVOU0VfVFlQRSIsICJSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUiLCAiUkVBQ1RfTUVNT19UWVBFIiwgIlJFQUNUX0xBWllfVFlQRSIsICJSRUFDVF9PRkZTQ1JFRU5fVFlQRSIsICJSRUFDVF9NRU1PX0NBQ0hFX1NFTlRJTkVMIiwgIk1BWUJFX0lURVJBVE9SX1NZTUJPTCIsICJnZXRJdGVyYXRvckZuIiwgIm1heWJlSXRlcmFibGUiLCAiUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSIsICJnZXRDb21wb25lbnROYW1lRnJvbVR5cGUiLCAidHlwZSIsICJpbm5lclR5cGUiLCAiUmVhY3RTaGFyZWRJbnRlcm5hbHMiLCAiYXNzaWduIiwgInByZWZpeCIsICJzdWZmaXgiLCAiZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUiLCAibmFtZSIsICJ4IiwgIm1hdGNoIiwgInJlZW50cnkiLCAiZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSIsICJmbiIsICJjb25zdHJ1Y3QiLCAicHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSIsICJSdW5JblJvb3RGcmFtZSIsICJGYWtlIiwgImNvbnRyb2wiLCAieCQwIiwgIngkMSIsICJzYW1wbGUiLCAibmFtZVByb3BEZXNjcmlwdG9yIiwgIl9SdW5JblJvb3RGcmFtZSREZXRlciIsICJzYW1wbGVTdGFjayIsICJjb250cm9sU3RhY2siLCAic2FtcGxlTGluZXMiLCAiY29udHJvbExpbmVzIiwgImZyYW1lIiwgImRlc2NyaWJlRmliZXIiLCAiZmliZXIiLCAiZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kIiwgIndvcmtJblByb2dyZXNzIiwgImluZm8iLCAiZ2V0TmVhcmVzdE1vdW50ZWRGaWJlciIsICJuZWFyZXN0TW91bnRlZCIsICJnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyIiwgInN1c3BlbnNlU3RhdGUiLCAiYXNzZXJ0SXNNb3VudGVkIiwgImZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoIiwgImFsdGVybmF0ZSIsICJhIiwgImIiLCAicGFyZW50QSIsICJwYXJlbnRCIiwgImRpZEZpbmRDaGlsZCIsICJjaGlsZCQyIiwgImZpbmRDdXJyZW50SG9zdEZpYmVySW1wbCIsICJ0YWciLCAiaXNBcnJheUltcGwiLCAiUmVhY3RET01TaGFyZWRJbnRlcm5hbHMiLCAic2hhcmVkTm90UGVuZGluZ09iamVjdCIsICJ2YWx1ZVN0YWNrIiwgImluZGV4IiwgImNyZWF0ZUN1cnNvciIsICJkZWZhdWx0VmFsdWUiLCAicG9wIiwgImN1cnNvciIsICJwdXNoIiwgInZhbHVlIiwgImNvbnRleHRTdGFja0N1cnNvciIsICJjb250ZXh0RmliZXJTdGFja0N1cnNvciIsICJyb290SW5zdGFuY2VTdGFja0N1cnNvciIsICJob3N0VHJhbnNpdGlvblByb3ZpZGVyQ3Vyc29yIiwgInB1c2hIb3N0Q29udGFpbmVyIiwgIm5leHRSb290SW5zdGFuY2UiLCAiZ2V0T3duSG9zdENvbnRleHQiLCAiZ2V0Q2hpbGRIb3N0Q29udGV4dFByb2QiLCAicG9wSG9zdENvbnRhaW5lciIsICJwdXNoSG9zdENvbnRleHQiLCAiY29udGV4dCIsICJKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQiLCAicG9wSG9zdENvbnRleHQiLCAiSG9zdFRyYW5zaXRpb25Db250ZXh0IiwgImhhc093blByb3BlcnR5IiwgInNjaGVkdWxlQ2FsbGJhY2skMyIsICJjYW5jZWxDYWxsYmFjayQxIiwgInNob3VsZFlpZWxkIiwgInJlcXVlc3RQYWludCIsICJub3ciLCAiZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwiLCAiSW1tZWRpYXRlUHJpb3JpdHkiLCAiVXNlckJsb2NraW5nUHJpb3JpdHkiLCAiTm9ybWFsUHJpb3JpdHkkMSIsICJMb3dQcmlvcml0eSIsICJJZGxlUHJpb3JpdHkiLCAibG9nJDEiLCAidW5zdGFibGVfc2V0RGlzYWJsZVlpZWxkVmFsdWUiLCAicmVuZGVyZXJJRCIsICJpbmplY3RlZEhvb2siLCAib25Db21taXRSb290IiwgInJvb3QiLCAic2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMiLCAibmV3SXNTdHJpY3RNb2RlIiwgImNsejMyIiwgImNsejMyRmFsbGJhY2siLCAibG9nIiwgIkxOMiIsICJuZXh0VHJhbnNpdGlvbkxhbmUiLCAibmV4dFJldHJ5TGFuZSIsICJnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyIsICJsYW5lcyIsICJwZW5kaW5nU3luY0xhbmVzIiwgImdldE5leHRMYW5lcyIsICJ3aXBMYW5lcyIsICJwZW5kaW5nTGFuZXMiLCAibmV4dExhbmVzIiwgInN1c3BlbmRlZExhbmVzIiwgInBpbmdlZExhbmVzIiwgIndhcm1MYW5lcyIsICJub25JZGxlUGVuZGluZ0xhbmVzIiwgImNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmciLCAicmVuZGVyTGFuZXMiLCAiY29tcHV0ZUV4cGlyYXRpb25UaW1lIiwgImxhbmUiLCAiY3VycmVudFRpbWUiLCAiY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUiLCAiY2xhaW1OZXh0UmV0cnlMYW5lIiwgImNyZWF0ZUxhbmVNYXAiLCAiaW5pdGlhbCIsICJsYW5lTWFwIiwgIm1hcmtSb290VXBkYXRlZCQxIiwgInVwZGF0ZUxhbmUiLCAibWFya1Jvb3RGaW5pc2hlZCIsICJmaW5pc2hlZExhbmVzIiwgInJlbWFpbmluZ0xhbmVzIiwgInNwYXduZWRMYW5lIiwgInVwZGF0ZWRMYW5lcyIsICJzdXNwZW5kZWRSZXRyeUxhbmVzIiwgInByZXZpb3VzbHlQZW5kaW5nTGFuZXMiLCAiZW50YW5nbGVtZW50cyIsICJleHBpcmF0aW9uVGltZXMiLCAiaGlkZGVuVXBkYXRlcyIsICJpbmRleCQ3IiwgImhpZGRlblVwZGF0ZXNGb3JMYW5lIiwgInVwZGF0ZSIsICJtYXJrU3Bhd25lZERlZmVycmVkTGFuZSIsICJlbnRhbmdsZWRMYW5lcyIsICJzcGF3bmVkTGFuZUluZGV4IiwgIm1hcmtSb290RW50YW5nbGVkIiwgInJvb3RFbnRhbmdsZWRMYW5lcyIsICJpbmRleCQ4IiwgImxhbmVzVG9FdmVudFByaW9yaXR5IiwgInJlc29sdmVVcGRhdGVQcmlvcml0eSIsICJ1cGRhdGVQcmlvcml0eSIsICJnZXRFdmVudFByaW9yaXR5IiwgInJ1bldpdGhQcmlvcml0eSIsICJwcmlvcml0eSIsICJwcmV2aW91c1ByaW9yaXR5IiwgInJhbmRvbUtleSIsICJpbnRlcm5hbEluc3RhbmNlS2V5IiwgImludGVybmFsUHJvcHNLZXkiLCAiaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleSIsICJpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXkiLCAiaW50ZXJuYWxFdmVudEhhbmRsZXJMaXN0ZW5lcnNLZXkiLCAiaW50ZXJuYWxFdmVudEhhbmRsZXNTZXRLZXkiLCAiaW50ZXJuYWxSb290Tm9kZVJlc291cmNlc0tleSIsICJpbnRlcm5hbEhvaXN0YWJsZU1hcmtlciIsICJkZXRhY2hEZWxldGVkSW5zdGFuY2UiLCAiZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUiLCAidGFyZ2V0Tm9kZSIsICJ0YXJnZXRJbnN0IiwgInBhcmVudE5vZGUiLCAiZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSIsICJnZXRJbnN0YW5jZUZyb21Ob2RlIiwgImdldE5vZGVGcm9tSW5zdGFuY2UiLCAiaW5zdCIsICJnZXRSZXNvdXJjZXNGcm9tUm9vdCIsICJyZXNvdXJjZXMiLCAibWFya05vZGVBc0hvaXN0YWJsZSIsICJhbGxOYXRpdmVFdmVudHMiLCAicmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyIsICJyZWdpc3RlclR3b1BoYXNlRXZlbnQiLCAicmVnaXN0cmF0aW9uTmFtZSIsICJkZXBlbmRlbmNpZXMiLCAicmVnaXN0ZXJEaXJlY3RFdmVudCIsICJjYW5Vc2VET00iLCAiVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVgiLCAiaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSIsICJ2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUiLCAiaXNBdHRyaWJ1dGVOYW1lU2FmZSIsICJhdHRyaWJ1dGVOYW1lIiwgInNldFZhbHVlRm9yQXR0cmlidXRlIiwgInByZWZpeCQxMCIsICJzZXRWYWx1ZUZvcktub3duQXR0cmlidXRlIiwgInNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZSIsICJuYW1lc3BhY2UiLCAiZ2V0VG9TdHJpbmdWYWx1ZSIsICJpc0NoZWNrYWJsZSIsICJlbGVtIiwgInRyYWNrVmFsdWVPbk5vZGUiLCAidmFsdWVGaWVsZCIsICJkZXNjcmlwdG9yIiwgImN1cnJlbnRWYWx1ZSIsICJnZXQiLCAic2V0IiwgInRyYWNrIiwgInVwZGF0ZVZhbHVlSWZDaGFuZ2VkIiwgInRyYWNrZXIiLCAibGFzdFZhbHVlIiwgImdldEFjdGl2ZUVsZW1lbnQiLCAiZG9jIiwgImVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXNSZWdleCIsICJlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzIiwgImNoIiwgInVwZGF0ZUlucHV0IiwgImVsZW1lbnQiLCAibGFzdERlZmF1bHRWYWx1ZSIsICJjaGVja2VkIiwgImRlZmF1bHRDaGVja2VkIiwgInNldERlZmF1bHRWYWx1ZSIsICJpbml0SW5wdXQiLCAiaXNIeWRyYXRpbmciLCAidXBkYXRlT3B0aW9ucyIsICJtdWx0aXBsZSIsICJwcm9wVmFsdWUiLCAic2V0RGVmYXVsdFNlbGVjdGVkIiwgInVwZGF0ZVRleHRhcmVhIiwgImluaXRUZXh0YXJlYSIsICJjaGlsZHJlbiIsICJzZXRUZXh0Q29udGVudCIsICJ0ZXh0IiwgImZpcnN0Q2hpbGQiLCAidW5pdGxlc3NOdW1iZXJzIiwgInNldFZhbHVlRm9yU3R5bGUiLCAic3R5bGUiLCAic3R5bGVOYW1lIiwgImlzQ3VzdG9tUHJvcGVydHkiLCAic2V0VmFsdWVGb3JTdHlsZXMiLCAic3R5bGVzIiwgInByZXZTdHlsZXMiLCAic3R5bGVOYW1lJDE2IiwgInN0eWxlTmFtZSQxNyIsICJpc0N1c3RvbUVsZW1lbnQiLCAidGFnTmFtZSIsICJhbGlhc2VzIiwgImlzSmF2YVNjcmlwdFByb3RvY29sIiwgInNhbml0aXplVVJMIiwgImN1cnJlbnRSZXBsYXlpbmdFdmVudCIsICJnZXRFdmVudFRhcmdldCIsICJuYXRpdmVFdmVudCIsICJyZXN0b3JlVGFyZ2V0IiwgInJlc3RvcmVRdWV1ZSIsICJyZXN0b3JlU3RhdGVPZlRhcmdldCIsICJ0YXJnZXQiLCAiaW50ZXJuYWxJbnN0YW5jZSIsICJwcm9wcyIsICJvdGhlck5vZGUiLCAib3RoZXJQcm9wcyIsICJpc0luc2lkZUV2ZW50SGFuZGxlciIsICJiYXRjaGVkVXBkYXRlcyQxIiwgImZsdXNoU3luY1dvcmskMSIsICJnZXRMaXN0ZW5lciIsICJzdGF0ZU5vZGUiLCAicGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQiLCAib3B0aW9ucyIsICJzdGFydFRleHQiLCAiZmFsbGJhY2tUZXh0IiwgImdldERhdGEiLCAic3RhcnQiLCAic3RhcnRWYWx1ZSIsICJzdGFydExlbmd0aCIsICJlbmQiLCAiZW5kVmFsdWUiLCAiZW5kTGVuZ3RoIiwgIm1pbkVuZCIsICJnZXRFdmVudENoYXJDb2RlIiwgImtleUNvZGUiLCAiZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUiLCAiZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlIiwgImNyZWF0ZVN5bnRoZXRpY0V2ZW50IiwgIkludGVyZmFjZSIsICJTeW50aGV0aWNCYXNlRXZlbnQiLCAicmVhY3ROYW1lIiwgInJlYWN0RXZlbnRUeXBlIiwgIm5hdGl2ZUV2ZW50VGFyZ2V0IiwgInByb3BOYW1lIiwgImV2ZW50IiwgIkV2ZW50SW50ZXJmYWNlIiwgIlN5bnRoZXRpY0V2ZW50IiwgIlVJRXZlbnRJbnRlcmZhY2UiLCAiU3ludGhldGljVUlFdmVudCIsICJsYXN0TW92ZW1lbnRYIiwgImxhc3RNb3ZlbWVudFkiLCAibGFzdE1vdXNlRXZlbnQiLCAiTW91c2VFdmVudEludGVyZmFjZSIsICJnZXRFdmVudE1vZGlmaWVyU3RhdGUiLCAiU3ludGhldGljTW91c2VFdmVudCIsICJEcmFnRXZlbnRJbnRlcmZhY2UiLCAiU3ludGhldGljRHJhZ0V2ZW50IiwgIkZvY3VzRXZlbnRJbnRlcmZhY2UiLCAiU3ludGhldGljRm9jdXNFdmVudCIsICJBbmltYXRpb25FdmVudEludGVyZmFjZSIsICJTeW50aGV0aWNBbmltYXRpb25FdmVudCIsICJDbGlwYm9hcmRFdmVudEludGVyZmFjZSIsICJTeW50aGV0aWNDbGlwYm9hcmRFdmVudCIsICJDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlIiwgIlN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQiLCAibm9ybWFsaXplS2V5IiwgInRyYW5zbGF0ZVRvS2V5IiwgIm1vZGlmaWVyS2V5VG9Qcm9wIiwgIm1vZGlmaWVyU3RhdGVHZXR0ZXIiLCAia2V5QXJnIiwgIktleWJvYXJkRXZlbnRJbnRlcmZhY2UiLCAia2V5IiwgIlN5bnRoZXRpY0tleWJvYXJkRXZlbnQiLCAiUG9pbnRlckV2ZW50SW50ZXJmYWNlIiwgIlN5bnRoZXRpY1BvaW50ZXJFdmVudCIsICJUb3VjaEV2ZW50SW50ZXJmYWNlIiwgIlN5bnRoZXRpY1RvdWNoRXZlbnQiLCAiVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlIiwgIlN5bnRoZXRpY1RyYW5zaXRpb25FdmVudCIsICJXaGVlbEV2ZW50SW50ZXJmYWNlIiwgIlN5bnRoZXRpY1doZWVsRXZlbnQiLCAiVG9nZ2xlRXZlbnRJbnRlcmZhY2UiLCAiU3ludGhldGljVG9nZ2xlRXZlbnQiLCAiRU5EX0tFWUNPREVTIiwgImNhblVzZUNvbXBvc2l0aW9uRXZlbnQiLCAiZG9jdW1lbnRNb2RlIiwgImNhblVzZVRleHRJbnB1dEV2ZW50IiwgInVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhIiwgIlNQQUNFQkFSX0NIQVIiLCAiaGFzU3BhY2VLZXlwcmVzcyIsICJpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQiLCAiZG9tRXZlbnROYW1lIiwgImdldERhdGFGcm9tQ3VzdG9tRXZlbnQiLCAiaXNDb21wb3NpbmciLCAiZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyIsICJnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMiLCAic3VwcG9ydGVkSW5wdXRUeXBlcyIsICJpc1RleHRJbnB1dEVsZW1lbnQiLCAibm9kZU5hbWUiLCAiY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50IiwgImRpc3BhdGNoUXVldWUiLCAiYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzIiwgImFjdGl2ZUVsZW1lbnQkMSIsICJhY3RpdmVFbGVtZW50SW5zdCQxIiwgInJ1bkV2ZW50SW5CYXRjaCIsICJwcm9jZXNzRGlzcGF0Y2hRdWV1ZSIsICJnZXRJbnN0SWZWYWx1ZUNoYW5nZWQiLCAiZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50IiwgImlzSW5wdXRFdmVudFN1cHBvcnRlZCIsICJpc1N1cHBvcnRlZCRqc2NvbXAkaW5saW5lXzQxOCIsICJlbGVtZW50JGpzY29tcCRpbmxpbmVfNDE5IiwgIkpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMjgzIiwgInN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlIiwgImhhbmRsZVByb3BlcnR5Q2hhbmdlIiwgImhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbCIsICJnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsIiwgImdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50IiwgImdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQiLCAiaXMiLCAieSIsICJvYmplY3RJcyIsICJzaGFsbG93RXF1YWwiLCAib2JqQSIsICJvYmpCIiwgImtleXNBIiwgImtleXNCIiwgImN1cnJlbnRLZXkiLCAiZ2V0TGVhZk5vZGUiLCAiZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldCIsICJvZmZzZXQiLCAibm9kZUVuZCIsICJjb250YWluc05vZGUiLCAib3V0ZXJOb2RlIiwgImlubmVyTm9kZSIsICJnZXRBY3RpdmVFbGVtZW50RGVlcCIsICJjb250YWluZXJJbmZvIiwgImhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyIsICJyZXN0b3JlU2VsZWN0aW9uIiwgInByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24iLCAiY3VyRm9jdXNlZEVsZW0iLCAicHJpb3JTZWxlY3Rpb25SYW5nZSIsICJsZW5ndGgiLCAiZW5kTWFya2VyIiwgInNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCIsICJhY3RpdmVFbGVtZW50IiwgImFjdGl2ZUVsZW1lbnRJbnN0IiwgImxhc3RTZWxlY3Rpb24iLCAibW91c2VEb3duIiwgImNvbnN0cnVjdFNlbGVjdEV2ZW50IiwgIm1ha2VQcmVmaXhNYXAiLCAic3R5bGVQcm9wIiwgImV2ZW50TmFtZSIsICJwcmVmaXhlcyIsICJ2ZW5kb3JQcmVmaXhlcyIsICJwcmVmaXhlZEV2ZW50TmFtZXMiLCAiZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUiLCAicHJlZml4TWFwIiwgIkFOSU1BVElPTl9FTkQiLCAiQU5JTUFUSU9OX0lURVJBVElPTiIsICJBTklNQVRJT05fU1RBUlQiLCAiVFJBTlNJVElPTl9SVU4iLCAiVFJBTlNJVElPTl9TVEFSVCIsICJUUkFOU0lUSU9OX0NBTkNFTCIsICJUUkFOU0lUSU9OX0VORCIsICJ0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcyIsICJzaW1wbGVFdmVudFBsdWdpbkV2ZW50cyIsICJyZWdpc3RlclNpbXBsZUV2ZW50IiwgImNvbmN1cnJlbnRRdWV1ZXMiLCAiY29uY3VycmVudFF1ZXVlc0luZGV4IiwgImNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyIsICJmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzIiwgImVuZEluZGV4IiwgInF1ZXVlIiwgInBlbmRpbmciLCAibWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QiLCAiZW5xdWV1ZVVwZGF0ZSQxIiwgImVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZSIsICJnZXRSb290Rm9yVXBkYXRlZEZpYmVyIiwgImVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZSIsICJzb3VyY2VGaWJlciIsICJpc0hpZGRlbiIsICJwYXJlbnQiLCAibmVzdGVkVXBkYXRlQ291bnQiLCAicm9vdFdpdGhOZXN0ZWRVcGRhdGVzIiwgImVtcHR5Q29udGV4dE9iamVjdCIsICJDYXB0dXJlZFN0YWNrcyIsICJjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlciIsICJzb3VyY2UiLCAiZXhpc3RpbmciLCAiZm9ya1N0YWNrIiwgImZvcmtTdGFja0luZGV4IiwgInRyZWVGb3JrUHJvdmlkZXIiLCAidHJlZUZvcmtDb3VudCIsICJpZFN0YWNrIiwgImlkU3RhY2tJbmRleCIsICJ0cmVlQ29udGV4dFByb3ZpZGVyIiwgInRyZWVDb250ZXh0SWQiLCAidHJlZUNvbnRleHRPdmVyZmxvdyIsICJwdXNoVHJlZUZvcmsiLCAidG90YWxDaGlsZHJlbiIsICJwdXNoVHJlZUlkIiwgImJhc2VJZFdpdGhMZWFkaW5nQml0IiwgImJhc2VMZW5ndGgiLCAibnVtYmVyT2ZPdmVyZmxvd0JpdHMiLCAicHVzaE1hdGVyaWFsaXplZFRyZWVJZCIsICJwb3BUcmVlQ29udGV4dCIsICJoeWRyYXRpb25QYXJlbnRGaWJlciIsICJuZXh0SHlkcmF0YWJsZUluc3RhbmNlIiwgImh5ZHJhdGlvbkVycm9ycyIsICJyb290T3JTaW5nbGV0b25Db250ZXh0IiwgIkh5ZHJhdGlvbk1pc21hdGNoRXhjZXB0aW9uIiwgInRocm93T25IeWRyYXRpb25NaXNtYXRjaCIsICJlcnJvciIsICJxdWV1ZUh5ZHJhdGlvbkVycm9yIiwgInByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2UiLCAiaW5zdGFuY2UiLCAibGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCIsICJtZWRpYUV2ZW50VHlwZXMiLCAiY2hlY2tGb3JVbm1hdGNoZWRUZXh0IiwgIm5vb3AkMSIsICJwb3BUb05leHRIb3N0UGFyZW50IiwgInBvcEh5ZHJhdGlvblN0YXRlIiwgInNob3VsZENsZWFyIiwgIkpTQ29tcGlsZXJfdGVtcCIsICJzaG91bGRTZXRUZXh0Q29udGVudCIsICJnZXROZXh0SHlkcmF0YWJsZSIsICJyZXNldEh5ZHJhdGlvblN0YXRlIiwgIlN1c3BlbnNlRXhjZXB0aW9uIiwgIlN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvbiIsICJub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGUiLCAiaXNUaGVuYWJsZVJlc29sdmVkIiwgInRoZW5hYmxlIiwgIm5vb3AkMyIsICJ0cmFja1VzZWRUaGVuYWJsZSIsICJ0aGVuYWJsZVN0YXRlIiwgIndvcmtJblByb2dyZXNzUm9vdCIsICJmdWxmaWxsZWRWYWx1ZSIsICJmdWxmaWxsZWRUaGVuYWJsZSIsICJyZWplY3RlZFRoZW5hYmxlIiwgInN1c3BlbmRlZFRoZW5hYmxlIiwgImdldFN1c3BlbmRlZFRoZW5hYmxlIiwgInRoZW5hYmxlU3RhdGUkMSIsICJ0aGVuYWJsZUluZGV4Q291bnRlciQxIiwgInVud3JhcFRoZW5hYmxlIiwgImNvZXJjZVJlZiIsICJ0aHJvd09uSW52YWxpZE9iamVjdFR5cGUiLCAicmV0dXJuRmliZXIiLCAibmV3Q2hpbGQiLCAicmVzb2x2ZUxhenkiLCAibGF6eVR5cGUiLCAiaW5pdCIsICJjcmVhdGVDaGlsZFJlY29uY2lsZXIiLCAic2hvdWxkVHJhY2tTaWRlRWZmZWN0cyIsICJkZWxldGVDaGlsZCIsICJjaGlsZFRvRGVsZXRlIiwgImRlbGV0aW9ucyIsICJkZWxldGVSZW1haW5pbmdDaGlsZHJlbiIsICJjdXJyZW50Rmlyc3RDaGlsZCIsICJtYXBSZW1haW5pbmdDaGlsZHJlbiIsICJleGlzdGluZ0NoaWxkcmVuIiwgInVzZUZpYmVyIiwgInBlbmRpbmdQcm9wcyIsICJjcmVhdGVXb3JrSW5Qcm9ncmVzcyIsICJwbGFjZUNoaWxkIiwgIm5ld0ZpYmVyIiwgImxhc3RQbGFjZWRJbmRleCIsICJuZXdJbmRleCIsICJwbGFjZVNpbmdsZUNoaWxkIiwgInVwZGF0ZVRleHROb2RlIiwgImN1cnJlbnQiLCAidGV4dENvbnRlbnQiLCAiY3JlYXRlRmliZXJGcm9tVGV4dCIsICJ1cGRhdGVFbGVtZW50IiwgImVsZW1lbnRUeXBlIiwgInVwZGF0ZUZyYWdtZW50IiwgImNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyIsICJ1cGRhdGVQb3J0YWwiLCAicG9ydGFsIiwgImNyZWF0ZUZpYmVyRnJvbVBvcnRhbCIsICJmcmFnbWVudCIsICJjcmVhdGVGaWJlckZyb21GcmFnbWVudCIsICJjcmVhdGVDaGlsZCIsICJyZWFkQ29udGV4dER1cmluZ1JlY29uY2lsaWF0aW9uIiwgInVwZGF0ZVNsb3QiLCAib2xkRmliZXIiLCAidXBkYXRlRnJvbU1hcCIsICJuZXdJZHgiLCAicmVjb25jaWxlQ2hpbGRyZW5BcnJheSIsICJuZXdDaGlsZHJlbiIsICJyZXN1bHRpbmdGaXJzdENoaWxkIiwgInByZXZpb3VzTmV3RmliZXIiLCAibmV4dE9sZEZpYmVyIiwgImNoaWxkIiwgInJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IiLCAic3RlcCIsICJyZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwiLCAiZmlyc3RDaGlsZEZpYmVyIiwgImNyZWF0ZUZpYmVySW1wbENsYXNzIiwgInJlY29uY2lsZUNoaWxkRmliZXJzIiwgIm1vdW50Q2hpbGRGaWJlcnMiLCAiY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvciIsICJwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IiLCAicHVzaEhpZGRlbkNvbnRleHQiLCAiZW50YW5nbGVkUmVuZGVyTGFuZXMiLCAicmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayIsICJwb3BIaWRkZW5Db250ZXh0IiwgInN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yIiwgInNoZWxsQm91bmRhcnkiLCAicHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyIiwgImhhbmRsZXIiLCAic3VzcGVuc2VTdGFja0N1cnNvciIsICJwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyIiwgInJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayIsICJwb3BTdXNwZW5zZUhhbmRsZXIiLCAiZmluZEZpcnN0U3VzcGVuZGVkIiwgInJvdyIsICJzdGF0ZSIsICJBYm9ydENvbnRyb2xsZXJMb2NhbCIsICJsaXN0ZW5lcnMiLCAic2lnbmFsIiwgImxpc3RlbmVyIiwgInNjaGVkdWxlQ2FsbGJhY2skMiIsICJOb3JtYWxQcmlvcml0eSIsICJDYWNoZUNvbnRleHQiLCAiY3JlYXRlQ2FjaGUiLCAicmVsZWFzZUNhY2hlIiwgImNhY2hlIiwgImN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnMiLCAiY3VycmVudEVudGFuZ2xlZFBlbmRpbmdDb3VudCIsICJjdXJyZW50RW50YW5nbGVkTGFuZSIsICJjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGUiLCAiZW50YW5nbGVBc3luY0FjdGlvbiIsICJ0cmFuc2l0aW9uIiwgImVudGFuZ2xlZExpc3RlbmVycyIsICJyZXF1ZXN0VHJhbnNpdGlvbkxhbmUiLCAicmVzb2x2ZSIsICJwaW5nRW5ndGFuZ2xlZEFjdGlvblNjb3BlIiwgImNoYWluVGhlbmFibGVWYWx1ZSIsICJyZXN1bHQiLCAidGhlbmFibGVXaXRoT3ZlcnJpZGUiLCAicHJldk9uU3RhcnRUcmFuc2l0aW9uRmluaXNoIiwgInJldHVyblZhbHVlIiwgInJlc3VtZWRDYWNoZSIsICJwZWVrQ2FjaGVGcm9tUG9vbCIsICJjYWNoZVJlc3VtZWRGcm9tUHJldmlvdXNSZW5kZXIiLCAicHVzaFRyYW5zaXRpb24iLCAib2Zmc2NyZWVuV29ya0luUHJvZ3Jlc3MiLCAicHJldkNhY2hlUG9vbCIsICJnZXRTdXNwZW5kZWRDYWNoZSIsICJjYWNoZUZyb21Qb29sIiwgImN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEiLCAiY3VycmVudEhvb2siLCAid29ya0luUHJvZ3Jlc3NIb29rIiwgImRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUiLCAiZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzIiwgInNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWIiwgImxvY2FsSWRDb3VudGVyIiwgInRoZW5hYmxlSW5kZXhDb3VudGVyIiwgImdsb2JhbENsaWVudElkQ291bnRlciIsICJ0aHJvd0ludmFsaWRIb29rRXJyb3IiLCAiYXJlSG9va0lucHV0c0VxdWFsIiwgIm5leHREZXBzIiwgInByZXZEZXBzIiwgInJlbmRlcldpdGhIb29rcyIsICJDb21wb25lbnQiLCAic2Vjb25kQXJnIiwgIm5leHRSZW5kZXJMYW5lcyIsICJIb29rc0Rpc3BhdGNoZXJPbk1vdW50IiwgIkhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlIiwgInJlbmRlcldpdGhIb29rc0FnYWluIiwgImZpbmlzaFJlbmRlcmluZ0hvb2tzIiwgIkNvbnRleHRPbmx5RGlzcGF0Y2hlciIsICJkaWRSZW5kZXJUb29GZXdIb29rcyIsICJkaWRSZWNlaXZlVXBkYXRlIiwgImNoZWNrSWZDb250ZXh0Q2hhbmdlZCIsICJudW1iZXJPZlJlUmVuZGVycyIsICJIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVyIiwgIlRyYW5zaXRpb25Bd2FyZUhvc3RDb21wb25lbnQiLCAiZGlzcGF0Y2hlciIsICJtYXliZVRoZW5hYmxlIiwgInVzZVRoZW5hYmxlIiwgImNoZWNrRGlkUmVuZGVySWRIb29rIiwgImRpZFJlbmRlcklkSG9vayIsICJiYWlsb3V0SG9va3MiLCAicmVzZXRIb29rc09uVW53aW5kIiwgIm1vdW50V29ya0luUHJvZ3Jlc3NIb29rIiwgImhvb2siLCAidXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rIiwgIm5leHRDdXJyZW50SG9vayIsICJuZXh0V29ya0luUHJvZ3Jlc3NIb29rIiwgImNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUiLCAidXNlIiwgInVzYWJsZSIsICJyZWFkQ29udGV4dCIsICJ1c2VNZW1vQ2FjaGUiLCAic2l6ZSIsICJtZW1vQ2FjaGUiLCAidXBkYXRlUXVldWUiLCAiYXJyYXkiLCAiYmFzaWNTdGF0ZVJlZHVjZXIiLCAiYWN0aW9uIiwgInVwZGF0ZVJlZHVjZXIiLCAicmVkdWNlciIsICJ1cGRhdGVSZWR1Y2VySW1wbCIsICJiYXNlUXVldWUiLCAicGVuZGluZ1F1ZXVlIiwgImJhc2VGaXJzdCIsICJuZXdCYXNlUXVldWVGaXJzdCIsICJuZXdCYXNlUXVldWVMYXN0IiwgImRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24kNTQiLCAid29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMiLCAicmV2ZXJ0TGFuZSIsICJ3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMiLCAicmVyZW5kZXJSZWR1Y2VyIiwgImRpc3BhdGNoIiwgImxhc3RSZW5kZXJQaGFzZVVwZGF0ZSIsICJuZXdTdGF0ZSIsICJ1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZSIsICJzdWJzY3JpYmUiLCAiZ2V0U25hcHNob3QiLCAiZ2V0U2VydmVyU25hcHNob3QiLCAiaXNIeWRyYXRpbmckanNjb21wJDAiLCAic25hcHNob3RDaGFuZ2VkIiwgInVwZGF0ZUVmZmVjdCIsICJzdWJzY3JpYmVUb1N0b3JlIiwgInB1c2hFZmZlY3QiLCAidXBkYXRlU3RvcmVJbnN0YW5jZSIsICJwdXNoU3RvcmVDb25zaXN0ZW5jeUNoZWNrIiwgInJlbmRlcmVkU25hcHNob3QiLCAibmV4dFNuYXBzaG90IiwgImNoZWNrSWZTbmFwc2hvdENoYW5nZWQiLCAiZm9yY2VTdG9yZVJlcmVuZGVyIiwgImxhdGVzdEdldFNuYXBzaG90IiwgIm5leHRWYWx1ZSIsICJzY2hlZHVsZVVwZGF0ZU9uRmliZXIiLCAibW91bnRTdGF0ZUltcGwiLCAiaW5pdGlhbFN0YXRlIiwgImluaXRpYWxTdGF0ZUluaXRpYWxpemVyIiwgInVwZGF0ZU9wdGltaXN0aWNJbXBsIiwgInBhc3N0aHJvdWdoIiwgImRpc3BhdGNoQWN0aW9uU3RhdGUiLCAiYWN0aW9uUXVldWUiLCAic2V0UGVuZGluZ1N0YXRlIiwgInNldFN0YXRlIiwgInBheWxvYWQiLCAiaXNSZW5kZXJQaGFzZVVwZGF0ZSIsICJhY3Rpb25Ob2RlIiwgInJ1bkFjdGlvblN0YXRlQWN0aW9uIiwgInByZXZTdGF0ZSIsICJwcmV2VHJhbnNpdGlvbiIsICJjdXJyZW50VHJhbnNpdGlvbiIsICJvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCIsICJoYW5kbGVBY3Rpb25SZXR1cm5WYWx1ZSIsICJvbkFjdGlvbkVycm9yIiwgImVycm9yJDYwIiwgIm5leHRTdGF0ZSIsICJvbkFjdGlvblN1Y2Nlc3MiLCAibm90aWZ5QWN0aW9uTGlzdGVuZXJzIiwgImxhc3QiLCAiYWN0aW9uU3RhdGVSZWR1Y2VyIiwgIm9sZFN0YXRlIiwgIm1vdW50QWN0aW9uU3RhdGUiLCAiaW5pdGlhbFN0YXRlUHJvcCIsICJzc3JGb3JtU3RhdGUiLCAiSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwIiwgImluUm9vdE9yU2luZ2xldG9uIiwgImRpc3BhdGNoU2V0U3RhdGUiLCAiZGlzcGF0Y2hPcHRpbWlzdGljU2V0U3RhdGUiLCAidXBkYXRlQWN0aW9uU3RhdGUiLCAic3RhdGVIb29rIiwgInVwZGF0ZUFjdGlvblN0YXRlSW1wbCIsICJjdXJyZW50U3RhdGVIb29rIiwgImFjdGlvblF1ZXVlSG9vayIsICJhY3Rpb25TdGF0ZUFjdGlvbkVmZmVjdCIsICJyZXJlbmRlckFjdGlvblN0YXRlIiwgImNyZWF0ZSIsICJkZXBzIiwgInVwZGF0ZVJlZiIsICJtb3VudEVmZmVjdEltcGwiLCAiZmliZXJGbGFncyIsICJob29rRmxhZ3MiLCAidXBkYXRlRWZmZWN0SW1wbCIsICJtb3VudEVmZmVjdCIsICJ1cGRhdGVJbnNlcnRpb25FZmZlY3QiLCAidXBkYXRlTGF5b3V0RWZmZWN0IiwgImltcGVyYXRpdmVIYW5kbGVFZmZlY3QiLCAicmVmIiwgInJlZkNsZWFudXAiLCAidXBkYXRlSW1wZXJhdGl2ZUhhbmRsZSIsICJtb3VudERlYnVnVmFsdWUiLCAidXBkYXRlQ2FsbGJhY2siLCAiY2FsbGJhY2siLCAidXBkYXRlTWVtbyIsICJuZXh0Q3JlYXRlIiwgIm1vdW50RGVmZXJyZWRWYWx1ZUltcGwiLCAiaW5pdGlhbFZhbHVlIiwgInJlcXVlc3REZWZlcnJlZExhbmUiLCAidXBkYXRlRGVmZXJyZWRWYWx1ZUltcGwiLCAicHJldlZhbHVlIiwgInN0YXJ0VHJhbnNpdGlvbiIsICJwZW5kaW5nU3RhdGUiLCAiZmluaXNoZWRTdGF0ZSIsICJ0aGVuYWJsZUZvckZpbmlzaGVkU3RhdGUiLCAiZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsIiwgInJlcXVlc3RVcGRhdGVMYW5lIiwgIm5vb3AkMiIsICJzdGFydEhvc3RUcmFuc2l0aW9uIiwgImZvcm1GaWJlciIsICJmb3JtRGF0YSIsICJlbnN1cmVGb3JtQ29tcG9uZW50SXNTdGF0ZWZ1bCIsICJyZXF1ZXN0Rm9ybVJlc2V0JDEiLCAiZXhpc3RpbmdTdGF0ZUhvb2siLCAiaW5pdGlhbFJlc2V0U3RhdGUiLCAicmVzZXRTdGF0ZVF1ZXVlIiwgInVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzIiwgInVwZGF0ZUlkIiwgInVwZGF0ZVJlZnJlc2giLCAicmVmcmVzaENhY2hlIiwgInByb3ZpZGVyIiwgImNyZWF0ZVVwZGF0ZSIsICJyb290JDYzIiwgImVucXVldWVVcGRhdGUiLCAiZW50YW5nbGVUcmFuc2l0aW9ucyIsICJkaXNwYXRjaFJlZHVjZXJBY3Rpb24iLCAiZW5xdWV1ZVJlbmRlclBoYXNlVXBkYXRlIiwgImVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZSIsICJjdXJyZW50U3RhdGUiLCAiZWFnZXJTdGF0ZSIsICJ0aHJvd0lmRHVyaW5nUmVuZGVyIiwgInF1ZXVlTGFuZXMiLCAiaW5pdGlhbEFyZyIsICJpZGVudGlmaWVyUHJlZml4IiwgImlkV2l0aExlYWRpbmdCaXQiLCAiYm9vbGVhbk9yVGhlbmFibGUiLCAiYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCAiY3RvciIsICJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCAibmV4dFByb3BzIiwgImNsYXNzQ29tcG9uZW50VXBkYXRlciIsICJjb21wb25lbnQiLCAiY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUiLCAib2xkUHJvcHMiLCAibmV3UHJvcHMiLCAibmV4dENvbnRleHQiLCAiY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCAicmVzb2x2ZUNsYXNzQ29tcG9uZW50UHJvcHMiLCAiYmFzZVByb3BzIiwgInByb3BOYW1lJDY3IiwgInJlcG9ydEdsb2JhbEVycm9yIiwgImRlZmF1bHRPblVuY2F1Z2h0RXJyb3IiLCAiZGVmYXVsdE9uQ2F1Z2h0RXJyb3IiLCAiZGVmYXVsdE9uUmVjb3ZlcmFibGVFcnJvciIsICJsb2dVbmNhdWdodEVycm9yIiwgImVycm9ySW5mbyIsICJvblVuY2F1Z2h0RXJyb3IiLCAiZSQ2OCIsICJsb2dDYXVnaHRFcnJvciIsICJib3VuZGFyeSIsICJvbkNhdWdodEVycm9yIiwgImUkNjkiLCAiY3JlYXRlUm9vdEVycm9yVXBkYXRlIiwgImNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUiLCAiaW5pdGlhbGl6ZUNsYXNzRXJyb3JVcGRhdGUiLCAiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwgImxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkIiwgInN0YWNrIiwgInRocm93RXhjZXB0aW9uIiwgInJvb3RSZW5kZXJMYW5lcyIsICJwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyIsICJyZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlIiwgIndvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMiLCAiYXR0YWNoUGluZ0xpc3RlbmVyIiwgImVucXVldWVDYXB0dXJlZFVwZGF0ZSIsICJ3cmFwcGVyRXJyb3IiLCAid29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyIsICJTZWxlY3RpdmVIeWRyYXRpb25FeGNlcHRpb24iLCAicmVjb25jaWxlQ2hpbGRyZW4iLCAibmV4dENoaWxkcmVuIiwgInVwZGF0ZUZvcndhcmRSZWYiLCAicHJvcHNXaXRob3V0UmVmIiwgInByZXBhcmVUb1JlYWRDb250ZXh0IiwgImJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsiLCAidXBkYXRlTWVtb0NvbXBvbmVudCIsICJzaG91bGRDb25zdHJ1Y3QiLCAidXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudCIsICJjaGVja1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dCIsICJwcmV2UHJvcHMiLCAidXBkYXRlRnVuY3Rpb25Db21wb25lbnQiLCAidXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50IiwgIm5leHRJc0RldGFjaGVkIiwgIm1hcmtSZWYiLCAiZGVmZXJIaWRkZW5PZmZzY3JlZW5Db21wb25lbnQiLCAibmV4dEJhc2VMYW5lcyIsICJyZXBsYXlGdW5jdGlvbkNvbXBvbmVudCIsICJ1cGRhdGVDbGFzc0NvbXBvbmVudCIsICJjb250ZXh0VHlwZSIsICJpbml0aWFsaXplVXBkYXRlUXVldWUiLCAicHJvY2Vzc1VwZGF0ZVF1ZXVlIiwgInN1c3BlbmRJZlVwZGF0ZVJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24iLCAidW5yZXNvbHZlZE9sZFByb3BzIiwgIm9sZENvbnRleHQiLCAiY29udGV4dFR5cGUkanNjb21wJDAiLCAiaGFzRm9yY2VVcGRhdGUiLCAiY2xvbmVVcGRhdGVRdWV1ZSIsICJtb3VudEhvc3RSb290V2l0aG91dEh5ZHJhdGluZyIsICJTVVNQRU5ERURfTUFSS0VSIiwgIm1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZSIsICJnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZSIsICJwcmltYXJ5VHJlZURpZERlZmVyIiwgIndvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lIiwgInVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50IiwgInNob3dGYWxsYmFjayIsICJkaWRTdXNwZW5kIiwgIm5leHRJbnN0YW5jZSIsICJKU0NvbXBpbGVyX3RlbXAkanNjb21wJDAiLCAiYyIsICJtb3VudFdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIiLCAibW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbiIsICJyZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyIsICJkaWdlc3QiLCAicmV0cnlEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeSIsICJwcmltYXJ5Q2hpbGRyZW4iLCAib2Zmc2NyZWVuUHJvcHMiLCAibW9kZSIsICJjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4iLCAic2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyIiwgInByb3BhZ2F0aW9uUm9vdCIsICJzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoIiwgImluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSIsICJpc0JhY2t3YXJkcyIsICJ0YWlsIiwgImxhc3RDb250ZW50Um93IiwgInRhaWxNb2RlIiwgInJlbmRlclN0YXRlIiwgInVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudCIsICJyZXZlYWxPcmRlciIsICJhdHRlbXB0RWFybHlCYWlsb3V0SWZOb1NjaGVkdWxlZFVwZGF0ZSIsICJwdXNoUHJvdmlkZXIiLCAiZGlkU3VzcGVuZEJlZm9yZSIsICJiZWdpbldvcmsiLCAibGF6eUNvbXBvbmVudCIsICJwcm9wYWdhdGVDb250ZXh0Q2hhbmdlcyIsICJnZXRSZXNvdXJjZSIsICJnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIiLCAic2V0SW5pdGlhbFByb3BlcnRpZXMiLCAicmVzb2x2ZVNpbmdsZXRvbkluc3RhbmNlIiwgImNhbkh5ZHJhdGVJbnN0YW5jZSIsICJjYW5IeWRyYXRlVGV4dEluc3RhbmNlIiwgInZhbHVlQ3Vyc29yIiwgImN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyIiwgImxhc3RDb250ZXh0RGVwZW5kZW5jeSIsICJwcm92aWRlckZpYmVyIiwgInBvcFByb3ZpZGVyIiwgImNvbnRleHRzIiwgImZvcmNlUHJvcGFnYXRlRW50aXJlVHJlZSIsICJsaXN0IiwgIm5leHRGaWJlciIsICJkZXBlbmRlbmN5IiwgImlzSW5zaWRlUHJvcGFnYXRpb25CYWlsb3V0IiwgImN1cnJlbnRQYXJlbnQiLCAiY3VycmVudERlcGVuZGVuY2llcyIsICJyZWFkQ29udGV4dEZvckNvbnN1bWVyIiwgImNvbnN1bWVyIiwgImV4ZWN1dGlvbkNvbnRleHQiLCAiY2FwdHVyZWRVcGRhdGUiLCAibmV3Rmlyc3QiLCAibmV3TGFzdCIsICJjbG9uZSIsICJkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uIiwgImVudGFuZ2xlZEFjdGlvblRoZW5hYmxlIiwgIndvcmtJblByb2dyZXNzJGpzY29tcCQwIiwgImluc3RhbmNlJGpzY29tcCQwIiwgImZpcnN0QmFzZVVwZGF0ZSIsICJsYXN0QmFzZVVwZGF0ZSIsICJsYXN0UGVuZGluZ1VwZGF0ZSIsICJmaXJzdFBlbmRpbmdVcGRhdGUiLCAiaXNIaWRkZW5VcGRhdGUiLCAiY2FsbENhbGxiYWNrIiwgImNvbW1pdENhbGxiYWNrcyIsICJjYWxsYmFja3MiLCAiY29tbWl0SG9va0VmZmVjdExpc3RNb3VudCIsICJmbGFncyIsICJmaW5pc2hlZFdvcmsiLCAibGFzdEVmZmVjdCIsICJmaXJzdEVmZmVjdCIsICJjYXB0dXJlQ29tbWl0UGhhc2VFcnJvciIsICJjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQiLCAibmVhcmVzdE1vdW50ZWRBbmNlc3RvciRqc2NvbXAkMCIsICJkZXN0cm95IiwgIm5lYXJlc3RNb3VudGVkQW5jZXN0b3IiLCAiY29tbWl0Q2xhc3NDYWxsYmFja3MiLCAic2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50IiwgInNhZmVseUF0dGFjaFJlZiIsICJpbnN0YW5jZVRvVXNlIiwgInNhZmVseURldGFjaFJlZiIsICJlcnJvciQxMTIiLCAiY29tbWl0SG9zdE1vdW50IiwgImNvbW1pdEhvc3RVcGRhdGUiLCAiZG9tRWxlbWVudCIsICJ1cGRhdGVQcm9wZXJ0aWVzIiwgImlzSG9zdFBhcmVudCIsICJnZXRIb3N0U2libGluZyIsICJpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyIiwgImJlZm9yZSIsICJpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUiLCAib2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuIiwgIm9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4iLCAibmVlZHNGb3JtUmVzZXQiLCAiUG9zc2libHlXZWFrU2V0IiwgIm5leHRFZmZlY3QiLCAic2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyIiwgImNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cyIsICJldmVudHNFbmFibGVkIiwgIl9lbmFibGVkIiwgInNlbGVjdGlvbiIsICJhbmNob3JPZmZzZXQiLCAiZm9jdXNOb2RlIiwgImluZGV4V2l0aGluQW5jaG9yIiwgImluZGV4V2l0aGluRm9jdXMiLCAibmV4dCIsICJzZWxlY3Rpb25JbmZvcm1hdGlvbiIsICJyZXNvbHZlZFByZXZQcm9wcyIsICJjbGVhckNvbnRhaW5lclNwYXJpbmdseSIsICJjb21taXRMYXlvdXRFZmZlY3RPbkZpYmVyIiwgImZpbmlzaGVkUm9vdCIsICJyZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyIsICJlcnJvciQxMTEiLCAiY29tbWl0U3VzcGVuc2VIeWRyYXRpb25DYWxsYmFja3MiLCAicHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiIsICJwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiIsICJyZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzIiwgImRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzIiwgImhvc3RQYXJlbnQiLCAiaG9zdFBhcmVudElzQ29udGFpbmVyIiwgInJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMiLCAiY29tbWl0RGVsZXRpb25FZmZlY3RzT25GaWJlciIsICJkZWxldGVkRmliZXIiLCAicHJldkhvc3RQYXJlbnQiLCAicHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lciIsICJwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyJDExOSIsICJjbGVhclN1c3BlbnNlQm91bmRhcnkiLCAicmV0cnlJZkJsb2NrZWRPbiIsICJnZXRSZXRyeUNhY2hlIiwgInJldHJ5Q2FjaGUiLCAiYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyIsICJ3YWtlYWJsZXMiLCAid2FrZWFibGUiLCAicmV0cnkiLCAicmVzb2x2ZVJldHJ5V2FrZWFibGUiLCAicmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyIsICJyb290JGpzY29tcCQwIiwgInBhcmVudEZpYmVyIiwgImNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIiLCAiY3VycmVudEhvaXN0YWJsZVJvb3QiLCAiY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzIiwgImhvaXN0YWJsZVJvb3QiLCAiY3VycmVudFJlc291cmNlIiwgIm1heWJlTm9kZXMiLCAiZ2V0SHlkcmF0YWJsZUhvaXN0YWJsZUNhY2hlIiwgIm1vdW50SG9pc3RhYmxlIiwgImFjcXVpcmVSZXNvdXJjZSIsICJuZXh0Tm9kZSIsICJhdHRyaWJ1dGVzIiwgInRhZ0NhY2hlcyIsICJnZXRIb2lzdGFibGVSb290IiwgInJlY3Vyc2l2ZWx5UmVzZXRGb3JtcyIsICJnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lIiwgInJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzIiwgImRpc3BsYXkiLCAicGFyZW50JGpzY29tcCQwIiwgInBhcmVudCQxMTMiLCAiYmVmb3JlJDExNCIsICJwYXJlbnQkMTE1IiwgImJlZm9yZSQxMTYiLCAiZmluaXNoZWRSb290JGpzY29tcCQwIiwgImluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMiLCAiaGlkZGVuQ2FsbGJhY2tzIiwgImNvbW1pdE9mZnNjcmVlblBhc3NpdmVNb3VudEVmZmVjdHMiLCAicHJldmlvdXNDYWNoZSIsICJjb21taXRDYWNoZVBhc3NpdmVNb3VudEVmZmVjdCIsICJyZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyIsICJjb21taXR0ZWRMYW5lcyIsICJjb21taXR0ZWRUcmFuc2l0aW9ucyIsICJjb21taXRQYXNzaXZlTW91bnRPbkZpYmVyIiwgIl9maW5pc2hlZFdvcmskbWVtb2l6ZTIiLCAiaWQiLCAib25Qb3N0Q29tbWl0IiwgInJlY3Vyc2l2ZWx5VHJhdmVyc2VBdG9taWNQYXNzaXZlRWZmZWN0cyIsICJyZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMiLCAiY29tbWl0dGVkTGFuZXMkanNjb21wJDAiLCAiY29tbWl0dGVkVHJhbnNpdGlvbnMkanNjb21wJDAiLCAic3VzcGVuc2V5Q29tbWl0RmxhZyIsICJyZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQiLCAiYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdE9uRmliZXIiLCAic3VzcGVuZFJlc291cmNlIiwgInByZXZpb3VzSG9pc3RhYmxlUm9vdCIsICJkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyIsICJwcmV2aW91c0ZpYmVyIiwgInJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMiLCAiY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9iZWdpbiIsICJjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIiLCAicmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyIsICJkZWxldGVkU3VidHJlZVJvb3QiLCAic2libGluZyIsICJGaWJlck5vZGUiLCAicmVzZXRXb3JrSW5Qcm9ncmVzcyIsICJvd25lciIsICJmaWJlclRhZyIsICJpc0hvc3RIb2lzdGFibGVUeXBlIiwgImVsZW1lbnRzIiwgInByaW1hcnlDaGlsZEluc3RhbmNlIiwgImNvbnRlbnQiLCAibWFya1VwZGF0ZSIsICJwcmVsb2FkUmVzb3VyY2VBbmRTdXNwZW5kSWZOZWVkZWQiLCAicmVzb3VyY2UiLCAicHJlbG9hZFJlc291cmNlIiwgInNjaGVkdWxlUmV0cnlFZmZlY3QiLCAicmV0cnlRdWV1ZSIsICJ3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMiLCAiY3V0T2ZmVGFpbElmTmVlZGVkIiwgImhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayIsICJsYXN0VGFpbE5vZGUiLCAibGFzdFRhaWxOb2RlJDEzMSIsICJidWJibGVQcm9wZXJ0aWVzIiwgImNvbXBsZXRlZFdvcmsiLCAiZGlkQmFpbG91dCIsICJuZXdDaGlsZExhbmVzIiwgInN1YnRyZWVGbGFncyIsICJjaGlsZCQxMzIiLCAiY29tcGxldGVXb3JrIiwgInF1ZXVlUmVjb3ZlcmFibGVFcnJvcnMiLCAiY2FjaGUkMTQ0IiwgImxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzIiwgIndvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUiLCAidW53aW5kV29yayIsICJ1bndpbmRJbnRlcnJ1cHRlZFdvcmsiLCAiaW50ZXJydXB0ZWRXb3JrIiwgIkRlZmF1bHRBc3luY0Rpc3BhdGNoZXIiLCAicmVzb3VyY2VUeXBlIiwgImNhY2hlRm9yVHlwZSIsICJQb3NzaWJseVdlYWtNYXAiLCAid29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24iLCAid29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSIsICJ3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3MiLCAid29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmciLCAid29ya0luUHJvZ3Jlc3NSb290RGlkQXR0YWNoUGluZ0xpc3RlbmVyIiwgIndvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzIiwgIndvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzIiwgIndvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzIiwgIndvcmtJblByb2dyZXNzUm9vdERpZEluY2x1ZGVSZWN1cnNpdmVSZW5kZXJVcGRhdGUiLCAid29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyIsICJyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyIsICJyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyIsICJwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyIsICJwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW1haW5pbmdMYW5lcyIsICJwZW5kaW5nUGFzc2l2ZVRyYW5zaXRpb25zIiwgImFjdGlvblNjb3BlTGFuZSIsICJzdXNwZW5zZUhhbmRsZXIiLCAicHJlcGFyZUZyZXNoU3RhY2siLCAibWFya1Jvb3RTdXNwZW5kZWQiLCAiZW5zdXJlUm9vdElzU2NoZWR1bGVkIiwgInBlcmZvcm1Xb3JrT25Sb290IiwgImZvcmNlU3luYyIsICJzaG91bGRUaW1lU2xpY2UiLCAiZXhpdFN0YXR1cyIsICJyZW5kZXJSb290Q29uY3VycmVudCIsICJyZW5kZXJSb290U3luYyIsICJyZW5kZXJXYXNDb25jdXJyZW50IiwgImlzUmVuZGVyQ29uc2lzdGVudFdpdGhFeHRlcm5hbFN0b3JlcyIsICJ3YXNSb290RGVoeWRyYXRlZCIsICJzY2hlZHVsZVRpbWVvdXQiLCAiY29tbWl0Um9vdFdoZW5SZWFkeSIsICJlcnJvcnMiLCAicmVjb3ZlcmFibGVFcnJvcnMiLCAidHJhbnNpdGlvbnMiLCAiZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlIiwgImRpZFNraXBTdXNwZW5kZWRTaWJsaW5ncyIsICJzdXNwZW5kZWRDb21taXRSZWFzb24iLCAiY29tcGxldGVkUmVuZGVyU3RhcnRUaW1lIiwgImNvbXBsZXRlZFJlbmRlckVuZFRpbWUiLCAic3VzcGVuZGVkU3RhdGUiLCAibm9vcCIsICJ3YWl0Rm9yQ29tbWl0VG9CZVJlYWR5IiwgImNvbW1pdFJvb3QiLCAiY2hlY2siLCAiZGlkQXR0ZW1wdEVudGlyZVRyZWUiLCAiaW5kZXgkNiIsICJmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCIsICJyZXNldFdvcmtJblByb2dyZXNzU3RhY2siLCAidGltZW91dEhhbmRsZSIsICJjYW5jZWxUaW1lb3V0IiwgImFsbEVudGFuZ2xlZExhbmVzIiwgImluZGV4JDQiLCAiaGFuZGxlVGhyb3ciLCAidGhyb3duVmFsdWUiLCAicHVzaERpc3BhdGNoZXIiLCAicHJldkRpc3BhdGNoZXIiLCAicHVzaEFzeW5jRGlzcGF0Y2hlciIsICJwcmV2QXN5bmNEaXNwYXRjaGVyIiwgInNob3VsZFlpZWxkRm9yUHJlcmVuZGVyaW5nIiwgInByZXZFeGVjdXRpb25Db250ZXh0IiwgInVuaXRPZldvcmsiLCAicmVhc29uIiwgInRocm93QW5kVW53aW5kV29ya0xvb3AiLCAid29ya0xvb3BTeW5jIiwgInRocm93blZhbHVlJDE2NCIsICJwZXJmb3JtVW5pdE9mV29yayIsICJyZXBsYXlTdXNwZW5kZWRVbml0T2ZXb3JrIiwgImhvc3RGaWJlciIsICJjb21wbGV0ZVVuaXRPZldvcmsiLCAid29ya0xvb3BDb25jdXJyZW50IiwgInRocm93blZhbHVlJDE2NiIsICJzdXNwZW5kZWRSZWFzb24iLCAidW53aW5kVW5pdE9mV29yayIsICJza2lwU2libGluZ3MiLCAicHJldmlvdXNVcGRhdGVMYW5lUHJpb3JpdHkiLCAiY29tbWl0Um9vdEltcGwiLCAicmVuZGVyUHJpb3JpdHlMZXZlbCIsICJmbHVzaFBhc3NpdmVFZmZlY3RzIiwgInNjaGVkdWxlQ2FsbGJhY2skMSIsICJyZWxlYXNlUm9vdFBvb2xlZENhY2hlIiwgInJvb3QkMTcwIiwgInJlbmRlclByaW9yaXR5IiwgImNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290IiwgInJvb3RGaWJlciIsICJwaW5nQ2FjaGUiLCAidGhyZWFkSURzIiwgInBpbmdTdXNwZW5kZWRSb290IiwgInJldHJ5VGltZWRPdXRCb3VuZGFyeSIsICJib3VuZGFyeUZpYmVyIiwgInJldHJ5TGFuZSIsICJwcmlvcml0eUxldmVsIiwgImZpcnN0U2NoZWR1bGVkUm9vdCIsICJsYXN0U2NoZWR1bGVkUm9vdCIsICJkaWRTY2hlZHVsZU1pY3JvdGFzayIsICJtaWdodEhhdmVQZW5kaW5nU3luY1dvcmsiLCAiaXNGbHVzaGluZ1dvcmsiLCAiY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUiLCAic2NoZWR1bGVJbW1lZGlhdGVUYXNrIiwgInByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzayIsICJzeW5jVHJhbnNpdGlvbkxhbmVzIiwgIm9ubHlMZWdhY3kiLCAiZGlkUGVyZm9ybVNvbWVXb3JrIiwgInJvb3QkMTcyIiwgInBlcmZvcm1TeW5jV29ya09uUm9vdCIsICJzaG91bGRBdHRlbXB0RWFnZXJUcmFuc2l0aW9uIiwgInByZXYiLCAic2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayIsICJpbmRleCQ1IiwgImV4cGlyYXRpb25UaW1lIiwgInBlcmZvcm1Xb3JrT25Sb290VmlhU2NoZWR1bGVyVGFzayIsICJkaWRUaW1lb3V0IiwgIm9yaWdpbmFsQ2FsbGJhY2tOb2RlIiwgIndvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJGpzY29tcCQwIiwgImNiIiwgInNjaGVkdWxlTWljcm90YXNrIiwgImNvZXJjZUZvcm1BY3Rpb25Qcm9wIiwgImFjdGlvblByb3AiLCAiY3JlYXRlRm9ybURhdGFXaXRoU3VibWl0dGVyIiwgImZvcm0iLCAic3VibWl0dGVyIiwgInRlbXAiLCAiZXh0cmFjdEV2ZW50cyQxIiwgIm1heWJlVGFyZ2V0SW5zdCIsICJpJGpzY29tcCRpbmxpbmVfMTQzOSIsICJldmVudE5hbWUkanNjb21wJGlubGluZV8xNDQwIiwgImRvbUV2ZW50TmFtZSRqc2NvbXAkaW5saW5lXzE0NDEiLCAiY2FwaXRhbGl6ZWRFdmVudCRqc2NvbXAkaW5saW5lXzE0NDIiLCAibm9uRGVsZWdhdGVkRXZlbnRzIiwgImV2ZW50U3lzdGVtRmxhZ3MiLCAiX2Rpc3BhdGNoUXVldWUkaSIsICJwcmV2aW91c0luc3RhbmNlIiwgImkkanNjb21wJDAiLCAiX2Rpc3BhdGNoTGlzdGVuZXJzJGkiLCAiY3VycmVudFRhcmdldCIsICJ0YXJnZXRFbGVtZW50IiwgImxpc3RlbmVyU2V0S2V5IiwgImFkZFRyYXBwZWRFdmVudExpc3RlbmVyIiwgImxpc3RlblRvTmF0aXZlRXZlbnQiLCAiaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciIsICJsaXN0ZW5pbmdNYXJrZXIiLCAicm9vdENvbnRhaW5lckVsZW1lbnQiLCAib3duZXJEb2N1bWVudCIsICJ0YXJnZXRDb250YWluZXIiLCAibGlzdGVuZXJXcmFwcGVyIiwgImRpc3BhdGNoRGlzY3JldGVFdmVudCIsICJkaXNwYXRjaENvbnRpbnVvdXNFdmVudCIsICJkaXNwYXRjaEV2ZW50IiwgImRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbSIsICJ0YXJnZXRJbnN0JGpzY29tcCQwIiwgImFuY2VzdG9ySW5zdCIsICJub2RlVGFnIiwgImNvbnRhaW5lciIsICJncmFuZFRhZyIsICJTeW50aGV0aWNFdmVudEN0b3IiLCAiaW5DYXB0dXJlUGhhc2UiLCAiYWNjdW11bGF0ZVRhcmdldE9ubHkiLCAicmVhY3RFdmVudE5hbWUiLCAibGFzdEhvc3RDb21wb25lbnQiLCAiX2luc3RhbmNlIiwgImNyZWF0ZURpc3BhdGNoTGlzdGVuZXIiLCAiZ2V0UGFyZW50IiwgImFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQiLCAiZ2V0VGFyZ2V0SW5zdEZ1bmMiLCAiaGFuZGxlRXZlbnRGdW5jIiwgImZhbGxiYWNrRGF0YSIsICJldmVudFR5cGUiLCAidGFyZ2V0RmliZXIiLCAiY2FwdHVyZU5hbWUiLCAiX2luc3RhbmNlMiIsICJjb21tb24iLCAiX2luc3RhbmNlMyIsICJOT1JNQUxJWkVfTkVXTElORVNfUkVHRVgiLCAiTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYIiwgIm5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZSIsICJtYXJrdXAiLCAic2VydmVyVGV4dCIsICJjbGllbnRUZXh0IiwgInNldFByb3AiLCAic2V0UHJvcE9uQ3VzdG9tRWxlbWVudCIsICJoYXNTcmMiLCAiaGFzU3JjU2V0IiwgInByb3BLZXkiLCAicHJvcFZhbHVlJDE4NiIsICJsYXN0UHJvcHMiLCAibGFzdFByb3AiLCAicHJvcEtleSQyMDMiLCAicHJvcEtleSQyMTkiLCAicHJvcEtleSQyMjQiLCAicHJvcEtleSQyMjkiLCAicHJvcEtleSQyMzQiLCAibmFtZXNwYWNlVVJJIiwgInBhcmVudE5hbWVzcGFjZSIsICJjdXJyZW50UG9wc3RhdGVUcmFuc2l0aW9uRXZlbnQiLCAibG9jYWxQcm9taXNlIiwgImhhbmRsZUVycm9ySW5OZXh0VGljayIsICJwYXJlbnRJbnN0YW5jZSIsICJzdXNwZW5zZUluc3RhbmNlIiwgImRlcHRoIiwgImFueVByb3BzIiwgIm5vZGVUeXBlIiwgInRhcmdldEluc3RhbmNlIiwgImRhdGEiLCAicm9vdENvbnRhaW5lckluc3RhbmNlIiwgInByZWxvYWRQcm9wc01hcCIsICJwcmVjb25uZWN0c1NldCIsICJwcmV2aW91c0Rpc3BhdGNoZXIiLCAiZmx1c2hTeW5jV29yayIsICJyZXF1ZXN0Rm9ybVJlc2V0IiwgInByZWZldGNoRE5TIiwgInByZWNvbm5lY3QiLCAicHJlbG9hZCIsICJwcmVsb2FkTW9kdWxlIiwgInByZWluaXRTY3JpcHQiLCAicHJlaW5pdFN0eWxlIiwgInByZWluaXRNb2R1bGVTY3JpcHQiLCAicHJldmlvdXNXYXNSZW5kZXJpbmciLCAid2FzUmVuZGVyaW5nIiwgImZvcm1JbnN0IiwgImdsb2JhbERvY3VtZW50IiwgInByZWNvbm5lY3RBcyIsICJyZWwiLCAiaHJlZiIsICJjcm9zc09yaWdpbiIsICJsaW1pdGVkRXNjYXBlZEhyZWYiLCAiYXMiLCAicHJlbG9hZFNlbGVjdG9yIiwgImdldFN0eWxlS2V5IiwgImdldFNjcmlwdEtleSIsICJnZXRTdHlsZXNoZWV0U2VsZWN0b3JGcm9tS2V5IiwgImdldFNjcmlwdFNlbGVjdG9yRnJvbUtleSIsICJwcmVjZWRlbmNlIiwgImFkb3B0UHJlbG9hZFByb3BzRm9yU3R5bGVzaGVldCIsICJsaW5rIiwgInJlamVjdCIsICJpbnNlcnRTdHlsZXNoZWV0IiwgInNyYyIsICJzY3JpcHRzIiwgImFkb3B0UHJlbG9hZFByb3BzRm9yU2NyaXB0IiwgImN1cnJlbnRQcm9wcyIsICJzdHlsZXMkMjQyIiwgInJlc291cmNlJDI0MyIsICJwcmVsb2FkU3R5bGVzaGVldCIsICJzdHlsZXNoZWV0UHJvcHNGcm9tUmF3UHJvcHMiLCAicmF3UHJvcHMiLCAicHJlbG9hZFByb3BzIiwgInN0eWxlUHJvcHMiLCAiaW5zdGFuY2UkMjQ4IiwgImxpbmtJbnN0YW5jZSIsICJub2RlcyIsICJwcmlvciIsICJzdHlsZXNoZWV0UHJvcHMiLCAic2NyaXB0UHJvcHMiLCAia2V5QXR0cmlidXRlIiwgImNhY2hlcyIsICJub2RlS2V5IiwgImhvc3RDb250ZXh0IiwgIm9uVW5zdXNwZW5kIiwgImluc2VydFN1c3BlbmRlZFN0eWxlc2hlZXRzIiwgImNvbW1pdCIsICJzdHlsZXNoZWV0VGltZXIiLCAidW5zdXNwZW5kIiwgInByZWNlZGVuY2VzQnlSb290IiwgImluc2VydFN0eWxlc2hlZXRJbnRvUm9vdCIsICJwcmVjZWRlbmNlcyIsICJGaWJlclJvb3ROb2RlIiwgImh5ZHJhdGUiLCAib25SZWNvdmVyYWJsZUVycm9yIiwgImZvcm1TdGF0ZSIsICJjcmVhdGVGaWJlclJvb3QiLCAiaW5pdGlhbENoaWxkcmVuIiwgImh5ZHJhdGlvbkNhbGxiYWNrcyIsICJpc1N0cmljdE1vZGUiLCAidHJhbnNpdGlvbkNhbGxiYWNrcyIsICJnZXRDb250ZXh0Rm9yU3VidHJlZSIsICJwYXJlbnRDb21wb25lbnQiLCAidXBkYXRlQ29udGFpbmVySW1wbCIsICJtYXJrUmV0cnlMYW5lSW1wbCIsICJtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZCIsICJhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiIsICJibG9ja2VkT24iLCAiZmluZEluc3RhbmNlQmxvY2tpbmdFdmVudCIsICJyZXR1cm5fdGFyZ2V0SW5zdCIsICJjbGVhcklmQ29udGludW91c0V2ZW50IiwgInF1ZXVlSWZDb250aW51b3VzRXZlbnQiLCAiZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzIiwgImZpbmRJbnN0YW5jZUJsb2NraW5nVGFyZ2V0IiwgImhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQiLCAicXVldWVkRm9jdXMiLCAicXVldWVkRHJhZyIsICJxdWV1ZWRNb3VzZSIsICJxdWV1ZWRQb2ludGVycyIsICJxdWV1ZWRQb2ludGVyQ2FwdHVyZXMiLCAicXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzIiwgImFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQiLCAiZXhpc3RpbmdRdWV1ZWRFdmVudCIsICJwb2ludGVySWQiLCAiYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0IiwgInF1ZXVlZFRhcmdldCIsICJhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50IiwgInF1ZXVlZEV2ZW50IiwgInRhcmdldENvbnRhaW5lcnMiLCAibmV4dEJsb2NrZWRPbiIsICJuYXRpdmVFdmVudENsb25lIiwgImF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCIsICJtYXAiLCAicmVwbGF5VW5ibG9ja2VkRXZlbnRzIiwgInNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZCIsICJ1bmJsb2NrZWQiLCAibGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlIiwgInNjaGVkdWxlUmVwbGF5UXVldWVJZk5lZWRlZCIsICJmb3JtUmVwbGF5aW5nUXVldWUiLCAic3VibWl0dGVyT3JBY3Rpb24iLCAidW5ibG9jayIsICJmb3JtUHJvcHMiLCAiUmVhY3RET01Sb290IiwgImludGVybmFsUm9vdCIsICJSZWFjdERPTUh5ZHJhdGlvblJvb3QiLCAiaXNvbW9ycGhpY1JlYWN0UGFja2FnZVZlcnNpb24kanNjb21wJGlubGluZV8xNjg2IiwgImNvbXBvbmVudE9yRWxlbWVudCIsICJpbnRlcm5hbHMkanNjb21wJGlubGluZV8yMTY1IiwgImhvb2skanNjb21wJGlubGluZV8yMTY2IiwgInJlcXVpcmVfY2xpZW50IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY2hlY2tEQ0UiLCAiZXJyIiwgIlJlYWN0IiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgIlJlbmRlckNvbnRleHQiLCAidXNlUmVuZGVyQ29udGV4dCIsICJjdHgiLCAidXNlTW9kZWwiLCAidXNlTW9kZWxTdGF0ZSIsICJrZXkiLCAibW9kZWwiLCAidXNlTW9kZWwiLCAidmFsdWUiLCAic2V0VmFsdWUiLCAiY2FsbGJhY2siLCAiY3JlYXRlUmVuZGVyIiwgIldpZGdldCIsICJlbCIsICJleHBlcmltZW50YWwiLCAicm9vdCIsICJSZW5kZXJDb250ZXh0IiwgInJlbmRlciIsICJjcmVhdGVSZW5kZXIiLCAiY29uZmlnIiwgInVzZU1vZGVsU3RhdGUiLCAiaWZyYW1lUmVhZHkiLCAic2V0SWZyYW1lUmVhZHkiLCAicGFnZSIsICJzZXRQYWdlIiwgInNlcXVlbmNlcyIsICJzZXRTZXF1ZW5jZSIsICJwYXJ0aWNpcGFudHNEYXRhSlNPTiIsICJzZXRQYXJ0aWNpcGFudHNEYXRhSlNPTiIsICJwYXJ0aWNpcGFudHNEYXRhVElEWSIsICJzZXRQYXJ0aWNpcGFudHNEYXRhVElEWSIsICJyZWYiLCAibWVzc2FnZUxpc3RlbmVyIiwgImV2ZW50IiwgImkiLCAid2lkZ2V0X2RlZmF1bHQiXQp9Cg==
|