@getopenpay/openpay-js-react 0.4.0-alpha.b969cf5 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{Resource-xvemW2CB-BSVbYSFM.js → Resource-CTCdWjKS-C8dkyDgL.js} +3 -3
  3. package/dist/{SimpleSpanProcessor-BV2ksmVP-CNyzDkpv.js → SimpleSpanProcessor-MO7WI3-6-Ccr--4xx.js} +7 -7
  4. package/dist/{detect-resources-DfMST-ta-j3hq2KIW.js → detect-resources-DK4dwgiv-CSb37cPa.js} +7 -7
  5. package/dist/{diag-api-Dc7EDmQa-CAUMW8vc.js → diag-api-rBzeQxnT-CbUniXQ_.js} +2 -2
  6. package/dist/{index-CTPnAkjQ-CVpR46iS.js → index-8rVBDRAw-CqT2qEVW.js} +5 -5
  7. package/dist/{index-Cu7pjSqG-BYc9pvCf.js → index-B6cL7L0x-DPr7j_Hx.js} +5 -5
  8. package/dist/{index-jll0xx1A-DJ0n1dB1.js → index-BAN-c0U9-Dizk0eIJ.js} +2 -2
  9. package/dist/{index-BmGaeKPP-CL_Wg3MX.js → index-BNp2hpua-DhZpJzsC.js} +6 -6
  10. package/dist/{index-DvyyUqSe-DOdPgU2j.js → index-B_HB1I5e-CYJ5LeYR.js} +5 -5
  11. package/dist/{index-D-ZnR0XH-JgjeK7c5.js → index-ByICHutp-DvijmJUI.js} +6 -6
  12. package/dist/{index-DGQAtm-2-DRK5W7FL.js → index-Cd1_3HK3-CMtiyHrm.js} +2 -2
  13. package/dist/index-CmKRpwza.js +8281 -0
  14. package/dist/{index-CTP5s853-CU6BCBB9.js → index-D_Sbw0qI-Cp6ooE8f.js} +2 -2
  15. package/dist/{index-BzBgibKZ-JXxnfBm1.js → index-SARUZ-Ti-DYh5CO3-.js} +2 -2
  16. package/dist/index.d.ts +16 -14
  17. package/dist/index.js +1 -1
  18. package/dist/{metrics-api-DsPv7fZ4-DjaH3LBI.js → metrics-api-Dx5bovdh-QMGZ-op1.js} +10 -10
  19. package/dist/{sdk-info-P6uwQJLm-C42nIoL4.js → sdk-info-4XZX2Alq-CCzbhjox.js} +2 -2
  20. package/dist/{url-D64eBzqM-DwMt85n6.js → url-DV3A6lQl-DY1NmdXD.js} +36 -36
  21. package/dist/{utils-BTAELpHP-DC12OYbT.js → utils-C-6L2e_H-DD54szQG.js} +4 -4
  22. package/dist/{utils-BG_bxOS7-Dhvh3mu0.js → utils-Cjd5v2Ru-BMrWwqcr.js} +2 -2
  23. package/package.json +1 -1
  24. package/dist/index-CUsHMEAo.js +0 -8300
@@ -1,4 +1,4 @@
1
- import { r } from "./diag-api-Dc7EDmQa-CAUMW8vc.js";
1
+ import { r } from "./diag-api-rBzeQxnT-CbUniXQ_.js";
2
2
  import { a, A } from "./ExportResult-Bo1QOwfo-BBnR58Dk.js";
3
3
  import { f } from "./_commonjsHelpers-DnMzE-71-CPTlJly7.js";
4
4
  var OTLPExporterBase = (
@@ -6682,4 +6682,4 @@ var __extends = /* @__PURE__ */ function() {
6682
6682
  export {
6683
6683
  OTLPTraceExporter
6684
6684
  };
6685
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtamxsMHh4MUEtIX57MDBrfX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHIgfSBmcm9tICcuL2RpYWctYXBpLURjN0VEbVFhLSF+ezAwN31+LmpzJztcbmltcG9ydCB7IGEsIEEgfSBmcm9tICcuL0V4cG9ydFJlc3VsdC1CbzFRT3dmby0hfnswMGx9fi5qcyc7XG5pbXBvcnQgeyBmIH0gZnJvbSAnLi9fY29tbW9uanNIZWxwZXJzLURuTXpFLTcxLSF+ezAwaX1+LmpzJztcblxudmFyIE9UTFBFeHBvcnRlckJhc2UgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gYSh1KSB7XG4gICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHU7XG4gICAgfVxuICAgIHJldHVybiBhLnByb3RvdHlwZS5leHBvcnQgPSBmdW5jdGlvbih1LCBjKSB7XG4gICAgICB0aGlzLl9kZWxlZ2F0ZS5leHBvcnQodSwgYyk7XG4gICAgfSwgYS5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlLmZvcmNlRmx1c2goKTtcbiAgICB9LCBhLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlLnNodXRkb3duKCk7XG4gICAgfSwgYTtcbiAgfSgpXG4pLCBfX2V4dGVuZHMkMSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIGEgPSBmdW5jdGlvbih1LCBjKSB7XG4gICAgcmV0dXJuIGEgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihmLCBpKSB7XG4gICAgICBmLl9fcHJvdG9fXyA9IGk7XG4gICAgfSB8fCBmdW5jdGlvbihmLCBpKSB7XG4gICAgICBmb3IgKHZhciBvIGluIGkpIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCBvKSAmJiAoZltvXSA9IGlbb10pO1xuICAgIH0sIGEodSwgYyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbih1LCBjKSB7XG4gICAgaWYgKHR5cGVvZiBjICE9IFwiZnVuY3Rpb25cIiAmJiBjICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYykgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgIGEodSwgYyk7XG4gICAgZnVuY3Rpb24gZigpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSB1O1xuICAgIH1cbiAgICB1LnByb3RvdHlwZSA9IGMgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGMpIDogKGYucHJvdG90eXBlID0gYy5wcm90b3R5cGUsIG5ldyBmKCkpO1xuICB9O1xufSgpLCBPVExQRXhwb3J0ZXJFcnJvciA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbihhKSB7XG4gICAgX19leHRlbmRzJDEodSwgYSk7XG4gICAgZnVuY3Rpb24gdShjLCBmLCBpKSB7XG4gICAgICB2YXIgbyA9IGEuY2FsbCh0aGlzLCBjKSB8fCB0aGlzO1xuICAgICAgcmV0dXJuIG8ubmFtZSA9IFwiT1RMUEV4cG9ydGVyRXJyb3JcIiwgby5kYXRhID0gaSwgby5jb2RlID0gZiwgbztcbiAgICB9XG4gICAgcmV0dXJuIHU7XG4gIH0oRXJyb3IpXG4pO1xuZnVuY3Rpb24gdmFsaWRhdGVUaW1lb3V0TWlsbGlzKGEpIHtcbiAgaWYgKCFOdW1iZXIuaXNOYU4oYSkgJiYgTnVtYmVyLmlzRmluaXRlKGEpICYmIGEgPiAwKVxuICAgIHJldHVybiBhO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDb25maWd1cmF0aW9uOiB0aW1lb3V0TWlsbGlzIGlzIGludmFsaWQsIGV4cGVjdGVkIG51bWJlciBncmVhdGVyIHRoYW4gMCAoYWN0dWFsOiAnXCIgKyBhICsgXCInKVwiKTtcbn1cbmZ1bmN0aW9uIHdyYXBTdGF0aWNIZWFkZXJzSW5GdW5jdGlvbihhKSB7XG4gIGlmIChhICE9IG51bGwpXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGE7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIG1lcmdlT3RscFNoYXJlZENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMoYSwgdSwgYykge1xuICB2YXIgZiwgaSwgbywgZSwgdCwgcjtcbiAgcmV0dXJuIHtcbiAgICB0aW1lb3V0TWlsbGlzOiB2YWxpZGF0ZVRpbWVvdXRNaWxsaXMoKGkgPSAoZiA9IGEudGltZW91dE1pbGxpcykgIT09IG51bGwgJiYgZiAhPT0gdm9pZCAwID8gZiA6IHUudGltZW91dE1pbGxpcykgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IGMudGltZW91dE1pbGxpcyksXG4gICAgY29uY3VycmVuY3lMaW1pdDogKGUgPSAobyA9IGEuY29uY3VycmVuY3lMaW1pdCkgIT09IG51bGwgJiYgbyAhPT0gdm9pZCAwID8gbyA6IHUuY29uY3VycmVuY3lMaW1pdCkgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IGMuY29uY3VycmVuY3lMaW1pdCxcbiAgICBjb21wcmVzc2lvbjogKHIgPSAodCA9IGEuY29tcHJlc3Npb24pICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiB1LmNvbXByZXNzaW9uKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogYy5jb21wcmVzc2lvblxuICB9O1xufVxuZnVuY3Rpb24gZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkRlZmF1bHRzKCkge1xuICByZXR1cm4ge1xuICAgIHRpbWVvdXRNaWxsaXM6IDFlNCxcbiAgICBjb25jdXJyZW5jeUxpbWl0OiAzMCxcbiAgICBjb21wcmVzc2lvbjogXCJub25lXCJcbiAgfTtcbn1cbnZhciBfX2F3YWl0ZXIkMiA9IGZ1bmN0aW9uKGEsIHUsIGMsIGYpIHtcbiAgZnVuY3Rpb24gaShvKSB7XG4gICAgcmV0dXJuIG8gaW5zdGFuY2VvZiBjID8gbyA6IG5ldyBjKGZ1bmN0aW9uKGUpIHtcbiAgICAgIGUobyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAoYyB8fCAoYyA9IFByb21pc2UpKShmdW5jdGlvbihvLCBlKSB7XG4gICAgZnVuY3Rpb24gdChsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuKGYubmV4dChsKSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIGUocCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHIobCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbihmLnRocm93KGwpKTtcbiAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgZShwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbihsKSB7XG4gICAgICBsLmRvbmUgPyBvKGwudmFsdWUpIDogaShsLnZhbHVlKS50aGVuKHQsIHIpO1xuICAgIH1cbiAgICBuKChmID0gZi5hcHBseShhLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufSwgX19nZW5lcmF0b3IkMiA9IGZ1bmN0aW9uKGEsIHUpIHtcbiAgdmFyIGMgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAob1swXSAmIDEpIHRocm93IG9bMV07XG4gICAgcmV0dXJuIG9bMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIGksIG8sIGU7XG4gIHJldHVybiBlID0geyBuZXh0OiB0KDApLCB0aHJvdzogdCgxKSwgcmV0dXJuOiB0KDIpIH0sIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGU7XG4gIGZ1bmN0aW9uIHQobikge1xuICAgIHJldHVybiBmdW5jdGlvbihsKSB7XG4gICAgICByZXR1cm4gcihbbiwgbF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gcihuKSB7XG4gICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBjOyApIHRyeSB7XG4gICAgICBpZiAoZiA9IDEsIGkgJiYgKG8gPSBuWzBdICYgMiA/IGkucmV0dXJuIDogblswXSA/IGkudGhyb3cgfHwgKChvID0gaS5yZXR1cm4pICYmIG8uY2FsbChpKSwgMCkgOiBpLm5leHQpICYmICEobyA9IG8uY2FsbChpLCBuWzFdKSkuZG9uZSkgcmV0dXJuIG87XG4gICAgICBzd2l0Y2ggKGkgPSAwLCBvICYmIChuID0gW25bMF0gJiAyLCBvLnZhbHVlXSksIG5bMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbyA9IG47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gYy5sYWJlbCsrLCB7IHZhbHVlOiBuWzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgYy5sYWJlbCsrLCBpID0gblsxXSwgbiA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG4gPSBjLm9wcy5wb3AoKSwgYy50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChvID0gYy50cnlzLCAhKG8gPSBvLmxlbmd0aCA+IDAgJiYgb1tvLmxlbmd0aCAtIDFdKSAmJiAoblswXSA9PT0gNiB8fCBuWzBdID09PSAyKSkge1xuICAgICAgICAgICAgYyA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5bMF0gPT09IDMgJiYgKCFvIHx8IG5bMV0gPiBvWzBdICYmIG5bMV0gPCBvWzNdKSkge1xuICAgICAgICAgICAgYy5sYWJlbCA9IG5bMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5bMF0gPT09IDYgJiYgYy5sYWJlbCA8IG9bMV0pIHtcbiAgICAgICAgICAgIGMubGFiZWwgPSBvWzFdLCBvID0gbjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobyAmJiBjLmxhYmVsIDwgb1syXSkge1xuICAgICAgICAgICAgYy5sYWJlbCA9IG9bMl0sIGMub3BzLnB1c2gobik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgb1syXSAmJiBjLm9wcy5wb3AoKSwgYy50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbiA9IHUuY2FsbChhLCBjKTtcbiAgICB9IGNhdGNoIChsKSB7XG4gICAgICBuID0gWzYsIGxdLCBpID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZiA9IG8gPSAwO1xuICAgIH1cbiAgICBpZiAoblswXSAmIDUpIHRocm93IG5bMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IG5bMF0gPyBuWzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59LCBCb3VuZGVkUXVldWVFeHBvcnRQcm9taXNlSGFuZGxlciA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBhKHUpIHtcbiAgICAgIHRoaXMuX3NlbmRpbmdQcm9taXNlcyA9IFtdLCB0aGlzLl9jb25jdXJyZW5jeUxpbWl0ID0gdTtcbiAgICB9XG4gICAgcmV0dXJuIGEucHJvdG90eXBlLnB1c2hQcm9taXNlID0gZnVuY3Rpb24odSkge1xuICAgICAgdmFyIGMgPSB0aGlzO1xuICAgICAgaWYgKHRoaXMuaGFzUmVhY2hlZExpbWl0KCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbmN1cnJlbmN5IExpbWl0IHJlYWNoZWRcIik7XG4gICAgICB0aGlzLl9zZW5kaW5nUHJvbWlzZXMucHVzaCh1KTtcbiAgICAgIHZhciBmID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpID0gYy5fc2VuZGluZ1Byb21pc2VzLmluZGV4T2YodSk7XG4gICAgICAgIGMuX3NlbmRpbmdQcm9taXNlcy5zcGxpY2UoaSwgMSk7XG4gICAgICB9O1xuICAgICAgdS50aGVuKGYsIGYpO1xuICAgIH0sIGEucHJvdG90eXBlLmhhc1JlYWNoZWRMaW1pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbmRpbmdQcm9taXNlcy5sZW5ndGggPj0gdGhpcy5fY29uY3VycmVuY3lMaW1pdDtcbiAgICB9LCBhLnByb3RvdHlwZS5hd2FpdEFsbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIF9fYXdhaXRlciQyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yJDIodGhpcywgZnVuY3Rpb24odSkge1xuICAgICAgICAgIHN3aXRjaCAodS5sYWJlbCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gWzQsIFByb21pc2UuYWxsKHRoaXMuX3NlbmRpbmdQcm9taXNlcyldO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gdS5zZW50KCksIFtcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgLypyZXR1cm4qL1xuICAgICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCBhO1xuICB9KClcbik7XG5mdW5jdGlvbiBjcmVhdGVCb3VuZGVkUXVldWVFeHBvcnRQcm9taXNlSGFuZGxlcihhKSB7XG4gIHJldHVybiBuZXcgQm91bmRlZFF1ZXVlRXhwb3J0UHJvbWlzZUhhbmRsZXIoYS5jb25jdXJyZW5jeUxpbWl0KTtcbn1cbmZ1bmN0aW9uIGlzUGFydGlhbFN1Y2Nlc3NSZXNwb25zZShhKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgXCJwYXJ0aWFsU3VjY2Vzc1wiKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxvZ2dpbmdQYXJ0aWFsU3VjY2Vzc1Jlc3BvbnNlSGFuZGxlcigpIHtcbiAgcmV0dXJuIHtcbiAgICBoYW5kbGVSZXNwb25zZTogZnVuY3Rpb24oYSkge1xuICAgICAgYSA9PSBudWxsIHx8ICFpc1BhcnRpYWxTdWNjZXNzUmVzcG9uc2UoYSkgfHwgYS5wYXJ0aWFsU3VjY2VzcyA9PSBudWxsIHx8IE9iamVjdC5rZXlzKGEucGFydGlhbFN1Y2Nlc3MpLmxlbmd0aCA9PT0gMCB8fCByLndhcm4oXCJSZWNlaXZlZCBQYXJ0aWFsIFN1Y2Nlc3MgcmVzcG9uc2U6XCIsIEpTT04uc3RyaW5naWZ5KGEucGFydGlhbFN1Y2Nlc3MpKTtcbiAgICB9XG4gIH07XG59XG52YXIgX19hd2FpdGVyJDEgPSBmdW5jdGlvbihhLCB1LCBjLCBmKSB7XG4gIGZ1bmN0aW9uIGkobykge1xuICAgIHJldHVybiBvIGluc3RhbmNlb2YgYyA/IG8gOiBuZXcgYyhmdW5jdGlvbihlKSB7XG4gICAgICBlKG8pO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKGMgfHwgKGMgPSBQcm9taXNlKSkoZnVuY3Rpb24obywgZSkge1xuICAgIGZ1bmN0aW9uIHQobCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbihmLm5leHQobCkpO1xuICAgICAgfSBjYXRjaCAocCkge1xuICAgICAgICBlKHApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByKGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG4oZi50aHJvdyhsKSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIGUocCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG4obCkge1xuICAgICAgbC5kb25lID8gbyhsLnZhbHVlKSA6IGkobC52YWx1ZSkudGhlbih0LCByKTtcbiAgICB9XG4gICAgbigoZiA9IGYuYXBwbHkoYSwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn0sIF9fZ2VuZXJhdG9yJDEgPSBmdW5jdGlvbihhLCB1KSB7XG4gIHZhciBjID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKG9bMF0gJiAxKSB0aHJvdyBvWzFdO1xuICAgIHJldHVybiBvWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCBpLCBvLCBlO1xuICByZXR1cm4gZSA9IHsgbmV4dDogdCgwKSwgdGhyb3c6IHQoMSksIHJldHVybjogdCgyKSB9LCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoZVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlO1xuICBmdW5jdGlvbiB0KG4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24obCkge1xuICAgICAgcmV0dXJuIHIoW24sIGxdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHIobikge1xuICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgYzsgKSB0cnkge1xuICAgICAgaWYgKGYgPSAxLCBpICYmIChvID0gblswXSAmIDIgPyBpLnJldHVybiA6IG5bMF0gPyBpLnRocm93IHx8ICgobyA9IGkucmV0dXJuKSAmJiBvLmNhbGwoaSksIDApIDogaS5uZXh0KSAmJiAhKG8gPSBvLmNhbGwoaSwgblsxXSkpLmRvbmUpIHJldHVybiBvO1xuICAgICAgc3dpdGNoIChpID0gMCwgbyAmJiAobiA9IFtuWzBdICYgMiwgby52YWx1ZV0pLCBuWzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG8gPSBuO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIGMubGFiZWwrKywgeyB2YWx1ZTogblsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGMubGFiZWwrKywgaSA9IG5bMV0sIG4gPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBuID0gYy5vcHMucG9wKCksIGMudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAobyA9IGMudHJ5cywgIShvID0gby5sZW5ndGggPiAwICYmIG9bby5sZW5ndGggLSAxXSkgJiYgKG5bMF0gPT09IDYgfHwgblswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIGMgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuWzBdID09PSAzICYmICghbyB8fCBuWzFdID4gb1swXSAmJiBuWzFdIDwgb1szXSkpIHtcbiAgICAgICAgICAgIGMubGFiZWwgPSBuWzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuWzBdID09PSA2ICYmIGMubGFiZWwgPCBvWzFdKSB7XG4gICAgICAgICAgICBjLmxhYmVsID0gb1sxXSwgbyA9IG47XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG8gJiYgYy5sYWJlbCA8IG9bMl0pIHtcbiAgICAgICAgICAgIGMubGFiZWwgPSBvWzJdLCBjLm9wcy5wdXNoKG4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9bMl0gJiYgYy5vcHMucG9wKCksIGMudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG4gPSB1LmNhbGwoYSwgYyk7XG4gICAgfSBjYXRjaCAobCkge1xuICAgICAgbiA9IFs2LCBsXSwgaSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGYgPSBvID0gMDtcbiAgICB9XG4gICAgaWYgKG5bMF0gJiA1KSB0aHJvdyBuWzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiBuWzBdID8gblsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufSwgT1RMUEV4cG9ydERlbGVnYXRlID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGEkMSh1LCBjLCBmLCBpLCBvKSB7XG4gICAgICB0aGlzLl90cmFuc3BvcnQgPSB1LCB0aGlzLl9zZXJpYWxpemVyID0gYywgdGhpcy5fcmVzcG9uc2VIYW5kbGVyID0gZiwgdGhpcy5fcHJvbWlzZVF1ZXVlID0gaSwgdGhpcy5fdGltZW91dCA9IG8sIHRoaXMuX2RpYWdMb2dnZXIgPSByLmNyZWF0ZUNvbXBvbmVudExvZ2dlcih7XG4gICAgICAgIG5hbWVzcGFjZTogXCJPVExQRXhwb3J0RGVsZWdhdGVcIlxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhJDEucHJvdG90eXBlLmV4cG9ydCA9IGZ1bmN0aW9uKHUsIGMpIHtcbiAgICAgIHZhciBmID0gdGhpcztcbiAgICAgIGlmICh0aGlzLl9kaWFnTG9nZ2VyLmRlYnVnKFwiaXRlbXMgdG8gYmUgc2VudFwiLCB1KSwgdGhpcy5fcHJvbWlzZVF1ZXVlLmhhc1JlYWNoZWRMaW1pdCgpKSB7XG4gICAgICAgIGMoe1xuICAgICAgICAgIGNvZGU6IGEuRkFJTEVELFxuICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJDb25jdXJyZW50IGV4cG9ydCBsaW1pdCByZWFjaGVkXCIpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgaSA9IHRoaXMuX3NlcmlhbGl6ZXIuc2VyaWFsaXplUmVxdWVzdCh1KTtcbiAgICAgIGlmIChpID09IG51bGwpIHtcbiAgICAgICAgYyh7XG4gICAgICAgICAgY29kZTogYS5GQUlMRUQsXG4gICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIk5vdGhpbmcgdG8gc2VuZFwiKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fcHJvbWlzZVF1ZXVlLnB1c2hQcm9taXNlKHRoaXMuX3RyYW5zcG9ydC5zZW5kKGksIHRoaXMuX3RpbWVvdXQpLnRoZW4oZnVuY3Rpb24obykge1xuICAgICAgICBpZiAoby5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgaWYgKG8uZGF0YSAhPSBudWxsKVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZi5fcmVzcG9uc2VIYW5kbGVyLmhhbmRsZVJlc3BvbnNlKGYuX3NlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXNwb25zZShvLmRhdGEpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgZi5fZGlhZ0xvZ2dlci53YXJuKFwiRXhwb3J0IHN1Y2NlZWRlZCBidXQgY291bGQgbm90IGRlc2VyaWFsaXplIHJlc3BvbnNlIC0gaXMgdGhlIHJlc3BvbnNlIHNwZWNpZmljYXRpb24gY29tcGxpYW50P1wiLCBlLCBvLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGMoe1xuICAgICAgICAgICAgY29kZTogYS5TVUNDRVNTXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKG8uc3RhdHVzID09PSBcImZhaWx1cmVcIiAmJiBvLmVycm9yKSB7XG4gICAgICAgICAgYyh7XG4gICAgICAgICAgICBjb2RlOiBhLkZBSUxFRCxcbiAgICAgICAgICAgIGVycm9yOiBvLmVycm9yXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Ugby5zdGF0dXMgPT09IFwicmV0cnlhYmxlXCIgPyBjKHtcbiAgICAgICAgICBjb2RlOiBhLkZBSUxFRCxcbiAgICAgICAgICBlcnJvcjogbmV3IE9UTFBFeHBvcnRlckVycm9yKFwiRXhwb3J0IGZhaWxlZCB3aXRoIHJldHJ5YWJsZSBzdGF0dXNcIilcbiAgICAgICAgfSkgOiBjKHtcbiAgICAgICAgICBjb2RlOiBhLkZBSUxFRCxcbiAgICAgICAgICBlcnJvcjogbmV3IE9UTFBFeHBvcnRlckVycm9yKFwiRXhwb3J0IGZhaWxlZCB3aXRoIHVua25vd24gZXJyb3JcIilcbiAgICAgICAgfSk7XG4gICAgICB9LCBmdW5jdGlvbihvKSB7XG4gICAgICAgIHJldHVybiBjKHtcbiAgICAgICAgICBjb2RlOiBhLkZBSUxFRCxcbiAgICAgICAgICBlcnJvcjogb1xuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICB9LCBhJDEucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlUXVldWUuYXdhaXRBbGwoKTtcbiAgICB9LCBhJDEucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gX19hd2FpdGVyJDEodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IkMSh0aGlzLCBmdW5jdGlvbih1KSB7XG4gICAgICAgICAgc3dpdGNoICh1LmxhYmVsKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaWFnTG9nZ2VyLmRlYnVnKFwic2h1dGRvd24gc3RhcnRlZFwiKSwgWzQsIHRoaXMuZm9yY2VGbHVzaCgpXTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgcmV0dXJuIHUuc2VudCgpLCB0aGlzLl90cmFuc3BvcnQuc2h1dGRvd24oKSwgW1xuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAvKnJldHVybiovXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGEkMTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gY3JlYXRlT3RscEV4cG9ydERlbGVnYXRlKGEsIHUpIHtcbiAgcmV0dXJuIG5ldyBPVExQRXhwb3J0RGVsZWdhdGUoYS50cmFuc3BvcnQsIGEuc2VyaWFsaXplciwgY3JlYXRlTG9nZ2luZ1BhcnRpYWxTdWNjZXNzUmVzcG9uc2VIYW5kbGVyKCksIGEucHJvbWlzZUhhbmRsZXIsIHUudGltZW91dCk7XG59XG5mdW5jdGlvbiBjcmVhdGVPdGxwTmV0d29ya0V4cG9ydERlbGVnYXRlKGEsIHUsIGMpIHtcbiAgcmV0dXJuIGNyZWF0ZU90bHBFeHBvcnREZWxlZ2F0ZSh7XG4gICAgdHJhbnNwb3J0OiBjLFxuICAgIHNlcmlhbGl6ZXI6IHUsXG4gICAgcHJvbWlzZUhhbmRsZXI6IGNyZWF0ZUJvdW5kZWRRdWV1ZUV4cG9ydFByb21pc2VIYW5kbGVyKGEpXG4gIH0sIHsgdGltZW91dDogYS50aW1lb3V0TWlsbGlzIH0pO1xufVxudmFyIGluZGV4TWluaW1hbCA9IHt9LCBtaW5pbWFsJDEgPSB7fSwgYXNwcm9taXNlID0gYXNQcm9taXNlO1xuZnVuY3Rpb24gYXNQcm9taXNlKGEsIHUpIHtcbiAgZm9yICh2YXIgYyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSksIGYgPSAwLCBpID0gMiwgbyA9ICEwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKVxuICAgIGNbZisrXSA9IGFyZ3VtZW50c1tpKytdO1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCwgcikge1xuICAgIGNbZl0gPSBmdW5jdGlvbihsKSB7XG4gICAgICBpZiAobylcbiAgICAgICAgaWYgKG8gPSAhMSwgbClcbiAgICAgICAgICByKGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmb3IgKHZhciBwID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKSwgcyA9IDA7IHMgPCBwLmxlbmd0aDsgKVxuICAgICAgICAgICAgcFtzKytdID0gYXJndW1lbnRzW3NdO1xuICAgICAgICAgIHQuYXBwbHkobnVsbCwgcCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBhLmFwcGx5KHUgfHwgbnVsbCwgYyk7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgbyAmJiAobyA9ICExLCByKG4pKTtcbiAgICB9XG4gIH0pO1xufVxudmFyIGJhc2U2NCQxID0ge307XG4oZnVuY3Rpb24oYSkge1xuICB2YXIgdSA9IGE7XG4gIHUubGVuZ3RoID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdC5sZW5ndGg7XG4gICAgaWYgKCFyKVxuICAgICAgcmV0dXJuIDA7XG4gICAgZm9yICh2YXIgbiA9IDA7IC0tciAlIDQgPiAxICYmIHQuY2hhckF0KHIpID09PSBcIj1cIjsgKVxuICAgICAgKytuO1xuICAgIHJldHVybiBNYXRoLmNlaWwodC5sZW5ndGggKiAzKSAvIDQgLSBuO1xuICB9O1xuICBmb3IgKHZhciBjID0gbmV3IEFycmF5KDY0KSwgZiA9IG5ldyBBcnJheSgxMjMpLCBpID0gMDsgaSA8IDY0OyApXG4gICAgZltjW2ldID0gaSA8IDI2ID8gaSArIDY1IDogaSA8IDUyID8gaSArIDcxIDogaSA8IDYyID8gaSAtIDQgOiBpIC0gNTkgfCA0M10gPSBpKys7XG4gIHUuZW5jb2RlID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgIGZvciAodmFyIGwgPSBudWxsLCBwID0gW10sIHMgPSAwLCB5ID0gMCwgZDsgciA8IG47ICkge1xuICAgICAgdmFyIGggPSB0W3IrK107XG4gICAgICBzd2l0Y2ggKHkpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHBbcysrXSA9IGNbaCA+PiAyXSwgZCA9IChoICYgMykgPDwgNCwgeSA9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBwW3MrK10gPSBjW2QgfCBoID4+IDRdLCBkID0gKGggJiAxNSkgPDwgMiwgeSA9IDI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBwW3MrK10gPSBjW2QgfCBoID4+IDZdLCBwW3MrK10gPSBjW2ggJiA2M10sIHkgPSAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcyA+IDgxOTEgJiYgKChsIHx8IChsID0gW10pKS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBwKSksIHMgPSAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHkgJiYgKHBbcysrXSA9IGNbZF0sIHBbcysrXSA9IDYxLCB5ID09PSAxICYmIChwW3MrK10gPSA2MSkpLCBsID8gKHMgJiYgbC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBwLnNsaWNlKDAsIHMpKSksIGwuam9pbihcIlwiKSkgOiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgcC5zbGljZSgwLCBzKSk7XG4gIH07XG4gIHZhciBvID0gXCJpbnZhbGlkIGVuY29kaW5nXCI7XG4gIHUuZGVjb2RlID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgIGZvciAodmFyIGwgPSBuLCBwID0gMCwgcywgeSA9IDA7IHkgPCB0Lmxlbmd0aDsgKSB7XG4gICAgICB2YXIgZCA9IHQuY2hhckNvZGVBdCh5KyspO1xuICAgICAgaWYgKGQgPT09IDYxICYmIHAgPiAxKVxuICAgICAgICBicmVhaztcbiAgICAgIGlmICgoZCA9IGZbZF0pID09PSB2b2lkIDApXG4gICAgICAgIHRocm93IEVycm9yKG8pO1xuICAgICAgc3dpdGNoIChwKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBzID0gZCwgcCA9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByW24rK10gPSBzIDw8IDIgfCAoZCAmIDQ4KSA+PiA0LCBzID0gZCwgcCA9IDI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByW24rK10gPSAocyAmIDE1KSA8PCA0IHwgKGQgJiA2MCkgPj4gMiwgcyA9IGQsIHAgPSAzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcltuKytdID0gKHMgJiAzKSA8PCA2IHwgZCwgcCA9IDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwID09PSAxKVxuICAgICAgdGhyb3cgRXJyb3Iobyk7XG4gICAgcmV0dXJuIG4gLSBsO1xuICB9LCB1LnRlc3QgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIC9eKD86W0EtWmEtejAtOSsvXXs0fSkqKD86W0EtWmEtejAtOSsvXXsyfT09fFtBLVphLXowLTkrL117M309KT8kLy50ZXN0KHQpO1xuICB9O1xufSkoYmFzZTY0JDEpO1xudmFyIGV2ZW50ZW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fbGlzdGVuZXJzID0ge307XG59XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24odSwgYywgZikge1xuICByZXR1cm4gKHRoaXMuX2xpc3RlbmVyc1t1XSB8fCAodGhpcy5fbGlzdGVuZXJzW3VdID0gW10pKS5wdXNoKHtcbiAgICBmbjogYyxcbiAgICBjdHg6IGYgfHwgdGhpc1xuICB9KSwgdGhpcztcbn07XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uKHUsIGMpIHtcbiAgaWYgKHUgPT09IHZvaWQgMClcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcbiAgZWxzZSBpZiAoYyA9PT0gdm9pZCAwKVxuICAgIHRoaXMuX2xpc3RlbmVyc1t1XSA9IFtdO1xuICBlbHNlXG4gICAgZm9yICh2YXIgZiA9IHRoaXMuX2xpc3RlbmVyc1t1XSwgaSA9IDA7IGkgPCBmLmxlbmd0aDsgKVxuICAgICAgZltpXS5mbiA9PT0gYyA/IGYuc3BsaWNlKGksIDEpIDogKytpO1xuICByZXR1cm4gdGhpcztcbn07XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbih1KSB7XG4gIHZhciBjID0gdGhpcy5fbGlzdGVuZXJzW3VdO1xuICBpZiAoYykge1xuICAgIGZvciAodmFyIGYgPSBbXSwgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyApXG4gICAgICBmLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIGZvciAoaSA9IDA7IGkgPCBjLmxlbmd0aDsgKVxuICAgICAgY1tpXS5mbi5hcHBseShjW2krK10uY3R4LCBmKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG52YXIgZmxvYXQgPSBmYWN0b3J5KGZhY3RvcnkpO1xuZnVuY3Rpb24gZmFjdG9yeShhKSB7XG4gIHJldHVybiB0eXBlb2YgRmxvYXQzMkFycmF5IDwgXCJ1XCIgPyBmdW5jdGlvbigpIHtcbiAgICB2YXIgdSA9IG5ldyBGbG9hdDMyQXJyYXkoWy0wXSksIGMgPSBuZXcgVWludDhBcnJheSh1LmJ1ZmZlciksIGYgPSBjWzNdID09PSAxMjg7XG4gICAgZnVuY3Rpb24gaShyLCBuLCBsKSB7XG4gICAgICB1WzBdID0gciwgbltsXSA9IGNbMF0sIG5bbCArIDFdID0gY1sxXSwgbltsICsgMl0gPSBjWzJdLCBuW2wgKyAzXSA9IGNbM107XG4gICAgfVxuICAgIGZ1bmN0aW9uIG8ociwgbiwgbCkge1xuICAgICAgdVswXSA9IHIsIG5bbF0gPSBjWzNdLCBuW2wgKyAxXSA9IGNbMl0sIG5bbCArIDJdID0gY1sxXSwgbltsICsgM10gPSBjWzBdO1xuICAgIH1cbiAgICBhLndyaXRlRmxvYXRMRSA9IGYgPyBpIDogbywgYS53cml0ZUZsb2F0QkUgPSBmID8gbyA6IGk7XG4gICAgZnVuY3Rpb24gZShyLCBuKSB7XG4gICAgICByZXR1cm4gY1swXSA9IHJbbl0sIGNbMV0gPSByW24gKyAxXSwgY1syXSA9IHJbbiArIDJdLCBjWzNdID0gcltuICsgM10sIHVbMF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHQociwgbikge1xuICAgICAgcmV0dXJuIGNbM10gPSByW25dLCBjWzJdID0gcltuICsgMV0sIGNbMV0gPSByW24gKyAyXSwgY1swXSA9IHJbbiArIDNdLCB1WzBdO1xuICAgIH1cbiAgICBhLnJlYWRGbG9hdExFID0gZiA/IGUgOiB0LCBhLnJlYWRGbG9hdEJFID0gZiA/IHQgOiBlO1xuICB9KCkgOiBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiB1KGYsIGksIG8sIGUpIHtcbiAgICAgIHZhciB0ID0gaSA8IDAgPyAxIDogMDtcbiAgICAgIGlmICh0ICYmIChpID0gLWkpLCBpID09PSAwKVxuICAgICAgICBmKDEgLyBpID4gMCA/IChcbiAgICAgICAgICAvKiBwb3NpdGl2ZSAqL1xuICAgICAgICAgIDBcbiAgICAgICAgKSA6IChcbiAgICAgICAgICAvKiBuZWdhdGl2ZSAwICovXG4gICAgICAgICAgMjE0NzQ4MzY0OFxuICAgICAgICApLCBvLCBlKTtcbiAgICAgIGVsc2UgaWYgKGlzTmFOKGkpKVxuICAgICAgICBmKDIxNDMyODkzNDQsIG8sIGUpO1xuICAgICAgZWxzZSBpZiAoaSA+IDM0MDI4MjM0NjYzODUyODg2ZTIyKVxuICAgICAgICBmKCh0IDw8IDMxIHwgMjEzOTA5NTA0MCkgPj4+IDAsIG8sIGUpO1xuICAgICAgZWxzZSBpZiAoaSA8IDExNzU0OTQzNTA4MjIyODc1ZS01NClcbiAgICAgICAgZigodCA8PCAzMSB8IE1hdGgucm91bmQoaSAvIDE0MDEyOTg0NjQzMjQ4MTdlLTYwKSkgPj4+IDAsIG8sIGUpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciByID0gTWF0aC5mbG9vcihNYXRoLmxvZyhpKSAvIE1hdGguTE4yKSwgbiA9IE1hdGgucm91bmQoaSAqIE1hdGgucG93KDIsIC1yKSAqIDgzODg2MDgpICYgODM4ODYwNztcbiAgICAgICAgZigodCA8PCAzMSB8IHIgKyAxMjcgPDwgMjMgfCBuKSA+Pj4gMCwgbywgZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGEud3JpdGVGbG9hdExFID0gdS5iaW5kKG51bGwsIHdyaXRlVWludExFKSwgYS53cml0ZUZsb2F0QkUgPSB1LmJpbmQobnVsbCwgd3JpdGVVaW50QkUpO1xuICAgIGZ1bmN0aW9uIGMoZiwgaSwgbykge1xuICAgICAgdmFyIGUgPSBmKGksIG8pLCB0ID0gKGUgPj4gMzEpICogMiArIDEsIHIgPSBlID4+PiAyMyAmIDI1NSwgbiA9IGUgJiA4Mzg4NjA3O1xuICAgICAgcmV0dXJuIHIgPT09IDI1NSA/IG4gPyBOYU4gOiB0ICogKDEgLyAwKSA6IHIgPT09IDAgPyB0ICogMTQwMTI5ODQ2NDMyNDgxN2UtNjAgKiBuIDogdCAqIE1hdGgucG93KDIsIHIgLSAxNTApICogKG4gKyA4Mzg4NjA4KTtcbiAgICB9XG4gICAgYS5yZWFkRmxvYXRMRSA9IGMuYmluZChudWxsLCByZWFkVWludExFKSwgYS5yZWFkRmxvYXRCRSA9IGMuYmluZChudWxsLCByZWFkVWludEJFKTtcbiAgfSgpLCB0eXBlb2YgRmxvYXQ2NEFycmF5IDwgXCJ1XCIgPyBmdW5jdGlvbigpIHtcbiAgICB2YXIgdSA9IG5ldyBGbG9hdDY0QXJyYXkoWy0wXSksIGMgPSBuZXcgVWludDhBcnJheSh1LmJ1ZmZlciksIGYgPSBjWzddID09PSAxMjg7XG4gICAgZnVuY3Rpb24gaShyLCBuLCBsKSB7XG4gICAgICB1WzBdID0gciwgbltsXSA9IGNbMF0sIG5bbCArIDFdID0gY1sxXSwgbltsICsgMl0gPSBjWzJdLCBuW2wgKyAzXSA9IGNbM10sIG5bbCArIDRdID0gY1s0XSwgbltsICsgNV0gPSBjWzVdLCBuW2wgKyA2XSA9IGNbNl0sIG5bbCArIDddID0gY1s3XTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbyhyLCBuLCBsKSB7XG4gICAgICB1WzBdID0gciwgbltsXSA9IGNbN10sIG5bbCArIDFdID0gY1s2XSwgbltsICsgMl0gPSBjWzVdLCBuW2wgKyAzXSA9IGNbNF0sIG5bbCArIDRdID0gY1szXSwgbltsICsgNV0gPSBjWzJdLCBuW2wgKyA2XSA9IGNbMV0sIG5bbCArIDddID0gY1swXTtcbiAgICB9XG4gICAgYS53cml0ZURvdWJsZUxFID0gZiA/IGkgOiBvLCBhLndyaXRlRG91YmxlQkUgPSBmID8gbyA6IGk7XG4gICAgZnVuY3Rpb24gZShyLCBuKSB7XG4gICAgICByZXR1cm4gY1swXSA9IHJbbl0sIGNbMV0gPSByW24gKyAxXSwgY1syXSA9IHJbbiArIDJdLCBjWzNdID0gcltuICsgM10sIGNbNF0gPSByW24gKyA0XSwgY1s1XSA9IHJbbiArIDVdLCBjWzZdID0gcltuICsgNl0sIGNbN10gPSByW24gKyA3XSwgdVswXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgICByZXR1cm4gY1s3XSA9IHJbbl0sIGNbNl0gPSByW24gKyAxXSwgY1s1XSA9IHJbbiArIDJdLCBjWzRdID0gcltuICsgM10sIGNbM10gPSByW24gKyA0XSwgY1syXSA9IHJbbiArIDVdLCBjWzFdID0gcltuICsgNl0sIGNbMF0gPSByW24gKyA3XSwgdVswXTtcbiAgICB9XG4gICAgYS5yZWFkRG91YmxlTEUgPSBmID8gZSA6IHQsIGEucmVhZERvdWJsZUJFID0gZiA/IHQgOiBlO1xuICB9KCkgOiBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiB1KGYsIGksIG8sIGUsIHQsIHIpIHtcbiAgICAgIHZhciBuID0gZSA8IDAgPyAxIDogMDtcbiAgICAgIGlmIChuICYmIChlID0gLWUpLCBlID09PSAwKVxuICAgICAgICBmKDAsIHQsIHIgKyBpKSwgZigxIC8gZSA+IDAgPyAoXG4gICAgICAgICAgLyogcG9zaXRpdmUgKi9cbiAgICAgICAgICAwXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgLyogbmVnYXRpdmUgMCAqL1xuICAgICAgICAgIDIxNDc0ODM2NDhcbiAgICAgICAgKSwgdCwgciArIG8pO1xuICAgICAgZWxzZSBpZiAoaXNOYU4oZSkpXG4gICAgICAgIGYoMCwgdCwgciArIGkpLCBmKDIxNDY5NTkzNjAsIHQsIHIgKyBvKTtcbiAgICAgIGVsc2UgaWYgKGUgPiAxNzk3NjkzMTM0ODYyMzE1N2UyOTIpXG4gICAgICAgIGYoMCwgdCwgciArIGkpLCBmKChuIDw8IDMxIHwgMjE0NjQzNTA3MikgPj4+IDAsIHQsIHIgKyBvKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgbDtcbiAgICAgICAgaWYgKGUgPCAyMjI1MDczODU4NTA3MjAxNGUtMzI0KVxuICAgICAgICAgIGwgPSBlIC8gNWUtMzI0LCBmKGwgPj4+IDAsIHQsIHIgKyBpKSwgZigobiA8PCAzMSB8IGwgLyA0Mjk0OTY3Mjk2KSA+Pj4gMCwgdCwgciArIG8pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgcCA9IE1hdGguZmxvb3IoTWF0aC5sb2coZSkgLyBNYXRoLkxOMik7XG4gICAgICAgICAgcCA9PT0gMTAyNCAmJiAocCA9IDEwMjMpLCBsID0gZSAqIE1hdGgucG93KDIsIC1wKSwgZihsICogNDUwMzU5OTYyNzM3MDQ5NiA+Pj4gMCwgdCwgciArIGkpLCBmKChuIDw8IDMxIHwgcCArIDEwMjMgPDwgMjAgfCBsICogMTA0ODU3NiAmIDEwNDg1NzUpID4+PiAwLCB0LCByICsgbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYS53cml0ZURvdWJsZUxFID0gdS5iaW5kKG51bGwsIHdyaXRlVWludExFLCAwLCA0KSwgYS53cml0ZURvdWJsZUJFID0gdS5iaW5kKG51bGwsIHdyaXRlVWludEJFLCA0LCAwKTtcbiAgICBmdW5jdGlvbiBjKGYsIGksIG8sIGUsIHQpIHtcbiAgICAgIHZhciByID0gZihlLCB0ICsgaSksIG4gPSBmKGUsIHQgKyBvKSwgbCA9IChuID4+IDMxKSAqIDIgKyAxLCBwID0gbiA+Pj4gMjAgJiAyMDQ3LCBzID0gNDI5NDk2NzI5NiAqIChuICYgMTA0ODU3NSkgKyByO1xuICAgICAgcmV0dXJuIHAgPT09IDIwNDcgPyBzID8gTmFOIDogbCAqICgxIC8gMCkgOiBwID09PSAwID8gbCAqIDVlLTMyNCAqIHMgOiBsICogTWF0aC5wb3coMiwgcCAtIDEwNzUpICogKHMgKyA0NTAzNTk5NjI3MzcwNDk2KTtcbiAgICB9XG4gICAgYS5yZWFkRG91YmxlTEUgPSBjLmJpbmQobnVsbCwgcmVhZFVpbnRMRSwgMCwgNCksIGEucmVhZERvdWJsZUJFID0gYy5iaW5kKG51bGwsIHJlYWRVaW50QkUsIDQsIDApO1xuICB9KCksIGE7XG59XG5mdW5jdGlvbiB3cml0ZVVpbnRMRShhLCB1LCBjKSB7XG4gIHVbY10gPSBhICYgMjU1LCB1W2MgKyAxXSA9IGEgPj4+IDggJiAyNTUsIHVbYyArIDJdID0gYSA+Pj4gMTYgJiAyNTUsIHVbYyArIDNdID0gYSA+Pj4gMjQ7XG59XG5mdW5jdGlvbiB3cml0ZVVpbnRCRShhLCB1LCBjKSB7XG4gIHVbY10gPSBhID4+PiAyNCwgdVtjICsgMV0gPSBhID4+PiAxNiAmIDI1NSwgdVtjICsgMl0gPSBhID4+PiA4ICYgMjU1LCB1W2MgKyAzXSA9IGEgJiAyNTU7XG59XG5mdW5jdGlvbiByZWFkVWludExFKGEsIHUpIHtcbiAgcmV0dXJuIChhW3VdIHwgYVt1ICsgMV0gPDwgOCB8IGFbdSArIDJdIDw8IDE2IHwgYVt1ICsgM10gPDwgMjQpID4+PiAwO1xufVxuZnVuY3Rpb24gcmVhZFVpbnRCRShhLCB1KSB7XG4gIHJldHVybiAoYVt1XSA8PCAyNCB8IGFbdSArIDFdIDw8IDE2IHwgYVt1ICsgMl0gPDwgOCB8IGFbdSArIDNdKSA+Pj4gMDtcbn1cbnZhciBpbnF1aXJlXzEgPSBpbnF1aXJlO1xuZnVuY3Rpb24gaW5xdWlyZShtb2R1bGVOYW1lKSB7XG4gIHRyeSB7XG4gICAgdmFyIG1vZCA9IGV2YWwoXCJxdWlyZVwiLnJlcGxhY2UoL14vLCBcInJlXCIpKShtb2R1bGVOYW1lKTtcbiAgICBpZiAobW9kICYmIChtb2QubGVuZ3RoIHx8IE9iamVjdC5rZXlzKG1vZCkubGVuZ3RoKSlcbiAgICAgIHJldHVybiBtb2Q7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbnZhciB1dGY4JDIgPSB7fTtcbihmdW5jdGlvbihhKSB7XG4gIHZhciB1ID0gYTtcbiAgdS5sZW5ndGggPSBmdW5jdGlvbihmKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG8gPSAwLCBlID0gMDsgZSA8IGYubGVuZ3RoOyArK2UpXG4gICAgICBvID0gZi5jaGFyQ29kZUF0KGUpLCBvIDwgMTI4ID8gaSArPSAxIDogbyA8IDIwNDggPyBpICs9IDIgOiAobyAmIDY0NTEyKSA9PT0gNTUyOTYgJiYgKGYuY2hhckNvZGVBdChlICsgMSkgJiA2NDUxMikgPT09IDU2MzIwID8gKCsrZSwgaSArPSA0KSA6IGkgKz0gMztcbiAgICByZXR1cm4gaTtcbiAgfSwgdS5yZWFkID0gZnVuY3Rpb24oZiwgaSwgbykge1xuICAgIHZhciBlID0gbyAtIGk7XG4gICAgaWYgKGUgPCAxKVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgZm9yICh2YXIgdCA9IG51bGwsIHIgPSBbXSwgbiA9IDAsIGw7IGkgPCBvOyApXG4gICAgICBsID0gZltpKytdLCBsIDwgMTI4ID8gcltuKytdID0gbCA6IGwgPiAxOTEgJiYgbCA8IDIyNCA/IHJbbisrXSA9IChsICYgMzEpIDw8IDYgfCBmW2krK10gJiA2MyA6IGwgPiAyMzkgJiYgbCA8IDM2NSA/IChsID0gKChsICYgNykgPDwgMTggfCAoZltpKytdICYgNjMpIDw8IDEyIHwgKGZbaSsrXSAmIDYzKSA8PCA2IHwgZltpKytdICYgNjMpIC0gNjU1MzYsIHJbbisrXSA9IDU1Mjk2ICsgKGwgPj4gMTApLCByW24rK10gPSA1NjMyMCArIChsICYgMTAyMykpIDogcltuKytdID0gKGwgJiAxNSkgPDwgMTIgfCAoZltpKytdICYgNjMpIDw8IDYgfCBmW2krK10gJiA2MywgbiA+IDgxOTEgJiYgKCh0IHx8ICh0ID0gW10pKS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCByKSksIG4gPSAwKTtcbiAgICByZXR1cm4gdCA/IChuICYmIHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgci5zbGljZSgwLCBuKSkpLCB0LmpvaW4oXCJcIikpIDogU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIHIuc2xpY2UoMCwgbikpO1xuICB9LCB1LndyaXRlID0gZnVuY3Rpb24oZiwgaSwgbykge1xuICAgIGZvciAodmFyIGUgPSBvLCB0LCByLCBuID0gMDsgbiA8IGYubGVuZ3RoOyArK24pXG4gICAgICB0ID0gZi5jaGFyQ29kZUF0KG4pLCB0IDwgMTI4ID8gaVtvKytdID0gdCA6IHQgPCAyMDQ4ID8gKGlbbysrXSA9IHQgPj4gNiB8IDE5MiwgaVtvKytdID0gdCAmIDYzIHwgMTI4KSA6ICh0ICYgNjQ1MTIpID09PSA1NTI5NiAmJiAoKHIgPSBmLmNoYXJDb2RlQXQobiArIDEpKSAmIDY0NTEyKSA9PT0gNTYzMjAgPyAodCA9IDY1NTM2ICsgKCh0ICYgMTAyMykgPDwgMTApICsgKHIgJiAxMDIzKSwgKytuLCBpW28rK10gPSB0ID4+IDE4IHwgMjQwLCBpW28rK10gPSB0ID4+IDEyICYgNjMgfCAxMjgsIGlbbysrXSA9IHQgPj4gNiAmIDYzIHwgMTI4LCBpW28rK10gPSB0ICYgNjMgfCAxMjgpIDogKGlbbysrXSA9IHQgPj4gMTIgfCAyMjQsIGlbbysrXSA9IHQgPj4gNiAmIDYzIHwgMTI4LCBpW28rK10gPSB0ICYgNjMgfCAxMjgpO1xuICAgIHJldHVybiBvIC0gZTtcbiAgfTtcbn0pKHV0ZjgkMik7XG52YXIgcG9vbF8xID0gcG9vbDtcbmZ1bmN0aW9uIHBvb2woYSwgdSwgYykge1xuICB2YXIgZiA9IGMgfHwgODE5MiwgaSA9IGYgPj4+IDEsIG8gPSBudWxsLCBlID0gZjtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICBpZiAociA8IDEgfHwgciA+IGkpXG4gICAgICByZXR1cm4gYShyKTtcbiAgICBlICsgciA+IGYgJiYgKG8gPSBhKGYpLCBlID0gMCk7XG4gICAgdmFyIG4gPSB1LmNhbGwobywgZSwgZSArPSByKTtcbiAgICByZXR1cm4gZSAmIDcgJiYgKGUgPSAoZSB8IDcpICsgMSksIG47XG4gIH07XG59XG52YXIgbG9uZ2JpdHMsIGhhc1JlcXVpcmVkTG9uZ2JpdHM7XG5mdW5jdGlvbiByZXF1aXJlTG9uZ2JpdHMoKSB7XG4gIGlmIChoYXNSZXF1aXJlZExvbmdiaXRzKSByZXR1cm4gbG9uZ2JpdHM7XG4gIGhhc1JlcXVpcmVkTG9uZ2JpdHMgPSAxLCBsb25nYml0cyA9IHU7XG4gIHZhciBhID0gcmVxdWlyZU1pbmltYWwoKTtcbiAgZnVuY3Rpb24gdShvLCBlKSB7XG4gICAgdGhpcy5sbyA9IG8gPj4+IDAsIHRoaXMuaGkgPSBlID4+PiAwO1xuICB9XG4gIHZhciBjID0gdS56ZXJvID0gbmV3IHUoMCwgMCk7XG4gIGMudG9OdW1iZXIgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gMDtcbiAgfSwgYy56ekVuY29kZSA9IGMuenpEZWNvZGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgYy5sZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gMTtcbiAgfTtcbiAgdmFyIGYgPSB1Lnplcm9IYXNoID0gXCJcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcIjtcbiAgdS5mcm9tTnVtYmVyID0gZnVuY3Rpb24oZSkge1xuICAgIGlmIChlID09PSAwKVxuICAgICAgcmV0dXJuIGM7XG4gICAgdmFyIHQgPSBlIDwgMDtcbiAgICB0ICYmIChlID0gLWUpO1xuICAgIHZhciByID0gZSA+Pj4gMCwgbiA9IChlIC0gcikgLyA0Mjk0OTY3Mjk2ID4+PiAwO1xuICAgIHJldHVybiB0ICYmIChuID0gfm4gPj4+IDAsIHIgPSB+ciA+Pj4gMCwgKytyID4gNDI5NDk2NzI5NSAmJiAociA9IDAsICsrbiA+IDQyOTQ5NjcyOTUgJiYgKG4gPSAwKSkpLCBuZXcgdShyLCBuKTtcbiAgfSwgdS5mcm9tID0gZnVuY3Rpb24oZSkge1xuICAgIGlmICh0eXBlb2YgZSA9PSBcIm51bWJlclwiKVxuICAgICAgcmV0dXJuIHUuZnJvbU51bWJlcihlKTtcbiAgICBpZiAoYS5pc1N0cmluZyhlKSlcbiAgICAgIGlmIChhLkxvbmcpXG4gICAgICAgIGUgPSBhLkxvbmcuZnJvbVN0cmluZyhlKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHUuZnJvbU51bWJlcihwYXJzZUludChlLCAxMCkpO1xuICAgIHJldHVybiBlLmxvdyB8fCBlLmhpZ2ggPyBuZXcgdShlLmxvdyA+Pj4gMCwgZS5oaWdoID4+PiAwKSA6IGM7XG4gIH0sIHUucHJvdG90eXBlLnRvTnVtYmVyID0gZnVuY3Rpb24oZSkge1xuICAgIGlmICghZSAmJiB0aGlzLmhpID4+PiAzMSkge1xuICAgICAgdmFyIHQgPSB+dGhpcy5sbyArIDEgPj4+IDAsIHIgPSB+dGhpcy5oaSA+Pj4gMDtcbiAgICAgIHJldHVybiB0IHx8IChyID0gciArIDEgPj4+IDApLCAtKHQgKyByICogNDI5NDk2NzI5Nik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvICsgdGhpcy5oaSAqIDQyOTQ5NjcyOTY7XG4gIH0sIHUucHJvdG90eXBlLnRvTG9uZyA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gYS5Mb25nID8gbmV3IGEuTG9uZyh0aGlzLmxvIHwgMCwgdGhpcy5oaSB8IDAsICEhZSkgOiB7IGxvdzogdGhpcy5sbyB8IDAsIGhpZ2g6IHRoaXMuaGkgfCAwLCB1bnNpZ25lZDogISFlIH07XG4gIH07XG4gIHZhciBpID0gU3RyaW5nLnByb3RvdHlwZS5jaGFyQ29kZUF0O1xuICByZXR1cm4gdS5mcm9tSGFzaCA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gZSA9PT0gZiA/IGMgOiBuZXcgdShcbiAgICAgIChpLmNhbGwoZSwgMCkgfCBpLmNhbGwoZSwgMSkgPDwgOCB8IGkuY2FsbChlLCAyKSA8PCAxNiB8IGkuY2FsbChlLCAzKSA8PCAyNCkgPj4+IDAsXG4gICAgICAoaS5jYWxsKGUsIDQpIHwgaS5jYWxsKGUsIDUpIDw8IDggfCBpLmNhbGwoZSwgNikgPDwgMTYgfCBpLmNhbGwoZSwgNykgPDwgMjQpID4+PiAwXG4gICAgKTtcbiAgfSwgdS5wcm90b3R5cGUudG9IYXNoID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXG4gICAgICB0aGlzLmxvICYgMjU1LFxuICAgICAgdGhpcy5sbyA+Pj4gOCAmIDI1NSxcbiAgICAgIHRoaXMubG8gPj4+IDE2ICYgMjU1LFxuICAgICAgdGhpcy5sbyA+Pj4gMjQsXG4gICAgICB0aGlzLmhpICYgMjU1LFxuICAgICAgdGhpcy5oaSA+Pj4gOCAmIDI1NSxcbiAgICAgIHRoaXMuaGkgPj4+IDE2ICYgMjU1LFxuICAgICAgdGhpcy5oaSA+Pj4gMjRcbiAgICApO1xuICB9LCB1LnByb3RvdHlwZS56ekVuY29kZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gdGhpcy5oaSA+PiAzMTtcbiAgICByZXR1cm4gdGhpcy5oaSA9ICgodGhpcy5oaSA8PCAxIHwgdGhpcy5sbyA+Pj4gMzEpIF4gZSkgPj4+IDAsIHRoaXMubG8gPSAodGhpcy5sbyA8PCAxIF4gZSkgPj4+IDAsIHRoaXM7XG4gIH0sIHUucHJvdG90eXBlLnp6RGVjb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSAtKHRoaXMubG8gJiAxKTtcbiAgICByZXR1cm4gdGhpcy5sbyA9ICgodGhpcy5sbyA+Pj4gMSB8IHRoaXMuaGkgPDwgMzEpIF4gZSkgPj4+IDAsIHRoaXMuaGkgPSAodGhpcy5oaSA+Pj4gMSBeIGUpID4+PiAwLCB0aGlzO1xuICB9LCB1LnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IHRoaXMubG8sIHQgPSAodGhpcy5sbyA+Pj4gMjggfCB0aGlzLmhpIDw8IDQpID4+PiAwLCByID0gdGhpcy5oaSA+Pj4gMjQ7XG4gICAgcmV0dXJuIHIgPT09IDAgPyB0ID09PSAwID8gZSA8IDE2Mzg0ID8gZSA8IDEyOCA/IDEgOiAyIDogZSA8IDIwOTcxNTIgPyAzIDogNCA6IHQgPCAxNjM4NCA/IHQgPCAxMjggPyA1IDogNiA6IHQgPCAyMDk3MTUyID8gNyA6IDggOiByIDwgMTI4ID8gOSA6IDEwO1xuICB9LCBsb25nYml0cztcbn1cbnZhciBoYXNSZXF1aXJlZE1pbmltYWw7XG5mdW5jdGlvbiByZXF1aXJlTWluaW1hbCgpIHtcbiAgcmV0dXJuIGhhc1JlcXVpcmVkTWluaW1hbCB8fCAoaGFzUmVxdWlyZWRNaW5pbWFsID0gMSwgZnVuY3Rpb24oYSkge1xuICAgIHZhciB1ID0gYTtcbiAgICB1LmFzUHJvbWlzZSA9IGFzcHJvbWlzZSwgdS5iYXNlNjQgPSBiYXNlNjQkMSwgdS5FdmVudEVtaXR0ZXIgPSBldmVudGVtaXR0ZXIsIHUuZmxvYXQgPSBmbG9hdCwgdS5pbnF1aXJlID0gaW5xdWlyZV8xLCB1LnV0ZjggPSB1dGY4JDIsIHUucG9vbCA9IHBvb2xfMSwgdS5Mb25nQml0cyA9IHJlcXVpcmVMb25nYml0cygpLCB1LmlzTm9kZSA9ICEhKHR5cGVvZiBmIDwgXCJ1XCIgJiYgZiAmJiBmLnByb2Nlc3MgJiYgZi5wcm9jZXNzLnZlcnNpb25zICYmIGYucHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSwgdS5nbG9iYWwgPSB1LmlzTm9kZSAmJiBmIHx8IHR5cGVvZiB3aW5kb3cgPCBcInVcIiAmJiB3aW5kb3cgfHwgdHlwZW9mIHNlbGYgPCBcInVcIiAmJiBzZWxmIHx8IGYsIHUuZW1wdHlBcnJheSA9IE9iamVjdC5mcmVlemUgPyBPYmplY3QuZnJlZXplKFtdKSA6IChcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBbXVxuICAgICksIHUuZW1wdHlPYmplY3QgPSBPYmplY3QuZnJlZXplID8gT2JqZWN0LmZyZWV6ZSh7fSkgOiAoXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAge31cbiAgICApLCB1LmlzSW50ZWdlciA9IE51bWJlci5pc0ludGVnZXIgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG8gPT0gXCJudW1iZXJcIiAmJiBpc0Zpbml0ZShvKSAmJiBNYXRoLmZsb29yKG8pID09PSBvO1xuICAgIH0sIHUuaXNTdHJpbmcgPSBmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG8gPT0gXCJzdHJpbmdcIiB8fCBvIGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH0sIHUuaXNPYmplY3QgPSBmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gbyAmJiB0eXBlb2YgbyA9PSBcIm9iamVjdFwiO1xuICAgIH0sIHUuaXNzZXQgPSAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBwcm9wZXJ0eSBvbiBhIG1lc3NhZ2UgaXMgY29uc2lkZXJlZCB0byBiZSBwcmVzZW50LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogUGxhaW4gb2JqZWN0IG9yIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSBuYW1lXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBjb25zaWRlcmVkIHRvIGJlIHByZXNlbnQsIG90aGVyd2lzZSBgZmFsc2VgXG4gICAgICovXG4gICAgdS5pc1NldCA9IGZ1bmN0aW9uKG8sIGUpIHtcbiAgICAgIHZhciB0ID0gb1tlXTtcbiAgICAgIHJldHVybiB0ICE9IG51bGwgJiYgby5oYXNPd25Qcm9wZXJ0eShlKSA/IHR5cGVvZiB0ICE9IFwib2JqZWN0XCIgfHwgKEFycmF5LmlzQXJyYXkodCkgPyB0Lmxlbmd0aCA6IE9iamVjdC5rZXlzKHQpLmxlbmd0aCkgPiAwIDogITE7XG4gICAgfSwgdS5CdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBpID0gdS5pbnF1aXJlKFwiYnVmZmVyXCIpLkJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIGkucHJvdG90eXBlLnV0ZjhXcml0ZSA/IGkgOiAoXG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSgpLCB1Ll9CdWZmZXJfZnJvbSA9IG51bGwsIHUuX0J1ZmZlcl9hbGxvY1Vuc2FmZSA9IG51bGwsIHUubmV3QnVmZmVyID0gZnVuY3Rpb24obykge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvID09IFwibnVtYmVyXCIgPyB1LkJ1ZmZlciA/IHUuX0J1ZmZlcl9hbGxvY1Vuc2FmZShvKSA6IG5ldyB1LkFycmF5KG8pIDogdS5CdWZmZXIgPyB1Ll9CdWZmZXJfZnJvbShvKSA6IHR5cGVvZiBVaW50OEFycmF5ID4gXCJ1XCIgPyBvIDogbmV3IFVpbnQ4QXJyYXkobyk7XG4gICAgfSwgdS5BcnJheSA9IHR5cGVvZiBVaW50OEFycmF5IDwgXCJ1XCIgPyBVaW50OEFycmF5IDogQXJyYXksIHUuTG9uZyA9IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdS5nbG9iYWwuZGNvZGVJTyAmJiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHUuZ2xvYmFsLmRjb2RlSU8uTG9uZyB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHUuZ2xvYmFsLkxvbmcgfHwgdS5pbnF1aXJlKFwibG9uZ1wiKSwgdS5rZXkyUmUgPSAvXnRydWV8ZmFsc2V8MHwxJC8sIHUua2V5MzJSZSA9IC9eLT8oPzowfFsxLTldWzAtOV0qKSQvLCB1LmtleTY0UmUgPSAvXig/OltcXFxceDAwLVxcXFx4ZmZdezh9fC0/KD86MHxbMS05XVswLTldKikpJC8sIHUubG9uZ1RvSGFzaCA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgIHJldHVybiBvID8gdS5Mb25nQml0cy5mcm9tKG8pLnRvSGFzaCgpIDogdS5Mb25nQml0cy56ZXJvSGFzaDtcbiAgICB9LCB1LmxvbmdGcm9tSGFzaCA9IGZ1bmN0aW9uKG8sIGUpIHtcbiAgICAgIHZhciB0ID0gdS5Mb25nQml0cy5mcm9tSGFzaChvKTtcbiAgICAgIHJldHVybiB1LkxvbmcgPyB1LkxvbmcuZnJvbUJpdHModC5sbywgdC5oaSwgZSkgOiB0LnRvTnVtYmVyKCEhZSk7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBjKGksIG8sIGUpIHtcbiAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhvKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAoaVt0W3JdXSA9PT0gdm9pZCAwIHx8ICFlKSAmJiAoaVt0W3JdXSA9IG9bdFtyXV0pO1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIHUubWVyZ2UgPSBjLCB1LmxjRmlyc3QgPSBmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gby5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIG8uc3Vic3RyaW5nKDEpO1xuICAgIH07XG4gICAgZnVuY3Rpb24gZiQxKGkpIHtcbiAgICAgIGZ1bmN0aW9uIG8oZSwgdCkge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgbykpXG4gICAgICAgICAgcmV0dXJuIG5ldyBvKGUsIHQpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJtZXNzYWdlXCIsIHsgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgfSB9KSwgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBvKSA6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0YWNrXCIsIHsgdmFsdWU6IG5ldyBFcnJvcigpLnN0YWNrIHx8IFwiXCIgfSksIHQgJiYgYyh0aGlzLCB0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IG8sXG4gICAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZToge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldDogdm9pZCAwLFxuICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgIC8vIGNvbmZpZ3VyYWJsZTogZmFsc2Ugd291bGQgYWNjdXJhdGVseSBwcmVzZXJ2ZSB0aGUgYmVoYXZpb3Igb2ZcbiAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwsIGJ1dCBJJ20gZ3Vlc3NpbmcgdGhhdCB3YXMgbm90IGludGVudGlvbmFsLlxuICAgICAgICAgIC8vIEZvciBhbiBhY3R1YWwgZXJyb3Igc3ViY2xhc3MsIHRoaXMgcHJvcGVydHkgd291bGRcbiAgICAgICAgICAvLyBiZSBjb25maWd1cmFibGUuXG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgICB9LFxuICAgICAgICB0b1N0cmluZzoge1xuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyBcIjogXCIgKyB0aGlzLm1lc3NhZ2U7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgICB9XG4gICAgICB9KSwgbztcbiAgICB9XG4gICAgdS5uZXdFcnJvciA9IGYkMSwgdS5Qcm90b2NvbEVycm9yID0gZiQxKFwiUHJvdG9jb2xFcnJvclwiKSwgdS5vbmVPZkdldHRlciA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgIGZvciAodmFyIGUgPSB7fSwgdCA9IDA7IHQgPCBvLmxlbmd0aDsgKyt0KVxuICAgICAgICBlW29bdF1dID0gMTtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yICh2YXIgciA9IE9iamVjdC5rZXlzKHRoaXMpLCBuID0gci5sZW5ndGggLSAxOyBuID4gLTE7IC0tbilcbiAgICAgICAgICBpZiAoZVtyW25dXSA9PT0gMSAmJiB0aGlzW3Jbbl1dICE9PSB2b2lkIDAgJiYgdGhpc1tyW25dXSAhPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiByW25dO1xuICAgICAgfTtcbiAgICB9LCB1Lm9uZU9mU2V0dGVyID0gZnVuY3Rpb24obykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCBvLmxlbmd0aDsgKyt0KVxuICAgICAgICAgIG9bdF0gIT09IGUgJiYgZGVsZXRlIHRoaXNbb1t0XV07XG4gICAgICB9O1xuICAgIH0sIHUudG9KU09OT3B0aW9ucyA9IHtcbiAgICAgIGxvbmdzOiBTdHJpbmcsXG4gICAgICBlbnVtczogU3RyaW5nLFxuICAgICAgYnl0ZXM6IFN0cmluZyxcbiAgICAgIGpzb246ICEwXG4gICAgfSwgdS5fY29uZmlndXJlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHUuQnVmZmVyO1xuICAgICAgaWYgKCFpKSB7XG4gICAgICAgIHUuX0J1ZmZlcl9mcm9tID0gdS5fQnVmZmVyX2FsbG9jVW5zYWZlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdS5fQnVmZmVyX2Zyb20gPSBpLmZyb20gIT09IFVpbnQ4QXJyYXkuZnJvbSAmJiBpLmZyb20gfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBpKGUsIHQpO1xuICAgICAgfSwgdS5fQnVmZmVyX2FsbG9jVW5zYWZlID0gaS5hbGxvY1Vuc2FmZSB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICB9O1xuICAgIH07XG4gIH0obWluaW1hbCQxKSksIG1pbmltYWwkMTtcbn1cbnZhciB3cml0ZXIgPSBXcml0ZXIkMSwgdXRpbCQ0ID0gcmVxdWlyZU1pbmltYWwoKSwgQnVmZmVyV3JpdGVyJDEsIExvbmdCaXRzJDEgPSB1dGlsJDQuTG9uZ0JpdHMsIGJhc2U2NCA9IHV0aWwkNC5iYXNlNjQsIHV0ZjgkMSA9IHV0aWwkNC51dGY4O1xuZnVuY3Rpb24gT3AoYSwgdSwgYykge1xuICB0aGlzLmZuID0gYSwgdGhpcy5sZW4gPSB1LCB0aGlzLm5leHQgPSB2b2lkIDAsIHRoaXMudmFsID0gYztcbn1cbmZ1bmN0aW9uIG5vb3AoKSB7XG59XG5mdW5jdGlvbiBTdGF0ZShhKSB7XG4gIHRoaXMuaGVhZCA9IGEuaGVhZCwgdGhpcy50YWlsID0gYS50YWlsLCB0aGlzLmxlbiA9IGEubGVuLCB0aGlzLm5leHQgPSBhLnN0YXRlcztcbn1cbmZ1bmN0aW9uIFdyaXRlciQxKCkge1xuICB0aGlzLmxlbiA9IDAsIHRoaXMuaGVhZCA9IG5ldyBPcChub29wLCAwLCAwKSwgdGhpcy50YWlsID0gdGhpcy5oZWFkLCB0aGlzLnN0YXRlcyA9IG51bGw7XG59XG52YXIgY3JlYXRlJDEgPSBmdW5jdGlvbiBhKCkge1xuICByZXR1cm4gdXRpbCQ0LkJ1ZmZlciA/IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoV3JpdGVyJDEuY3JlYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbmV3IEJ1ZmZlcldyaXRlciQxKCk7XG4gICAgfSkoKTtcbiAgfSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgV3JpdGVyJDEoKTtcbiAgfTtcbn07XG5Xcml0ZXIkMS5jcmVhdGUgPSBjcmVhdGUkMSgpO1xuV3JpdGVyJDEuYWxsb2MgPSBmdW5jdGlvbiBhKHUpIHtcbiAgcmV0dXJuIG5ldyB1dGlsJDQuQXJyYXkodSk7XG59O1xudXRpbCQ0LkFycmF5ICE9PSBBcnJheSAmJiAoV3JpdGVyJDEuYWxsb2MgPSB1dGlsJDQucG9vbChXcml0ZXIkMS5hbGxvYywgdXRpbCQ0LkFycmF5LnByb3RvdHlwZS5zdWJhcnJheSkpO1xuV3JpdGVyJDEucHJvdG90eXBlLl9wdXNoID0gZnVuY3Rpb24gYSh1LCBjLCBmKSB7XG4gIHJldHVybiB0aGlzLnRhaWwgPSB0aGlzLnRhaWwubmV4dCA9IG5ldyBPcCh1LCBjLCBmKSwgdGhpcy5sZW4gKz0gYywgdGhpcztcbn07XG5mdW5jdGlvbiB3cml0ZUJ5dGUoYSwgdSwgYykge1xuICB1W2NdID0gYSAmIDI1NTtcbn1cbmZ1bmN0aW9uIHdyaXRlVmFyaW50MzIoYSwgdSwgYykge1xuICBmb3IgKDsgYSA+IDEyNzsgKVxuICAgIHVbYysrXSA9IGEgJiAxMjcgfCAxMjgsIGEgPj4+PSA3O1xuICB1W2NdID0gYTtcbn1cbmZ1bmN0aW9uIFZhcmludE9wKGEsIHUpIHtcbiAgdGhpcy5sZW4gPSBhLCB0aGlzLm5leHQgPSB2b2lkIDAsIHRoaXMudmFsID0gdTtcbn1cblZhcmludE9wLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT3AucHJvdG90eXBlKTtcblZhcmludE9wLnByb3RvdHlwZS5mbiA9IHdyaXRlVmFyaW50MzI7XG5Xcml0ZXIkMS5wcm90b3R5cGUudWludDMyID0gZnVuY3Rpb24gYSh1KSB7XG4gIHJldHVybiB0aGlzLmxlbiArPSAodGhpcy50YWlsID0gdGhpcy50YWlsLm5leHQgPSBuZXcgVmFyaW50T3AoXG4gICAgKHUgPSB1ID4+PiAwKSA8IDEyOCA/IDEgOiB1IDwgMTYzODQgPyAyIDogdSA8IDIwOTcxNTIgPyAzIDogdSA8IDI2ODQzNTQ1NiA/IDQgOiA1LFxuICAgIHVcbiAgKSkubGVuLCB0aGlzO1xufTtcbldyaXRlciQxLnByb3RvdHlwZS5pbnQzMiA9IGZ1bmN0aW9uIGEodSkge1xuICByZXR1cm4gdSA8IDAgPyB0aGlzLl9wdXNoKHdyaXRlVmFyaW50NjQsIDEwLCBMb25nQml0cyQxLmZyb21OdW1iZXIodSkpIDogdGhpcy51aW50MzIodSk7XG59O1xuV3JpdGVyJDEucHJvdG90eXBlLnNpbnQzMiA9IGZ1bmN0aW9uIGEodSkge1xuICByZXR1cm4gdGhpcy51aW50MzIoKHUgPDwgMSBeIHUgPj4gMzEpID4+PiAwKTtcbn07XG5mdW5jdGlvbiB3cml0ZVZhcmludDY0KGEsIHUsIGMpIHtcbiAgZm9yICg7IGEuaGk7IClcbiAgICB1W2MrK10gPSBhLmxvICYgMTI3IHwgMTI4LCBhLmxvID0gKGEubG8gPj4+IDcgfCBhLmhpIDw8IDI1KSA+Pj4gMCwgYS5oaSA+Pj49IDc7XG4gIGZvciAoOyBhLmxvID4gMTI3OyApXG4gICAgdVtjKytdID0gYS5sbyAmIDEyNyB8IDEyOCwgYS5sbyA9IGEubG8gPj4+IDc7XG4gIHVbYysrXSA9IGEubG87XG59XG5Xcml0ZXIkMS5wcm90b3R5cGUudWludDY0ID0gZnVuY3Rpb24gYSh1KSB7XG4gIHZhciBjID0gTG9uZ0JpdHMkMS5mcm9tKHUpO1xuICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCBjLmxlbmd0aCgpLCBjKTtcbn07XG5Xcml0ZXIkMS5wcm90b3R5cGUuaW50NjQgPSBXcml0ZXIkMS5wcm90b3R5cGUudWludDY0O1xuV3JpdGVyJDEucHJvdG90eXBlLnNpbnQ2NCA9IGZ1bmN0aW9uIGEodSkge1xuICB2YXIgYyA9IExvbmdCaXRzJDEuZnJvbSh1KS56ekVuY29kZSgpO1xuICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCBjLmxlbmd0aCgpLCBjKTtcbn07XG5Xcml0ZXIkMS5wcm90b3R5cGUuYm9vbCA9IGZ1bmN0aW9uIGEodSkge1xuICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZUJ5dGUsIDEsIHUgPyAxIDogMCk7XG59O1xuZnVuY3Rpb24gd3JpdGVGaXhlZDMyKGEsIHUsIGMpIHtcbiAgdVtjXSA9IGEgJiAyNTUsIHVbYyArIDFdID0gYSA+Pj4gOCAmIDI1NSwgdVtjICsgMl0gPSBhID4+PiAxNiAmIDI1NSwgdVtjICsgM10gPSBhID4+PiAyNDtcbn1cbldyaXRlciQxLnByb3RvdHlwZS5maXhlZDMyID0gZnVuY3Rpb24gYSh1KSB7XG4gIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgdSA+Pj4gMCk7XG59O1xuV3JpdGVyJDEucHJvdG90eXBlLnNmaXhlZDMyID0gV3JpdGVyJDEucHJvdG90eXBlLmZpeGVkMzI7XG5Xcml0ZXIkMS5wcm90b3R5cGUuZml4ZWQ2NCA9IGZ1bmN0aW9uIGEodSkge1xuICB2YXIgYyA9IExvbmdCaXRzJDEuZnJvbSh1KTtcbiAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVGaXhlZDMyLCA0LCBjLmxvKS5fcHVzaCh3cml0ZUZpeGVkMzIsIDQsIGMuaGkpO1xufTtcbldyaXRlciQxLnByb3RvdHlwZS5zZml4ZWQ2NCA9IFdyaXRlciQxLnByb3RvdHlwZS5maXhlZDY0O1xuV3JpdGVyJDEucHJvdG90eXBlLmZsb2F0ID0gZnVuY3Rpb24gYSh1KSB7XG4gIHJldHVybiB0aGlzLl9wdXNoKHV0aWwkNC5mbG9hdC53cml0ZUZsb2F0TEUsIDQsIHUpO1xufTtcbldyaXRlciQxLnByb3RvdHlwZS5kb3VibGUgPSBmdW5jdGlvbiBhKHUpIHtcbiAgcmV0dXJuIHRoaXMuX3B1c2godXRpbCQ0LmZsb2F0LndyaXRlRG91YmxlTEUsIDgsIHUpO1xufTtcbnZhciB3cml0ZUJ5dGVzID0gdXRpbCQ0LkFycmF5LnByb3RvdHlwZS5zZXQgPyBmdW5jdGlvbiBhKHUsIGMsIGYpIHtcbiAgYy5zZXQodSwgZik7XG59IDogZnVuY3Rpb24gYSh1LCBjLCBmKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdS5sZW5ndGg7ICsraSlcbiAgICBjW2YgKyBpXSA9IHVbaV07XG59O1xuV3JpdGVyJDEucHJvdG90eXBlLmJ5dGVzID0gZnVuY3Rpb24gYSh1KSB7XG4gIHZhciBjID0gdS5sZW5ndGggPj4+IDA7XG4gIGlmICghYylcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZUJ5dGUsIDEsIDApO1xuICBpZiAodXRpbCQ0LmlzU3RyaW5nKHUpKSB7XG4gICAgdmFyIGYgPSBXcml0ZXIkMS5hbGxvYyhjID0gYmFzZTY0Lmxlbmd0aCh1KSk7XG4gICAgYmFzZTY0LmRlY29kZSh1LCBmLCAwKSwgdSA9IGY7XG4gIH1cbiAgcmV0dXJuIHRoaXMudWludDMyKGMpLl9wdXNoKHdyaXRlQnl0ZXMsIGMsIHUpO1xufTtcbldyaXRlciQxLnByb3RvdHlwZS5zdHJpbmcgPSBmdW5jdGlvbiBhKHUpIHtcbiAgdmFyIGMgPSB1dGY4JDEubGVuZ3RoKHUpO1xuICByZXR1cm4gYyA/IHRoaXMudWludDMyKGMpLl9wdXNoKHV0ZjgkMS53cml0ZSwgYywgdSkgOiB0aGlzLl9wdXNoKHdyaXRlQnl0ZSwgMSwgMCk7XG59O1xuV3JpdGVyJDEucHJvdG90eXBlLmZvcmsgPSBmdW5jdGlvbiBhKCkge1xuICByZXR1cm4gdGhpcy5zdGF0ZXMgPSBuZXcgU3RhdGUodGhpcyksIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG5ldyBPcChub29wLCAwLCAwKSwgdGhpcy5sZW4gPSAwLCB0aGlzO1xufTtcbldyaXRlciQxLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uIGEoKSB7XG4gIHJldHVybiB0aGlzLnN0YXRlcyA/ICh0aGlzLmhlYWQgPSB0aGlzLnN0YXRlcy5oZWFkLCB0aGlzLnRhaWwgPSB0aGlzLnN0YXRlcy50YWlsLCB0aGlzLmxlbiA9IHRoaXMuc3RhdGVzLmxlbiwgdGhpcy5zdGF0ZXMgPSB0aGlzLnN0YXRlcy5uZXh0KSA6ICh0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgT3Aobm9vcCwgMCwgMCksIHRoaXMubGVuID0gMCksIHRoaXM7XG59O1xuV3JpdGVyJDEucHJvdG90eXBlLmxkZWxpbSA9IGZ1bmN0aW9uIGEoKSB7XG4gIHZhciB1ID0gdGhpcy5oZWFkLCBjID0gdGhpcy50YWlsLCBmID0gdGhpcy5sZW47XG4gIHJldHVybiB0aGlzLnJlc2V0KCkudWludDMyKGYpLCBmICYmICh0aGlzLnRhaWwubmV4dCA9IHUubmV4dCwgdGhpcy50YWlsID0gYywgdGhpcy5sZW4gKz0gZiksIHRoaXM7XG59O1xuV3JpdGVyJDEucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uIGEoKSB7XG4gIGZvciAodmFyIHUgPSB0aGlzLmhlYWQubmV4dCwgYyA9IHRoaXMuY29uc3RydWN0b3IuYWxsb2ModGhpcy5sZW4pLCBmID0gMDsgdTsgKVxuICAgIHUuZm4odS52YWwsIGMsIGYpLCBmICs9IHUubGVuLCB1ID0gdS5uZXh0O1xuICByZXR1cm4gYztcbn07XG5Xcml0ZXIkMS5fY29uZmlndXJlID0gZnVuY3Rpb24oYSkge1xuICBCdWZmZXJXcml0ZXIkMSA9IGEsIFdyaXRlciQxLmNyZWF0ZSA9IGNyZWF0ZSQxKCksIEJ1ZmZlcldyaXRlciQxLl9jb25maWd1cmUoKTtcbn07XG52YXIgd3JpdGVyX2J1ZmZlciA9IEJ1ZmZlcldyaXRlciwgV3JpdGVyID0gd3JpdGVyO1xuKEJ1ZmZlcldyaXRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdyaXRlci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IEJ1ZmZlcldyaXRlcjtcbnZhciB1dGlsJDMgPSByZXF1aXJlTWluaW1hbCgpO1xuZnVuY3Rpb24gQnVmZmVyV3JpdGVyKCkge1xuICBXcml0ZXIuY2FsbCh0aGlzKTtcbn1cbkJ1ZmZlcldyaXRlci5fY29uZmlndXJlID0gZnVuY3Rpb24oKSB7XG4gIEJ1ZmZlcldyaXRlci5hbGxvYyA9IHV0aWwkMy5fQnVmZmVyX2FsbG9jVW5zYWZlLCBCdWZmZXJXcml0ZXIud3JpdGVCeXRlc0J1ZmZlciA9IHV0aWwkMy5CdWZmZXIgJiYgdXRpbCQzLkJ1ZmZlci5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIHV0aWwkMy5CdWZmZXIucHJvdG90eXBlLnNldC5uYW1lID09PSBcInNldFwiID8gZnVuY3Rpb24odSwgYywgZikge1xuICAgIGMuc2V0KHUsIGYpO1xuICB9IDogZnVuY3Rpb24odSwgYywgZikge1xuICAgIGlmICh1LmNvcHkpXG4gICAgICB1LmNvcHkoYywgZiwgMCwgdS5sZW5ndGgpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IDA7IGkgPCB1Lmxlbmd0aDsgKVxuICAgICAgY1tmKytdID0gdVtpKytdO1xuICB9O1xufTtcbkJ1ZmZlcldyaXRlci5wcm90b3R5cGUuYnl0ZXMgPSBmdW5jdGlvbiBhKHUpIHtcbiAgdXRpbCQzLmlzU3RyaW5nKHUpICYmICh1ID0gdXRpbCQzLl9CdWZmZXJfZnJvbSh1LCBcImJhc2U2NFwiKSk7XG4gIHZhciBjID0gdS5sZW5ndGggPj4+IDA7XG4gIHJldHVybiB0aGlzLnVpbnQzMihjKSwgYyAmJiB0aGlzLl9wdXNoKEJ1ZmZlcldyaXRlci53cml0ZUJ5dGVzQnVmZmVyLCBjLCB1KSwgdGhpcztcbn07XG5mdW5jdGlvbiB3cml0ZVN0cmluZ0J1ZmZlcihhLCB1LCBjKSB7XG4gIGEubGVuZ3RoIDwgNDAgPyB1dGlsJDMudXRmOC53cml0ZShhLCB1LCBjKSA6IHUudXRmOFdyaXRlID8gdS51dGY4V3JpdGUoYSwgYykgOiB1LndyaXRlKGEsIGMpO1xufVxuQnVmZmVyV3JpdGVyLnByb3RvdHlwZS5zdHJpbmcgPSBmdW5jdGlvbiBhKHUpIHtcbiAgdmFyIGMgPSB1dGlsJDMuQnVmZmVyLmJ5dGVMZW5ndGgodSk7XG4gIHJldHVybiB0aGlzLnVpbnQzMihjKSwgYyAmJiB0aGlzLl9wdXNoKHdyaXRlU3RyaW5nQnVmZmVyLCBjLCB1KSwgdGhpcztcbn07XG5CdWZmZXJXcml0ZXIuX2NvbmZpZ3VyZSgpO1xudmFyIHJlYWRlciA9IFJlYWRlciQxLCB1dGlsJDIgPSByZXF1aXJlTWluaW1hbCgpLCBCdWZmZXJSZWFkZXIkMSwgTG9uZ0JpdHMgPSB1dGlsJDIuTG9uZ0JpdHMsIHV0ZjggPSB1dGlsJDIudXRmODtcbmZ1bmN0aW9uIGluZGV4T3V0T2ZSYW5nZShhLCB1KSB7XG4gIHJldHVybiBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlOiBcIiArIGEucG9zICsgXCIgKyBcIiArICh1IHx8IDEpICsgXCIgPiBcIiArIGEubGVuKTtcbn1cbmZ1bmN0aW9uIFJlYWRlciQxKGEpIHtcbiAgdGhpcy5idWYgPSBhLCB0aGlzLnBvcyA9IDAsIHRoaXMubGVuID0gYS5sZW5ndGg7XG59XG52YXIgY3JlYXRlX2FycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgPCBcInVcIiA/IGZ1bmN0aW9uIGEodSkge1xuICBpZiAodSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgQXJyYXkuaXNBcnJheSh1KSlcbiAgICByZXR1cm4gbmV3IFJlYWRlciQxKHUpO1xuICB0aHJvdyBFcnJvcihcImlsbGVnYWwgYnVmZmVyXCIpO1xufSA6IGZ1bmN0aW9uIGEodSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh1KSlcbiAgICByZXR1cm4gbmV3IFJlYWRlciQxKHUpO1xuICB0aHJvdyBFcnJvcihcImlsbGVnYWwgYnVmZmVyXCIpO1xufSwgY3JlYXRlID0gZnVuY3Rpb24gYSgpIHtcbiAgcmV0dXJuIHV0aWwkMi5CdWZmZXIgPyBmdW5jdGlvbihjKSB7XG4gICAgcmV0dXJuIChSZWFkZXIkMS5jcmVhdGUgPSBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gdXRpbCQyLkJ1ZmZlci5pc0J1ZmZlcihpKSA/IG5ldyBCdWZmZXJSZWFkZXIkMShpKSA6IGNyZWF0ZV9hcnJheShpKTtcbiAgICB9KShjKTtcbiAgfSA6IGNyZWF0ZV9hcnJheTtcbn07XG5SZWFkZXIkMS5jcmVhdGUgPSBjcmVhdGUoKTtcblJlYWRlciQxLnByb3RvdHlwZS5fc2xpY2UgPSB1dGlsJDIuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5IHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG51dGlsJDIuQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuUmVhZGVyJDEucHJvdG90eXBlLnVpbnQzMiA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbiBhKCkge1xuICB2YXIgdSA9IDQyOTQ5NjcyOTU7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpZiAodSA9ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpID4+PiAwLCB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCB8fCAodSA9ICh1IHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgNykgPj4+IDAsIHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSB8fCAodSA9ICh1IHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgMTQpID4+PiAwLCB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgfHwgKHUgPSAodSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IDIxKSA+Pj4gMCwgdGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHx8ICh1ID0gKHUgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTUpIDw8IDI4KSA+Pj4gMCwgdGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpKSByZXR1cm4gdTtcbiAgICBpZiAoKHRoaXMucG9zICs9IDUpID4gdGhpcy5sZW4pXG4gICAgICB0aHJvdyB0aGlzLnBvcyA9IHRoaXMubGVuLCBpbmRleE91dE9mUmFuZ2UodGhpcywgMTApO1xuICAgIHJldHVybiB1O1xuICB9O1xufSgpO1xuUmVhZGVyJDEucHJvdG90eXBlLmludDMyID0gZnVuY3Rpb24gYSgpIHtcbiAgcmV0dXJuIHRoaXMudWludDMyKCkgfCAwO1xufTtcblJlYWRlciQxLnByb3RvdHlwZS5zaW50MzIgPSBmdW5jdGlvbiBhKCkge1xuICB2YXIgdSA9IHRoaXMudWludDMyKCk7XG4gIHJldHVybiB1ID4+PiAxIF4gLSh1ICYgMSkgfCAwO1xufTtcbmZ1bmN0aW9uIHJlYWRMb25nVmFyaW50KCkge1xuICB2YXIgYSA9IG5ldyBMb25nQml0cygwLCAwKSwgdSA9IDA7XG4gIGlmICh0aGlzLmxlbiAtIHRoaXMucG9zID4gNCkge1xuICAgIGZvciAoOyB1IDwgNDsgKyt1KVxuICAgICAgaWYgKGEubG8gPSAoYS5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IHUgKiA3KSA+Pj4gMCwgdGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgIHJldHVybiBhO1xuICAgIGlmIChhLmxvID0gKGEubG8gfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCAyOCkgPj4+IDAsIGEuaGkgPSAoYS5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpID4+IDQpID4+PiAwLCB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgIHJldHVybiBhO1xuICAgIHUgPSAwO1xuICB9IGVsc2Uge1xuICAgIGZvciAoOyB1IDwgMzsgKyt1KSB7XG4gICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzKTtcbiAgICAgIGlmIChhLmxvID0gKGEubG8gfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCB1ICogNykgPj4+IDAsIHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG4gICAgcmV0dXJuIGEubG8gPSAoYS5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSAmIDEyNykgPDwgdSAqIDcpID4+PiAwLCBhO1xuICB9XG4gIGlmICh0aGlzLmxlbiAtIHRoaXMucG9zID4gNCkge1xuICAgIGZvciAoOyB1IDwgNTsgKyt1KVxuICAgICAgaWYgKGEuaGkgPSAoYS5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IHUgKiA3ICsgMykgPj4+IDAsIHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICByZXR1cm4gYTtcbiAgfSBlbHNlXG4gICAgZm9yICg7IHUgPCA1OyArK3UpIHtcbiAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgICAgaWYgKGEuaGkgPSAoYS5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IHUgKiA3ICsgMykgPj4+IDAsIHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG4gIHRocm93IEVycm9yKFwiaW52YWxpZCB2YXJpbnQgZW5jb2RpbmdcIik7XG59XG5SZWFkZXIkMS5wcm90b3R5cGUuYm9vbCA9IGZ1bmN0aW9uIGEoKSB7XG4gIHJldHVybiB0aGlzLnVpbnQzMigpICE9PSAwO1xufTtcbmZ1bmN0aW9uIHJlYWRGaXhlZDMyX2VuZChhLCB1KSB7XG4gIHJldHVybiAoYVt1IC0gNF0gfCBhW3UgLSAzXSA8PCA4IHwgYVt1IC0gMl0gPDwgMTYgfCBhW3UgLSAxXSA8PCAyNCkgPj4+IDA7XG59XG5SZWFkZXIkMS5wcm90b3R5cGUuZml4ZWQzMiA9IGZ1bmN0aW9uIGEoKSB7XG4gIGlmICh0aGlzLnBvcyArIDQgPiB0aGlzLmxlbilcbiAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG4gIHJldHVybiByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpO1xufTtcblJlYWRlciQxLnByb3RvdHlwZS5zZml4ZWQzMiA9IGZ1bmN0aW9uIGEoKSB7XG4gIGlmICh0aGlzLnBvcyArIDQgPiB0aGlzLmxlbilcbiAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG4gIHJldHVybiByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpIHwgMDtcbn07XG5mdW5jdGlvbiByZWFkRml4ZWQ2NCgpIHtcbiAgaWYgKHRoaXMucG9zICsgOCA+IHRoaXMubGVuKVxuICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA4KTtcbiAgcmV0dXJuIG5ldyBMb25nQml0cyhyZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpLCByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpKTtcbn1cblJlYWRlciQxLnByb3RvdHlwZS5mbG9hdCA9IGZ1bmN0aW9uIGEoKSB7XG4gIGlmICh0aGlzLnBvcyArIDQgPiB0aGlzLmxlbilcbiAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG4gIHZhciB1ID0gdXRpbCQyLmZsb2F0LnJlYWRGbG9hdExFKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gIHJldHVybiB0aGlzLnBvcyArPSA0LCB1O1xufTtcblJlYWRlciQxLnByb3RvdHlwZS5kb3VibGUgPSBmdW5jdGlvbiBhKCkge1xuICBpZiAodGhpcy5wb3MgKyA4ID4gdGhpcy5sZW4pXG4gICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDQpO1xuICB2YXIgdSA9IHV0aWwkMi5mbG9hdC5yZWFkRG91YmxlTEUodGhpcy5idWYsIHRoaXMucG9zKTtcbiAgcmV0dXJuIHRoaXMucG9zICs9IDgsIHU7XG59O1xuUmVhZGVyJDEucHJvdG90eXBlLmJ5dGVzID0gZnVuY3Rpb24gYSgpIHtcbiAgdmFyIHUgPSB0aGlzLnVpbnQzMigpLCBjID0gdGhpcy5wb3MsIGYgPSB0aGlzLnBvcyArIHU7XG4gIGlmIChmID4gdGhpcy5sZW4pXG4gICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIHUpO1xuICBpZiAodGhpcy5wb3MgKz0gdSwgQXJyYXkuaXNBcnJheSh0aGlzLmJ1ZikpXG4gICAgcmV0dXJuIHRoaXMuYnVmLnNsaWNlKGMsIGYpO1xuICBpZiAoYyA9PT0gZikge1xuICAgIHZhciBpID0gdXRpbCQyLkJ1ZmZlcjtcbiAgICByZXR1cm4gaSA/IGkuYWxsb2MoMCkgOiBuZXcgdGhpcy5idWYuY29uc3RydWN0b3IoMCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuX3NsaWNlLmNhbGwodGhpcy5idWYsIGMsIGYpO1xufTtcblJlYWRlciQxLnByb3RvdHlwZS5zdHJpbmcgPSBmdW5jdGlvbiBhKCkge1xuICB2YXIgdSA9IHRoaXMuYnl0ZXMoKTtcbiAgcmV0dXJuIHV0ZjgucmVhZCh1LCAwLCB1Lmxlbmd0aCk7XG59O1xuUmVhZGVyJDEucHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbiBhKHUpIHtcbiAgaWYgKHR5cGVvZiB1ID09IFwibnVtYmVyXCIpIHtcbiAgICBpZiAodGhpcy5wb3MgKyB1ID4gdGhpcy5sZW4pXG4gICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgdSk7XG4gICAgdGhpcy5wb3MgKz0gdTtcbiAgfSBlbHNlXG4gICAgZG9cbiAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgIHdoaWxlICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSAmIDEyOCk7XG4gIHJldHVybiB0aGlzO1xufTtcblJlYWRlciQxLnByb3RvdHlwZS5za2lwVHlwZSA9IGZ1bmN0aW9uKGEpIHtcbiAgc3dpdGNoIChhKSB7XG4gICAgY2FzZSAwOlxuICAgICAgdGhpcy5za2lwKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICB0aGlzLnNraXAoOCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB0aGlzLnNraXAodGhpcy51aW50MzIoKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICBmb3IgKDsgKGEgPSB0aGlzLnVpbnQzMigpICYgNykgIT09IDQ7IClcbiAgICAgICAgdGhpcy5za2lwVHlwZShhKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIHRoaXMuc2tpcCg0KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBFcnJvcihcImludmFsaWQgd2lyZSB0eXBlIFwiICsgYSArIFwiIGF0IG9mZnNldCBcIiArIHRoaXMucG9zKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5SZWFkZXIkMS5fY29uZmlndXJlID0gZnVuY3Rpb24oYSkge1xuICBCdWZmZXJSZWFkZXIkMSA9IGEsIFJlYWRlciQxLmNyZWF0ZSA9IGNyZWF0ZSgpLCBCdWZmZXJSZWFkZXIkMS5fY29uZmlndXJlKCk7XG4gIHZhciB1ID0gdXRpbCQyLkxvbmcgPyBcInRvTG9uZ1wiIDogKFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgXCJ0b051bWJlclwiXG4gICk7XG4gIHV0aWwkMi5tZXJnZShSZWFkZXIkMS5wcm90b3R5cGUsIHtcbiAgICBpbnQ2NDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKVt1XSghMSk7XG4gICAgfSxcbiAgICB1aW50NjQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHJlYWRMb25nVmFyaW50LmNhbGwodGhpcylbdV0oITApO1xuICAgIH0sXG4gICAgc2ludDY0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByZWFkTG9uZ1ZhcmludC5jYWxsKHRoaXMpLnp6RGVjb2RlKClbdV0oITEpO1xuICAgIH0sXG4gICAgZml4ZWQ2NDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVt1XSghMCk7XG4gICAgfSxcbiAgICBzZml4ZWQ2NDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVt1XSghMSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgcmVhZGVyX2J1ZmZlciA9IEJ1ZmZlclJlYWRlciwgUmVhZGVyID0gcmVhZGVyO1xuKEJ1ZmZlclJlYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlYWRlci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IEJ1ZmZlclJlYWRlcjtcbnZhciB1dGlsJDEgPSByZXF1aXJlTWluaW1hbCgpO1xuZnVuY3Rpb24gQnVmZmVyUmVhZGVyKGEpIHtcbiAgUmVhZGVyLmNhbGwodGhpcywgYSk7XG59XG5CdWZmZXJSZWFkZXIuX2NvbmZpZ3VyZSA9IGZ1bmN0aW9uKCkge1xuICB1dGlsJDEuQnVmZmVyICYmIChCdWZmZXJSZWFkZXIucHJvdG90eXBlLl9zbGljZSA9IHV0aWwkMS5CdWZmZXIucHJvdG90eXBlLnNsaWNlKTtcbn07XG5CdWZmZXJSZWFkZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIGEoKSB7XG4gIHZhciB1ID0gdGhpcy51aW50MzIoKTtcbiAgcmV0dXJuIHRoaXMuYnVmLnV0ZjhTbGljZSA/IHRoaXMuYnVmLnV0ZjhTbGljZSh0aGlzLnBvcywgdGhpcy5wb3MgPSBNYXRoLm1pbih0aGlzLnBvcyArIHUsIHRoaXMubGVuKSkgOiB0aGlzLmJ1Zi50b1N0cmluZyhcInV0Zi04XCIsIHRoaXMucG9zLCB0aGlzLnBvcyA9IE1hdGgubWluKHRoaXMucG9zICsgdSwgdGhpcy5sZW4pKTtcbn07XG5CdWZmZXJSZWFkZXIuX2NvbmZpZ3VyZSgpO1xudmFyIHJwYyA9IHt9LCBzZXJ2aWNlID0gU2VydmljZSwgdXRpbCA9IHJlcXVpcmVNaW5pbWFsKCk7XG4oU2VydmljZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHV0aWwuRXZlbnRFbWl0dGVyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gU2VydmljZTtcbmZ1bmN0aW9uIFNlcnZpY2UoYSwgdSwgYykge1xuICBpZiAodHlwZW9mIGEgIT0gXCJmdW5jdGlvblwiKVxuICAgIHRocm93IFR5cGVFcnJvcihcInJwY0ltcGwgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB1dGlsLkV2ZW50RW1pdHRlci5jYWxsKHRoaXMpLCB0aGlzLnJwY0ltcGwgPSBhLCB0aGlzLnJlcXVlc3REZWxpbWl0ZWQgPSAhIXUsIHRoaXMucmVzcG9uc2VEZWxpbWl0ZWQgPSAhIWM7XG59XG5TZXJ2aWNlLnByb3RvdHlwZS5ycGNDYWxsID0gZnVuY3Rpb24gYSh1LCBjLCBmLCBpLCBvKSB7XG4gIGlmICghaSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoXCJyZXF1ZXN0IG11c3QgYmUgc3BlY2lmaWVkXCIpO1xuICB2YXIgZSA9IHRoaXM7XG4gIGlmICghbylcbiAgICByZXR1cm4gdXRpbC5hc1Byb21pc2UoYSwgZSwgdSwgYywgZiwgaSk7XG4gIGlmICghZS5ycGNJbXBsKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIG8oRXJyb3IoXCJhbHJlYWR5IGVuZGVkXCIpKTtcbiAgICB9LCAwKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gZS5ycGNJbXBsKFxuICAgICAgdSxcbiAgICAgIGNbZS5yZXF1ZXN0RGVsaW1pdGVkID8gXCJlbmNvZGVEZWxpbWl0ZWRcIiA6IFwiZW5jb2RlXCJdKGkpLmZpbmlzaCgpLFxuICAgICAgZnVuY3Rpb24ociwgbikge1xuICAgICAgICBpZiAocilcbiAgICAgICAgICByZXR1cm4gZS5lbWl0KFwiZXJyb3JcIiwgciwgdSksIG8ocik7XG4gICAgICAgIGlmIChuID09PSBudWxsKSB7XG4gICAgICAgICAgZS5lbmQoXG4gICAgICAgICAgICAvKiBlbmRlZEJ5UlBDICovXG4gICAgICAgICAgICAhMFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKG4gaW5zdGFuY2VvZiBmKSlcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbiA9IGZbZS5yZXNwb25zZURlbGltaXRlZCA/IFwiZGVjb2RlRGVsaW1pdGVkXCIgOiBcImRlY29kZVwiXShuKTtcbiAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICByZXR1cm4gZS5lbWl0KFwiZXJyb3JcIiwgbCwgdSksIG8obCk7XG4gICAgICAgICAgfVxuICAgICAgICByZXR1cm4gZS5lbWl0KFwiZGF0YVwiLCBuLCB1KSwgbyhudWxsLCBuKTtcbiAgICAgIH1cbiAgICApO1xuICB9IGNhdGNoICh0KSB7XG4gICAgZS5lbWl0KFwiZXJyb3JcIiwgdCwgdSksIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBvKHQpO1xuICAgIH0sIDApO1xuICAgIHJldHVybjtcbiAgfVxufTtcblNlcnZpY2UucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIGEodSkge1xuICByZXR1cm4gdGhpcy5ycGNJbXBsICYmICh1IHx8IHRoaXMucnBjSW1wbChudWxsLCBudWxsLCBudWxsKSwgdGhpcy5ycGNJbXBsID0gbnVsbCwgdGhpcy5lbWl0KFwiZW5kXCIpLm9mZigpKSwgdGhpcztcbn07XG4oZnVuY3Rpb24oYSkge1xuICB2YXIgdSA9IGE7XG4gIHUuU2VydmljZSA9IHNlcnZpY2U7XG59KShycGMpO1xudmFyIHJvb3RzID0ge307XG4oZnVuY3Rpb24oYSkge1xuICB2YXIgdSA9IGE7XG4gIHUuYnVpbGQgPSBcIm1pbmltYWxcIiwgdS5Xcml0ZXIgPSB3cml0ZXIsIHUuQnVmZmVyV3JpdGVyID0gd3JpdGVyX2J1ZmZlciwgdS5SZWFkZXIgPSByZWFkZXIsIHUuQnVmZmVyUmVhZGVyID0gcmVhZGVyX2J1ZmZlciwgdS51dGlsID0gcmVxdWlyZU1pbmltYWwoKSwgdS5ycGMgPSBycGMsIHUucm9vdHMgPSByb290cywgdS5jb25maWd1cmUgPSBjO1xuICBmdW5jdGlvbiBjKCkge1xuICAgIHUudXRpbC5fY29uZmlndXJlKCksIHUuV3JpdGVyLl9jb25maWd1cmUodS5CdWZmZXJXcml0ZXIpLCB1LlJlYWRlci5fY29uZmlndXJlKHUuQnVmZmVyUmVhZGVyKTtcbiAgfVxuICBjKCk7XG59KShpbmRleE1pbmltYWwpO1xudmFyIG1pbmltYWwgPSBpbmRleE1pbmltYWwsICRwcm90b2J1ZiA9IG1pbmltYWwsICRSZWFkZXIgPSAkcHJvdG9idWYuUmVhZGVyLCAkV3JpdGVyID0gJHByb3RvYnVmLldyaXRlciwgJHV0aWwgPSAkcHJvdG9idWYudXRpbCwgJHJvb3QgPSAkcHJvdG9idWYucm9vdHMuZGVmYXVsdCB8fCAoJHByb3RvYnVmLnJvb3RzLmRlZmF1bHQgPSB7fSk7XG4kcm9vdC5vcGVudGVsZW1ldHJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhID0ge307XG4gIHJldHVybiBhLnByb3RvID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHUgPSB7fTtcbiAgICByZXR1cm4gdS5jb21tb24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjID0ge307XG4gICAgICByZXR1cm4gYy52MSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZiA9IHt9O1xuICAgICAgICByZXR1cm4gZi5BbnlWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkoZSkge1xuICAgICAgICAgICAgaWYgKGUpXG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhlKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgIGVbdFtyXV0gIT0gbnVsbCAmJiAodGhpc1t0W3JdXSA9IGVbdFtyXV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpLnByb3RvdHlwZS5zdHJpbmdWYWx1ZSA9IG51bGwsIGkucHJvdG90eXBlLmJvb2xWYWx1ZSA9IG51bGwsIGkucHJvdG90eXBlLmludFZhbHVlID0gbnVsbCwgaS5wcm90b3R5cGUuZG91YmxlVmFsdWUgPSBudWxsLCBpLnByb3RvdHlwZS5hcnJheVZhbHVlID0gbnVsbCwgaS5wcm90b3R5cGUua3ZsaXN0VmFsdWUgPSBudWxsLCBpLnByb3RvdHlwZS5ieXRlc1ZhbHVlID0gbnVsbDtcbiAgICAgICAgICB2YXIgbztcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgICAgICAgICAgIGdldDogJHV0aWwub25lT2ZHZXR0ZXIobyA9IFtcInN0cmluZ1ZhbHVlXCIsIFwiYm9vbFZhbHVlXCIsIFwiaW50VmFsdWVcIiwgXCJkb3VibGVWYWx1ZVwiLCBcImFycmF5VmFsdWVcIiwgXCJrdmxpc3RWYWx1ZVwiLCBcImJ5dGVzVmFsdWVcIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaSh0KTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgIHJldHVybiByIHx8IChyID0gJFdyaXRlci5jcmVhdGUoKSksIHQuc3RyaW5nVmFsdWUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInN0cmluZ1ZhbHVlXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgKS5zdHJpbmcodC5zdHJpbmdWYWx1ZSksIHQuYm9vbFZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJib29sVmFsdWVcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDAgPSovXG4gICAgICAgICAgICAgIDE2XG4gICAgICAgICAgICApLmJvb2wodC5ib29sVmFsdWUpLCB0LmludFZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJpbnRWYWx1ZVwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMywgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgMjRcbiAgICAgICAgICAgICkuaW50NjQodC5pbnRWYWx1ZSksIHQuZG91YmxlVmFsdWUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImRvdWJsZVZhbHVlXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA0LCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAzM1xuICAgICAgICAgICAgKS5kb3VibGUodC5kb3VibGVWYWx1ZSksIHQuYXJyYXlWYWx1ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiYXJyYXlWYWx1ZVwiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlLmVuY29kZSh0LmFycmF5VmFsdWUsIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA1LCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICA0MlxuICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCB0Lmt2bGlzdFZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJrdmxpc3RWYWx1ZVwiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QuZW5jb2RlKHQua3ZsaXN0VmFsdWUsIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA2LCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICA1MFxuICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCB0LmJ5dGVzVmFsdWUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImJ5dGVzVmFsdWVcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDcsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDU4XG4gICAgICAgICAgICApLmJ5dGVzKHQuYnl0ZXNWYWx1ZSksIHI7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9ICRSZWFkZXIuY3JlYXRlKHQpKTtcbiAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZSgpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICB2YXIgcCA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAocCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgbC5zdHJpbmdWYWx1ZSA9IHQuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBsLmJvb2xWYWx1ZSA9IHQuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgbC5pbnRWYWx1ZSA9IHQuaW50NjQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICAgICAgICAgIGwuZG91YmxlVmFsdWUgPSB0LmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNToge1xuICAgICAgICAgICAgICAgICAgbC5hcnJheVZhbHVlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZS5kZWNvZGUodCwgdC51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA2OiB7XG4gICAgICAgICAgICAgICAgICBsLmt2bGlzdFZhbHVlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0LmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDc6IHtcbiAgICAgICAgICAgICAgICAgIGwuYnl0ZXNWYWx1ZSA9IHQuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgdC5za2lwVHlwZShwICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICByZXR1cm4gdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSBuZXcgJFJlYWRlcih0KSksIHRoaXMuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0ICE9IFwib2JqZWN0XCIgfHwgdCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgaWYgKHQuc3RyaW5nVmFsdWUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwic3RyaW5nVmFsdWVcIikgJiYgKHIudmFsdWUgPSAxLCAhJHV0aWwuaXNTdHJpbmcodC5zdHJpbmdWYWx1ZSkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdWYWx1ZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAodC5ib29sVmFsdWUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiYm9vbFZhbHVlXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChyLnZhbHVlID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgaWYgKHIudmFsdWUgPSAxLCB0eXBlb2YgdC5ib29sVmFsdWUgIT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYm9vbFZhbHVlOiBib29sZWFuIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5pbnRWYWx1ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJpbnRWYWx1ZVwiKSkge1xuICAgICAgICAgICAgICBpZiAoci52YWx1ZSA9PT0gMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgIGlmIChyLnZhbHVlID0gMSwgISR1dGlsLmlzSW50ZWdlcih0LmludFZhbHVlKSAmJiAhKHQuaW50VmFsdWUgJiYgJHV0aWwuaXNJbnRlZ2VyKHQuaW50VmFsdWUubG93KSAmJiAkdXRpbC5pc0ludGVnZXIodC5pbnRWYWx1ZS5oaWdoKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiaW50VmFsdWU6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuZG91YmxlVmFsdWUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZG91YmxlVmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgaWYgKHIudmFsdWUgPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidmFsdWU6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICBpZiAoci52YWx1ZSA9IDEsIHR5cGVvZiB0LmRvdWJsZVZhbHVlICE9IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZG91YmxlVmFsdWU6IG51bWJlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuYXJyYXlWYWx1ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhcnJheVZhbHVlXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChyLnZhbHVlID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgci52YWx1ZSA9IDE7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUudmVyaWZ5KHQuYXJyYXlWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJhcnJheVZhbHVlLlwiICsgbjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQua3ZsaXN0VmFsdWUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwia3ZsaXN0VmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgaWYgKHIudmFsdWUgPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidmFsdWU6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICByLnZhbHVlID0gMTtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBuID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0LnZlcmlmeSh0Lmt2bGlzdFZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImt2bGlzdFZhbHVlLlwiICsgbjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuYnl0ZXNWYWx1ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJieXRlc1ZhbHVlXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChyLnZhbHVlID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgaWYgKHIudmFsdWUgPSAxLCAhKHQuYnl0ZXNWYWx1ZSAmJiB0eXBlb2YgdC5ieXRlc1ZhbHVlLmxlbmd0aCA9PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKHQuYnl0ZXNWYWx1ZSkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImJ5dGVzVmFsdWU6IGJ1ZmZlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSwgaS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZSlcbiAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICB2YXIgciA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKHQuc3RyaW5nVmFsdWUgIT0gbnVsbCAmJiAoci5zdHJpbmdWYWx1ZSA9IFN0cmluZyh0LnN0cmluZ1ZhbHVlKSksIHQuYm9vbFZhbHVlICE9IG51bGwgJiYgKHIuYm9vbFZhbHVlID0gISF0LmJvb2xWYWx1ZSksIHQuaW50VmFsdWUgIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/IChyLmludFZhbHVlID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC5pbnRWYWx1ZSkpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgdC5pbnRWYWx1ZSA9PSBcInN0cmluZ1wiID8gci5pbnRWYWx1ZSA9IHBhcnNlSW50KHQuaW50VmFsdWUsIDEwKSA6IHR5cGVvZiB0LmludFZhbHVlID09IFwibnVtYmVyXCIgPyByLmludFZhbHVlID0gdC5pbnRWYWx1ZSA6IHR5cGVvZiB0LmludFZhbHVlID09IFwib2JqZWN0XCIgJiYgKHIuaW50VmFsdWUgPSBuZXcgJHV0aWwuTG9uZ0JpdHModC5pbnRWYWx1ZS5sb3cgPj4+IDAsIHQuaW50VmFsdWUuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCB0LmRvdWJsZVZhbHVlICE9IG51bGwgJiYgKHIuZG91YmxlVmFsdWUgPSBOdW1iZXIodC5kb3VibGVWYWx1ZSkpLCB0LmFycmF5VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuYXJyYXlWYWx1ZSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5hcnJheVZhbHVlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHIuYXJyYXlWYWx1ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUuZnJvbU9iamVjdCh0LmFycmF5VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQua3ZsaXN0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQua3ZsaXN0VmFsdWUgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUua3ZsaXN0VmFsdWU6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgci5rdmxpc3RWYWx1ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdC5mcm9tT2JqZWN0KHQua3ZsaXN0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQuYnl0ZXNWYWx1ZSAhPSBudWxsICYmICh0eXBlb2YgdC5ieXRlc1ZhbHVlID09IFwic3RyaW5nXCIgPyAkdXRpbC5iYXNlNjQuZGVjb2RlKHQuYnl0ZXNWYWx1ZSwgci5ieXRlc1ZhbHVlID0gJHV0aWwubmV3QnVmZmVyKCR1dGlsLmJhc2U2NC5sZW5ndGgodC5ieXRlc1ZhbHVlKSksIDApIDogdC5ieXRlc1ZhbHVlLmxlbmd0aCA+PSAwICYmIChyLmJ5dGVzVmFsdWUgPSB0LmJ5dGVzVmFsdWUpKSwgcjtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgciB8fCAociA9IHt9KTtcbiAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICByZXR1cm4gdC5zdHJpbmdWYWx1ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJzdHJpbmdWYWx1ZVwiKSAmJiAobi5zdHJpbmdWYWx1ZSA9IHQuc3RyaW5nVmFsdWUsIHIub25lb2ZzICYmIChuLnZhbHVlID0gXCJzdHJpbmdWYWx1ZVwiKSksIHQuYm9vbFZhbHVlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImJvb2xWYWx1ZVwiKSAmJiAobi5ib29sVmFsdWUgPSB0LmJvb2xWYWx1ZSwgci5vbmVvZnMgJiYgKG4udmFsdWUgPSBcImJvb2xWYWx1ZVwiKSksIHQuaW50VmFsdWUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiaW50VmFsdWVcIikgJiYgKHR5cGVvZiB0LmludFZhbHVlID09IFwibnVtYmVyXCIgPyBuLmludFZhbHVlID0gci5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHQuaW50VmFsdWUpIDogdC5pbnRWYWx1ZSA6IG4uaW50VmFsdWUgPSByLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQuaW50VmFsdWUpIDogci5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKHQuaW50VmFsdWUubG93ID4+PiAwLCB0LmludFZhbHVlLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiB0LmludFZhbHVlLCByLm9uZW9mcyAmJiAobi52YWx1ZSA9IFwiaW50VmFsdWVcIikpLCB0LmRvdWJsZVZhbHVlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImRvdWJsZVZhbHVlXCIpICYmIChuLmRvdWJsZVZhbHVlID0gci5qc29uICYmICFpc0Zpbml0ZSh0LmRvdWJsZVZhbHVlKSA/IFN0cmluZyh0LmRvdWJsZVZhbHVlKSA6IHQuZG91YmxlVmFsdWUsIHIub25lb2ZzICYmIChuLnZhbHVlID0gXCJkb3VibGVWYWx1ZVwiKSksIHQuYXJyYXlWYWx1ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhcnJheVZhbHVlXCIpICYmIChuLmFycmF5VmFsdWUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlLnRvT2JqZWN0KHQuYXJyYXlWYWx1ZSwgciksIHIub25lb2ZzICYmIChuLnZhbHVlID0gXCJhcnJheVZhbHVlXCIpKSwgdC5rdmxpc3RWYWx1ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJrdmxpc3RWYWx1ZVwiKSAmJiAobi5rdmxpc3RWYWx1ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdC50b09iamVjdCh0Lmt2bGlzdFZhbHVlLCByKSwgci5vbmVvZnMgJiYgKG4udmFsdWUgPSBcImt2bGlzdFZhbHVlXCIpKSwgdC5ieXRlc1ZhbHVlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImJ5dGVzVmFsdWVcIikgJiYgKG4uYnl0ZXNWYWx1ZSA9IHIuYnl0ZXMgPT09IFN0cmluZyA/ICR1dGlsLmJhc2U2NC5lbmNvZGUodC5ieXRlc1ZhbHVlLCAwLCB0LmJ5dGVzVmFsdWUubGVuZ3RoKSA6IHIuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5ieXRlc1ZhbHVlKSA6IHQuYnl0ZXNWYWx1ZSwgci5vbmVvZnMgJiYgKG4udmFsdWUgPSBcImJ5dGVzVmFsdWVcIikpLCBuO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgdCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLkFycmF5VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jdGlvbiBpKG8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlcyA9IFtdLCBvKVxuICAgICAgICAgICAgICBmb3IgKHZhciBlID0gT2JqZWN0LmtleXMobyksIHQgPSAwOyB0IDwgZS5sZW5ndGg7ICsrdClcbiAgICAgICAgICAgICAgICBvW2VbdF1dICE9IG51bGwgJiYgKHRoaXNbZVt0XV0gPSBvW2VbdF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkucHJvdG90eXBlLnZhbHVlcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgaWYgKHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS52YWx1ZXMgIT0gbnVsbCAmJiBlLnZhbHVlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS52YWx1ZXMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZW5jb2RlKGUudmFsdWVzW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZSgpOyBlLnBvcyA8IHI7ICkge1xuICAgICAgICAgICAgICB2YXIgbCA9IGUudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAobCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgbi52YWx1ZXMgJiYgbi52YWx1ZXMubGVuZ3RoIHx8IChuLnZhbHVlcyA9IFtdKSwgbi52YWx1ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnZhbHVlcyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZXNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUudmFsdWVzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS52YWx1ZXMubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLnZlcmlmeShlLnZhbHVlc1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZXMuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUpXG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKGUudmFsdWVzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLnZhbHVlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUudmFsdWVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC52YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLnZhbHVlcy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS52YWx1ZXNbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlLnZhbHVlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHQudmFsdWVzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZnJvbU9iamVjdChlLnZhbHVlc1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIudmFsdWVzID0gW10pLCBlLnZhbHVlcyAmJiBlLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci52YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLnZhbHVlcy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLnZhbHVlc1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLnRvT2JqZWN0KGUudmFsdWVzW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWVcIjtcbiAgICAgICAgICB9LCBpO1xuICAgICAgICB9KCksIGYuS2V5VmFsdWVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZXMgPSBbXSwgbylcbiAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IE9iamVjdC5rZXlzKG8pLCB0ID0gMDsgdCA8IGUubGVuZ3RoOyArK3QpXG4gICAgICAgICAgICAgICAgb1tlW3RdXSAhPSBudWxsICYmICh0aGlzW2VbdF1dID0gb1tlW3RdXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnByb3RvdHlwZS52YWx1ZXMgPSAkdXRpbC5lbXB0eUFycmF5LCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGlmICh0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUudmFsdWVzICE9IG51bGwgJiYgZS52YWx1ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUudmFsdWVzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShlLnZhbHVlc1tyXSwgdC51aW50MzIoXG4gICAgICAgICAgICAgICAgICAvKiBpZCAxLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdCgpOyBlLnBvcyA8IHI7ICkge1xuICAgICAgICAgICAgICB2YXIgbCA9IGUudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAobCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgbi52YWx1ZXMgJiYgbi52YWx1ZXMubGVuZ3RoIHx8IChuLnZhbHVlcyA9IFtdKSwgbi52YWx1ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnZhbHVlcyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZXNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUudmFsdWVzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS52YWx1ZXMubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShlLnZhbHVlc1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZXMuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdClcbiAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICB2YXIgdCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QoKTtcbiAgICAgICAgICAgIGlmIChlLnZhbHVlcykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS52YWx1ZXMpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QudmFsdWVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC52YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLnZhbHVlcy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS52YWx1ZXNbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QudmFsdWVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC52YWx1ZXNbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KGUudmFsdWVzW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHQgfHwgKHQgPSB7fSk7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgaWYgKCh0LmFycmF5cyB8fCB0LmRlZmF1bHRzKSAmJiAoci52YWx1ZXMgPSBbXSksIGUudmFsdWVzICYmIGUudmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByLnZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGUudmFsdWVzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgIHIudmFsdWVzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudG9PYmplY3QoZS52YWx1ZXNbbl0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0XCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLktleVZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAobylcbiAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IE9iamVjdC5rZXlzKG8pLCB0ID0gMDsgdCA8IGUubGVuZ3RoOyArK3QpXG4gICAgICAgICAgICAgICAgb1tlW3RdXSAhPSBudWxsICYmICh0aGlzW2VbdF1dID0gb1tlW3RdXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnByb3RvdHlwZS5rZXkgPSBudWxsLCBpLnByb3RvdHlwZS52YWx1ZSA9IG51bGwsIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS5rZXkgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImtleVwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICkuc3RyaW5nKGUua2V5KSwgZS52YWx1ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwidmFsdWVcIikgJiYgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZW5jb2RlKGUudmFsdWUsIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAxOFxuICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUoKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4ua2V5ID0gZS5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgIG4udmFsdWUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGUuc2tpcFR5cGUobCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gbmV3ICRSZWFkZXIoZSkpLCB0aGlzLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8IGUgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUua2V5ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImtleVwiKSAmJiAhJHV0aWwuaXNTdHJpbmcoZS5rZXkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJrZXk6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUudmFsdWUgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwidmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgdmFyIHQgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS52ZXJpZnkoZS52YWx1ZSk7XG4gICAgICAgICAgICAgIGlmICh0KVxuICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlLlwiICsgdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUpXG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChlLmtleSAhPSBudWxsICYmICh0LmtleSA9IFN0cmluZyhlLmtleSkpLCBlLnZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnZhbHVlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZhbHVlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQudmFsdWUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5mcm9tT2JqZWN0KGUudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHQgfHwgKHQgPSB7fSk7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgcmV0dXJuIHQuZGVmYXVsdHMgJiYgKHIua2V5ID0gXCJcIiwgci52YWx1ZSA9IG51bGwpLCBlLmtleSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJrZXlcIikgJiYgKHIua2V5ID0gZS5rZXkpLCBlLnZhbHVlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpICYmIChyLnZhbHVlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUudG9PYmplY3QoZS52YWx1ZSwgdCkpLCByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLkluc3RydW1lbnRhdGlvblNjb3BlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUubmFtZSA9IG51bGwsIGkucHJvdG90eXBlLnZlcnNpb24gPSBudWxsLCBpLnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG51bGwsIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgaWYgKHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS5uYW1lICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJuYW1lXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgKS5zdHJpbmcoZS5uYW1lKSwgZS52ZXJzaW9uICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJ2ZXJzaW9uXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAxOFxuICAgICAgICAgICAgKS5zdHJpbmcoZS52ZXJzaW9uKSwgZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgZS5hdHRyaWJ1dGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZW5jb2RlKGUuYXR0cmlidXRlc1tyXSwgdC51aW50MzIoXG4gICAgICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgICAgMjZcbiAgICAgICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICByZXR1cm4gZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA0LCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICAzMlxuICAgICAgICAgICAgKS51aW50MzIoZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50KSwgdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLm5hbWUgPSBlLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgbi52ZXJzaW9uID0gZS5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgIG4uYXR0cmlidXRlcyAmJiBuLmF0dHJpYnV0ZXMubGVuZ3RoIHx8IChuLmF0dHJpYnV0ZXMgPSBbXSksIG4uYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICBuLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLm5hbWUgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwibmFtZVwiKSAmJiAhJHV0aWwuaXNTdHJpbmcoZS5uYW1lKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwibmFtZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS52ZXJzaW9uICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInZlcnNpb25cIikgJiYgISR1dGlsLmlzU3RyaW5nKGUudmVyc2lvbikpXG4gICAgICAgICAgICAgIHJldHVybiBcInZlcnNpb246IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUuYXR0cmlidXRlcyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkoZS5hdHRyaWJ1dGVzW3RdKTtcbiAgICAgICAgICAgICAgICBpZiAocilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikgJiYgISR1dGlsLmlzSW50ZWdlcihlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpID8gXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50OiBpbnRlZ2VyIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUpXG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUoKTtcbiAgICAgICAgICAgIGlmIChlLm5hbWUgIT0gbnVsbCAmJiAodC5uYW1lID0gU3RyaW5nKGUubmFtZSkpLCBlLnZlcnNpb24gIT0gbnVsbCAmJiAodC52ZXJzaW9uID0gU3RyaW5nKGUudmVyc2lvbikpLCBlLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuYXR0cmlidXRlc1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmF0dHJpYnV0ZXM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LmF0dHJpYnV0ZXNbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KGUuYXR0cmlidXRlc1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiAodC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID4+PiAwKSwgdDtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgdCB8fCAodCA9IHt9KTtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAoKHQuYXJyYXlzIHx8IHQuZGVmYXVsdHMpICYmIChyLmF0dHJpYnV0ZXMgPSBbXSksIHQuZGVmYXVsdHMgJiYgKHIubmFtZSA9IFwiXCIsIHIudmVyc2lvbiA9IFwiXCIsIHIuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IDApLCBlLm5hbWUgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwibmFtZVwiKSAmJiAoci5uYW1lID0gZS5uYW1lKSwgZS52ZXJzaW9uICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInZlcnNpb25cIikgJiYgKHIudmVyc2lvbiA9IGUudmVyc2lvbiksIGUuYXR0cmlidXRlcyAmJiBlLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGUuYXR0cmlidXRlcy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLmF0dHJpYnV0ZXNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdChlLmF0dHJpYnV0ZXNbbl0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpICYmIChyLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpLCByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmO1xuICAgICAgfSgpLCBjO1xuICAgIH0oKSwgdS5yZXNvdXJjZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGMgPSB7fTtcbiAgICAgIHJldHVybiBjLnYxID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmID0ge307XG4gICAgICAgIHJldHVybiBmLlJlc291cmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBudWxsLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGlmICh0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUuYXR0cmlidXRlcyAhPSBudWxsICYmIGUuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShlLmF0dHJpYnV0ZXNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgMTZcbiAgICAgICAgICAgICkudWludDMyKGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCksIHQ7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoZSwgdCkubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9ICRSZWFkZXIuY3JlYXRlKGUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSB0ID09PSB2b2lkIDAgPyBlLmxlbiA6IGUucG9zICsgdCwgbiA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLmF0dHJpYnV0ZXMgJiYgbi5hdHRyaWJ1dGVzLmxlbmd0aCB8fCAobi5hdHRyaWJ1dGVzID0gW10pLCBuLmF0dHJpYnV0ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgbi5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImF0dHJpYnV0ZXNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShlLmF0dHJpYnV0ZXNbdF0pO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlcy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCkgPyBcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IGludGVnZXIgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgfSwgaS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UoKTtcbiAgICAgICAgICAgIGlmIChlLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UuYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuYXR0cmlidXRlcy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5hdHRyaWJ1dGVzW3JdICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5hdHRyaWJ1dGVzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChlLmF0dHJpYnV0ZXNbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgKHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA+Pj4gMCksIHQ7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHQgfHwgKHQgPSB7fSk7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgaWYgKCh0LmFycmF5cyB8fCB0LmRlZmF1bHRzKSAmJiAoci5hdHRyaWJ1dGVzID0gW10pLCB0LmRlZmF1bHRzICYmIChyLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSAwKSwgZS5hdHRyaWJ1dGVzICYmIGUuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgIHIuYXR0cmlidXRlc1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KGUuYXR0cmlidXRlc1tuXSwgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikgJiYgKHIuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCksIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZVwiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZjtcbiAgICAgIH0oKSwgYztcbiAgICB9KCksIHUudHJhY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjID0ge307XG4gICAgICByZXR1cm4gYy52MSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZiA9IHt9O1xuICAgICAgICByZXR1cm4gZi5UcmFjZXNEYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZVNwYW5zID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUucmVzb3VyY2VTcGFucyA9ICR1dGlsLmVtcHR5QXJyYXksIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgaWYgKHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS5yZXNvdXJjZVNwYW5zICE9IG51bGwgJiYgZS5yZXNvdXJjZVNwYW5zLmxlbmd0aClcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLnJlc291cmNlU3BhbnMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLmVuY29kZShlLnJlc291cmNlU3BhbnNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoZSwgdCkubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9ICRSZWFkZXIuY3JlYXRlKGUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSB0ID09PSB2b2lkIDAgPyBlLmxlbiA6IGUucG9zICsgdCwgbiA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGEoKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4ucmVzb3VyY2VTcGFucyAmJiBuLnJlc291cmNlU3BhbnMubGVuZ3RoIHx8IChuLnJlc291cmNlU3BhbnMgPSBbXSksIG4ucmVzb3VyY2VTcGFucy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnJlc291cmNlU3BhbnMgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwicmVzb3VyY2VTcGFuc1wiKSkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5yZXNvdXJjZVNwYW5zKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZVNwYW5zOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IGUucmVzb3VyY2VTcGFucy5sZW5ndGg7ICsrdCkge1xuICAgICAgICAgICAgICAgIHZhciByID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnZlcmlmeShlLnJlc291cmNlU3BhbnNbdF0pO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VTcGFucy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YSgpO1xuICAgICAgICAgICAgaWYgKGUucmVzb3VyY2VTcGFucykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5yZXNvdXJjZVNwYW5zKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhLnJlc291cmNlU3BhbnM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LnJlc291cmNlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLnJlc291cmNlU3BhbnMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUucmVzb3VyY2VTcGFuc1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YS5yZXNvdXJjZVNwYW5zOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5yZXNvdXJjZVNwYW5zW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLmZyb21PYmplY3QoZS5yZXNvdXJjZVNwYW5zW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHQgfHwgKHQgPSB7fSk7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgaWYgKCh0LmFycmF5cyB8fCB0LmRlZmF1bHRzKSAmJiAoci5yZXNvdXJjZVNwYW5zID0gW10pLCBlLnJlc291cmNlU3BhbnMgJiYgZS5yZXNvdXJjZVNwYW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICByLnJlc291cmNlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLnJlc291cmNlU3BhbnMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgci5yZXNvdXJjZVNwYW5zW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnRvT2JqZWN0KGUucmVzb3VyY2VTcGFuc1tuXSwgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICB9LCBpLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgIH0sIGkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIGUgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGFcIjtcbiAgICAgICAgICB9LCBpO1xuICAgICAgICB9KCksIGYuUmVzb3VyY2VTcGFucyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkobykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2NvcGVTcGFucyA9IFtdLCBvKVxuICAgICAgICAgICAgICBmb3IgKHZhciBlID0gT2JqZWN0LmtleXMobyksIHQgPSAwOyB0IDwgZS5sZW5ndGg7ICsrdClcbiAgICAgICAgICAgICAgICBvW2VbdF1dICE9IG51bGwgJiYgKHRoaXNbZVt0XV0gPSBvW2VbdF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkucHJvdG90eXBlLnJlc291cmNlID0gbnVsbCwgaS5wcm90b3R5cGUuc2NvcGVTcGFucyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLnNjaGVtYVVybCA9IG51bGwsIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgaWYgKHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS5yZXNvdXJjZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwicmVzb3VyY2VcIikgJiYgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS5lbmNvZGUoZS5yZXNvdXJjZSwgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCksIGUuc2NvcGVTcGFucyAhPSBudWxsICYmIGUuc2NvcGVTcGFucy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5zY29wZVNwYW5zLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucy5lbmNvZGUoZS5zY29wZVNwYW5zW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxOFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwic2NoZW1hVXJsXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAyNlxuICAgICAgICAgICAgKS5zdHJpbmcoZS5zY2hlbWFVcmwpLCB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLnJlc291cmNlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBuLnNjb3BlU3BhbnMgJiYgbi5zY29wZVNwYW5zLmxlbmd0aCB8fCAobi5zY29wZVNwYW5zID0gW10pLCBuLnNjb3BlU3BhbnMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMuZGVjb2RlKGUsIGUudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgIG4uc2NoZW1hVXJsID0gZS5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5yZXNvdXJjZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZVwiKSkge1xuICAgICAgICAgICAgICB2YXIgdCA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UudmVyaWZ5KGUucmVzb3VyY2UpO1xuICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZS5cIiArIHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5zY29wZVNwYW5zICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlU3BhbnNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuc2NvcGVTcGFucykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2NvcGVTcGFuczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLnNjb3BlU3BhbnMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICB2YXIgdCA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucy52ZXJpZnkoZS5zY29wZVNwYW5zW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlU3BhbnMuXCIgKyB0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpICYmICEkdXRpbC5pc1N0cmluZyhlLnNjaGVtYVVybCkgPyBcInNjaGVtYVVybDogc3RyaW5nIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucygpO1xuICAgICAgICAgICAgaWYgKGUucmVzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGUucmVzb3VyY2UgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnJlc291cmNlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmZyb21PYmplY3QoZS5yZXNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5zY29wZVNwYW5zKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLnNjb3BlU3BhbnMpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMuc2NvcGVTcGFuczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQuc2NvcGVTcGFucyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuc2NvcGVTcGFucy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5zY29wZVNwYW5zW3JdICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnNjb3BlU3BhbnM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LnNjb3BlU3BhbnNbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMuZnJvbU9iamVjdChlLnNjb3BlU3BhbnNbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiAodC5zY2hlbWFVcmwgPSBTdHJpbmcoZS5zY2hlbWFVcmwpKSwgdDtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgdCB8fCAodCA9IHt9KTtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAoKHQuYXJyYXlzIHx8IHQuZGVmYXVsdHMpICYmIChyLnNjb3BlU3BhbnMgPSBbXSksIHQuZGVmYXVsdHMgJiYgKHIucmVzb3VyY2UgPSBudWxsLCByLnNjaGVtYVVybCA9IFwiXCIpLCBlLnJlc291cmNlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlXCIpICYmIChyLnJlc291cmNlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS50b09iamVjdChlLnJlc291cmNlLCB0KSksIGUuc2NvcGVTcGFucyAmJiBlLnNjb3BlU3BhbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIuc2NvcGVTcGFucyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGUuc2NvcGVTcGFucy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLnNjb3BlU3BhbnNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMudG9PYmplY3QoZS5zY29wZVNwYW5zW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikgJiYgKHIuc2NoZW1hVXJsID0gZS5zY2hlbWFVcmwpLCByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFuc1wiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZi5TY29wZVNwYW5zID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zcGFucyA9IFtdLCBvKVxuICAgICAgICAgICAgICBmb3IgKHZhciBlID0gT2JqZWN0LmtleXMobyksIHQgPSAwOyB0IDwgZS5sZW5ndGg7ICsrdClcbiAgICAgICAgICAgICAgICBvW2VbdF1dICE9IG51bGwgJiYgKHRoaXNbZVt0XV0gPSBvW2VbdF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkucHJvdG90eXBlLnNjb3BlID0gbnVsbCwgaS5wcm90b3R5cGUuc3BhbnMgPSAkdXRpbC5lbXB0eUFycmF5LCBpLnByb3RvdHlwZS5zY2hlbWFVcmwgPSBudWxsLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGlmICh0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUuc2NvcGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInNjb3BlXCIpICYmICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmVuY29kZShlLnNjb3BlLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKSwgZS5zcGFucyAhPSBudWxsICYmIGUuc3BhbnMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuc3BhbnMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLmVuY29kZShlLnNwYW5zW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxOFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwic2NoZW1hVXJsXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAyNlxuICAgICAgICAgICAgKS5zdHJpbmcoZS5zY2hlbWFVcmwpLCB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLnNjb3BlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgbi5zcGFucyAmJiBuLnNwYW5zLmxlbmd0aCB8fCAobi5zcGFucyA9IFtdKSwgbi5zcGFucy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgbi5zY2hlbWFVcmwgPSBlLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnNjb3BlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlXCIpKSB7XG4gICAgICAgICAgICAgIHZhciB0ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUudmVyaWZ5KGUuc2NvcGUpO1xuICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzY29wZS5cIiArIHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5zcGFucyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzcGFuc1wiKSkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5zcGFucykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic3BhbnM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5zcGFucy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIHZhciB0ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLnZlcmlmeShlLnNwYW5zW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInNwYW5zLlwiICsgdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuc2NoZW1hVXJsICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSAmJiAhJHV0aWwuaXNTdHJpbmcoZS5zY2hlbWFVcmwpID8gXCJzY2hlbWFVcmw6IHN0cmluZyBleHBlY3RlZFwiIDogbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucylcbiAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICB2YXIgdCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMoKTtcbiAgICAgICAgICAgIGlmIChlLnNjb3BlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnNjb3BlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucy5zY29wZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LnNjb3BlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUuZnJvbU9iamVjdChlLnNjb3BlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnNwYW5zKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLnNwYW5zKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zLnNwYW5zOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5zcGFucyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuc3BhbnMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuc3BhbnNbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMuc3BhbnM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LnNwYW5zW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLmZyb21PYmplY3QoZS5zcGFuc1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmICh0LnNjaGVtYVVybCA9IFN0cmluZyhlLnNjaGVtYVVybCkpLCB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIuc3BhbnMgPSBbXSksIHQuZGVmYXVsdHMgJiYgKHIuc2NvcGUgPSBudWxsLCByLnNjaGVtYVVybCA9IFwiXCIpLCBlLnNjb3BlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlXCIpICYmIChyLnNjb3BlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUudG9PYmplY3QoZS5zY29wZSwgdCkpLCBlLnNwYW5zICYmIGUuc3BhbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIuc3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLnNwYW5zLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgIHIuc3BhbnNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4udG9PYmplY3QoZS5zcGFuc1tuXSwgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpICYmIChyLnNjaGVtYVVybCA9IGUuc2NoZW1hVXJsKSwgcjtcbiAgICAgICAgICB9LCBpLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgIH0sIGkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIGUgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnNcIjtcbiAgICAgICAgICB9LCBpO1xuICAgICAgICB9KCksIGYuU3BhbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkobykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcyA9IFtdLCB0aGlzLmV2ZW50cyA9IFtdLCB0aGlzLmxpbmtzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUudHJhY2VJZCA9IG51bGwsIGkucHJvdG90eXBlLnNwYW5JZCA9IG51bGwsIGkucHJvdG90eXBlLnRyYWNlU3RhdGUgPSBudWxsLCBpLnByb3RvdHlwZS5wYXJlbnRTcGFuSWQgPSBudWxsLCBpLnByb3RvdHlwZS5uYW1lID0gbnVsbCwgaS5wcm90b3R5cGUua2luZCA9IG51bGwsIGkucHJvdG90eXBlLnN0YXJ0VGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUuZW5kVGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBudWxsLCBpLnByb3RvdHlwZS5ldmVudHMgPSAkdXRpbC5lbXB0eUFycmF5LCBpLnByb3RvdHlwZS5kcm9wcGVkRXZlbnRzQ291bnQgPSBudWxsLCBpLnByb3RvdHlwZS5saW5rcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLmRyb3BwZWRMaW5rc0NvdW50ID0gbnVsbCwgaS5wcm90b3R5cGUuc3RhdHVzID0gbnVsbCwgaS5jcmVhdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBpZiAodCB8fCAodCA9ICRXcml0ZXIuY3JlYXRlKCkpLCBlLnRyYWNlSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInRyYWNlSWRcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICApLmJ5dGVzKGUudHJhY2VJZCksIGUuc3BhbklkICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJzcGFuSWRcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDE4XG4gICAgICAgICAgICApLmJ5dGVzKGUuc3BhbklkKSwgZS50cmFjZVN0YXRlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJ0cmFjZVN0YXRlXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAyNlxuICAgICAgICAgICAgKS5zdHJpbmcoZS50cmFjZVN0YXRlKSwgZS5wYXJlbnRTcGFuSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInBhcmVudFNwYW5JZFwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgNCwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMzRcbiAgICAgICAgICAgICkuYnl0ZXMoZS5wYXJlbnRTcGFuSWQpLCBlLm5hbWUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcIm5hbWVcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDUsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDQyXG4gICAgICAgICAgICApLnN0cmluZyhlLm5hbWUpLCBlLmtpbmQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImtpbmRcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDYsIHdpcmVUeXBlIDAgPSovXG4gICAgICAgICAgICAgIDQ4XG4gICAgICAgICAgICApLmludDMyKGUua2luZCksIGUuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA3LCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICA1N1xuICAgICAgICAgICAgKS5maXhlZDY0KGUuc3RhcnRUaW1lVW5peE5hbm8pLCBlLmVuZFRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiZW5kVGltZVVuaXhOYW5vXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA4LCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICA2NVxuICAgICAgICAgICAgKS5maXhlZDY0KGUuZW5kVGltZVVuaXhOYW5vKSwgZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgZS5hdHRyaWJ1dGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZW5jb2RlKGUuYXR0cmlidXRlc1tyXSwgdC51aW50MzIoXG4gICAgICAgICAgICAgICAgICAvKiBpZCA5LCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgICAgNzRcbiAgICAgICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICBpZiAoZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxMCwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgODBcbiAgICAgICAgICAgICkudWludDMyKGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCksIGUuZXZlbnRzICE9IG51bGwgJiYgZS5ldmVudHMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuZXZlbnRzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudC5lbmNvZGUoZS5ldmVudHNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMTEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICA5MFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIGlmIChlLmRyb3BwZWRFdmVudHNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiZHJvcHBlZEV2ZW50c0NvdW50XCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxMiwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgOTZcbiAgICAgICAgICAgICkudWludDMyKGUuZHJvcHBlZEV2ZW50c0NvdW50KSwgZS5saW5rcyAhPSBudWxsICYmIGUubGlua3MubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUubGlua3MubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsuZW5jb2RlKGUubGlua3Nbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMTMsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxMDZcbiAgICAgICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICByZXR1cm4gZS5kcm9wcGVkTGlua3NDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiZHJvcHBlZExpbmtzQ291bnRcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDE0LCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICAxMTJcbiAgICAgICAgICAgICkudWludDMyKGUuZHJvcHBlZExpbmtzQ291bnQpLCBlLnN0YXR1cyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwic3RhdHVzXCIpICYmICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLmVuY29kZShlLnN0YXR1cywgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDE1LCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAxMjJcbiAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKSwgdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhbigpOyBlLnBvcyA8IHI7ICkge1xuICAgICAgICAgICAgICB2YXIgbCA9IGUudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAobCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgbi50cmFjZUlkID0gZS5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgbi5zcGFuSWQgPSBlLmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICBuLnRyYWNlU3RhdGUgPSBlLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgbi5wYXJlbnRTcGFuSWQgPSBlLmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICBuLm5hbWUgPSBlLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNjoge1xuICAgICAgICAgICAgICAgICAgbi5raW5kID0gZS5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgbi5zdGFydFRpbWVVbml4TmFubyA9IGUuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgODoge1xuICAgICAgICAgICAgICAgICAgbi5lbmRUaW1lVW5peE5hbm8gPSBlLmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDk6IHtcbiAgICAgICAgICAgICAgICAgIG4uYXR0cmlidXRlcyAmJiBuLmF0dHJpYnV0ZXMubGVuZ3RoIHx8IChuLmF0dHJpYnV0ZXMgPSBbXSksIG4uYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAxMDoge1xuICAgICAgICAgICAgICAgICAgbi5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDExOiB7XG4gICAgICAgICAgICAgICAgICBuLmV2ZW50cyAmJiBuLmV2ZW50cy5sZW5ndGggfHwgKG4uZXZlbnRzID0gW10pLCBuLmV2ZW50cy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudC5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMTI6IHtcbiAgICAgICAgICAgICAgICAgIG4uZHJvcHBlZEV2ZW50c0NvdW50ID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDEzOiB7XG4gICAgICAgICAgICAgICAgICBuLmxpbmtzICYmIG4ubGlua3MubGVuZ3RoIHx8IChuLmxpbmtzID0gW10pLCBuLmxpbmtzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsuZGVjb2RlKGUsIGUudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDE0OiB7XG4gICAgICAgICAgICAgICAgICBuLmRyb3BwZWRMaW5rc0NvdW50ID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDE1OiB7XG4gICAgICAgICAgICAgICAgICBuLnN0YXR1cyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS50cmFjZUlkICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInRyYWNlSWRcIikgJiYgIShlLnRyYWNlSWQgJiYgdHlwZW9mIGUudHJhY2VJZC5sZW5ndGggPT0gXCJudW1iZXJcIiB8fCAkdXRpbC5pc1N0cmluZyhlLnRyYWNlSWQpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwidHJhY2VJZDogYnVmZmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5zcGFuSWQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic3BhbklkXCIpICYmICEoZS5zcGFuSWQgJiYgdHlwZW9mIGUuc3BhbklkLmxlbmd0aCA9PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKGUuc3BhbklkKSkpXG4gICAgICAgICAgICAgIHJldHVybiBcInNwYW5JZDogYnVmZmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS50cmFjZVN0YXRlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInRyYWNlU3RhdGVcIikgJiYgISR1dGlsLmlzU3RyaW5nKGUudHJhY2VTdGF0ZSkpXG4gICAgICAgICAgICAgIHJldHVybiBcInRyYWNlU3RhdGU6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUucGFyZW50U3BhbklkICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInBhcmVudFNwYW5JZFwiKSAmJiAhKGUucGFyZW50U3BhbklkICYmIHR5cGVvZiBlLnBhcmVudFNwYW5JZC5sZW5ndGggPT0gXCJudW1iZXJcIiB8fCAkdXRpbC5pc1N0cmluZyhlLnBhcmVudFNwYW5JZCkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJwYXJlbnRTcGFuSWQ6IGJ1ZmZlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUubmFtZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpICYmICEkdXRpbC5pc1N0cmluZyhlLm5hbWUpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJuYW1lOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLmtpbmQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwia2luZFwiKSlcbiAgICAgICAgICAgICAgc3dpdGNoIChlLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwia2luZDogZW51bSB2YWx1ZSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5zdGFydFRpbWVVbml4TmFubykgJiYgIShlLnN0YXJ0VGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcihlLnN0YXJ0VGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKGUuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJzdGFydFRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5lbmRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiZW5kVGltZVVuaXhOYW5vXCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5lbmRUaW1lVW5peE5hbm8pICYmICEoZS5lbmRUaW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKGUuZW5kVGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKGUuZW5kVGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwiZW5kVGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiYXR0cmlidXRlc1wiKSkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IGUuYXR0cmlidXRlcy5sZW5ndGg7ICsrdCkge1xuICAgICAgICAgICAgICAgIHZhciByID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5KGUuYXR0cmlidXRlc1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzLlwiICsgcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50KSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUuZXZlbnRzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImV2ZW50c1wiKSkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5ldmVudHMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImV2ZW50czogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCBlLmV2ZW50cy5sZW5ndGg7ICsrdCkge1xuICAgICAgICAgICAgICAgIHZhciByID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50LnZlcmlmeShlLmV2ZW50c1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJldmVudHMuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5kcm9wcGVkRXZlbnRzQ291bnQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiZHJvcHBlZEV2ZW50c0NvdW50XCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5kcm9wcGVkRXZlbnRzQ291bnQpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJkcm9wcGVkRXZlbnRzQ291bnQ6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLmxpbmtzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImxpbmtzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmxpbmtzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJsaW5rczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCBlLmxpbmtzLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluay52ZXJpZnkoZS5saW5rc1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJsaW5rcy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmRyb3BwZWRMaW5rc0NvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRMaW5rc0NvdW50XCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5kcm9wcGVkTGlua3NDb3VudCkpXG4gICAgICAgICAgICAgIHJldHVybiBcImRyb3BwZWRMaW5rc0NvdW50OiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5zdGF0dXMgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic3RhdHVzXCIpKSB7XG4gICAgICAgICAgICAgIHZhciByID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXMudmVyaWZ5KGUuc3RhdHVzKTtcbiAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic3RhdHVzLlwiICsgcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhbigpO1xuICAgICAgICAgICAgc3dpdGNoIChlLnRyYWNlSWQgIT0gbnVsbCAmJiAodHlwZW9mIGUudHJhY2VJZCA9PSBcInN0cmluZ1wiID8gJHV0aWwuYmFzZTY0LmRlY29kZShlLnRyYWNlSWQsIHQudHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKGUudHJhY2VJZCkpLCAwKSA6IGUudHJhY2VJZC5sZW5ndGggPj0gMCAmJiAodC50cmFjZUlkID0gZS50cmFjZUlkKSksIGUuc3BhbklkICE9IG51bGwgJiYgKHR5cGVvZiBlLnNwYW5JZCA9PSBcInN0cmluZ1wiID8gJHV0aWwuYmFzZTY0LmRlY29kZShlLnNwYW5JZCwgdC5zcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIoJHV0aWwuYmFzZTY0Lmxlbmd0aChlLnNwYW5JZCkpLCAwKSA6IGUuc3BhbklkLmxlbmd0aCA+PSAwICYmICh0LnNwYW5JZCA9IGUuc3BhbklkKSksIGUudHJhY2VTdGF0ZSAhPSBudWxsICYmICh0LnRyYWNlU3RhdGUgPSBTdHJpbmcoZS50cmFjZVN0YXRlKSksIGUucGFyZW50U3BhbklkICE9IG51bGwgJiYgKHR5cGVvZiBlLnBhcmVudFNwYW5JZCA9PSBcInN0cmluZ1wiID8gJHV0aWwuYmFzZTY0LmRlY29kZShlLnBhcmVudFNwYW5JZCwgdC5wYXJlbnRTcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIoJHV0aWwuYmFzZTY0Lmxlbmd0aChlLnBhcmVudFNwYW5JZCkpLCAwKSA6IGUucGFyZW50U3BhbklkLmxlbmd0aCA+PSAwICYmICh0LnBhcmVudFNwYW5JZCA9IGUucGFyZW50U3BhbklkKSksIGUubmFtZSAhPSBudWxsICYmICh0Lm5hbWUgPSBTdHJpbmcoZS5uYW1lKSksIGUua2luZCkge1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5raW5kID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgIHQua2luZCA9IGUua2luZDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNQQU5fS0lORF9VTlNQRUNJRklFRFwiOlxuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgdC5raW5kID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNQQU5fS0lORF9JTlRFUk5BTFwiOlxuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdC5raW5kID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNQQU5fS0lORF9TRVJWRVJcIjpcbiAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHQua2luZCA9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTUEFOX0tJTkRfQ0xJRU5UXCI6XG4gICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICB0LmtpbmQgPSAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU1BBTl9LSU5EX1BST0RVQ0VSXCI6XG4gICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICB0LmtpbmQgPSA0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU1BBTl9LSU5EX0NPTlNVTUVSXCI6XG4gICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICB0LmtpbmQgPSA1O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/ICh0LnN0YXJ0VGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUoZS5zdGFydFRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgZS5zdGFydFRpbWVVbml4TmFubyA9PSBcInN0cmluZ1wiID8gdC5zdGFydFRpbWVVbml4TmFubyA9IHBhcnNlSW50KGUuc3RhcnRUaW1lVW5peE5hbm8sIDEwKSA6IHR5cGVvZiBlLnN0YXJ0VGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyB0LnN0YXJ0VGltZVVuaXhOYW5vID0gZS5zdGFydFRpbWVVbml4TmFubyA6IHR5cGVvZiBlLnN0YXJ0VGltZVVuaXhOYW5vID09IFwib2JqZWN0XCIgJiYgKHQuc3RhcnRUaW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMoZS5zdGFydFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIGUuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCBlLmVuZFRpbWVVbml4TmFubyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHQuZW5kVGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUoZS5lbmRUaW1lVW5peE5hbm8pKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIGUuZW5kVGltZVVuaXhOYW5vID09IFwic3RyaW5nXCIgPyB0LmVuZFRpbWVVbml4TmFubyA9IHBhcnNlSW50KGUuZW5kVGltZVVuaXhOYW5vLCAxMCkgOiB0eXBlb2YgZS5lbmRUaW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHQuZW5kVGltZVVuaXhOYW5vID0gZS5lbmRUaW1lVW5peE5hbm8gOiB0eXBlb2YgZS5lbmRUaW1lVW5peE5hbm8gPT0gXCJvYmplY3RcIiAmJiAodC5lbmRUaW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMoZS5lbmRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBlLmVuZFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpKSksIGUuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuYXR0cmlidXRlc1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5hdHRyaWJ1dGVzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChlLmF0dHJpYnV0ZXNbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgKHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA+Pj4gMCksIGUuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmV2ZW50cykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5ldmVudHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LmV2ZW50cyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuZXZlbnRzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLmV2ZW50c1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5ldmVudHM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LmV2ZW50c1tyXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudC5mcm9tT2JqZWN0KGUuZXZlbnRzW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuZHJvcHBlZEV2ZW50c0NvdW50ICE9IG51bGwgJiYgKHQuZHJvcHBlZEV2ZW50c0NvdW50ID0gZS5kcm9wcGVkRXZlbnRzQ291bnQgPj4+IDApLCBlLmxpbmtzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmxpbmtzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLmxpbmtzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5saW5rcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUubGlua3MubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUubGlua3Nbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4ubGlua3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LmxpbmtzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsuZnJvbU9iamVjdChlLmxpbmtzW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuZHJvcHBlZExpbmtzQ291bnQgIT0gbnVsbCAmJiAodC5kcm9wcGVkTGlua3NDb3VudCA9IGUuZHJvcHBlZExpbmtzQ291bnQgPj4+IDApLCBlLnN0YXR1cyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5zdGF0dXMgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLnN0YXR1czogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LnN0YXR1cyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLmZyb21PYmplY3QoZS5zdGF0dXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHQgfHwgKHQgPSB7fSk7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgaWYgKCh0LmFycmF5cyB8fCB0LmRlZmF1bHRzKSAmJiAoci5hdHRyaWJ1dGVzID0gW10sIHIuZXZlbnRzID0gW10sIHIubGlua3MgPSBbXSksIHQuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgaWYgKHQuYnl0ZXMgPT09IFN0cmluZyA/IHIudHJhY2VJZCA9IFwiXCIgOiAoci50cmFjZUlkID0gW10sIHQuYnl0ZXMgIT09IEFycmF5ICYmIChyLnRyYWNlSWQgPSAkdXRpbC5uZXdCdWZmZXIoci50cmFjZUlkKSkpLCB0LmJ5dGVzID09PSBTdHJpbmcgPyByLnNwYW5JZCA9IFwiXCIgOiAoci5zcGFuSWQgPSBbXSwgdC5ieXRlcyAhPT0gQXJyYXkgJiYgKHIuc3BhbklkID0gJHV0aWwubmV3QnVmZmVyKHIuc3BhbklkKSkpLCByLnRyYWNlU3RhdGUgPSBcIlwiLCB0LmJ5dGVzID09PSBTdHJpbmcgPyByLnBhcmVudFNwYW5JZCA9IFwiXCIgOiAoci5wYXJlbnRTcGFuSWQgPSBbXSwgdC5ieXRlcyAhPT0gQXJyYXkgJiYgKHIucGFyZW50U3BhbklkID0gJHV0aWwubmV3QnVmZmVyKHIucGFyZW50U3BhbklkKSkpLCByLm5hbWUgPSBcIlwiLCByLmtpbmQgPSB0LmVudW1zID09PSBTdHJpbmcgPyBcIlNQQU5fS0lORF9VTlNQRUNJRklFRFwiIDogMCwgJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgITEpO1xuICAgICAgICAgICAgICAgIHIuc3RhcnRUaW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBuLnRvU3RyaW5nKCkgOiB0LmxvbmdzID09PSBOdW1iZXIgPyBuLnRvTnVtYmVyKCkgOiBuO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByLnN0YXJ0VGltZVVuaXhOYW5vID0gdC5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgITEpO1xuICAgICAgICAgICAgICAgIHIuZW5kVGltZVVuaXhOYW5vID0gdC5sb25ncyA9PT0gU3RyaW5nID8gbi50b1N0cmluZygpIDogdC5sb25ncyA9PT0gTnVtYmVyID8gbi50b051bWJlcigpIDogbjtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgci5lbmRUaW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgIHIuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IDAsIHIuZHJvcHBlZEV2ZW50c0NvdW50ID0gMCwgci5kcm9wcGVkTGlua3NDb3VudCA9IDAsIHIuc3RhdHVzID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnRyYWNlSWQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSAmJiAoci50cmFjZUlkID0gdC5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZShlLnRyYWNlSWQsIDAsIGUudHJhY2VJZC5sZW5ndGgpIDogdC5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLnRyYWNlSWQpIDogZS50cmFjZUlkKSwgZS5zcGFuSWQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic3BhbklkXCIpICYmIChyLnNwYW5JZCA9IHQuYnl0ZXMgPT09IFN0cmluZyA/ICR1dGlsLmJhc2U2NC5lbmNvZGUoZS5zcGFuSWQsIDAsIGUuc3BhbklkLmxlbmd0aCkgOiB0LmJ5dGVzID09PSBBcnJheSA/IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuc3BhbklkKSA6IGUuc3BhbklkKSwgZS50cmFjZVN0YXRlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInRyYWNlU3RhdGVcIikgJiYgKHIudHJhY2VTdGF0ZSA9IGUudHJhY2VTdGF0ZSksIGUucGFyZW50U3BhbklkICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInBhcmVudFNwYW5JZFwiKSAmJiAoci5wYXJlbnRTcGFuSWQgPSB0LmJ5dGVzID09PSBTdHJpbmcgPyAkdXRpbC5iYXNlNjQuZW5jb2RlKGUucGFyZW50U3BhbklkLCAwLCBlLnBhcmVudFNwYW5JZC5sZW5ndGgpIDogdC5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLnBhcmVudFNwYW5JZCkgOiBlLnBhcmVudFNwYW5JZCksIGUubmFtZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpICYmIChyLm5hbWUgPSBlLm5hbWUpLCBlLmtpbmQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwia2luZFwiKSAmJiAoci5raW5kID0gdC5lbnVtcyA9PT0gU3RyaW5nID8gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLlNwYW5LaW5kW2Uua2luZF0gPT09IHZvaWQgMCA/IGUua2luZCA6ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5TcGFuS2luZFtlLmtpbmRdIDogZS5raW5kKSwgZS5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSAmJiAodHlwZW9mIGUuc3RhcnRUaW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHIuc3RhcnRUaW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcoZS5zdGFydFRpbWVVbml4TmFubykgOiBlLnN0YXJ0VGltZVVuaXhOYW5vIDogci5zdGFydFRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZS5zdGFydFRpbWVVbml4TmFubykgOiB0LmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMoZS5zdGFydFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIGUuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IGUuc3RhcnRUaW1lVW5peE5hbm8pLCBlLmVuZFRpbWVVbml4TmFubyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJlbmRUaW1lVW5peE5hbm9cIikgJiYgKHR5cGVvZiBlLmVuZFRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gci5lbmRUaW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcoZS5lbmRUaW1lVW5peE5hbm8pIDogZS5lbmRUaW1lVW5peE5hbm8gOiByLmVuZFRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZS5lbmRUaW1lVW5peE5hbm8pIDogdC5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKGUuZW5kVGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgZS5lbmRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IGUuZW5kVGltZVVuaXhOYW5vKSwgZS5hdHRyaWJ1dGVzICYmIGUuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytsKVxuICAgICAgICAgICAgICAgIHIuYXR0cmlidXRlc1tsXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KGUuYXR0cmlidXRlc1tsXSwgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikgJiYgKHIuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCksIGUuZXZlbnRzICYmIGUuZXZlbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByLmV2ZW50cyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGUuZXZlbnRzLmxlbmd0aDsgKytsKVxuICAgICAgICAgICAgICAgIHIuZXZlbnRzW2xdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50LnRvT2JqZWN0KGUuZXZlbnRzW2xdLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmRyb3BwZWRFdmVudHNDb3VudCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkRXZlbnRzQ291bnRcIikgJiYgKHIuZHJvcHBlZEV2ZW50c0NvdW50ID0gZS5kcm9wcGVkRXZlbnRzQ291bnQpLCBlLmxpbmtzICYmIGUubGlua3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIubGlua3MgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBlLmxpbmtzLmxlbmd0aDsgKytsKVxuICAgICAgICAgICAgICAgIHIubGlua3NbbF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluay50b09iamVjdChlLmxpbmtzW2xdLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmRyb3BwZWRMaW5rc0NvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRMaW5rc0NvdW50XCIpICYmIChyLmRyb3BwZWRMaW5rc0NvdW50ID0gZS5kcm9wcGVkTGlua3NDb3VudCksIGUuc3RhdHVzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInN0YXR1c1wiKSAmJiAoci5zdGF0dXMgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1cy50b09iamVjdChlLnN0YXR1cywgdCkpLCByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblwiO1xuICAgICAgICAgIH0sIGkuU3BhbktpbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBvID0ge30sIGUgPSBPYmplY3QuY3JlYXRlKG8pO1xuICAgICAgICAgICAgcmV0dXJuIGVbb1swXSA9IFwiU1BBTl9LSU5EX1VOU1BFQ0lGSUVEXCJdID0gMCwgZVtvWzFdID0gXCJTUEFOX0tJTkRfSU5URVJOQUxcIl0gPSAxLCBlW29bMl0gPSBcIlNQQU5fS0lORF9TRVJWRVJcIl0gPSAyLCBlW29bM10gPSBcIlNQQU5fS0lORF9DTElFTlRcIl0gPSAzLCBlW29bNF0gPSBcIlNQQU5fS0lORF9QUk9EVUNFUlwiXSA9IDQsIGVbb1s1XSA9IFwiU1BBTl9LSU5EX0NPTlNVTUVSXCJdID0gNSwgZTtcbiAgICAgICAgICB9KCksIGkuRXZlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIG8oZSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVzID0gW10sIGUpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IE9iamVjdC5rZXlzKGUpLCByID0gMDsgciA8IHQubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgICBlW3Rbcl1dICE9IG51bGwgJiYgKHRoaXNbdFtyXV0gPSBlW3Rbcl1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvLnByb3RvdHlwZS50aW1lVW5peE5hbm8gPSBudWxsLCBvLnByb3RvdHlwZS5uYW1lID0gbnVsbCwgby5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXksIG8ucHJvdG90eXBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBudWxsLCBvLmNyZWF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBvKHQpO1xuICAgICAgICAgICAgfSwgby5lbmNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIGlmIChyIHx8IChyID0gJFdyaXRlci5jcmVhdGUoKSksIHQudGltZVVuaXhOYW5vICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJ0aW1lVW5peE5hbm9cIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgICA5XG4gICAgICAgICAgICAgICkuZml4ZWQ2NCh0LnRpbWVVbml4TmFubyksIHQubmFtZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwibmFtZVwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgIDE4XG4gICAgICAgICAgICAgICkuc3RyaW5nKHQubmFtZSksIHQuYXR0cmlidXRlcyAhPSBudWxsICYmIHQuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUodC5hdHRyaWJ1dGVzW25dLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAgICAgLyogaWQgMywgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgICAgMjZcbiAgICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCA0LCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICAgIDMyXG4gICAgICAgICAgICAgICkudWludDMyKHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCksIHI7XG4gICAgICAgICAgICB9LCBvLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHQsIHIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgfSwgby5kZWNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gJFJlYWRlci5jcmVhdGUodCkpO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gciA9PT0gdm9pZCAwID8gdC5sZW4gOiB0LnBvcyArIHIsIGwgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50KCk7IHQucG9zIDwgbjsgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSB0LnVpbnQzMigpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocCA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgIGwudGltZVVuaXhOYW5vID0gdC5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgIGwubmFtZSA9IHQuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgIGwuYXR0cmlidXRlcyAmJiBsLmF0dHJpYnV0ZXMubGVuZ3RoIHx8IChsLmF0dHJpYnV0ZXMgPSBbXSksIGwuYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZSh0LCB0LnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICAgIGwuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdC5za2lwVHlwZShwICYgNyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSBuZXcgJFJlYWRlcih0KSksIHRoaXMuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgfSwgby52ZXJpZnkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGlmICh0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikgJiYgISR1dGlsLmlzSW50ZWdlcih0LnRpbWVVbml4TmFubykgJiYgISh0LnRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIodC50aW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIodC50aW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGlmICh0Lm5hbWUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwibmFtZVwiKSAmJiAhJHV0aWwuaXNTdHJpbmcodC5uYW1lKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJuYW1lOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgaWYgKHQuYXR0cmlidXRlcyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbiA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeSh0LmF0dHJpYnV0ZXNbcl0pO1xuICAgICAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikgJiYgISR1dGlsLmlzSW50ZWdlcih0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpID8gXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50OiBpbnRlZ2VyIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgICAgfSwgby5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudClcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgdmFyIHIgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50KCk7XG4gICAgICAgICAgICAgIGlmICh0LnRpbWVVbml4TmFubyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIudGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC50aW1lVW5peE5hbm8pKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIHQudGltZVVuaXhOYW5vID09IFwic3RyaW5nXCIgPyByLnRpbWVVbml4TmFubyA9IHBhcnNlSW50KHQudGltZVVuaXhOYW5vLCAxMCkgOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHIudGltZVVuaXhOYW5vID0gdC50aW1lVW5peE5hbm8gOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJvYmplY3RcIiAmJiAoci50aW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHModC50aW1lVW5peE5hbm8ubG93ID4+PiAwLCB0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQubmFtZSAhPSBudWxsICYmIChyLm5hbWUgPSBTdHJpbmcodC5uYW1lKSksIHQuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudC5hdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICByLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0LmF0dHJpYnV0ZXNbbl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudC5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICByLmF0dHJpYnV0ZXNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KHQuYXR0cmlidXRlc1tuXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiAoci5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID4+PiAwKSwgcjtcbiAgICAgICAgICAgIH0sIG8udG9PYmplY3QgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICAgIGlmICgoci5hcnJheXMgfHwgci5kZWZhdWx0cykgJiYgKG4uYXR0cmlidXRlcyA9IFtdKSwgci5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICAgIG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gbC50b1N0cmluZygpIDogci5sb25ncyA9PT0gTnVtYmVyID8gbC50b051bWJlcigpIDogbDtcbiAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgIG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgIG4ubmFtZSA9IFwiXCIsIG4uZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHQudGltZVVuaXhOYW5vICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSAmJiAodHlwZW9mIHQudGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyh0LnRpbWVVbml4TmFubykgOiB0LnRpbWVVbml4TmFubyA6IG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0LnRpbWVVbml4TmFubykgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC50aW1lVW5peE5hbm8ubG93ID4+PiAwLCB0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogdC50aW1lVW5peE5hbm8pLCB0Lm5hbWUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwibmFtZVwiKSAmJiAobi5uYW1lID0gdC5uYW1lKSwgdC5hdHRyaWJ1dGVzICYmIHQuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBuLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrcClcbiAgICAgICAgICAgICAgICAgIG4uYXR0cmlidXRlc1twXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KHQuYXR0cmlidXRlc1twXSwgcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpICYmIChuLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSB0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpLCBuO1xuICAgICAgICAgICAgfSwgby5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgfSwgby5nZXRUeXBlVXJsID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCA9PT0gdm9pZCAwICYmICh0ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCB0ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50XCI7XG4gICAgICAgICAgICB9LCBvO1xuICAgICAgICAgIH0oKSwgaS5MaW5rID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBvKGUpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcyA9IFtdLCBlKVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhlKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICAgZVt0W3JdXSAhPSBudWxsICYmICh0aGlzW3Rbcl1dID0gZVt0W3JdXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gby5wcm90b3R5cGUudHJhY2VJZCA9IG51bGwsIG8ucHJvdG90eXBlLnNwYW5JZCA9IG51bGwsIG8ucHJvdG90eXBlLnRyYWNlU3RhdGUgPSBudWxsLCBvLnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheSwgby5wcm90b3R5cGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG51bGwsIG8uY3JlYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IG8odCk7XG4gICAgICAgICAgICB9LCBvLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgaWYgKHIgfHwgKHIgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgdC50cmFjZUlkICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJ0cmFjZUlkXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICAgKS5ieXRlcyh0LnRyYWNlSWQpLCB0LnNwYW5JZCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwic3BhbklkXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgMThcbiAgICAgICAgICAgICAgKS5ieXRlcyh0LnNwYW5JZCksIHQudHJhY2VTdGF0ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwidHJhY2VTdGF0ZVwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgIDI2XG4gICAgICAgICAgICAgICkuc3RyaW5nKHQudHJhY2VTdGF0ZSksIHQuYXR0cmlidXRlcyAhPSBudWxsICYmIHQuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUodC5hdHRyaWJ1dGVzW25dLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAgICAgLyogaWQgNCwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgICAgMzRcbiAgICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCA1LCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICAgIDQwXG4gICAgICAgICAgICAgICkudWludDMyKHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCksIHI7XG4gICAgICAgICAgICB9LCBvLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHQsIHIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgfSwgby5kZWNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gJFJlYWRlci5jcmVhdGUodCkpO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gciA9PT0gdm9pZCAwID8gdC5sZW4gOiB0LnBvcyArIHIsIGwgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsoKTsgdC5wb3MgPCBuOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgcCA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChwID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgbC50cmFjZUlkID0gdC5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICBsLnNwYW5JZCA9IHQuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgbC50cmFjZVN0YXRlID0gdC5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICAgICAgICAgICAgbC5hdHRyaWJ1dGVzICYmIGwuYXR0cmlidXRlcy5sZW5ndGggfHwgKGwuYXR0cmlidXRlcyA9IFtdKSwgbC5hdHRyaWJ1dGVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZGVjb2RlKHQsIHQudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgICAgbC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0LnNraXBUeXBlKHAgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgICAgfSwgby5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9IG5ldyAkUmVhZGVyKHQpKSwgdGhpcy5kZWNvZGUodCwgdC51aW50MzIoKSk7XG4gICAgICAgICAgICB9LCBvLnZlcmlmeSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0ICE9IFwib2JqZWN0XCIgfHwgdCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgaWYgKHQudHJhY2VJZCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ0cmFjZUlkXCIpICYmICEodC50cmFjZUlkICYmIHR5cGVvZiB0LnRyYWNlSWQubGVuZ3RoID09IFwibnVtYmVyXCIgfHwgJHV0aWwuaXNTdHJpbmcodC50cmFjZUlkKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidHJhY2VJZDogYnVmZmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGlmICh0LnNwYW5JZCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJzcGFuSWRcIikgJiYgISh0LnNwYW5JZCAmJiB0eXBlb2YgdC5zcGFuSWQubGVuZ3RoID09IFwibnVtYmVyXCIgfHwgJHV0aWwuaXNTdHJpbmcodC5zcGFuSWQpKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzcGFuSWQ6IGJ1ZmZlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBpZiAodC50cmFjZVN0YXRlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInRyYWNlU3RhdGVcIikgJiYgISR1dGlsLmlzU3RyaW5nKHQudHJhY2VTdGF0ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidHJhY2VTdGF0ZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGlmICh0LmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiYXR0cmlidXRlc1wiKSkge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgICAgdmFyIG4gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkodC5hdHRyaWJ1dGVzW3JdKTtcbiAgICAgICAgICAgICAgICAgIGlmIChuKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzLlwiICsgbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpICYmICEkdXRpbC5pc0ludGVnZXIodC5kcm9wcGVkQXR0cmlidXRlc0NvdW50KSA/IFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogaW50ZWdlciBleHBlY3RlZFwiIDogbnVsbDtcbiAgICAgICAgICAgIH0sIG8uZnJvbU9iamVjdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluaylcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgdmFyIHIgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsoKTtcbiAgICAgICAgICAgICAgaWYgKHQudHJhY2VJZCAhPSBudWxsICYmICh0eXBlb2YgdC50cmFjZUlkID09IFwic3RyaW5nXCIgPyAkdXRpbC5iYXNlNjQuZGVjb2RlKHQudHJhY2VJZCwgci50cmFjZUlkID0gJHV0aWwubmV3QnVmZmVyKCR1dGlsLmJhc2U2NC5sZW5ndGgodC50cmFjZUlkKSksIDApIDogdC50cmFjZUlkLmxlbmd0aCA+PSAwICYmIChyLnRyYWNlSWQgPSB0LnRyYWNlSWQpKSwgdC5zcGFuSWQgIT0gbnVsbCAmJiAodHlwZW9mIHQuc3BhbklkID09IFwic3RyaW5nXCIgPyAkdXRpbC5iYXNlNjQuZGVjb2RlKHQuc3BhbklkLCByLnNwYW5JZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKHQuc3BhbklkKSksIDApIDogdC5zcGFuSWQubGVuZ3RoID49IDAgJiYgKHIuc3BhbklkID0gdC5zcGFuSWQpKSwgdC50cmFjZVN0YXRlICE9IG51bGwgJiYgKHIudHJhY2VTdGF0ZSA9IFN0cmluZyh0LnRyYWNlU3RhdGUpKSwgdC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsuYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgci5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5hdHRyaWJ1dGVzW25dICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluay5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICByLmF0dHJpYnV0ZXNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KHQuYXR0cmlidXRlc1tuXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiAoci5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID4+PiAwKSwgcjtcbiAgICAgICAgICAgIH0sIG8udG9PYmplY3QgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICAgIGlmICgoci5hcnJheXMgfHwgci5kZWZhdWx0cykgJiYgKG4uYXR0cmlidXRlcyA9IFtdKSwgci5kZWZhdWx0cyAmJiAoci5ieXRlcyA9PT0gU3RyaW5nID8gbi50cmFjZUlkID0gXCJcIiA6IChuLnRyYWNlSWQgPSBbXSwgci5ieXRlcyAhPT0gQXJyYXkgJiYgKG4udHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcihuLnRyYWNlSWQpKSksIHIuYnl0ZXMgPT09IFN0cmluZyA/IG4uc3BhbklkID0gXCJcIiA6IChuLnNwYW5JZCA9IFtdLCByLmJ5dGVzICE9PSBBcnJheSAmJiAobi5zcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIobi5zcGFuSWQpKSksIG4udHJhY2VTdGF0ZSA9IFwiXCIsIG4uZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IDApLCB0LnRyYWNlSWQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSAmJiAobi50cmFjZUlkID0gci5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZSh0LnRyYWNlSWQsIDAsIHQudHJhY2VJZC5sZW5ndGgpIDogci5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LnRyYWNlSWQpIDogdC50cmFjZUlkKSwgdC5zcGFuSWQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwic3BhbklkXCIpICYmIChuLnNwYW5JZCA9IHIuYnl0ZXMgPT09IFN0cmluZyA/ICR1dGlsLmJhc2U2NC5lbmNvZGUodC5zcGFuSWQsIDAsIHQuc3BhbklkLmxlbmd0aCkgOiByLmJ5dGVzID09PSBBcnJheSA/IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuc3BhbklkKSA6IHQuc3BhbklkKSwgdC50cmFjZVN0YXRlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInRyYWNlU3RhdGVcIikgJiYgKG4udHJhY2VTdGF0ZSA9IHQudHJhY2VTdGF0ZSksIHQuYXR0cmlidXRlcyAmJiB0LmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbi5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCB0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK2wpXG4gICAgICAgICAgICAgICAgICBuLmF0dHJpYnV0ZXNbbF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdCh0LmF0dHJpYnV0ZXNbbF0sIHIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSAmJiAobi5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50KSwgbjtcbiAgICAgICAgICAgIH0sIG8ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgIH0sIG8uZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgdCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rXCI7XG4gICAgICAgICAgICB9LCBvO1xuICAgICAgICAgIH0oKSwgaTtcbiAgICAgICAgfSgpLCBmLlN0YXR1cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkobykge1xuICAgICAgICAgICAgaWYgKG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUubWVzc2FnZSA9IG51bGwsIGkucHJvdG90eXBlLmNvZGUgPSBudWxsLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUubWVzc2FnZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwibWVzc2FnZVwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMThcbiAgICAgICAgICAgICkuc3RyaW5nKGUubWVzc2FnZSksIGUuY29kZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiY29kZVwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMywgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgMjRcbiAgICAgICAgICAgICkuaW50MzIoZS5jb2RlKSwgdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBuLm1lc3NhZ2UgPSBlLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgbi5jb2RlID0gZS5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLm1lc3NhZ2UgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwibWVzc2FnZVwiKSAmJiAhJHV0aWwuaXNTdHJpbmcoZS5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwibWVzc2FnZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5jb2RlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImNvZGVcIikpXG4gICAgICAgICAgICAgIHN3aXRjaCAoZS5jb2RlKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvZGU6IGVudW0gdmFsdWUgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGUubWVzc2FnZSAhPSBudWxsICYmICh0Lm1lc3NhZ2UgPSBTdHJpbmcoZS5tZXNzYWdlKSksIGUuY29kZSkge1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5jb2RlID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgIHQuY29kZSA9IGUuY29kZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNUQVRVU19DT0RFX1VOU0VUXCI6XG4gICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICB0LmNvZGUgPSAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU1RBVFVTX0NPREVfT0tcIjpcbiAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHQuY29kZSA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTVEFUVVNfQ09ERV9FUlJPUlwiOlxuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgdC5jb2RlID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIHJldHVybiB0LmRlZmF1bHRzICYmIChyLm1lc3NhZ2UgPSBcIlwiLCByLmNvZGUgPSB0LmVudW1zID09PSBTdHJpbmcgPyBcIlNUQVRVU19DT0RFX1VOU0VUXCIgOiAwKSwgZS5tZXNzYWdlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcIm1lc3NhZ2VcIikgJiYgKHIubWVzc2FnZSA9IGUubWVzc2FnZSksIGUuY29kZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJjb2RlXCIpICYmIChyLmNvZGUgPSB0LmVudW1zID09PSBTdHJpbmcgPyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1cy5TdGF0dXNDb2RlW2UuY29kZV0gPT09IHZvaWQgMCA/IGUuY29kZSA6ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLlN0YXR1c0NvZGVbZS5jb2RlXSA6IGUuY29kZSksIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXNcIjtcbiAgICAgICAgICB9LCBpLlN0YXR1c0NvZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBvID0ge30sIGUgPSBPYmplY3QuY3JlYXRlKG8pO1xuICAgICAgICAgICAgcmV0dXJuIGVbb1swXSA9IFwiU1RBVFVTX0NPREVfVU5TRVRcIl0gPSAwLCBlW29bMV0gPSBcIlNUQVRVU19DT0RFX09LXCJdID0gMSwgZVtvWzJdID0gXCJTVEFUVVNfQ09ERV9FUlJPUlwiXSA9IDIsIGU7XG4gICAgICAgICAgfSgpLCBpO1xuICAgICAgICB9KCksIGY7XG4gICAgICB9KCksIGM7XG4gICAgfSgpLCB1LmNvbGxlY3RvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGMgPSB7fTtcbiAgICAgIHJldHVybiBjLnRyYWNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmID0ge307XG4gICAgICAgIHJldHVybiBmLnYxID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGkgPSB7fTtcbiAgICAgICAgICByZXR1cm4gaS5UcmFjZVNlcnZpY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIG8oZSwgdCwgcikge1xuICAgICAgICAgICAgICAkcHJvdG9idWYucnBjLlNlcnZpY2UuY2FsbCh0aGlzLCBlLCB0LCByKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoby5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCRwcm90b2J1Zi5ycGMuU2VydmljZS5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IG8sIG8uY3JlYXRlID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXModCwgciwgbik7XG4gICAgICAgICAgICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkoby5wcm90b3R5cGUuZXhwb3J0ID0gZnVuY3Rpb24gZSh0LCByKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnJwY0NhbGwoZSwgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCwgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UsIHQsIHIpO1xuICAgICAgICAgICAgfSwgXCJuYW1lXCIsIHsgdmFsdWU6IFwiRXhwb3J0XCIgfSksIG87XG4gICAgICAgICAgfSgpLCBpLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIG8oZSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZVNwYW5zID0gW10sIGUpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IE9iamVjdC5rZXlzKGUpLCByID0gMDsgciA8IHQubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgICBlW3Rbcl1dICE9IG51bGwgJiYgKHRoaXNbdFtyXV0gPSBlW3Rbcl1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvLnByb3RvdHlwZS5yZXNvdXJjZVNwYW5zID0gJHV0aWwuZW1wdHlBcnJheSwgby5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgbyh0KTtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICBpZiAociB8fCAociA9ICRXcml0ZXIuY3JlYXRlKCkpLCB0LnJlc291cmNlU3BhbnMgIT0gbnVsbCAmJiB0LnJlc291cmNlU3BhbnMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5yZXNvdXJjZVNwYW5zLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLmVuY29kZSh0LnJlc291cmNlU3BhbnNbbl0sIHIudWludDMyKFxuICAgICAgICAgICAgICAgICAgICAvKiBpZCAxLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgICB9LCBvLmRlY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0KCk7IHQucG9zIDwgbjsgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSB0LnVpbnQzMigpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocCA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgIGwucmVzb3VyY2VTcGFucyAmJiBsLnJlc291cmNlU3BhbnMubGVuZ3RoIHx8IChsLnJlc291cmNlU3BhbnMgPSBbXSksIGwucmVzb3VyY2VTcGFucy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy5kZWNvZGUodCwgdC51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICB9LCBvLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgIH0sIG8udmVyaWZ5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBpZiAodC5yZXNvdXJjZVNwYW5zICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlU3BhbnNcIikpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5yZXNvdXJjZVNwYW5zKSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlU3BhbnM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB0LnJlc291cmNlU3BhbnMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBuID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnZlcmlmeSh0LnJlc291cmNlU3BhbnNbcl0pO1xuICAgICAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlU3BhbnMuXCIgKyBuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0sIG8uZnJvbU9iamVjdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0KVxuICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgICB2YXIgciA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgIGlmICh0LnJlc291cmNlU3BhbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5yZXNvdXJjZVNwYW5zKSlcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LnJlc291cmNlU3BhbnM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHIucmVzb3VyY2VTcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5yZXNvdXJjZVNwYW5zLmxlbmd0aDsgKytuKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQucmVzb3VyY2VTcGFuc1tuXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdC5yZXNvdXJjZVNwYW5zOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICByLnJlc291cmNlU3BhbnNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMuZnJvbU9iamVjdCh0LnJlc291cmNlU3BhbnNbbl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0sIG8udG9PYmplY3QgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICAgIGlmICgoci5hcnJheXMgfHwgci5kZWZhdWx0cykgJiYgKG4ucmVzb3VyY2VTcGFucyA9IFtdKSwgdC5yZXNvdXJjZVNwYW5zICYmIHQucmVzb3VyY2VTcGFucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBuLnJlc291cmNlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHQucmVzb3VyY2VTcGFucy5sZW5ndGg7ICsrbClcbiAgICAgICAgICAgICAgICAgIG4ucmVzb3VyY2VTcGFuc1tsXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy50b09iamVjdCh0LnJlc291cmNlU3BhbnNbbF0sIHIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgICAgfSwgby5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgfSwgby5nZXRUeXBlVXJsID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCA9PT0gdm9pZCAwICYmICh0ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCB0ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdFwiO1xuICAgICAgICAgICAgfSwgbztcbiAgICAgICAgICB9KCksIGkuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIG8oZSkge1xuICAgICAgICAgICAgICBpZiAoZSlcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gT2JqZWN0LmtleXMoZSksIHIgPSAwOyByIDwgdC5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAgIGVbdFtyXV0gIT0gbnVsbCAmJiAodGhpc1t0W3JdXSA9IGVbdFtyXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG8ucHJvdG90eXBlLnBhcnRpYWxTdWNjZXNzID0gbnVsbCwgby5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgbyh0KTtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gciB8fCAociA9ICRXcml0ZXIuY3JlYXRlKCkpLCB0LnBhcnRpYWxTdWNjZXNzICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJwYXJ0aWFsU3VjY2Vzc1wiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLmVuY29kZSh0LnBhcnRpYWxTdWNjZXNzLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAxLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKSwgcjtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgICB9LCBvLmRlY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSgpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICBsLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy5kZWNvZGUodCwgdC51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdC5za2lwVHlwZShwICYgNyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSBuZXcgJFJlYWRlcih0KSksIHRoaXMuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgfSwgby52ZXJpZnkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGlmICh0LnBhcnRpYWxTdWNjZXNzICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInBhcnRpYWxTdWNjZXNzXCIpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLnZlcmlmeSh0LnBhcnRpYWxTdWNjZXNzKTtcbiAgICAgICAgICAgICAgICBpZiAocilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInBhcnRpYWxTdWNjZXNzLlwiICsgcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0sIG8uZnJvbU9iamVjdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgdmFyIHIgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UoKTtcbiAgICAgICAgICAgICAgaWYgKHQucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5wYXJ0aWFsU3VjY2VzcyAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLnBhcnRpYWxTdWNjZXNzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgci5wYXJ0aWFsU3VjY2VzcyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MuZnJvbU9iamVjdCh0LnBhcnRpYWxTdWNjZXNzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0sIG8udG9PYmplY3QgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICAgIHJldHVybiByLmRlZmF1bHRzICYmIChuLnBhcnRpYWxTdWNjZXNzID0gbnVsbCksIHQucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwicGFydGlhbFN1Y2Nlc3NcIikgJiYgKG4ucGFydGlhbFN1Y2Nlc3MgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLnRvT2JqZWN0KHQucGFydGlhbFN1Y2Nlc3MsIHIpKSwgbjtcbiAgICAgICAgICAgIH0sIG8ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgIH0sIG8uZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgdCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXCI7XG4gICAgICAgICAgICB9LCBvO1xuICAgICAgICAgIH0oKSwgaS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBvKGUpIHtcbiAgICAgICAgICAgICAgaWYgKGUpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IE9iamVjdC5rZXlzKGUpLCByID0gMDsgciA8IHQubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgICBlW3Rbcl1dICE9IG51bGwgJiYgKHRoaXNbdFtyXV0gPSBlW3Rbcl1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvLnByb3RvdHlwZS5yZWplY3RlZFNwYW5zID0gbnVsbCwgby5wcm90b3R5cGUuZXJyb3JNZXNzYWdlID0gbnVsbCwgby5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgbyh0KTtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gciB8fCAociA9ICRXcml0ZXIuY3JlYXRlKCkpLCB0LnJlamVjdGVkU3BhbnMgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInJlamVjdGVkU3BhbnNcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgICA4XG4gICAgICAgICAgICAgICkuaW50NjQodC5yZWplY3RlZFNwYW5zKSwgdC5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImVycm9yTWVzc2FnZVwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgIDE4XG4gICAgICAgICAgICAgICkuc3RyaW5nKHQuZXJyb3JNZXNzYWdlKSwgcjtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgICB9LCBvLmRlY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzKCk7IHQucG9zIDwgbjsgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSB0LnVpbnQzMigpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocCA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgIGwucmVqZWN0ZWRTcGFucyA9IHQuaW50NjQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgbC5lcnJvck1lc3NhZ2UgPSB0LnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICB9LCBvLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgIH0sIG8udmVyaWZ5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsID8gXCJvYmplY3QgZXhwZWN0ZWRcIiA6IHQucmVqZWN0ZWRTcGFucyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJyZWplY3RlZFNwYW5zXCIpICYmICEkdXRpbC5pc0ludGVnZXIodC5yZWplY3RlZFNwYW5zKSAmJiAhKHQucmVqZWN0ZWRTcGFucyAmJiAkdXRpbC5pc0ludGVnZXIodC5yZWplY3RlZFNwYW5zLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKHQucmVqZWN0ZWRTcGFucy5oaWdoKSkgPyBcInJlamVjdGVkU3BhbnM6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiIDogdC5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZXJyb3JNZXNzYWdlXCIpICYmICEkdXRpbC5pc1N0cmluZyh0LmVycm9yTWVzc2FnZSkgPyBcImVycm9yTWVzc2FnZTogc3RyaW5nIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgICAgfSwgby5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgIHZhciByID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHQucmVqZWN0ZWRTcGFucyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIucmVqZWN0ZWRTcGFucyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKHQucmVqZWN0ZWRTcGFucykpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgdC5yZWplY3RlZFNwYW5zID09IFwic3RyaW5nXCIgPyByLnJlamVjdGVkU3BhbnMgPSBwYXJzZUludCh0LnJlamVjdGVkU3BhbnMsIDEwKSA6IHR5cGVvZiB0LnJlamVjdGVkU3BhbnMgPT0gXCJudW1iZXJcIiA/IHIucmVqZWN0ZWRTcGFucyA9IHQucmVqZWN0ZWRTcGFucyA6IHR5cGVvZiB0LnJlamVjdGVkU3BhbnMgPT0gXCJvYmplY3RcIiAmJiAoci5yZWplY3RlZFNwYW5zID0gbmV3ICR1dGlsLkxvbmdCaXRzKHQucmVqZWN0ZWRTcGFucy5sb3cgPj4+IDAsIHQucmVqZWN0ZWRTcGFucy5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgKHIuZXJyb3JNZXNzYWdlID0gU3RyaW5nKHQuZXJyb3JNZXNzYWdlKSksIHI7XG4gICAgICAgICAgICB9LCBvLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByIHx8IChyID0ge30pO1xuICAgICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgICBpZiAoci5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICAgIG4ucmVqZWN0ZWRTcGFucyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IGwudG9TdHJpbmcoKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IGwudG9OdW1iZXIoKSA6IGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICBuLnJlamVjdGVkU3BhbnMgPSByLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgbi5lcnJvck1lc3NhZ2UgPSBcIlwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0LnJlamVjdGVkU3BhbnMgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwicmVqZWN0ZWRTcGFuc1wiKSAmJiAodHlwZW9mIHQucmVqZWN0ZWRTcGFucyA9PSBcIm51bWJlclwiID8gbi5yZWplY3RlZFNwYW5zID0gci5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHQucmVqZWN0ZWRTcGFucykgOiB0LnJlamVjdGVkU3BhbnMgOiBuLnJlamVjdGVkU3BhbnMgPSByLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQucmVqZWN0ZWRTcGFucykgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC5yZWplY3RlZFNwYW5zLmxvdyA+Pj4gMCwgdC5yZWplY3RlZFNwYW5zLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiB0LnJlamVjdGVkU3BhbnMpLCB0LmVycm9yTWVzc2FnZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJlcnJvck1lc3NhZ2VcIikgJiYgKG4uZXJyb3JNZXNzYWdlID0gdC5lcnJvck1lc3NhZ2UpLCBuO1xuICAgICAgICAgICAgfSwgby5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgfSwgby5nZXRUeXBlVXJsID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCA9PT0gdm9pZCAwICYmICh0ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCB0ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1wiO1xuICAgICAgICAgICAgfSwgbztcbiAgICAgICAgICB9KCksIGk7XG4gICAgICAgIH0oKSwgZjtcbiAgICAgIH0oKSwgYy5tZXRyaWNzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmID0ge307XG4gICAgICAgIHJldHVybiBmLnYxID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGkgPSB7fTtcbiAgICAgICAgICByZXR1cm4gaS5NZXRyaWNzU2VydmljZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gbyhlLCB0LCByKSB7XG4gICAgICAgICAgICAgICRwcm90b2J1Zi5ycGMuU2VydmljZS5jYWxsKHRoaXMsIGUsIHQsIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChvLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoJHByb3RvYnVmLnJwYy5TZXJ2aWNlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gbywgby5jcmVhdGUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyh0LCByLCBuKTtcbiAgICAgICAgICAgIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLnByb3RvdHlwZS5leHBvcnQgPSBmdW5jdGlvbiBlKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjQ2FsbChlLCAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCwgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlLCB0LCByKTtcbiAgICAgICAgICAgIH0sIFwibmFtZVwiLCB7IHZhbHVlOiBcIkV4cG9ydFwiIH0pLCBvO1xuICAgICAgICAgIH0oKSwgaS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIG8oZSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZU1ldHJpY3MgPSBbXSwgZSlcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gT2JqZWN0LmtleXMoZSksIHIgPSAwOyByIDwgdC5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAgIGVbdFtyXV0gIT0gbnVsbCAmJiAodGhpc1t0W3JdXSA9IGVbdFtyXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG8ucHJvdG90eXBlLnJlc291cmNlTWV0cmljcyA9ICR1dGlsLmVtcHR5QXJyYXksIG8uY3JlYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IG8odCk7XG4gICAgICAgICAgICB9LCBvLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgaWYgKHIgfHwgKHIgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgdC5yZXNvdXJjZU1ldHJpY3MgIT0gbnVsbCAmJiB0LnJlc291cmNlTWV0cmljcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LnJlc291cmNlTWV0cmljcy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MuZW5jb2RlKHQucmVzb3VyY2VNZXRyaWNzW25dLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9LCBvLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHQsIHIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgfSwgby5kZWNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gJFJlYWRlci5jcmVhdGUodCkpO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gciA9PT0gdm9pZCAwID8gdC5sZW4gOiB0LnBvcyArIHIsIGwgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QoKTsgdC5wb3MgPCBuOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgcCA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChwID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgbC5yZXNvdXJjZU1ldHJpY3MgJiYgbC5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoIHx8IChsLnJlc291cmNlTWV0cmljcyA9IFtdKSwgbC5yZXNvdXJjZU1ldHJpY3MucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLmRlY29kZSh0LCB0LnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdC5za2lwVHlwZShwICYgNyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSBuZXcgJFJlYWRlcih0KSksIHRoaXMuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgfSwgby52ZXJpZnkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGlmICh0LnJlc291cmNlTWV0cmljcyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZU1ldHJpY3NcIikpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5yZXNvdXJjZU1ldHJpY3MpKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VNZXRyaWNzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgdC5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBuID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcy52ZXJpZnkodC5yZXNvdXJjZU1ldHJpY3Nbcl0pO1xuICAgICAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlTWV0cmljcy5cIiArIG47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSwgby5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0KVxuICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgICB2YXIgciA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCgpO1xuICAgICAgICAgICAgICBpZiAodC5yZXNvdXJjZU1ldHJpY3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5yZXNvdXJjZU1ldHJpY3MpKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LnJlc291cmNlTWV0cmljczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgci5yZXNvdXJjZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQucmVzb3VyY2VNZXRyaWNzLmxlbmd0aDsgKytuKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQucmVzb3VyY2VNZXRyaWNzW25dICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdC5yZXNvdXJjZU1ldHJpY3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgIHIucmVzb3VyY2VNZXRyaWNzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcy5mcm9tT2JqZWN0KHQucmVzb3VyY2VNZXRyaWNzW25dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9LCBvLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByIHx8IChyID0ge30pO1xuICAgICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgICBpZiAoKHIuYXJyYXlzIHx8IHIuZGVmYXVsdHMpICYmIChuLnJlc291cmNlTWV0cmljcyA9IFtdKSwgdC5yZXNvdXJjZU1ldHJpY3MgJiYgdC5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbi5yZXNvdXJjZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHQucmVzb3VyY2VNZXRyaWNzLmxlbmd0aDsgKytsKVxuICAgICAgICAgICAgICAgICAgbi5yZXNvdXJjZU1ldHJpY3NbbF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnRvT2JqZWN0KHQucmVzb3VyY2VNZXRyaWNzW2xdLCByKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICAgIH0sIG8ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgIH0sIG8uZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgdCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XCI7XG4gICAgICAgICAgICB9LCBvO1xuICAgICAgICAgIH0oKSwgaS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBvKGUpIHtcbiAgICAgICAgICAgICAgaWYgKGUpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IE9iamVjdC5rZXlzKGUpLCByID0gMDsgciA8IHQubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgICBlW3Rbcl1dICE9IG51bGwgJiYgKHRoaXNbdFtyXV0gPSBlW3Rbcl1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvLnByb3RvdHlwZS5wYXJ0aWFsU3VjY2VzcyA9IG51bGwsIG8uY3JlYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IG8odCk7XG4gICAgICAgICAgICB9LCBvLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHIgfHwgKHIgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgdC5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwicGFydGlhbFN1Y2Nlc3NcIikgJiYgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MuZW5jb2RlKHQucGFydGlhbFN1Y2Nlc3MsIHIudWludDMyKFxuICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCByO1xuICAgICAgICAgICAgfSwgby5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZSh0LCByKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9ICRSZWFkZXIuY3JlYXRlKHQpKTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IHIgPT09IHZvaWQgMCA/IHQubGVuIDogdC5wb3MgKyByLCBsID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSgpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICBsLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICB9LCBvLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgIH0sIG8udmVyaWZ5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBpZiAodC5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJwYXJ0aWFsU3VjY2Vzc1wiKSkge1xuICAgICAgICAgICAgICAgIHZhciByID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MudmVyaWZ5KHQucGFydGlhbFN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicGFydGlhbFN1Y2Nlc3MuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSwgby5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgdmFyIHIgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlKCk7XG4gICAgICAgICAgICAgIGlmICh0LnBhcnRpYWxTdWNjZXNzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQucGFydGlhbFN1Y2Nlc3MgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UucGFydGlhbFN1Y2Nlc3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICByLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MuZnJvbU9iamVjdCh0LnBhcnRpYWxTdWNjZXNzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0sIG8udG9PYmplY3QgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICAgIHJldHVybiByLmRlZmF1bHRzICYmIChuLnBhcnRpYWxTdWNjZXNzID0gbnVsbCksIHQucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwicGFydGlhbFN1Y2Nlc3NcIikgJiYgKG4ucGFydGlhbFN1Y2Nlc3MgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy50b09iamVjdCh0LnBhcnRpYWxTdWNjZXNzLCByKSksIG47XG4gICAgICAgICAgICB9LCBvLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICB9LCBvLmdldFR5cGVVcmwgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIHQgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2VcIjtcbiAgICAgICAgICAgIH0sIG87XG4gICAgICAgICAgfSgpLCBpLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gbyhlKSB7XG4gICAgICAgICAgICAgIGlmIChlKVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhlKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICAgZVt0W3JdXSAhPSBudWxsICYmICh0aGlzW3Rbcl1dID0gZVt0W3JdXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gby5wcm90b3R5cGUucmVqZWN0ZWREYXRhUG9pbnRzID0gbnVsbCwgby5wcm90b3R5cGUuZXJyb3JNZXNzYWdlID0gbnVsbCwgby5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgbyh0KTtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gciB8fCAociA9ICRXcml0ZXIuY3JlYXRlKCkpLCB0LnJlamVjdGVkRGF0YVBvaW50cyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwicmVqZWN0ZWREYXRhUG9pbnRzXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDAgPSovXG4gICAgICAgICAgICAgICAgOFxuICAgICAgICAgICAgICApLmludDY0KHQucmVqZWN0ZWREYXRhUG9pbnRzKSwgdC5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImVycm9yTWVzc2FnZVwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgIDE4XG4gICAgICAgICAgICAgICkuc3RyaW5nKHQuZXJyb3JNZXNzYWdlKSwgcjtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgICB9LCBvLmRlY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcygpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICBsLnJlamVjdGVkRGF0YVBvaW50cyA9IHQuaW50NjQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgbC5lcnJvck1lc3NhZ2UgPSB0LnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICB9LCBvLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgIH0sIG8udmVyaWZ5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsID8gXCJvYmplY3QgZXhwZWN0ZWRcIiA6IHQucmVqZWN0ZWREYXRhUG9pbnRzICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInJlamVjdGVkRGF0YVBvaW50c1wiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQucmVqZWN0ZWREYXRhUG9pbnRzKSAmJiAhKHQucmVqZWN0ZWREYXRhUG9pbnRzICYmICR1dGlsLmlzSW50ZWdlcih0LnJlamVjdGVkRGF0YVBvaW50cy5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LnJlamVjdGVkRGF0YVBvaW50cy5oaWdoKSkgPyBcInJlamVjdGVkRGF0YVBvaW50czogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCIgOiB0LmVycm9yTWVzc2FnZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJlcnJvck1lc3NhZ2VcIikgJiYgISR1dGlsLmlzU3RyaW5nKHQuZXJyb3JNZXNzYWdlKSA/IFwiZXJyb3JNZXNzYWdlOiBzdHJpbmcgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgICB9LCBvLmZyb21PYmplY3QgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgIHZhciByID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzKCk7XG4gICAgICAgICAgICAgIHJldHVybiB0LnJlamVjdGVkRGF0YVBvaW50cyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIucmVqZWN0ZWREYXRhUG9pbnRzID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC5yZWplY3RlZERhdGFQb2ludHMpKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIHQucmVqZWN0ZWREYXRhUG9pbnRzID09IFwic3RyaW5nXCIgPyByLnJlamVjdGVkRGF0YVBvaW50cyA9IHBhcnNlSW50KHQucmVqZWN0ZWREYXRhUG9pbnRzLCAxMCkgOiB0eXBlb2YgdC5yZWplY3RlZERhdGFQb2ludHMgPT0gXCJudW1iZXJcIiA/IHIucmVqZWN0ZWREYXRhUG9pbnRzID0gdC5yZWplY3RlZERhdGFQb2ludHMgOiB0eXBlb2YgdC5yZWplY3RlZERhdGFQb2ludHMgPT0gXCJvYmplY3RcIiAmJiAoci5yZWplY3RlZERhdGFQb2ludHMgPSBuZXcgJHV0aWwuTG9uZ0JpdHModC5yZWplY3RlZERhdGFQb2ludHMubG93ID4+PiAwLCB0LnJlamVjdGVkRGF0YVBvaW50cy5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgKHIuZXJyb3JNZXNzYWdlID0gU3RyaW5nKHQuZXJyb3JNZXNzYWdlKSksIHI7XG4gICAgICAgICAgICB9LCBvLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByIHx8IChyID0ge30pO1xuICAgICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgICBpZiAoci5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICAgIG4ucmVqZWN0ZWREYXRhUG9pbnRzID0gci5sb25ncyA9PT0gU3RyaW5nID8gbC50b1N0cmluZygpIDogci5sb25ncyA9PT0gTnVtYmVyID8gbC50b051bWJlcigpIDogbDtcbiAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgIG4ucmVqZWN0ZWREYXRhUG9pbnRzID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgIG4uZXJyb3JNZXNzYWdlID0gXCJcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdC5yZWplY3RlZERhdGFQb2ludHMgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwicmVqZWN0ZWREYXRhUG9pbnRzXCIpICYmICh0eXBlb2YgdC5yZWplY3RlZERhdGFQb2ludHMgPT0gXCJudW1iZXJcIiA/IG4ucmVqZWN0ZWREYXRhUG9pbnRzID0gci5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHQucmVqZWN0ZWREYXRhUG9pbnRzKSA6IHQucmVqZWN0ZWREYXRhUG9pbnRzIDogbi5yZWplY3RlZERhdGFQb2ludHMgPSByLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQucmVqZWN0ZWREYXRhUG9pbnRzKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyh0LnJlamVjdGVkRGF0YVBvaW50cy5sb3cgPj4+IDAsIHQucmVqZWN0ZWREYXRhUG9pbnRzLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiB0LnJlamVjdGVkRGF0YVBvaW50cyksIHQuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImVycm9yTWVzc2FnZVwiKSAmJiAobi5lcnJvck1lc3NhZ2UgPSB0LmVycm9yTWVzc2FnZSksIG47XG4gICAgICAgICAgICB9LCBvLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICB9LCBvLmdldFR5cGVVcmwgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIHQgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc1wiO1xuICAgICAgICAgICAgfSwgbztcbiAgICAgICAgICB9KCksIGk7XG4gICAgICAgIH0oKSwgZjtcbiAgICAgIH0oKSwgYy5sb2dzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmID0ge307XG4gICAgICAgIHJldHVybiBmLnYxID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGkgPSB7fTtcbiAgICAgICAgICByZXR1cm4gaS5Mb2dzU2VydmljZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gbyhlLCB0LCByKSB7XG4gICAgICAgICAgICAgICRwcm90b2J1Zi5ycGMuU2VydmljZS5jYWxsKHRoaXMsIGUsIHQsIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChvLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoJHByb3RvYnVmLnJwYy5TZXJ2aWNlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gbywgby5jcmVhdGUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyh0LCByLCBuKTtcbiAgICAgICAgICAgIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLnByb3RvdHlwZS5leHBvcnQgPSBmdW5jdGlvbiBlKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjQ2FsbChlLCAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCwgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLCB0LCByKTtcbiAgICAgICAgICAgIH0sIFwibmFtZVwiLCB7IHZhbHVlOiBcIkV4cG9ydFwiIH0pLCBvO1xuICAgICAgICAgIH0oKSwgaS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIG8oZSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZUxvZ3MgPSBbXSwgZSlcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gT2JqZWN0LmtleXMoZSksIHIgPSAwOyByIDwgdC5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAgIGVbdFtyXV0gIT0gbnVsbCAmJiAodGhpc1t0W3JdXSA9IGVbdFtyXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG8ucHJvdG90eXBlLnJlc291cmNlTG9ncyA9ICR1dGlsLmVtcHR5QXJyYXksIG8uY3JlYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IG8odCk7XG4gICAgICAgICAgICB9LCBvLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgaWYgKHIgfHwgKHIgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgdC5yZXNvdXJjZUxvZ3MgIT0gbnVsbCAmJiB0LnJlc291cmNlTG9ncy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LnJlc291cmNlTG9ncy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MuZW5jb2RlKHQucmVzb3VyY2VMb2dzW25dLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9LCBvLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHQsIHIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgfSwgby5kZWNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gJFJlYWRlci5jcmVhdGUodCkpO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gciA9PT0gdm9pZCAwID8gdC5sZW4gOiB0LnBvcyArIHIsIGwgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3QoKTsgdC5wb3MgPCBuOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgcCA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChwID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgbC5yZXNvdXJjZUxvZ3MgJiYgbC5yZXNvdXJjZUxvZ3MubGVuZ3RoIHx8IChsLnJlc291cmNlTG9ncyA9IFtdKSwgbC5yZXNvdXJjZUxvZ3MucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLmRlY29kZSh0LCB0LnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdC5za2lwVHlwZShwICYgNyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSBuZXcgJFJlYWRlcih0KSksIHRoaXMuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgfSwgby52ZXJpZnkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGlmICh0LnJlc291cmNlTG9ncyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZUxvZ3NcIikpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5yZXNvdXJjZUxvZ3MpKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VMb2dzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgdC5yZXNvdXJjZUxvZ3MubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBuID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy52ZXJpZnkodC5yZXNvdXJjZUxvZ3Nbcl0pO1xuICAgICAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlTG9ncy5cIiArIG47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSwgby5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0KVxuICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgICB2YXIgciA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCgpO1xuICAgICAgICAgICAgICBpZiAodC5yZXNvdXJjZUxvZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5yZXNvdXJjZUxvZ3MpKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0LnJlc291cmNlTG9nczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgci5yZXNvdXJjZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQucmVzb3VyY2VMb2dzLmxlbmd0aDsgKytuKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQucmVzb3VyY2VMb2dzW25dICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC5yZXNvdXJjZUxvZ3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgIHIucmVzb3VyY2VMb2dzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy5mcm9tT2JqZWN0KHQucmVzb3VyY2VMb2dzW25dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9LCBvLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByIHx8IChyID0ge30pO1xuICAgICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgICBpZiAoKHIuYXJyYXlzIHx8IHIuZGVmYXVsdHMpICYmIChuLnJlc291cmNlTG9ncyA9IFtdKSwgdC5yZXNvdXJjZUxvZ3MgJiYgdC5yZXNvdXJjZUxvZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbi5yZXNvdXJjZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHQucmVzb3VyY2VMb2dzLmxlbmd0aDsgKytsKVxuICAgICAgICAgICAgICAgICAgbi5yZXNvdXJjZUxvZ3NbbF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLnRvT2JqZWN0KHQucmVzb3VyY2VMb2dzW2xdLCByKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICAgIH0sIG8ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgIH0sIG8uZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgdCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XCI7XG4gICAgICAgICAgICB9LCBvO1xuICAgICAgICAgIH0oKSwgaS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBvKGUpIHtcbiAgICAgICAgICAgICAgaWYgKGUpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IE9iamVjdC5rZXlzKGUpLCByID0gMDsgciA8IHQubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgICBlW3Rbcl1dICE9IG51bGwgJiYgKHRoaXNbdFtyXV0gPSBlW3Rbcl1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvLnByb3RvdHlwZS5wYXJ0aWFsU3VjY2VzcyA9IG51bGwsIG8uY3JlYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IG8odCk7XG4gICAgICAgICAgICB9LCBvLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHIgfHwgKHIgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgdC5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwicGFydGlhbFN1Y2Nlc3NcIikgJiYgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MuZW5jb2RlKHQucGFydGlhbFN1Y2Nlc3MsIHIudWludDMyKFxuICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCByO1xuICAgICAgICAgICAgfSwgby5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZSh0LCByKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9ICRSZWFkZXIuY3JlYXRlKHQpKTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IHIgPT09IHZvaWQgMCA/IHQubGVuIDogdC5wb3MgKyByLCBsID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSgpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICBsLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICB9LCBvLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgIH0sIG8udmVyaWZ5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBpZiAodC5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJwYXJ0aWFsU3VjY2Vzc1wiKSkge1xuICAgICAgICAgICAgICAgIHZhciByID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MudmVyaWZ5KHQucGFydGlhbFN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicGFydGlhbFN1Y2Nlc3MuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSwgby5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgdmFyIHIgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlKCk7XG4gICAgICAgICAgICAgIGlmICh0LnBhcnRpYWxTdWNjZXNzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQucGFydGlhbFN1Y2Nlc3MgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UucGFydGlhbFN1Y2Nlc3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICByLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MuZnJvbU9iamVjdCh0LnBhcnRpYWxTdWNjZXNzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0sIG8udG9PYmplY3QgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICAgIHJldHVybiByLmRlZmF1bHRzICYmIChuLnBhcnRpYWxTdWNjZXNzID0gbnVsbCksIHQucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwicGFydGlhbFN1Y2Nlc3NcIikgJiYgKG4ucGFydGlhbFN1Y2Nlc3MgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy50b09iamVjdCh0LnBhcnRpYWxTdWNjZXNzLCByKSksIG47XG4gICAgICAgICAgICB9LCBvLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICB9LCBvLmdldFR5cGVVcmwgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIHQgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcIjtcbiAgICAgICAgICAgIH0sIG87XG4gICAgICAgICAgfSgpLCBpLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gbyhlKSB7XG4gICAgICAgICAgICAgIGlmIChlKVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhlKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICAgZVt0W3JdXSAhPSBudWxsICYmICh0aGlzW3Rbcl1dID0gZVt0W3JdXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gby5wcm90b3R5cGUucmVqZWN0ZWRMb2dSZWNvcmRzID0gbnVsbCwgby5wcm90b3R5cGUuZXJyb3JNZXNzYWdlID0gbnVsbCwgby5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgbyh0KTtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gciB8fCAociA9ICRXcml0ZXIuY3JlYXRlKCkpLCB0LnJlamVjdGVkTG9nUmVjb3JkcyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwicmVqZWN0ZWRMb2dSZWNvcmRzXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDAgPSovXG4gICAgICAgICAgICAgICAgOFxuICAgICAgICAgICAgICApLmludDY0KHQucmVqZWN0ZWRMb2dSZWNvcmRzKSwgdC5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImVycm9yTWVzc2FnZVwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgIDE4XG4gICAgICAgICAgICAgICkuc3RyaW5nKHQuZXJyb3JNZXNzYWdlKSwgcjtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgICB9LCBvLmRlY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcygpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICBsLnJlamVjdGVkTG9nUmVjb3JkcyA9IHQuaW50NjQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgbC5lcnJvck1lc3NhZ2UgPSB0LnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICB9LCBvLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgIH0sIG8udmVyaWZ5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsID8gXCJvYmplY3QgZXhwZWN0ZWRcIiA6IHQucmVqZWN0ZWRMb2dSZWNvcmRzICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInJlamVjdGVkTG9nUmVjb3Jkc1wiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQucmVqZWN0ZWRMb2dSZWNvcmRzKSAmJiAhKHQucmVqZWN0ZWRMb2dSZWNvcmRzICYmICR1dGlsLmlzSW50ZWdlcih0LnJlamVjdGVkTG9nUmVjb3Jkcy5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LnJlamVjdGVkTG9nUmVjb3Jkcy5oaWdoKSkgPyBcInJlamVjdGVkTG9nUmVjb3JkczogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCIgOiB0LmVycm9yTWVzc2FnZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJlcnJvck1lc3NhZ2VcIikgJiYgISR1dGlsLmlzU3RyaW5nKHQuZXJyb3JNZXNzYWdlKSA/IFwiZXJyb3JNZXNzYWdlOiBzdHJpbmcgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgICB9LCBvLmZyb21PYmplY3QgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgIHZhciByID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzKCk7XG4gICAgICAgICAgICAgIHJldHVybiB0LnJlamVjdGVkTG9nUmVjb3JkcyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIucmVqZWN0ZWRMb2dSZWNvcmRzID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC5yZWplY3RlZExvZ1JlY29yZHMpKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIHQucmVqZWN0ZWRMb2dSZWNvcmRzID09IFwic3RyaW5nXCIgPyByLnJlamVjdGVkTG9nUmVjb3JkcyA9IHBhcnNlSW50KHQucmVqZWN0ZWRMb2dSZWNvcmRzLCAxMCkgOiB0eXBlb2YgdC5yZWplY3RlZExvZ1JlY29yZHMgPT0gXCJudW1iZXJcIiA/IHIucmVqZWN0ZWRMb2dSZWNvcmRzID0gdC5yZWplY3RlZExvZ1JlY29yZHMgOiB0eXBlb2YgdC5yZWplY3RlZExvZ1JlY29yZHMgPT0gXCJvYmplY3RcIiAmJiAoci5yZWplY3RlZExvZ1JlY29yZHMgPSBuZXcgJHV0aWwuTG9uZ0JpdHModC5yZWplY3RlZExvZ1JlY29yZHMubG93ID4+PiAwLCB0LnJlamVjdGVkTG9nUmVjb3Jkcy5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgKHIuZXJyb3JNZXNzYWdlID0gU3RyaW5nKHQuZXJyb3JNZXNzYWdlKSksIHI7XG4gICAgICAgICAgICB9LCBvLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByIHx8IChyID0ge30pO1xuICAgICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgICBpZiAoci5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICAgIG4ucmVqZWN0ZWRMb2dSZWNvcmRzID0gci5sb25ncyA9PT0gU3RyaW5nID8gbC50b1N0cmluZygpIDogci5sb25ncyA9PT0gTnVtYmVyID8gbC50b051bWJlcigpIDogbDtcbiAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgIG4ucmVqZWN0ZWRMb2dSZWNvcmRzID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgIG4uZXJyb3JNZXNzYWdlID0gXCJcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdC5yZWplY3RlZExvZ1JlY29yZHMgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwicmVqZWN0ZWRMb2dSZWNvcmRzXCIpICYmICh0eXBlb2YgdC5yZWplY3RlZExvZ1JlY29yZHMgPT0gXCJudW1iZXJcIiA/IG4ucmVqZWN0ZWRMb2dSZWNvcmRzID0gci5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHQucmVqZWN0ZWRMb2dSZWNvcmRzKSA6IHQucmVqZWN0ZWRMb2dSZWNvcmRzIDogbi5yZWplY3RlZExvZ1JlY29yZHMgPSByLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQucmVqZWN0ZWRMb2dSZWNvcmRzKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyh0LnJlamVjdGVkTG9nUmVjb3Jkcy5sb3cgPj4+IDAsIHQucmVqZWN0ZWRMb2dSZWNvcmRzLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiB0LnJlamVjdGVkTG9nUmVjb3JkcyksIHQuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImVycm9yTWVzc2FnZVwiKSAmJiAobi5lcnJvck1lc3NhZ2UgPSB0LmVycm9yTWVzc2FnZSksIG47XG4gICAgICAgICAgICB9LCBvLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICB9LCBvLmdldFR5cGVVcmwgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIHQgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1wiO1xuICAgICAgICAgICAgfSwgbztcbiAgICAgICAgICB9KCksIGk7XG4gICAgICAgIH0oKSwgZjtcbiAgICAgIH0oKSwgYztcbiAgICB9KCksIHUubWV0cmljcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGMgPSB7fTtcbiAgICAgIHJldHVybiBjLnYxID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmID0ge307XG4gICAgICAgIHJldHVybiBmLk1ldHJpY3NEYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZU1ldHJpY3MgPSBbXSwgbylcbiAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IE9iamVjdC5rZXlzKG8pLCB0ID0gMDsgdCA8IGUubGVuZ3RoOyArK3QpXG4gICAgICAgICAgICAgICAgb1tlW3RdXSAhPSBudWxsICYmICh0aGlzW2VbdF1dID0gb1tlW3RdXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnByb3RvdHlwZS5yZXNvdXJjZU1ldHJpY3MgPSAkdXRpbC5lbXB0eUFycmF5LCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGlmICh0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUucmVzb3VyY2VNZXRyaWNzICE9IG51bGwgJiYgZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUucmVzb3VyY2VNZXRyaWNzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MuZW5jb2RlKGUucmVzb3VyY2VNZXRyaWNzW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLnJlc291cmNlTWV0cmljcyAmJiBuLnJlc291cmNlTWV0cmljcy5sZW5ndGggfHwgKG4ucmVzb3VyY2VNZXRyaWNzID0gW10pLCBuLnJlc291cmNlTWV0cmljcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MuZGVjb2RlKGUsIGUudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5yZXNvdXJjZU1ldHJpY3MgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwicmVzb3VyY2VNZXRyaWNzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLnJlc291cmNlTWV0cmljcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VNZXRyaWNzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IGUucmVzb3VyY2VNZXRyaWNzLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnZlcmlmeShlLnJlc291cmNlTWV0cmljc1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZU1ldHJpY3MuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YSlcbiAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICB2YXIgdCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGEoKTtcbiAgICAgICAgICAgIGlmIChlLnJlc291cmNlTWV0cmljcykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5yZXNvdXJjZU1ldHJpY3MpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGEucmVzb3VyY2VNZXRyaWNzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5yZXNvdXJjZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLnJlc291cmNlTWV0cmljcy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5yZXNvdXJjZU1ldHJpY3Nbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGEucmVzb3VyY2VNZXRyaWNzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5yZXNvdXJjZU1ldHJpY3Nbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLmZyb21PYmplY3QoZS5yZXNvdXJjZU1ldHJpY3Nbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgdCB8fCAodCA9IHt9KTtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAoKHQuYXJyYXlzIHx8IHQuZGVmYXVsdHMpICYmIChyLnJlc291cmNlTWV0cmljcyA9IFtdKSwgZS5yZXNvdXJjZU1ldHJpY3MgJiYgZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIucmVzb3VyY2VNZXRyaWNzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgci5yZXNvdXJjZU1ldHJpY3Nbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnRvT2JqZWN0KGUucmVzb3VyY2VNZXRyaWNzW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YVwiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZi5SZXNvdXJjZU1ldHJpY3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jdGlvbiBpKG8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNjb3BlTWV0cmljcyA9IFtdLCBvKVxuICAgICAgICAgICAgICBmb3IgKHZhciBlID0gT2JqZWN0LmtleXMobyksIHQgPSAwOyB0IDwgZS5sZW5ndGg7ICsrdClcbiAgICAgICAgICAgICAgICBvW2VbdF1dICE9IG51bGwgJiYgKHRoaXNbZVt0XV0gPSBvW2VbdF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkucHJvdG90eXBlLnJlc291cmNlID0gbnVsbCwgaS5wcm90b3R5cGUuc2NvcGVNZXRyaWNzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuc2NoZW1hVXJsID0gbnVsbCwgaS5jcmVhdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBpZiAodCB8fCAodCA9ICRXcml0ZXIuY3JlYXRlKCkpLCBlLnJlc291cmNlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJyZXNvdXJjZVwiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmVuY29kZShlLnJlc291cmNlLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKSwgZS5zY29wZU1ldHJpY3MgIT0gbnVsbCAmJiBlLnNjb3BlTWV0cmljcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5zY29wZU1ldHJpY3MubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljcy5lbmNvZGUoZS5zY29wZU1ldHJpY3Nbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDE4XG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIGUuc2NoZW1hVXJsICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJzY2hlbWFVcmxcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDMsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDI2XG4gICAgICAgICAgICApLnN0cmluZyhlLnNjaGVtYVVybCksIHQ7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoZSwgdCkubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9ICRSZWFkZXIuY3JlYXRlKGUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSB0ID09PSB2b2lkIDAgPyBlLmxlbiA6IGUucG9zICsgdCwgbiA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLnJlc291cmNlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBuLnNjb3BlTWV0cmljcyAmJiBuLnNjb3BlTWV0cmljcy5sZW5ndGggfHwgKG4uc2NvcGVNZXRyaWNzID0gW10pLCBuLnNjb3BlTWV0cmljcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3MuZGVjb2RlKGUsIGUudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgIG4uc2NoZW1hVXJsID0gZS5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5yZXNvdXJjZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZVwiKSkge1xuICAgICAgICAgICAgICB2YXIgdCA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UudmVyaWZ5KGUucmVzb3VyY2UpO1xuICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZS5cIiArIHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5zY29wZU1ldHJpY3MgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic2NvcGVNZXRyaWNzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLnNjb3BlTWV0cmljcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2NvcGVNZXRyaWNzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuc2NvcGVNZXRyaWNzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHQgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLnZlcmlmeShlLnNjb3BlTWV0cmljc1tyXSk7XG4gICAgICAgICAgICAgICAgaWYgKHQpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJzY29wZU1ldHJpY3MuXCIgKyB0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpICYmICEkdXRpbC5pc1N0cmluZyhlLnNjaGVtYVVybCkgPyBcInNjaGVtYVVybDogc3RyaW5nIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcylcbiAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICB2YXIgdCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzKCk7XG4gICAgICAgICAgICBpZiAoZS5yZXNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5yZXNvdXJjZSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnJlc291cmNlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmZyb21PYmplY3QoZS5yZXNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5zY29wZU1ldHJpY3MpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuc2NvcGVNZXRyaWNzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcy5zY29wZU1ldHJpY3M6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LnNjb3BlTWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuc2NvcGVNZXRyaWNzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnNjb3BlTWV0cmljc1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3Muc2NvcGVNZXRyaWNzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5zY29wZU1ldHJpY3Nbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLmZyb21PYmplY3QoZS5zY29wZU1ldHJpY3Nbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiAodC5zY2hlbWFVcmwgPSBTdHJpbmcoZS5zY2hlbWFVcmwpKSwgdDtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgdCB8fCAodCA9IHt9KTtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAoKHQuYXJyYXlzIHx8IHQuZGVmYXVsdHMpICYmIChyLnNjb3BlTWV0cmljcyA9IFtdKSwgdC5kZWZhdWx0cyAmJiAoci5yZXNvdXJjZSA9IG51bGwsIHIuc2NoZW1hVXJsID0gXCJcIiksIGUucmVzb3VyY2UgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwicmVzb3VyY2VcIikgJiYgKHIucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLnRvT2JqZWN0KGUucmVzb3VyY2UsIHQpKSwgZS5zY29wZU1ldHJpY3MgJiYgZS5zY29wZU1ldHJpY3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIuc2NvcGVNZXRyaWNzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgZS5zY29wZU1ldHJpY3MubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgci5zY29wZU1ldHJpY3Nbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLnRvT2JqZWN0KGUuc2NvcGVNZXRyaWNzW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikgJiYgKHIuc2NoZW1hVXJsID0gZS5zY2hlbWFVcmwpLCByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3NcIjtcbiAgICAgICAgICB9LCBpO1xuICAgICAgICB9KCksIGYuU2NvcGVNZXRyaWNzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tZXRyaWNzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUuc2NvcGUgPSBudWxsLCBpLnByb3RvdHlwZS5tZXRyaWNzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuc2NoZW1hVXJsID0gbnVsbCwgaS5jcmVhdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBpZiAodCB8fCAodCA9ICRXcml0ZXIuY3JlYXRlKCkpLCBlLnNjb3BlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJzY29wZVwiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS5lbmNvZGUoZS5zY29wZSwgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCksIGUubWV0cmljcyAhPSBudWxsICYmIGUubWV0cmljcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5tZXRyaWNzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMuZW5jb2RlKGUubWV0cmljc1tyXSwgdC51aW50MzIoXG4gICAgICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgICAgMThcbiAgICAgICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInNjaGVtYVVybFwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMywgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMjZcbiAgICAgICAgICAgICkuc3RyaW5nKGUuc2NoZW1hVXJsKSwgdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3MoKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4uc2NvcGUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBuLm1ldHJpY3MgJiYgbi5tZXRyaWNzLmxlbmd0aCB8fCAobi5tZXRyaWNzID0gW10pLCBuLm1ldHJpY3MucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljLmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICBuLnNjaGVtYVVybCA9IGUuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGUuc2tpcFR5cGUobCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gbmV3ICRSZWFkZXIoZSkpLCB0aGlzLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8IGUgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUuc2NvcGUgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic2NvcGVcIikpIHtcbiAgICAgICAgICAgICAgdmFyIHQgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS52ZXJpZnkoZS5zY29wZSk7XG4gICAgICAgICAgICAgIGlmICh0KVxuICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlLlwiICsgdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLm1ldHJpY3MgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwibWV0cmljc1wiKSkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5tZXRyaWNzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJtZXRyaWNzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUubWV0cmljcy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIHZhciB0ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy52ZXJpZnkoZS5tZXRyaWNzW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1ldHJpY3MuXCIgKyB0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpICYmICEkdXRpbC5pc1N0cmluZyhlLnNjaGVtYVVybCkgPyBcInNjaGVtYVVybDogc3RyaW5nIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljcylcbiAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICB2YXIgdCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzKCk7XG4gICAgICAgICAgICBpZiAoZS5zY29wZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5zY29wZSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLnNjb3BlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQuc2NvcGUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS5mcm9tT2JqZWN0KGUuc2NvcGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUubWV0cmljcykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5tZXRyaWNzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljcy5tZXRyaWNzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5tZXRyaWNzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5tZXRyaWNzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLm1ldHJpY3Nbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLm1ldHJpY3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0Lm1ldHJpY3Nbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljLmZyb21PYmplY3QoZS5tZXRyaWNzW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuc2NoZW1hVXJsICE9IG51bGwgJiYgKHQuc2NoZW1hVXJsID0gU3RyaW5nKGUuc2NoZW1hVXJsKSksIHQ7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHQgfHwgKHQgPSB7fSk7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgaWYgKCh0LmFycmF5cyB8fCB0LmRlZmF1bHRzKSAmJiAoci5tZXRyaWNzID0gW10pLCB0LmRlZmF1bHRzICYmIChyLnNjb3BlID0gbnVsbCwgci5zY2hlbWFVcmwgPSBcIlwiKSwgZS5zY29wZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY29wZVwiKSAmJiAoci5zY29wZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLnRvT2JqZWN0KGUuc2NvcGUsIHQpKSwgZS5tZXRyaWNzICYmIGUubWV0cmljcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5tZXRyaWNzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgZS5tZXRyaWNzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgIHIubWV0cmljc1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMudG9PYmplY3QoZS5tZXRyaWNzW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikgJiYgKHIuc2NoZW1hVXJsID0gZS5zY2hlbWFVcmwpLCByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3NcIjtcbiAgICAgICAgICB9LCBpO1xuICAgICAgICB9KCksIGYuTWV0cmljID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShlKSB7XG4gICAgICAgICAgICBpZiAoZSlcbiAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IE9iamVjdC5rZXlzKGUpLCByID0gMDsgciA8IHQubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgZVt0W3JdXSAhPSBudWxsICYmICh0aGlzW3Rbcl1dID0gZVt0W3JdXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGkucHJvdG90eXBlLm5hbWUgPSBudWxsLCBpLnByb3RvdHlwZS5kZXNjcmlwdGlvbiA9IG51bGwsIGkucHJvdG90eXBlLnVuaXQgPSBudWxsLCBpLnByb3RvdHlwZS5nYXVnZSA9IG51bGwsIGkucHJvdG90eXBlLnN1bSA9IG51bGwsIGkucHJvdG90eXBlLmhpc3RvZ3JhbSA9IG51bGwsIGkucHJvdG90eXBlLmV4cG9uZW50aWFsSGlzdG9ncmFtID0gbnVsbCwgaS5wcm90b3R5cGUuc3VtbWFyeSA9IG51bGw7XG4gICAgICAgICAgdmFyIG87XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLnByb3RvdHlwZSwgXCJkYXRhXCIsIHtcbiAgICAgICAgICAgIGdldDogJHV0aWwub25lT2ZHZXR0ZXIobyA9IFtcImdhdWdlXCIsIFwic3VtXCIsIFwiaGlzdG9ncmFtXCIsIFwiZXhwb25lbnRpYWxIaXN0b2dyYW1cIiwgXCJzdW1tYXJ5XCJdKSxcbiAgICAgICAgICAgIHNldDogJHV0aWwub25lT2ZTZXR0ZXIobylcbiAgICAgICAgICB9KSwgaS5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkodCk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICByZXR1cm4gciB8fCAociA9ICRXcml0ZXIuY3JlYXRlKCkpLCB0Lm5hbWUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcIm5hbWVcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICApLnN0cmluZyh0Lm5hbWUpLCB0LmRlc2NyaXB0aW9uICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJkZXNjcmlwdGlvblwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMThcbiAgICAgICAgICAgICkuc3RyaW5nKHQuZGVzY3JpcHRpb24pLCB0LnVuaXQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInVuaXRcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDMsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDI2XG4gICAgICAgICAgICApLnN0cmluZyh0LnVuaXQpLCB0LmdhdWdlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJnYXVnZVwiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2UuZW5jb2RlKHQuZ2F1Z2UsIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA1LCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICA0MlxuICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCB0LnN1bSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwic3VtXCIpICYmICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW0uZW5jb2RlKHQuc3VtLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgNywgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgNThcbiAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKSwgdC5oaXN0b2dyYW0gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImhpc3RvZ3JhbVwiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtLmVuY29kZSh0Lmhpc3RvZ3JhbSwgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDksIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDc0XG4gICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCksIHQuZXhwb25lbnRpYWxIaXN0b2dyYW0gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImV4cG9uZW50aWFsSGlzdG9ncmFtXCIpICYmICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbS5lbmNvZGUodC5leHBvbmVudGlhbEhpc3RvZ3JhbSwgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDEwLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICA4MlxuICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCB0LnN1bW1hcnkgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInN1bW1hcnlcIikgJiYgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkuZW5jb2RlKHQuc3VtbWFyeSwgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDExLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICA5MFxuICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCByO1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHQsIHIpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICBmb3IgKHZhciBuID0gciA9PT0gdm9pZCAwID8gdC5sZW4gOiB0LnBvcyArIHIsIGwgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYygpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICB2YXIgcCA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAocCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgbC5uYW1lID0gdC5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgIGwuZGVzY3JpcHRpb24gPSB0LnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgbC51bml0ID0gdC5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgIGwuZ2F1Z2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2UuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgbC5zdW0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDk6IHtcbiAgICAgICAgICAgICAgICAgIGwuaGlzdG9ncmFtID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbS5kZWNvZGUodCwgdC51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAxMDoge1xuICAgICAgICAgICAgICAgICAgbC5leHBvbmVudGlhbEhpc3RvZ3JhbSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbS5kZWNvZGUodCwgdC51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAxMToge1xuICAgICAgICAgICAgICAgICAgbC5zdW1tYXJ5ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICB0LnNraXBUeXBlKHAgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9IG5ldyAkUmVhZGVyKHQpKSwgdGhpcy5kZWNvZGUodCwgdC51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAodC5uYW1lICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcIm5hbWVcIikgJiYgISR1dGlsLmlzU3RyaW5nKHQubmFtZSkpXG4gICAgICAgICAgICAgIHJldHVybiBcIm5hbWU6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuZGVzY3JpcHRpb24gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZGVzY3JpcHRpb25cIikgJiYgISR1dGlsLmlzU3RyaW5nKHQuZGVzY3JpcHRpb24pKVxuICAgICAgICAgICAgICByZXR1cm4gXCJkZXNjcmlwdGlvbjogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAodC51bml0ICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInVuaXRcIikgJiYgISR1dGlsLmlzU3RyaW5nKHQudW5pdCkpXG4gICAgICAgICAgICAgIHJldHVybiBcInVuaXQ6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuZ2F1Z2UgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZ2F1Z2VcIikpIHtcbiAgICAgICAgICAgICAgci5kYXRhID0gMTtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBuID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlLnZlcmlmeSh0LmdhdWdlKTtcbiAgICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImdhdWdlLlwiICsgbjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuc3VtICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSkge1xuICAgICAgICAgICAgICBpZiAoci5kYXRhID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGE6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICByLmRhdGEgPSAxO1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtLnZlcmlmeSh0LnN1bSk7XG4gICAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdW0uXCIgKyBuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5oaXN0b2dyYW0gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiaGlzdG9ncmFtXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChyLmRhdGEgPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgIHIuZGF0YSA9IDE7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0udmVyaWZ5KHQuaGlzdG9ncmFtKTtcbiAgICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImhpc3RvZ3JhbS5cIiArIG47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmV4cG9uZW50aWFsSGlzdG9ncmFtICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImV4cG9uZW50aWFsSGlzdG9ncmFtXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChyLmRhdGEgPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgIHIuZGF0YSA9IDE7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbS52ZXJpZnkodC5leHBvbmVudGlhbEhpc3RvZ3JhbSk7XG4gICAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJleHBvbmVudGlhbEhpc3RvZ3JhbS5cIiArIG47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LnN1bW1hcnkgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwic3VtbWFyeVwiKSkge1xuICAgICAgICAgICAgICBpZiAoci5kYXRhID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGE6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICByLmRhdGEgPSAxO1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeS52ZXJpZnkodC5zdW1tYXJ5KTtcbiAgICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInN1bW1hcnkuXCIgKyBuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMpXG4gICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgdmFyIHIgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYygpO1xuICAgICAgICAgICAgaWYgKHQubmFtZSAhPSBudWxsICYmIChyLm5hbWUgPSBTdHJpbmcodC5uYW1lKSksIHQuZGVzY3JpcHRpb24gIT0gbnVsbCAmJiAoci5kZXNjcmlwdGlvbiA9IFN0cmluZyh0LmRlc2NyaXB0aW9uKSksIHQudW5pdCAhPSBudWxsICYmIChyLnVuaXQgPSBTdHJpbmcodC51bml0KSksIHQuZ2F1Z2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuZ2F1Z2UgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5nYXVnZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICByLmdhdWdlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlLmZyb21PYmplY3QodC5nYXVnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5zdW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuc3VtICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMuc3VtOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHIuc3VtID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bS5mcm9tT2JqZWN0KHQuc3VtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0Lmhpc3RvZ3JhbSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5oaXN0b2dyYW0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5oaXN0b2dyYW06IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgci5oaXN0b2dyYW0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtLmZyb21PYmplY3QodC5oaXN0b2dyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuZXhwb25lbnRpYWxIaXN0b2dyYW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuZXhwb25lbnRpYWxIaXN0b2dyYW0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5leHBvbmVudGlhbEhpc3RvZ3JhbTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICByLmV4cG9uZW50aWFsSGlzdG9ncmFtID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLmZyb21PYmplY3QodC5leHBvbmVudGlhbEhpc3RvZ3JhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5zdW1tYXJ5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0LnN1bW1hcnkgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5zdW1tYXJ5OiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHIuc3VtbWFyeSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5LmZyb21PYmplY3QodC5zdW1tYXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICByIHx8IChyID0ge30pO1xuICAgICAgICAgICAgdmFyIG4gPSB7fTtcbiAgICAgICAgICAgIHJldHVybiByLmRlZmF1bHRzICYmIChuLm5hbWUgPSBcIlwiLCBuLmRlc2NyaXB0aW9uID0gXCJcIiwgbi51bml0ID0gXCJcIiksIHQubmFtZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpICYmIChuLm5hbWUgPSB0Lm5hbWUpLCB0LmRlc2NyaXB0aW9uICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImRlc2NyaXB0aW9uXCIpICYmIChuLmRlc2NyaXB0aW9uID0gdC5kZXNjcmlwdGlvbiksIHQudW5pdCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ1bml0XCIpICYmIChuLnVuaXQgPSB0LnVuaXQpLCB0LmdhdWdlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImdhdWdlXCIpICYmIChuLmdhdWdlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlLnRvT2JqZWN0KHQuZ2F1Z2UsIHIpLCByLm9uZW9mcyAmJiAobi5kYXRhID0gXCJnYXVnZVwiKSksIHQuc3VtICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSAmJiAobi5zdW0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtLnRvT2JqZWN0KHQuc3VtLCByKSwgci5vbmVvZnMgJiYgKG4uZGF0YSA9IFwic3VtXCIpKSwgdC5oaXN0b2dyYW0gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiaGlzdG9ncmFtXCIpICYmIChuLmhpc3RvZ3JhbSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0udG9PYmplY3QodC5oaXN0b2dyYW0sIHIpLCByLm9uZW9mcyAmJiAobi5kYXRhID0gXCJoaXN0b2dyYW1cIikpLCB0LmV4cG9uZW50aWFsSGlzdG9ncmFtICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImV4cG9uZW50aWFsSGlzdG9ncmFtXCIpICYmIChuLmV4cG9uZW50aWFsSGlzdG9ncmFtID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLnRvT2JqZWN0KHQuZXhwb25lbnRpYWxIaXN0b2dyYW0sIHIpLCByLm9uZW9mcyAmJiAobi5kYXRhID0gXCJleHBvbmVudGlhbEhpc3RvZ3JhbVwiKSksIHQuc3VtbWFyeSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJzdW1tYXJ5XCIpICYmIChuLnN1bW1hcnkgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeS50b09iamVjdCh0LnN1bW1hcnksIHIpLCByLm9uZW9mcyAmJiAobi5kYXRhID0gXCJzdW1tYXJ5XCIpKSwgbjtcbiAgICAgICAgICB9LCBpLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgIH0sIGkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIHQgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLkdhdWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhUG9pbnRzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUuZGF0YVBvaW50cyA9ICR1dGlsLmVtcHR5QXJyYXksIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgaWYgKHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS5kYXRhUG9pbnRzICE9IG51bGwgJiYgZS5kYXRhUG9pbnRzLmxlbmd0aClcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmRhdGFQb2ludHMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC5lbmNvZGUoZS5kYXRhUG9pbnRzW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLmRhdGFQb2ludHMgJiYgbi5kYXRhUG9pbnRzLmxlbmd0aCB8fCAobi5kYXRhUG9pbnRzID0gW10pLCBuLmRhdGFQb2ludHMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGUuc2tpcFR5cGUobCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gbmV3ICRSZWFkZXIoZSkpLCB0aGlzLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8IGUgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUuZGF0YVBvaW50cyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJkYXRhUG9pbnRzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LnZlcmlmeShlLmRhdGFQb2ludHNbdF0pO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50cy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZSgpO1xuICAgICAgICAgICAgaWYgKGUuZGF0YVBvaW50cykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlLmRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmRhdGFQb2ludHMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuZGF0YVBvaW50c1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZS5kYXRhUG9pbnRzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5kYXRhUG9pbnRzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC5mcm9tT2JqZWN0KGUuZGF0YVBvaW50c1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIuZGF0YVBvaW50cyA9IFtdKSwgZS5kYXRhUG9pbnRzICYmIGUuZGF0YVBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgIHIuZGF0YVBvaW50c1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQudG9PYmplY3QoZS5kYXRhUG9pbnRzW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZVwiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZi5TdW0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jdGlvbiBpKG8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFQb2ludHMgPSBbXSwgbylcbiAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IE9iamVjdC5rZXlzKG8pLCB0ID0gMDsgdCA8IGUubGVuZ3RoOyArK3QpXG4gICAgICAgICAgICAgICAgb1tlW3RdXSAhPSBudWxsICYmICh0aGlzW2VbdF1dID0gb1tlW3RdXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnByb3RvdHlwZS5kYXRhUG9pbnRzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IG51bGwsIGkucHJvdG90eXBlLmlzTW9ub3RvbmljID0gbnVsbCwgaS5jcmVhdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBpZiAodCB8fCAodCA9ICRXcml0ZXIuY3JlYXRlKCkpLCBlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBlLmRhdGFQb2ludHMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuZGF0YVBvaW50cy5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmVuY29kZShlLmRhdGFQb2ludHNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgMTZcbiAgICAgICAgICAgICkuaW50MzIoZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5KSwgZS5pc01vbm90b25pYyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiaXNNb25vdG9uaWNcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDMsIHdpcmVUeXBlIDAgPSovXG4gICAgICAgICAgICAgIDI0XG4gICAgICAgICAgICApLmJvb2woZS5pc01vbm90b25pYyksIHQ7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoZSwgdCkubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9ICRSZWFkZXIuY3JlYXRlKGUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSB0ID09PSB2b2lkIDAgPyBlLmxlbiA6IGUucG9zICsgdCwgbiA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLmRhdGFQb2ludHMgJiYgbi5kYXRhUG9pbnRzLmxlbmd0aCB8fCAobi5kYXRhUG9pbnRzID0gW10pLCBuLmRhdGFQb2ludHMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBuLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBlLmludDMyKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICBuLmlzTW9ub3RvbmljID0gZS5ib29sKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGUuc2tpcFR5cGUobCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gbmV3ICRSZWFkZXIoZSkpLCB0aGlzLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8IGUgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUuZGF0YVBvaW50cyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJkYXRhUG9pbnRzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LnZlcmlmeShlLmRhdGFQb2ludHNbdF0pO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50cy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSlcbiAgICAgICAgICAgICAgc3dpdGNoIChlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eTogZW51bSB2YWx1ZSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmlzTW9ub3RvbmljICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImlzTW9ub3RvbmljXCIpICYmIHR5cGVvZiBlLmlzTW9ub3RvbmljICE9IFwiYm9vbGVhblwiID8gXCJpc01vbm90b25pYzogYm9vbGVhbiBleHBlY3RlZFwiIDogbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW0pXG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bSgpO1xuICAgICAgICAgICAgaWYgKGUuZGF0YVBvaW50cykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bS5kYXRhUG9pbnRzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLmRhdGFQb2ludHNbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtLmRhdGFQb2ludHM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LmRhdGFQb2ludHNbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmZyb21PYmplY3QoZS5kYXRhUG9pbnRzW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICB0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRFwiOlxuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0RFTFRBXCI6XG4gICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICB0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfQ1VNVUxBVElWRVwiOlxuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmlzTW9ub3RvbmljICE9IG51bGwgJiYgKHQuaXNNb25vdG9uaWMgPSAhIWUuaXNNb25vdG9uaWMpLCB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIuZGF0YVBvaW50cyA9IFtdKSwgdC5kZWZhdWx0cyAmJiAoci5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gdC5lbnVtcyA9PT0gU3RyaW5nID8gXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRFwiIDogMCwgci5pc01vbm90b25pYyA9ICExKSwgZS5kYXRhUG9pbnRzICYmIGUuZGF0YVBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgIHIuZGF0YVBvaW50c1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQudG9PYmplY3QoZS5kYXRhUG9pbnRzW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSAmJiAoci5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gdC5lbnVtcyA9PT0gU3RyaW5nID8gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSA9PT0gdm9pZCAwID8gZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5IDogJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSA6IGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSksIGUuaXNNb25vdG9uaWMgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiaXNNb25vdG9uaWNcIikgJiYgKHIuaXNNb25vdG9uaWMgPSBlLmlzTW9ub3RvbmljKSwgcjtcbiAgICAgICAgICB9LCBpLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgIH0sIGkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIGUgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLkhpc3RvZ3JhbSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkobykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVBvaW50cyA9IFtdLCBvKVxuICAgICAgICAgICAgICBmb3IgKHZhciBlID0gT2JqZWN0LmtleXMobyksIHQgPSAwOyB0IDwgZS5sZW5ndGg7ICsrdClcbiAgICAgICAgICAgICAgICBvW2VbdF1dICE9IG51bGwgJiYgKHRoaXNbZVt0XV0gPSBvW2VbdF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkucHJvdG90eXBlLmRhdGFQb2ludHMgPSAkdXRpbC5lbXB0eUFycmF5LCBpLnByb3RvdHlwZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gbnVsbCwgaS5jcmVhdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBpZiAodCB8fCAodCA9ICRXcml0ZXIuY3JlYXRlKCkpLCBlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBlLmRhdGFQb2ludHMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuZGF0YVBvaW50cy5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmVuY29kZShlLmRhdGFQb2ludHNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgMTZcbiAgICAgICAgICAgICkuaW50MzIoZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5KSwgdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0oKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4uZGF0YVBvaW50cyAmJiBuLmRhdGFQb2ludHMubGVuZ3RoIHx8IChuLmRhdGFQb2ludHMgPSBbXSksIG4uZGF0YVBvaW50cy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQuZGVjb2RlKGUsIGUudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgIG4uYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IGUuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5kYXRhUG9pbnRzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImRhdGFQb2ludHNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuZGF0YVBvaW50cykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50czogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCBlLmRhdGFQb2ludHMubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQudmVyaWZ5KGUuZGF0YVBvaW50c1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRhUG9pbnRzLlwiICsgcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJhZ2dyZWdhdGlvblRlbXBvcmFsaXR5XCIpKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSkge1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJhZ2dyZWdhdGlvblRlbXBvcmFsaXR5OiBlbnVtIHZhbHVlIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSwgaS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0oKTtcbiAgICAgICAgICAgIGlmIChlLmRhdGFQb2ludHMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuZGF0YVBvaW50cykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0uZGF0YVBvaW50czogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuZGF0YVBvaW50cy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5kYXRhUG9pbnRzW3JdICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbS5kYXRhUG9pbnRzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5kYXRhUG9pbnRzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludC5mcm9tT2JqZWN0KGUuZGF0YVBvaW50c1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5KSB7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfVU5TUEVDSUZJRURcIjpcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHQuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9ERUxUQVwiOlxuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0NVTVVMQVRJVkVcIjpcbiAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHQuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgdCB8fCAodCA9IHt9KTtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAoKHQuYXJyYXlzIHx8IHQuZGVmYXVsdHMpICYmIChyLmRhdGFQb2ludHMgPSBbXSksIHQuZGVmYXVsdHMgJiYgKHIuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IHQuZW51bXMgPT09IFN0cmluZyA/IFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfVU5TUEVDSUZJRURcIiA6IDApLCBlLmRhdGFQb2ludHMgJiYgZS5kYXRhUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByLmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLmRhdGFQb2ludHMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgci5kYXRhUG9pbnRzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludC50b09iamVjdChlLmRhdGFQb2ludHNbbl0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJhZ2dyZWdhdGlvblRlbXBvcmFsaXR5XCIpICYmIChyLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSB0LmVudW1zID09PSBTdHJpbmcgPyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuQWdncmVnYXRpb25UZW1wb3JhbGl0eVtlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHldID09PSB2b2lkIDAgPyBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgOiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuQWdncmVnYXRpb25UZW1wb3JhbGl0eVtlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHldIDogZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5KSwgcjtcbiAgICAgICAgICB9LCBpLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgIH0sIGkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIGUgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLkV4cG9uZW50aWFsSGlzdG9ncmFtID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhUG9pbnRzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUuZGF0YVBvaW50cyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBudWxsLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGlmICh0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUuZGF0YVBvaW50cyAhPSBudWxsICYmIGUuZGF0YVBvaW50cy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5lbmNvZGUoZS5kYXRhUG9pbnRzW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDAgPSovXG4gICAgICAgICAgICAgIDE2XG4gICAgICAgICAgICApLmludDMyKGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSksIHQ7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoZSwgdCkubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9ICRSZWFkZXIuY3JlYXRlKGUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSB0ID09PSB2b2lkIDAgPyBlLmxlbiA6IGUucG9zICsgdCwgbiA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW0oKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4uZGF0YVBvaW50cyAmJiBuLmRhdGFQb2ludHMubGVuZ3RoIHx8IChuLmRhdGFQb2ludHMgPSBbXSksIG4uZGF0YVBvaW50cy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgbi5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gZS5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiZGF0YVBvaW50c1wiKSkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRhUG9pbnRzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IGUuZGF0YVBvaW50cy5sZW5ndGg7ICsrdCkge1xuICAgICAgICAgICAgICAgIHZhciByID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LnZlcmlmeShlLmRhdGFQb2ludHNbdF0pO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50cy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSlcbiAgICAgICAgICAgICAgc3dpdGNoIChlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eTogZW51bSB2YWx1ZSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbSgpO1xuICAgICAgICAgICAgaWYgKGUuZGF0YVBvaW50cykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLmRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmRhdGFQb2ludHMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuZGF0YVBvaW50c1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbS5kYXRhUG9pbnRzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5kYXRhUG9pbnRzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmZyb21PYmplY3QoZS5kYXRhUG9pbnRzW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICB0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRFwiOlxuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0RFTFRBXCI6XG4gICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICB0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfQ1VNVUxBVElWRVwiOlxuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIuZGF0YVBvaW50cyA9IFtdKSwgdC5kZWZhdWx0cyAmJiAoci5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gdC5lbnVtcyA9PT0gU3RyaW5nID8gXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRFwiIDogMCksIGUuZGF0YVBvaW50cyAmJiBlLmRhdGFQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGUuZGF0YVBvaW50cy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLmRhdGFQb2ludHNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQudG9PYmplY3QoZS5kYXRhUG9pbnRzW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSAmJiAoci5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gdC5lbnVtcyA9PT0gU3RyaW5nID8gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSA9PT0gdm9pZCAwID8gZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5IDogJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSA6IGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSksIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLlN1bW1hcnkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jdGlvbiBpKG8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFQb2ludHMgPSBbXSwgbylcbiAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IE9iamVjdC5rZXlzKG8pLCB0ID0gMDsgdCA8IGUubGVuZ3RoOyArK3QpXG4gICAgICAgICAgICAgICAgb1tlW3RdXSAhPSBudWxsICYmICh0aGlzW2VbdF1dID0gb1tlW3RdXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnByb3RvdHlwZS5kYXRhUG9pbnRzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5jcmVhdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBpZiAodCB8fCAodCA9ICRXcml0ZXIuY3JlYXRlKCkpLCBlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBlLmRhdGFQb2ludHMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuZGF0YVBvaW50cy5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5lbmNvZGUoZS5kYXRhUG9pbnRzW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkoKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4uZGF0YVBvaW50cyAmJiBuLmRhdGFQb2ludHMubGVuZ3RoIHx8IChuLmRhdGFQb2ludHMgPSBbXSksIG4uZGF0YVBvaW50cy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGUuc2tpcFR5cGUobCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gbmV3ICRSZWFkZXIoZSkpLCB0aGlzLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8IGUgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUuZGF0YVBvaW50cyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJkYXRhUG9pbnRzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC52ZXJpZnkoZS5kYXRhUG9pbnRzW3RdKTtcbiAgICAgICAgICAgICAgICBpZiAocilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHMuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5KVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5KCk7XG4gICAgICAgICAgICBpZiAoZS5kYXRhUG9pbnRzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeS5kYXRhUG9pbnRzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLmRhdGFQb2ludHNbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeS5kYXRhUG9pbnRzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5kYXRhUG9pbnRzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuZnJvbU9iamVjdChlLmRhdGFQb2ludHNbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgdCB8fCAodCA9IHt9KTtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAoKHQuYXJyYXlzIHx8IHQuZGVmYXVsdHMpICYmIChyLmRhdGFQb2ludHMgPSBbXSksIGUuZGF0YVBvaW50cyAmJiBlLmRhdGFQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGUuZGF0YVBvaW50cy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLmRhdGFQb2ludHNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC50b09iamVjdChlLmRhdGFQb2ludHNbbl0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlcIjtcbiAgICAgICAgICB9LCBpO1xuICAgICAgICB9KCksIGYuQWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpID0ge30sIG8gPSBPYmplY3QuY3JlYXRlKGkpO1xuICAgICAgICAgIHJldHVybiBvW2lbMF0gPSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1VOU1BFQ0lGSUVEXCJdID0gMCwgb1tpWzFdID0gXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9ERUxUQVwiXSA9IDEsIG9baVsyXSA9IFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfQ1VNVUxBVElWRVwiXSA9IDIsIG87XG4gICAgICAgIH0oKSwgZi5EYXRhUG9pbnRGbGFncyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpID0ge30sIG8gPSBPYmplY3QuY3JlYXRlKGkpO1xuICAgICAgICAgIHJldHVybiBvW2lbMF0gPSBcIkRBVEFfUE9JTlRfRkxBR1NfRE9fTk9UX1VTRVwiXSA9IDAsIG9baVsxXSA9IFwiREFUQV9QT0lOVF9GTEFHU19OT19SRUNPUkRFRF9WQUxVRV9NQVNLXCJdID0gMSwgbztcbiAgICAgICAgfSgpLCBmLk51bWJlckRhdGFQb2ludCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkoZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcyA9IFtdLCB0aGlzLmV4ZW1wbGFycyA9IFtdLCBlKVxuICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gT2JqZWN0LmtleXMoZSksIHIgPSAwOyByIDwgdC5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICBlW3Rbcl1dICE9IG51bGwgJiYgKHRoaXNbdFtyXV0gPSBlW3Rbcl1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaS5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLnN0YXJ0VGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUudGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUuYXNEb3VibGUgPSBudWxsLCBpLnByb3RvdHlwZS5hc0ludCA9IG51bGwsIGkucHJvdG90eXBlLmV4ZW1wbGFycyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLmZsYWdzID0gbnVsbDtcbiAgICAgICAgICB2YXIgbztcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgICAgICAgICAgIGdldDogJHV0aWwub25lT2ZHZXR0ZXIobyA9IFtcImFzRG91YmxlXCIsIFwiYXNJbnRcIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaSh0KTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgIGlmIChyIHx8IChyID0gJFdyaXRlci5jcmVhdGUoKSksIHQuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAxN1xuICAgICAgICAgICAgKS5maXhlZDY0KHQuc3RhcnRUaW1lVW5peE5hbm8pLCB0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwidGltZVVuaXhOYW5vXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAyNVxuICAgICAgICAgICAgKS5maXhlZDY0KHQudGltZVVuaXhOYW5vKSwgdC5hc0RvdWJsZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiYXNEb3VibGVcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDQsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDMzXG4gICAgICAgICAgICApLmRvdWJsZSh0LmFzRG91YmxlKSwgdC5leGVtcGxhcnMgIT0gbnVsbCAmJiB0LmV4ZW1wbGFycy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5leGVtcGxhcnMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmVuY29kZSh0LmV4ZW1wbGFyc1tuXSwgci51aW50MzIoXG4gICAgICAgICAgICAgICAgICAvKiBpZCA1LCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgICAgNDJcbiAgICAgICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICBpZiAodC5hc0ludCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiYXNJbnRcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDYsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDQ5XG4gICAgICAgICAgICApLnNmaXhlZDY0KHQuYXNJbnQpLCB0LmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiB0LmF0dHJpYnV0ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUodC5hdHRyaWJ1dGVzW25dLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDcsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICA1OFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiB0LmZsYWdzICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJmbGFnc1wiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgOCwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgNjRcbiAgICAgICAgICAgICkudWludDMyKHQuZmxhZ3MpLCByO1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHQsIHIpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICBmb3IgKHZhciBuID0gciA9PT0gdm9pZCAwID8gdC5sZW4gOiB0LnBvcyArIHIsIGwgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludCgpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICB2YXIgcCA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAocCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgbC5hdHRyaWJ1dGVzICYmIGwuYXR0cmlidXRlcy5sZW5ndGggfHwgKGwuYXR0cmlidXRlcyA9IFtdKSwgbC5hdHRyaWJ1dGVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZGVjb2RlKHQsIHQudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgIGwuc3RhcnRUaW1lVW5peE5hbm8gPSB0LmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgIGwudGltZVVuaXhOYW5vID0gdC5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICBsLmFzRG91YmxlID0gdC5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDY6IHtcbiAgICAgICAgICAgICAgICAgIGwuYXNJbnQgPSB0LnNmaXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICBsLmV4ZW1wbGFycyAmJiBsLmV4ZW1wbGFycy5sZW5ndGggfHwgKGwuZXhlbXBsYXJzID0gW10pLCBsLmV4ZW1wbGFycy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5kZWNvZGUodCwgdC51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgODoge1xuICAgICAgICAgICAgICAgICAgbC5mbGFncyA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICh0LmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiYXR0cmlidXRlc1wiKSkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgIHZhciBsID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5KHQuYXR0cmlidXRlc1tuXSk7XG4gICAgICAgICAgICAgICAgaWYgKGwpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzLlwiICsgbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwic3RhcnRUaW1lVW5peE5hbm9cIikgJiYgISR1dGlsLmlzSW50ZWdlcih0LnN0YXJ0VGltZVVuaXhOYW5vKSAmJiAhKHQuc3RhcnRUaW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKHQuc3RhcnRUaW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIodC5zdGFydFRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgIHJldHVybiBcInN0YXJ0VGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmICh0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikgJiYgISR1dGlsLmlzSW50ZWdlcih0LnRpbWVVbml4TmFubykgJiYgISh0LnRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIodC50aW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIodC50aW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJ0aW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuYXNEb3VibGUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiYXNEb3VibGVcIikgJiYgKHIudmFsdWUgPSAxLCB0eXBlb2YgdC5hc0RvdWJsZSAhPSBcIm51bWJlclwiKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwiYXNEb3VibGU6IG51bWJlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuYXNJbnQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiYXNJbnRcIikpIHtcbiAgICAgICAgICAgICAgaWYgKHIudmFsdWUgPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidmFsdWU6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICBpZiAoci52YWx1ZSA9IDEsICEkdXRpbC5pc0ludGVnZXIodC5hc0ludCkgJiYgISh0LmFzSW50ICYmICR1dGlsLmlzSW50ZWdlcih0LmFzSW50LmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKHQuYXNJbnQuaGlnaCkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImFzSW50OiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmV4ZW1wbGFycyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJleGVtcGxhcnNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuZXhlbXBsYXJzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJleGVtcGxhcnM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5leGVtcGxhcnMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci52ZXJpZnkodC5leGVtcGxhcnNbbl0pO1xuICAgICAgICAgICAgICAgIGlmIChsKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXhlbXBsYXJzLlwiICsgbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQuZmxhZ3MgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikgJiYgISR1dGlsLmlzSW50ZWdlcih0LmZsYWdzKSA/IFwiZmxhZ3M6IGludGVnZXIgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgfSwgaS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50KVxuICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgIHZhciByID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQoKTtcbiAgICAgICAgICAgIGlmICh0LmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQuYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHIuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5hdHRyaWJ1dGVzW25dICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgci5hdHRyaWJ1dGVzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdCh0LmF0dHJpYnV0ZXNbbl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIuc3RhcnRUaW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZSh0LnN0YXJ0VGltZVVuaXhOYW5vKSkudW5zaWduZWQgPSAhMSA6IHR5cGVvZiB0LnN0YXJ0VGltZVVuaXhOYW5vID09IFwic3RyaW5nXCIgPyByLnN0YXJ0VGltZVVuaXhOYW5vID0gcGFyc2VJbnQodC5zdGFydFRpbWVVbml4TmFubywgMTApIDogdHlwZW9mIHQuc3RhcnRUaW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHIuc3RhcnRUaW1lVW5peE5hbm8gPSB0LnN0YXJ0VGltZVVuaXhOYW5vIDogdHlwZW9mIHQuc3RhcnRUaW1lVW5peE5hbm8gPT0gXCJvYmplY3RcIiAmJiAoci5zdGFydFRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyh0LnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgdC5zdGFydFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQudGltZVVuaXhOYW5vICE9IG51bGwgJiYgKCR1dGlsLkxvbmcgPyAoci50aW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZSh0LnRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJzdHJpbmdcIiA/IHIudGltZVVuaXhOYW5vID0gcGFyc2VJbnQodC50aW1lVW5peE5hbm8sIDEwKSA6IHR5cGVvZiB0LnRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gci50aW1lVW5peE5hbm8gPSB0LnRpbWVVbml4TmFubyA6IHR5cGVvZiB0LnRpbWVVbml4TmFubyA9PSBcIm9iamVjdFwiICYmIChyLnRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyh0LnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIHQudGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkpKSwgdC5hc0RvdWJsZSAhPSBudWxsICYmIChyLmFzRG91YmxlID0gTnVtYmVyKHQuYXNEb3VibGUpKSwgdC5hc0ludCAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIuYXNJbnQgPSAkdXRpbC5Mb25nLmZyb21WYWx1ZSh0LmFzSW50KSkudW5zaWduZWQgPSAhMSA6IHR5cGVvZiB0LmFzSW50ID09IFwic3RyaW5nXCIgPyByLmFzSW50ID0gcGFyc2VJbnQodC5hc0ludCwgMTApIDogdHlwZW9mIHQuYXNJbnQgPT0gXCJudW1iZXJcIiA/IHIuYXNJbnQgPSB0LmFzSW50IDogdHlwZW9mIHQuYXNJbnQgPT0gXCJvYmplY3RcIiAmJiAoci5hc0ludCA9IG5ldyAkdXRpbC5Mb25nQml0cyh0LmFzSW50LmxvdyA+Pj4gMCwgdC5hc0ludC5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQuZXhlbXBsYXJzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmV4ZW1wbGFycykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQuZXhlbXBsYXJzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgci5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmV4ZW1wbGFycy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5leGVtcGxhcnNbbl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmV4ZW1wbGFyczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHIuZXhlbXBsYXJzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmZyb21PYmplY3QodC5leGVtcGxhcnNbbl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdC5mbGFncyAhPSBudWxsICYmIChyLmZsYWdzID0gdC5mbGFncyA+Pj4gMCksIHI7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgaWYgKChyLmFycmF5cyB8fCByLmRlZmF1bHRzKSAmJiAobi5leGVtcGxhcnMgPSBbXSwgbi5hdHRyaWJ1dGVzID0gW10pLCByLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgdmFyIGwgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCAhMSk7XG4gICAgICAgICAgICAgICAgbi5zdGFydFRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IGwudG9TdHJpbmcoKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IGwudG9OdW1iZXIoKSA6IGw7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIG4uc3RhcnRUaW1lVW5peE5hbm8gPSByLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgdmFyIGwgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCAhMSk7XG4gICAgICAgICAgICAgICAgbi50aW1lVW5peE5hbm8gPSByLmxvbmdzID09PSBTdHJpbmcgPyBsLnRvU3RyaW5nKCkgOiByLmxvbmdzID09PSBOdW1iZXIgPyBsLnRvTnVtYmVyKCkgOiBsO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgbi5mbGFncyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSAmJiAodHlwZW9mIHQuc3RhcnRUaW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IG4uc3RhcnRUaW1lVW5peE5hbm8gPSByLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcodC5zdGFydFRpbWVVbml4TmFubykgOiB0LnN0YXJ0VGltZVVuaXhOYW5vIDogbi5zdGFydFRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodC5zdGFydFRpbWVVbml4TmFubykgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC5zdGFydFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIHQuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IHQuc3RhcnRUaW1lVW5peE5hbm8pLCB0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikgJiYgKHR5cGVvZiB0LnRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gbi50aW1lVW5peE5hbm8gPSByLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcodC50aW1lVW5peE5hbm8pIDogdC50aW1lVW5peE5hbm8gOiBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodC50aW1lVW5peE5hbm8pIDogci5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKHQudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgdC50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IHQudGltZVVuaXhOYW5vKSwgdC5hc0RvdWJsZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhc0RvdWJsZVwiKSAmJiAobi5hc0RvdWJsZSA9IHIuanNvbiAmJiAhaXNGaW5pdGUodC5hc0RvdWJsZSkgPyBTdHJpbmcodC5hc0RvdWJsZSkgOiB0LmFzRG91YmxlLCByLm9uZW9mcyAmJiAobi52YWx1ZSA9IFwiYXNEb3VibGVcIikpLCB0LmV4ZW1wbGFycyAmJiB0LmV4ZW1wbGFycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgbi5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCB0LmV4ZW1wbGFycy5sZW5ndGg7ICsrcClcbiAgICAgICAgICAgICAgICBuLmV4ZW1wbGFyc1twXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci50b09iamVjdCh0LmV4ZW1wbGFyc1twXSwgcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5hc0ludCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhc0ludFwiKSAmJiAodHlwZW9mIHQuYXNJbnQgPT0gXCJudW1iZXJcIiA/IG4uYXNJbnQgPSByLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcodC5hc0ludCkgOiB0LmFzSW50IDogbi5hc0ludCA9IHIubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodC5hc0ludCkgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC5hc0ludC5sb3cgPj4+IDAsIHQuYXNJbnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IHQuYXNJbnQsIHIub25lb2ZzICYmIChuLnZhbHVlID0gXCJhc0ludFwiKSksIHQuYXR0cmlidXRlcyAmJiB0LmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIG4uYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrcClcbiAgICAgICAgICAgICAgICBuLmF0dHJpYnV0ZXNbcF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdCh0LmF0dHJpYnV0ZXNbcF0sIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQuZmxhZ3MgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikgJiYgKG4uZmxhZ3MgPSB0LmZsYWdzKSwgbjtcbiAgICAgICAgICB9LCBpLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgIH0sIGkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIHQgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50XCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLkhpc3RvZ3JhbURhdGFQb2ludCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkoZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcyA9IFtdLCB0aGlzLmJ1Y2tldENvdW50cyA9IFtdLCB0aGlzLmV4cGxpY2l0Qm91bmRzID0gW10sIHRoaXMuZXhlbXBsYXJzID0gW10sIGUpXG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhlKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgIGVbdFtyXV0gIT0gbnVsbCAmJiAodGhpc1t0W3JdXSA9IGVbdFtyXV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpLnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuc3RhcnRUaW1lVW5peE5hbm8gPSBudWxsLCBpLnByb3RvdHlwZS50aW1lVW5peE5hbm8gPSBudWxsLCBpLnByb3RvdHlwZS5jb3VudCA9IG51bGwsIGkucHJvdG90eXBlLnN1bSA9IG51bGwsIGkucHJvdG90eXBlLmJ1Y2tldENvdW50cyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLmV4cGxpY2l0Qm91bmRzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuZXhlbXBsYXJzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuZmxhZ3MgPSBudWxsLCBpLnByb3RvdHlwZS5taW4gPSBudWxsLCBpLnByb3RvdHlwZS5tYXggPSBudWxsO1xuICAgICAgICAgIHZhciBvO1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIFwiX3N1bVwiLCB7XG4gICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKG8gPSBbXCJzdW1cIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIFwiX21pblwiLCB7XG4gICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKG8gPSBbXCJtaW5cIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIFwiX21heFwiLCB7XG4gICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKG8gPSBbXCJtYXhcIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaSh0KTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgIGlmIChyIHx8IChyID0gJFdyaXRlci5jcmVhdGUoKSksIHQuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAxN1xuICAgICAgICAgICAgKS5maXhlZDY0KHQuc3RhcnRUaW1lVW5peE5hbm8pLCB0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwidGltZVVuaXhOYW5vXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAyNVxuICAgICAgICAgICAgKS5maXhlZDY0KHQudGltZVVuaXhOYW5vKSwgdC5jb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiY291bnRcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDQsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDMzXG4gICAgICAgICAgICApLmZpeGVkNjQodC5jb3VudCksIHQuc3VtICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJzdW1cIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDUsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDQxXG4gICAgICAgICAgICApLmRvdWJsZSh0LnN1bSksIHQuYnVja2V0Q291bnRzICE9IG51bGwgJiYgdC5idWNrZXRDb3VudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIudWludDMyKFxuICAgICAgICAgICAgICAgIC8qIGlkIDYsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgNTBcbiAgICAgICAgICAgICAgKS5mb3JrKCk7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5idWNrZXRDb3VudHMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgci5maXhlZDY0KHQuYnVja2V0Q291bnRzW25dKTtcbiAgICAgICAgICAgICAgci5sZGVsaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmV4cGxpY2l0Qm91bmRzICE9IG51bGwgJiYgdC5leHBsaWNpdEJvdW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci51aW50MzIoXG4gICAgICAgICAgICAgICAgLyogaWQgNywgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICA1OFxuICAgICAgICAgICAgICApLmZvcmsoKTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmV4cGxpY2l0Qm91bmRzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgIHIuZG91YmxlKHQuZXhwbGljaXRCb3VuZHNbbl0pO1xuICAgICAgICAgICAgICByLmxkZWxpbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuZXhlbXBsYXJzICE9IG51bGwgJiYgdC5leGVtcGxhcnMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQuZXhlbXBsYXJzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5lbmNvZGUodC5leGVtcGxhcnNbbl0sIHIudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgOCwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDY2XG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgaWYgKHQuYXR0cmlidXRlcyAhPSBudWxsICYmIHQuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZSh0LmF0dHJpYnV0ZXNbbl0sIHIudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgOSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDc0XG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIHQuZmxhZ3MgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImZsYWdzXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxMCwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgODBcbiAgICAgICAgICAgICkudWludDMyKHQuZmxhZ3MpLCB0Lm1pbiAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwibWluXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxMSwgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgODlcbiAgICAgICAgICAgICkuZG91YmxlKHQubWluKSwgdC5tYXggIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcIm1heFwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMTIsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDk3XG4gICAgICAgICAgICApLmRvdWJsZSh0Lm1heCksIHI7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9ICRSZWFkZXIuY3JlYXRlKHQpKTtcbiAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50KCk7IHQucG9zIDwgbjsgKSB7XG4gICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChwID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSA5OiB7XG4gICAgICAgICAgICAgICAgICBsLmF0dHJpYnV0ZXMgJiYgbC5hdHRyaWJ1dGVzLmxlbmd0aCB8fCAobC5hdHRyaWJ1dGVzID0gW10pLCBsLmF0dHJpYnV0ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUodCwgdC51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgbC5zdGFydFRpbWVVbml4TmFubyA9IHQuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgbC50aW1lVW5peE5hbm8gPSB0LmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICAgICAgICAgIGwuY291bnQgPSB0LmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgIGwuc3VtID0gdC5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDY6IHtcbiAgICAgICAgICAgICAgICAgIGlmIChsLmJ1Y2tldENvdW50cyAmJiBsLmJ1Y2tldENvdW50cy5sZW5ndGggfHwgKGwuYnVja2V0Q291bnRzID0gW10pLCAocCAmIDcpID09PSAyKVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBzID0gdC51aW50MzIoKSArIHQucG9zOyB0LnBvcyA8IHM7IClcbiAgICAgICAgICAgICAgICAgICAgICBsLmJ1Y2tldENvdW50cy5wdXNoKHQuZml4ZWQ2NCgpKTtcbiAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgbC5idWNrZXRDb3VudHMucHVzaCh0LmZpeGVkNjQoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICBpZiAobC5leHBsaWNpdEJvdW5kcyAmJiBsLmV4cGxpY2l0Qm91bmRzLmxlbmd0aCB8fCAobC5leHBsaWNpdEJvdW5kcyA9IFtdKSwgKHAgJiA3KSA9PT0gMilcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcyA9IHQudWludDMyKCkgKyB0LnBvczsgdC5wb3MgPCBzOyApXG4gICAgICAgICAgICAgICAgICAgICAgbC5leHBsaWNpdEJvdW5kcy5wdXNoKHQuZG91YmxlKCkpO1xuICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBsLmV4cGxpY2l0Qm91bmRzLnB1c2godC5kb3VibGUoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA4OiB7XG4gICAgICAgICAgICAgICAgICBsLmV4ZW1wbGFycyAmJiBsLmV4ZW1wbGFycy5sZW5ndGggfHwgKGwuZXhlbXBsYXJzID0gW10pLCBsLmV4ZW1wbGFycy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5kZWNvZGUodCwgdC51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHtcbiAgICAgICAgICAgICAgICAgIGwuZmxhZ3MgPSB0LnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMTE6IHtcbiAgICAgICAgICAgICAgICAgIGwubWluID0gdC5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDEyOiB7XG4gICAgICAgICAgICAgICAgICBsLm1heCA9IHQuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuYXR0cmlidXRlcyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkodC5hdHRyaWJ1dGVzW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQuc3RhcnRUaW1lVW5peE5hbm8pICYmICEodC5zdGFydFRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIodC5zdGFydFRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwic3RhcnRUaW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQudGltZVVuaXhOYW5vICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQudGltZVVuaXhOYW5vKSAmJiAhKHQudGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcih0LnRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LnRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgIHJldHVybiBcInRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAodC5jb3VudCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJjb3VudFwiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQuY291bnQpICYmICEodC5jb3VudCAmJiAkdXRpbC5pc0ludGVnZXIodC5jb3VudC5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LmNvdW50LmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwiY291bnQ6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuc3VtICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSAmJiB0eXBlb2YgdC5zdW0gIT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgcmV0dXJuIFwic3VtOiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmICh0LmJ1Y2tldENvdW50cyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJidWNrZXRDb3VudHNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuYnVja2V0Q291bnRzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJidWNrZXRDb3VudHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgdC5idWNrZXRDb3VudHMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIodC5idWNrZXRDb3VudHNbcl0pICYmICEodC5idWNrZXRDb3VudHNbcl0gJiYgJHV0aWwuaXNJbnRlZ2VyKHQuYnVja2V0Q291bnRzW3JdLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKHQuYnVja2V0Q291bnRzW3JdLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImJ1Y2tldENvdW50czogaW50ZWdlcnxMb25nW10gZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmV4cGxpY2l0Qm91bmRzICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImV4cGxpY2l0Qm91bmRzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmV4cGxpY2l0Qm91bmRzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJleHBsaWNpdEJvdW5kczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB0LmV4cGxpY2l0Qm91bmRzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5leHBsaWNpdEJvdW5kc1tyXSAhPSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXhwbGljaXRCb3VuZHM6IG51bWJlcltdIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5leGVtcGxhcnMgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZXhlbXBsYXJzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmV4ZW1wbGFycykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZXhlbXBsYXJzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IHQuZXhlbXBsYXJzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIudmVyaWZ5KHQuZXhlbXBsYXJzW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImV4ZW1wbGFycy5cIiArIG47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0LmZsYWdzICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpICYmICEkdXRpbC5pc0ludGVnZXIodC5mbGFncykgPyBcImZsYWdzOiBpbnRlZ2VyIGV4cGVjdGVkXCIgOiB0Lm1pbiAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJtaW5cIikgJiYgdHlwZW9mIHQubWluICE9IFwibnVtYmVyXCIgPyBcIm1pbjogbnVtYmVyIGV4cGVjdGVkXCIgOiB0Lm1heCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJtYXhcIikgJiYgdHlwZW9mIHQubWF4ICE9IFwibnVtYmVyXCIgPyBcIm1heDogbnVtYmVyIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludClcbiAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICB2YXIgciA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50KCk7XG4gICAgICAgICAgICBpZiAodC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICByLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuYXR0cmlidXRlc1tuXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQuYXR0cmlidXRlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHIuYXR0cmlidXRlc1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmZyb21PYmplY3QodC5hdHRyaWJ1dGVzW25dKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/IChyLnN0YXJ0VGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC5zdGFydFRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgdC5zdGFydFRpbWVVbml4TmFubyA9PSBcInN0cmluZ1wiID8gci5zdGFydFRpbWVVbml4TmFubyA9IHBhcnNlSW50KHQuc3RhcnRUaW1lVW5peE5hbm8sIDEwKSA6IHR5cGVvZiB0LnN0YXJ0VGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyByLnN0YXJ0VGltZVVuaXhOYW5vID0gdC5zdGFydFRpbWVVbml4TmFubyA6IHR5cGVvZiB0LnN0YXJ0VGltZVVuaXhOYW5vID09IFwib2JqZWN0XCIgJiYgKHIuc3RhcnRUaW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHModC5zdGFydFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIHQuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCB0LnRpbWVVbml4TmFubyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIudGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC50aW1lVW5peE5hbm8pKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIHQudGltZVVuaXhOYW5vID09IFwic3RyaW5nXCIgPyByLnRpbWVVbml4TmFubyA9IHBhcnNlSW50KHQudGltZVVuaXhOYW5vLCAxMCkgOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHIudGltZVVuaXhOYW5vID0gdC50aW1lVW5peE5hbm8gOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJvYmplY3RcIiAmJiAoci50aW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHModC50aW1lVW5peE5hbm8ubG93ID4+PiAwLCB0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQuY291bnQgIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/IChyLmNvdW50ID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC5jb3VudCkpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgdC5jb3VudCA9PSBcInN0cmluZ1wiID8gci5jb3VudCA9IHBhcnNlSW50KHQuY291bnQsIDEwKSA6IHR5cGVvZiB0LmNvdW50ID09IFwibnVtYmVyXCIgPyByLmNvdW50ID0gdC5jb3VudCA6IHR5cGVvZiB0LmNvdW50ID09IFwib2JqZWN0XCIgJiYgKHIuY291bnQgPSBuZXcgJHV0aWwuTG9uZ0JpdHModC5jb3VudC5sb3cgPj4+IDAsIHQuY291bnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCB0LnN1bSAhPSBudWxsICYmIChyLnN1bSA9IE51bWJlcih0LnN1bSkpLCB0LmJ1Y2tldENvdW50cykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5idWNrZXRDb3VudHMpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmJ1Y2tldENvdW50czogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHIuYnVja2V0Q291bnRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5idWNrZXRDb3VudHMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgJHV0aWwuTG9uZyA/IChyLmJ1Y2tldENvdW50c1tuXSA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKHQuYnVja2V0Q291bnRzW25dKSkudW5zaWduZWQgPSAhMSA6IHR5cGVvZiB0LmJ1Y2tldENvdW50c1tuXSA9PSBcInN0cmluZ1wiID8gci5idWNrZXRDb3VudHNbbl0gPSBwYXJzZUludCh0LmJ1Y2tldENvdW50c1tuXSwgMTApIDogdHlwZW9mIHQuYnVja2V0Q291bnRzW25dID09IFwibnVtYmVyXCIgPyByLmJ1Y2tldENvdW50c1tuXSA9IHQuYnVja2V0Q291bnRzW25dIDogdHlwZW9mIHQuYnVja2V0Q291bnRzW25dID09IFwib2JqZWN0XCIgJiYgKHIuYnVja2V0Q291bnRzW25dID0gbmV3ICR1dGlsLkxvbmdCaXRzKHQuYnVja2V0Q291bnRzW25dLmxvdyA+Pj4gMCwgdC5idWNrZXRDb3VudHNbbl0uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5leHBsaWNpdEJvdW5kcykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5leHBsaWNpdEJvdW5kcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQuZXhwbGljaXRCb3VuZHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICByLmV4cGxpY2l0Qm91bmRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5leHBsaWNpdEJvdW5kcy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLmV4cGxpY2l0Qm91bmRzW25dID0gTnVtYmVyKHQuZXhwbGljaXRCb3VuZHNbbl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuZXhlbXBsYXJzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmV4ZW1wbGFycykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQuZXhlbXBsYXJzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgci5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmV4ZW1wbGFycy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5leGVtcGxhcnNbbl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmV4ZW1wbGFyczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHIuZXhlbXBsYXJzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmZyb21PYmplY3QodC5leGVtcGxhcnNbbl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdC5mbGFncyAhPSBudWxsICYmIChyLmZsYWdzID0gdC5mbGFncyA+Pj4gMCksIHQubWluICE9IG51bGwgJiYgKHIubWluID0gTnVtYmVyKHQubWluKSksIHQubWF4ICE9IG51bGwgJiYgKHIubWF4ID0gTnVtYmVyKHQubWF4KSksIHI7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgaWYgKChyLmFycmF5cyB8fCByLmRlZmF1bHRzKSAmJiAobi5idWNrZXRDb3VudHMgPSBbXSwgbi5leHBsaWNpdEJvdW5kcyA9IFtdLCBuLmV4ZW1wbGFycyA9IFtdLCBuLmF0dHJpYnV0ZXMgPSBbXSksIHIuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICBuLnN0YXJ0VGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gbC50b1N0cmluZygpIDogci5sb25ncyA9PT0gTnVtYmVyID8gbC50b051bWJlcigpIDogbDtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgbi5zdGFydFRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IGwudG9TdHJpbmcoKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IGwudG9OdW1iZXIoKSA6IGw7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgIHZhciBsID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgITEpO1xuICAgICAgICAgICAgICAgIG4uY291bnQgPSByLmxvbmdzID09PSBTdHJpbmcgPyBsLnRvU3RyaW5nKCkgOiByLmxvbmdzID09PSBOdW1iZXIgPyBsLnRvTnVtYmVyKCkgOiBsO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBuLmNvdW50ID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICBuLmZsYWdzID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmICh0eXBlb2YgdC5zdGFydFRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gbi5zdGFydFRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyh0LnN0YXJ0VGltZVVuaXhOYW5vKSA6IHQuc3RhcnRUaW1lVW5peE5hbm8gOiBuLnN0YXJ0VGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0LnN0YXJ0VGltZVVuaXhOYW5vKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyh0LnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgdC5zdGFydFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogdC5zdGFydFRpbWVVbml4TmFubyksIHQudGltZVVuaXhOYW5vICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSAmJiAodHlwZW9mIHQudGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyh0LnRpbWVVbml4TmFubykgOiB0LnRpbWVVbml4TmFubyA6IG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0LnRpbWVVbml4TmFubykgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC50aW1lVW5peE5hbm8ubG93ID4+PiAwLCB0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogdC50aW1lVW5peE5hbm8pLCB0LmNvdW50ICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImNvdW50XCIpICYmICh0eXBlb2YgdC5jb3VudCA9PSBcIm51bWJlclwiID8gbi5jb3VudCA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyh0LmNvdW50KSA6IHQuY291bnQgOiBuLmNvdW50ID0gci5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0LmNvdW50KSA6IHIubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyh0LmNvdW50LmxvdyA+Pj4gMCwgdC5jb3VudC5oaWdoID4+PiAwKS50b051bWJlcigpIDogdC5jb3VudCksIHQuc3VtICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSAmJiAobi5zdW0gPSByLmpzb24gJiYgIWlzRmluaXRlKHQuc3VtKSA/IFN0cmluZyh0LnN1bSkgOiB0LnN1bSwgci5vbmVvZnMgJiYgKG4uX3N1bSA9IFwic3VtXCIpKSwgdC5idWNrZXRDb3VudHMgJiYgdC5idWNrZXRDb3VudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIG4uYnVja2V0Q291bnRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgdC5idWNrZXRDb3VudHMubGVuZ3RoOyArK3ApXG4gICAgICAgICAgICAgICAgdHlwZW9mIHQuYnVja2V0Q291bnRzW3BdID09IFwibnVtYmVyXCIgPyBuLmJ1Y2tldENvdW50c1twXSA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyh0LmJ1Y2tldENvdW50c1twXSkgOiB0LmJ1Y2tldENvdW50c1twXSA6IG4uYnVja2V0Q291bnRzW3BdID0gci5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0LmJ1Y2tldENvdW50c1twXSkgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC5idWNrZXRDb3VudHNbcF0ubG93ID4+PiAwLCB0LmJ1Y2tldENvdW50c1twXS5oaWdoID4+PiAwKS50b051bWJlcigpIDogdC5idWNrZXRDb3VudHNbcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5leHBsaWNpdEJvdW5kcyAmJiB0LmV4cGxpY2l0Qm91bmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBuLmV4cGxpY2l0Qm91bmRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgdC5leHBsaWNpdEJvdW5kcy5sZW5ndGg7ICsrcClcbiAgICAgICAgICAgICAgICBuLmV4cGxpY2l0Qm91bmRzW3BdID0gci5qc29uICYmICFpc0Zpbml0ZSh0LmV4cGxpY2l0Qm91bmRzW3BdKSA/IFN0cmluZyh0LmV4cGxpY2l0Qm91bmRzW3BdKSA6IHQuZXhwbGljaXRCb3VuZHNbcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5leGVtcGxhcnMgJiYgdC5leGVtcGxhcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIG4uZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgdC5leGVtcGxhcnMubGVuZ3RoOyArK3ApXG4gICAgICAgICAgICAgICAgbi5leGVtcGxhcnNbcF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIudG9PYmplY3QodC5leGVtcGxhcnNbcF0sIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuYXR0cmlidXRlcyAmJiB0LmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIG4uYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrcClcbiAgICAgICAgICAgICAgICBuLmF0dHJpYnV0ZXNbcF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdCh0LmF0dHJpYnV0ZXNbcF0sIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQuZmxhZ3MgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikgJiYgKG4uZmxhZ3MgPSB0LmZsYWdzKSwgdC5taW4gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwibWluXCIpICYmIChuLm1pbiA9IHIuanNvbiAmJiAhaXNGaW5pdGUodC5taW4pID8gU3RyaW5nKHQubWluKSA6IHQubWluLCByLm9uZW9mcyAmJiAobi5fbWluID0gXCJtaW5cIikpLCB0Lm1heCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJtYXhcIikgJiYgKG4ubWF4ID0gci5qc29uICYmICFpc0Zpbml0ZSh0Lm1heCkgPyBTdHJpbmcodC5tYXgpIDogdC5tYXgsIHIub25lb2ZzICYmIChuLl9tYXggPSBcIm1heFwiKSksIG47XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICByZXR1cm4gdCA9PT0gdm9pZCAwICYmICh0ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCB0ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFwiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZi5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkoZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcyA9IFtdLCB0aGlzLmV4ZW1wbGFycyA9IFtdLCBlKVxuICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gT2JqZWN0LmtleXMoZSksIHIgPSAwOyByIDwgdC5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICBlW3Rbcl1dICE9IG51bGwgJiYgKHRoaXNbdFtyXV0gPSBlW3Rbcl1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaS5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLnN0YXJ0VGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUudGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUuY291bnQgPSBudWxsLCBpLnByb3RvdHlwZS5zdW0gPSBudWxsLCBpLnByb3RvdHlwZS5zY2FsZSA9IG51bGwsIGkucHJvdG90eXBlLnplcm9Db3VudCA9IG51bGwsIGkucHJvdG90eXBlLnBvc2l0aXZlID0gbnVsbCwgaS5wcm90b3R5cGUubmVnYXRpdmUgPSBudWxsLCBpLnByb3RvdHlwZS5mbGFncyA9IG51bGwsIGkucHJvdG90eXBlLmV4ZW1wbGFycyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLm1pbiA9IG51bGwsIGkucHJvdG90eXBlLm1heCA9IG51bGwsIGkucHJvdG90eXBlLnplcm9UaHJlc2hvbGQgPSBudWxsO1xuICAgICAgICAgIHZhciBvO1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIFwiX3N1bVwiLCB7XG4gICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKG8gPSBbXCJzdW1cIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIFwiX21pblwiLCB7XG4gICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKG8gPSBbXCJtaW5cIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIFwiX21heFwiLCB7XG4gICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKG8gPSBbXCJtYXhcIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaSh0KTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgIGlmIChyIHx8IChyID0gJFdyaXRlci5jcmVhdGUoKSksIHQuYXR0cmlidXRlcyAhPSBudWxsICYmIHQuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZSh0LmF0dHJpYnV0ZXNbbl0sIHIudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgaWYgKHQuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAxN1xuICAgICAgICAgICAgKS5maXhlZDY0KHQuc3RhcnRUaW1lVW5peE5hbm8pLCB0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwidGltZVVuaXhOYW5vXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAyNVxuICAgICAgICAgICAgKS5maXhlZDY0KHQudGltZVVuaXhOYW5vKSwgdC5jb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiY291bnRcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDQsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDMzXG4gICAgICAgICAgICApLmZpeGVkNjQodC5jb3VudCksIHQuc3VtICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJzdW1cIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDUsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDQxXG4gICAgICAgICAgICApLmRvdWJsZSh0LnN1bSksIHQuc2NhbGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInNjYWxlXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA2LCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICA0OFxuICAgICAgICAgICAgKS5zaW50MzIodC5zY2FsZSksIHQuemVyb0NvdW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJ6ZXJvQ291bnRcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDcsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDU3XG4gICAgICAgICAgICApLmZpeGVkNjQodC56ZXJvQ291bnQpLCB0LnBvc2l0aXZlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJwb3NpdGl2ZVwiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cy5lbmNvZGUodC5wb3NpdGl2ZSwgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDgsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDY2XG4gICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCksIHQubmVnYXRpdmUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcIm5lZ2F0aXZlXCIpICYmICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLmVuY29kZSh0Lm5lZ2F0aXZlLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgOSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgNzRcbiAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKSwgdC5mbGFncyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiZmxhZ3NcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDEwLCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICA4MFxuICAgICAgICAgICAgKS51aW50MzIodC5mbGFncyksIHQuZXhlbXBsYXJzICE9IG51bGwgJiYgdC5leGVtcGxhcnMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQuZXhlbXBsYXJzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5lbmNvZGUodC5leGVtcGxhcnNbbl0sIHIudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMTEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICA5MFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiB0Lm1pbiAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwibWluXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxMiwgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgOTdcbiAgICAgICAgICAgICkuZG91YmxlKHQubWluKSwgdC5tYXggIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcIm1heFwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMTMsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDEwNVxuICAgICAgICAgICAgKS5kb3VibGUodC5tYXgpLCB0Lnplcm9UaHJlc2hvbGQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInplcm9UaHJlc2hvbGRcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDE0LCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAxMTNcbiAgICAgICAgICAgICkuZG91YmxlKHQuemVyb1RocmVzaG9sZCksIHI7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9ICRSZWFkZXIuY3JlYXRlKHQpKTtcbiAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQoKTsgdC5wb3MgPCBuOyApIHtcbiAgICAgICAgICAgICAgdmFyIHAgPSB0LnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKHAgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIGwuYXR0cmlidXRlcyAmJiBsLmF0dHJpYnV0ZXMubGVuZ3RoIHx8IChsLmF0dHJpYnV0ZXMgPSBbXSksIGwuYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZSh0LCB0LnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBsLnN0YXJ0VGltZVVuaXhOYW5vID0gdC5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICBsLnRpbWVVbml4TmFubyA9IHQuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgbC5jb3VudCA9IHQuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNToge1xuICAgICAgICAgICAgICAgICAgbC5zdW0gPSB0LmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNjoge1xuICAgICAgICAgICAgICAgICAgbC5zY2FsZSA9IHQuc2ludDMyKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICBsLnplcm9Db3VudCA9IHQuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgODoge1xuICAgICAgICAgICAgICAgICAgbC5wb3NpdGl2ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDk6IHtcbiAgICAgICAgICAgICAgICAgIGwubmVnYXRpdmUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cy5kZWNvZGUodCwgdC51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAxMDoge1xuICAgICAgICAgICAgICAgICAgbC5mbGFncyA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAxMToge1xuICAgICAgICAgICAgICAgICAgbC5leGVtcGxhcnMgJiYgbC5leGVtcGxhcnMubGVuZ3RoIHx8IChsLmV4ZW1wbGFycyA9IFtdKSwgbC5leGVtcGxhcnMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIuZGVjb2RlKHQsIHQudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDEyOiB7XG4gICAgICAgICAgICAgICAgICBsLm1pbiA9IHQuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAxMzoge1xuICAgICAgICAgICAgICAgICAgbC5tYXggPSB0LmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMTQ6IHtcbiAgICAgICAgICAgICAgICAgIGwuemVyb1RocmVzaG9sZCA9IHQuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuYXR0cmlidXRlcyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkodC5hdHRyaWJ1dGVzW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQuc3RhcnRUaW1lVW5peE5hbm8pICYmICEodC5zdGFydFRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIodC5zdGFydFRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwic3RhcnRUaW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQudGltZVVuaXhOYW5vICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQudGltZVVuaXhOYW5vKSAmJiAhKHQudGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcih0LnRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LnRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgIHJldHVybiBcInRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAodC5jb3VudCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJjb3VudFwiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQuY291bnQpICYmICEodC5jb3VudCAmJiAkdXRpbC5pc0ludGVnZXIodC5jb3VudC5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LmNvdW50LmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwiY291bnQ6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuc3VtICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSAmJiB0eXBlb2YgdC5zdW0gIT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgcmV0dXJuIFwic3VtOiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmICh0LnNjYWxlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInNjYWxlXCIpICYmICEkdXRpbC5pc0ludGVnZXIodC5zY2FsZSkpXG4gICAgICAgICAgICAgIHJldHVybiBcInNjYWxlOiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAodC56ZXJvQ291bnQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiemVyb0NvdW50XCIpICYmICEkdXRpbC5pc0ludGVnZXIodC56ZXJvQ291bnQpICYmICEodC56ZXJvQ291bnQgJiYgJHV0aWwuaXNJbnRlZ2VyKHQuemVyb0NvdW50LmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKHQuemVyb0NvdW50LmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwiemVyb0NvdW50OiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmICh0LnBvc2l0aXZlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInBvc2l0aXZlXCIpKSB7XG4gICAgICAgICAgICAgIHZhciBuID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMudmVyaWZ5KHQucG9zaXRpdmUpO1xuICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwb3NpdGl2ZS5cIiArIG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5uZWdhdGl2ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJuZWdhdGl2ZVwiKSkge1xuICAgICAgICAgICAgICB2YXIgbiA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLnZlcmlmeSh0Lm5lZ2F0aXZlKTtcbiAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibmVnYXRpdmUuXCIgKyBuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuZmxhZ3MgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikgJiYgISR1dGlsLmlzSW50ZWdlcih0LmZsYWdzKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwiZmxhZ3M6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmICh0LmV4ZW1wbGFycyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJleGVtcGxhcnNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuZXhlbXBsYXJzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJleGVtcGxhcnM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgdC5leGVtcGxhcnMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci52ZXJpZnkodC5leGVtcGxhcnNbcl0pO1xuICAgICAgICAgICAgICAgIGlmIChuKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXhlbXBsYXJzLlwiICsgbjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQubWluICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcIm1pblwiKSAmJiB0eXBlb2YgdC5taW4gIT0gXCJudW1iZXJcIiA/IFwibWluOiBudW1iZXIgZXhwZWN0ZWRcIiA6IHQubWF4ICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcIm1heFwiKSAmJiB0eXBlb2YgdC5tYXggIT0gXCJudW1iZXJcIiA/IFwibWF4OiBudW1iZXIgZXhwZWN0ZWRcIiA6IHQuemVyb1RocmVzaG9sZCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ6ZXJvVGhyZXNob2xkXCIpICYmIHR5cGVvZiB0Lnplcm9UaHJlc2hvbGQgIT0gXCJudW1iZXJcIiA/IFwiemVyb1RocmVzaG9sZDogbnVtYmVyIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50KVxuICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgIHZhciByID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCgpO1xuICAgICAgICAgICAgaWYgKHQuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICByLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuYXR0cmlidXRlc1tuXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgci5hdHRyaWJ1dGVzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdCh0LmF0dHJpYnV0ZXNbbl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIuc3RhcnRUaW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZSh0LnN0YXJ0VGltZVVuaXhOYW5vKSkudW5zaWduZWQgPSAhMSA6IHR5cGVvZiB0LnN0YXJ0VGltZVVuaXhOYW5vID09IFwic3RyaW5nXCIgPyByLnN0YXJ0VGltZVVuaXhOYW5vID0gcGFyc2VJbnQodC5zdGFydFRpbWVVbml4TmFubywgMTApIDogdHlwZW9mIHQuc3RhcnRUaW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHIuc3RhcnRUaW1lVW5peE5hbm8gPSB0LnN0YXJ0VGltZVVuaXhOYW5vIDogdHlwZW9mIHQuc3RhcnRUaW1lVW5peE5hbm8gPT0gXCJvYmplY3RcIiAmJiAoci5zdGFydFRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyh0LnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgdC5zdGFydFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQudGltZVVuaXhOYW5vICE9IG51bGwgJiYgKCR1dGlsLkxvbmcgPyAoci50aW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZSh0LnRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJzdHJpbmdcIiA/IHIudGltZVVuaXhOYW5vID0gcGFyc2VJbnQodC50aW1lVW5peE5hbm8sIDEwKSA6IHR5cGVvZiB0LnRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gci50aW1lVW5peE5hbm8gPSB0LnRpbWVVbml4TmFubyA6IHR5cGVvZiB0LnRpbWVVbml4TmFubyA9PSBcIm9iamVjdFwiICYmIChyLnRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyh0LnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIHQudGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkpKSwgdC5jb3VudCAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIuY291bnQgPSAkdXRpbC5Mb25nLmZyb21WYWx1ZSh0LmNvdW50KSkudW5zaWduZWQgPSAhMSA6IHR5cGVvZiB0LmNvdW50ID09IFwic3RyaW5nXCIgPyByLmNvdW50ID0gcGFyc2VJbnQodC5jb3VudCwgMTApIDogdHlwZW9mIHQuY291bnQgPT0gXCJudW1iZXJcIiA/IHIuY291bnQgPSB0LmNvdW50IDogdHlwZW9mIHQuY291bnQgPT0gXCJvYmplY3RcIiAmJiAoci5jb3VudCA9IG5ldyAkdXRpbC5Mb25nQml0cyh0LmNvdW50LmxvdyA+Pj4gMCwgdC5jb3VudC5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQuc3VtICE9IG51bGwgJiYgKHIuc3VtID0gTnVtYmVyKHQuc3VtKSksIHQuc2NhbGUgIT0gbnVsbCAmJiAoci5zY2FsZSA9IHQuc2NhbGUgfCAwKSwgdC56ZXJvQ291bnQgIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/IChyLnplcm9Db3VudCA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKHQuemVyb0NvdW50KSkudW5zaWduZWQgPSAhMSA6IHR5cGVvZiB0Lnplcm9Db3VudCA9PSBcInN0cmluZ1wiID8gci56ZXJvQ291bnQgPSBwYXJzZUludCh0Lnplcm9Db3VudCwgMTApIDogdHlwZW9mIHQuemVyb0NvdW50ID09IFwibnVtYmVyXCIgPyByLnplcm9Db3VudCA9IHQuemVyb0NvdW50IDogdHlwZW9mIHQuemVyb0NvdW50ID09IFwib2JqZWN0XCIgJiYgKHIuemVyb0NvdW50ID0gbmV3ICR1dGlsLkxvbmdCaXRzKHQuemVyb0NvdW50LmxvdyA+Pj4gMCwgdC56ZXJvQ291bnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCB0LnBvc2l0aXZlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0LnBvc2l0aXZlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wb3NpdGl2ZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICByLnBvc2l0aXZlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMuZnJvbU9iamVjdCh0LnBvc2l0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0Lm5lZ2F0aXZlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0Lm5lZ2F0aXZlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5uZWdhdGl2ZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICByLm5lZ2F0aXZlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMuZnJvbU9iamVjdCh0Lm5lZ2F0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmZsYWdzICE9IG51bGwgJiYgKHIuZmxhZ3MgPSB0LmZsYWdzID4+PiAwKSwgdC5leGVtcGxhcnMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuZXhlbXBsYXJzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmV4ZW1wbGFyczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHIuZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5leGVtcGxhcnMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuZXhlbXBsYXJzW25dICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmV4ZW1wbGFyczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHIuZXhlbXBsYXJzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmZyb21PYmplY3QodC5leGVtcGxhcnNbbl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdC5taW4gIT0gbnVsbCAmJiAoci5taW4gPSBOdW1iZXIodC5taW4pKSwgdC5tYXggIT0gbnVsbCAmJiAoci5tYXggPSBOdW1iZXIodC5tYXgpKSwgdC56ZXJvVGhyZXNob2xkICE9IG51bGwgJiYgKHIuemVyb1RocmVzaG9sZCA9IE51bWJlcih0Lnplcm9UaHJlc2hvbGQpKSwgcjtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgciB8fCAociA9IHt9KTtcbiAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICBpZiAoKHIuYXJyYXlzIHx8IHIuZGVmYXVsdHMpICYmIChuLmF0dHJpYnV0ZXMgPSBbXSwgbi5leGVtcGxhcnMgPSBbXSksIHIuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICBuLnN0YXJ0VGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gbC50b1N0cmluZygpIDogci5sb25ncyA9PT0gTnVtYmVyID8gbC50b051bWJlcigpIDogbDtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgbi5zdGFydFRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IGwudG9TdHJpbmcoKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IGwudG9OdW1iZXIoKSA6IGw7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgIHZhciBsID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgITEpO1xuICAgICAgICAgICAgICAgIG4uY291bnQgPSByLmxvbmdzID09PSBTdHJpbmcgPyBsLnRvU3RyaW5nKCkgOiByLmxvbmdzID09PSBOdW1iZXIgPyBsLnRvTnVtYmVyKCkgOiBsO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBuLmNvdW50ID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICBpZiAobi5zY2FsZSA9IDAsICR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICBuLnplcm9Db3VudCA9IHIubG9uZ3MgPT09IFN0cmluZyA/IGwudG9TdHJpbmcoKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IGwudG9OdW1iZXIoKSA6IGw7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIG4uemVyb0NvdW50ID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICBuLnBvc2l0aXZlID0gbnVsbCwgbi5uZWdhdGl2ZSA9IG51bGwsIG4uZmxhZ3MgPSAwLCBuLnplcm9UaHJlc2hvbGQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuYXR0cmlidXRlcyAmJiB0LmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIG4uYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrcClcbiAgICAgICAgICAgICAgICBuLmF0dHJpYnV0ZXNbcF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdCh0LmF0dHJpYnV0ZXNbcF0sIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwic3RhcnRUaW1lVW5peE5hbm9cIikgJiYgKHR5cGVvZiB0LnN0YXJ0VGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyBuLnN0YXJ0VGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHQuc3RhcnRUaW1lVW5peE5hbm8pIDogdC5zdGFydFRpbWVVbml4TmFubyA6IG4uc3RhcnRUaW1lVW5peE5hbm8gPSByLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQuc3RhcnRUaW1lVW5peE5hbm8pIDogci5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKHQuc3RhcnRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCB0LnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiB0LnN0YXJ0VGltZVVuaXhOYW5vKSwgdC50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwidGltZVVuaXhOYW5vXCIpICYmICh0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHQudGltZVVuaXhOYW5vKSA6IHQudGltZVVuaXhOYW5vIDogbi50aW1lVW5peE5hbm8gPSByLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQudGltZVVuaXhOYW5vKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyh0LnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIHQudGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiB0LnRpbWVVbml4TmFubyksIHQuY291bnQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiY291bnRcIikgJiYgKHR5cGVvZiB0LmNvdW50ID09IFwibnVtYmVyXCIgPyBuLmNvdW50ID0gci5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHQuY291bnQpIDogdC5jb3VudCA6IG4uY291bnQgPSByLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQuY291bnQpIDogci5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKHQuY291bnQubG93ID4+PiAwLCB0LmNvdW50LmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiB0LmNvdW50KSwgdC5zdW0gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwic3VtXCIpICYmIChuLnN1bSA9IHIuanNvbiAmJiAhaXNGaW5pdGUodC5zdW0pID8gU3RyaW5nKHQuc3VtKSA6IHQuc3VtLCByLm9uZW9mcyAmJiAobi5fc3VtID0gXCJzdW1cIikpLCB0LnNjYWxlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInNjYWxlXCIpICYmIChuLnNjYWxlID0gdC5zY2FsZSksIHQuemVyb0NvdW50ICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInplcm9Db3VudFwiKSAmJiAodHlwZW9mIHQuemVyb0NvdW50ID09IFwibnVtYmVyXCIgPyBuLnplcm9Db3VudCA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyh0Lnplcm9Db3VudCkgOiB0Lnplcm9Db3VudCA6IG4uemVyb0NvdW50ID0gci5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0Lnplcm9Db3VudCkgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC56ZXJvQ291bnQubG93ID4+PiAwLCB0Lnplcm9Db3VudC5oaWdoID4+PiAwKS50b051bWJlcigpIDogdC56ZXJvQ291bnQpLCB0LnBvc2l0aXZlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInBvc2l0aXZlXCIpICYmIChuLnBvc2l0aXZlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMudG9PYmplY3QodC5wb3NpdGl2ZSwgcikpLCB0Lm5lZ2F0aXZlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcIm5lZ2F0aXZlXCIpICYmIChuLm5lZ2F0aXZlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMudG9PYmplY3QodC5uZWdhdGl2ZSwgcikpLCB0LmZsYWdzICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpICYmIChuLmZsYWdzID0gdC5mbGFncyksIHQuZXhlbXBsYXJzICYmIHQuZXhlbXBsYXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBuLmV4ZW1wbGFycyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHQuZXhlbXBsYXJzLmxlbmd0aDsgKytwKVxuICAgICAgICAgICAgICAgIG4uZXhlbXBsYXJzW3BdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLnRvT2JqZWN0KHQuZXhlbXBsYXJzW3BdLCByKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0Lm1pbiAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJtaW5cIikgJiYgKG4ubWluID0gci5qc29uICYmICFpc0Zpbml0ZSh0Lm1pbikgPyBTdHJpbmcodC5taW4pIDogdC5taW4sIHIub25lb2ZzICYmIChuLl9taW4gPSBcIm1pblwiKSksIHQubWF4ICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcIm1heFwiKSAmJiAobi5tYXggPSByLmpzb24gJiYgIWlzRmluaXRlKHQubWF4KSA/IFN0cmluZyh0Lm1heCkgOiB0Lm1heCwgci5vbmVvZnMgJiYgKG4uX21heCA9IFwibWF4XCIpKSwgdC56ZXJvVGhyZXNob2xkICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInplcm9UaHJlc2hvbGRcIikgJiYgKG4uemVyb1RocmVzaG9sZCA9IHIuanNvbiAmJiAhaXNGaW5pdGUodC56ZXJvVGhyZXNob2xkKSA/IFN0cmluZyh0Lnplcm9UaHJlc2hvbGQpIDogdC56ZXJvVGhyZXNob2xkKSwgbjtcbiAgICAgICAgICB9LCBpLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgIH0sIGkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIHQgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcIjtcbiAgICAgICAgICB9LCBpLkJ1Y2tldHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5idWNrZXRDb3VudHMgPSBbXSwgdClcbiAgICAgICAgICAgICAgICBmb3IgKHZhciByID0gT2JqZWN0LmtleXModCksIG4gPSAwOyBuIDwgci5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICAgIHRbcltuXV0gIT0gbnVsbCAmJiAodGhpc1tyW25dXSA9IHRbcltuXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUucHJvdG90eXBlLm9mZnNldCA9IG51bGwsIGUucHJvdG90eXBlLmJ1Y2tldENvdW50cyA9ICR1dGlsLmVtcHR5QXJyYXksIGUuY3JlYXRlID0gZnVuY3Rpb24ocikge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IGUocik7XG4gICAgICAgICAgICB9LCBlLmVuY29kZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICAgICAgICAgICAgaWYgKG4gfHwgKG4gPSAkV3JpdGVyLmNyZWF0ZSgpKSwgci5vZmZzZXQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChyLCBcIm9mZnNldFwiKSAmJiBuLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAxLCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICAgIDhcbiAgICAgICAgICAgICAgKS5zaW50MzIoci5vZmZzZXQpLCByLmJ1Y2tldENvdW50cyAhPSBudWxsICYmIHIuYnVja2V0Q291bnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG4udWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDE4XG4gICAgICAgICAgICAgICAgKS5mb3JrKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCByLmJ1Y2tldENvdW50cy5sZW5ndGg7ICsrbClcbiAgICAgICAgICAgICAgICAgIG4udWludDY0KHIuYnVja2V0Q291bnRzW2xdKTtcbiAgICAgICAgICAgICAgICBuLmxkZWxpbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgICAgfSwgZS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShyLCBuKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIH0sIGUuZGVjb2RlID0gZnVuY3Rpb24ociwgbikge1xuICAgICAgICAgICAgICByIGluc3RhbmNlb2YgJFJlYWRlciB8fCAociA9ICRSZWFkZXIuY3JlYXRlKHIpKTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IG4gPT09IHZvaWQgMCA/IHIubGVuIDogci5wb3MgKyBuLCBwID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzKCk7IHIucG9zIDwgbDsgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHMgPSByLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgIHAub2Zmc2V0ID0gci5zaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAuYnVja2V0Q291bnRzICYmIHAuYnVja2V0Q291bnRzLmxlbmd0aCB8fCAocC5idWNrZXRDb3VudHMgPSBbXSksIChzICYgNykgPT09IDIpXG4gICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IHIudWludDMyKCkgKyByLnBvczsgci5wb3MgPCB5OyApXG4gICAgICAgICAgICAgICAgICAgICAgICBwLmJ1Y2tldENvdW50cy5wdXNoKHIudWludDY0KCkpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgcC5idWNrZXRDb3VudHMucHVzaChyLnVpbnQ2NCgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByLnNraXBUeXBlKHMgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgfSwgZS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihyKSB7XG4gICAgICAgICAgICAgIHJldHVybiByIGluc3RhbmNlb2YgJFJlYWRlciB8fCAociA9IG5ldyAkUmVhZGVyKHIpKSwgdGhpcy5kZWNvZGUociwgci51aW50MzIoKSk7XG4gICAgICAgICAgICB9LCBlLnZlcmlmeSA9IGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9IFwib2JqZWN0XCIgfHwgciA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgaWYgKHIub2Zmc2V0ICE9IG51bGwgJiYgci5oYXNPd25Qcm9wZXJ0eShcIm9mZnNldFwiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHIub2Zmc2V0KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJvZmZzZXQ6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgaWYgKHIuYnVja2V0Q291bnRzICE9IG51bGwgJiYgci5oYXNPd25Qcm9wZXJ0eShcImJ1Y2tldENvdW50c1wiKSkge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyLmJ1Y2tldENvdW50cykpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJidWNrZXRDb3VudHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCByLmJ1Y2tldENvdW50cy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKHIuYnVja2V0Q291bnRzW25dKSAmJiAhKHIuYnVja2V0Q291bnRzW25dICYmICR1dGlsLmlzSW50ZWdlcihyLmJ1Y2tldENvdW50c1tuXS5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihyLmJ1Y2tldENvdW50c1tuXS5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImJ1Y2tldENvdW50czogaW50ZWdlcnxMb25nW10gZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0sIGUuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cylcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgICAgdmFyIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMoKTtcbiAgICAgICAgICAgICAgaWYgKHIub2Zmc2V0ICE9IG51bGwgJiYgKG4ub2Zmc2V0ID0gci5vZmZzZXQgfCAwKSwgci5idWNrZXRDb3VudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoci5idWNrZXRDb3VudHMpKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLmJ1Y2tldENvdW50czogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgbi5idWNrZXRDb3VudHMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHIuYnVja2V0Q291bnRzLmxlbmd0aDsgKytsKVxuICAgICAgICAgICAgICAgICAgJHV0aWwuTG9uZyA/IChuLmJ1Y2tldENvdW50c1tsXSA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKHIuYnVja2V0Q291bnRzW2xdKSkudW5zaWduZWQgPSAhMCA6IHR5cGVvZiByLmJ1Y2tldENvdW50c1tsXSA9PSBcInN0cmluZ1wiID8gbi5idWNrZXRDb3VudHNbbF0gPSBwYXJzZUludChyLmJ1Y2tldENvdW50c1tsXSwgMTApIDogdHlwZW9mIHIuYnVja2V0Q291bnRzW2xdID09IFwibnVtYmVyXCIgPyBuLmJ1Y2tldENvdW50c1tsXSA9IHIuYnVja2V0Q291bnRzW2xdIDogdHlwZW9mIHIuYnVja2V0Q291bnRzW2xdID09IFwib2JqZWN0XCIgJiYgKG4uYnVja2V0Q291bnRzW2xdID0gbmV3ICR1dGlsLkxvbmdCaXRzKHIuYnVja2V0Q291bnRzW2xdLmxvdyA+Pj4gMCwgci5idWNrZXRDb3VudHNbbF0uaGlnaCA+Pj4gMCkudG9OdW1iZXIoITApKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICAgIH0sIGUudG9PYmplY3QgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgICAgICAgICAgIG4gfHwgKG4gPSB7fSk7XG4gICAgICAgICAgICAgIHZhciBsID0ge307XG4gICAgICAgICAgICAgIGlmICgobi5hcnJheXMgfHwgbi5kZWZhdWx0cykgJiYgKGwuYnVja2V0Q291bnRzID0gW10pLCBuLmRlZmF1bHRzICYmIChsLm9mZnNldCA9IDApLCByLm9mZnNldCAhPSBudWxsICYmIHIuaGFzT3duUHJvcGVydHkoXCJvZmZzZXRcIikgJiYgKGwub2Zmc2V0ID0gci5vZmZzZXQpLCByLmJ1Y2tldENvdW50cyAmJiByLmJ1Y2tldENvdW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsLmJ1Y2tldENvdW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgci5idWNrZXRDb3VudHMubGVuZ3RoOyArK3ApXG4gICAgICAgICAgICAgICAgICB0eXBlb2Ygci5idWNrZXRDb3VudHNbcF0gPT0gXCJudW1iZXJcIiA/IGwuYnVja2V0Q291bnRzW3BdID0gbi5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHIuYnVja2V0Q291bnRzW3BdKSA6IHIuYnVja2V0Q291bnRzW3BdIDogbC5idWNrZXRDb3VudHNbcF0gPSBuLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIuYnVja2V0Q291bnRzW3BdKSA6IG4ubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhyLmJ1Y2tldENvdW50c1twXS5sb3cgPj4+IDAsIHIuYnVja2V0Q291bnRzW3BdLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCEwKSA6IHIuYnVja2V0Q291bnRzW3BdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgICAgfSwgZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgfSwgZS5nZXRUeXBlVXJsID0gZnVuY3Rpb24ocikge1xuICAgICAgICAgICAgICByZXR1cm4gciA9PT0gdm9pZCAwICYmIChyID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCByICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHNcIjtcbiAgICAgICAgICAgIH0sIGU7XG4gICAgICAgICAgfSgpLCBpO1xuICAgICAgICB9KCksIGYuU3VtbWFyeURhdGFQb2ludCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkobykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcyA9IFtdLCB0aGlzLnF1YW50aWxlVmFsdWVzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLnN0YXJ0VGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUudGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUuY291bnQgPSBudWxsLCBpLnByb3RvdHlwZS5zdW0gPSBudWxsLCBpLnByb3RvdHlwZS5xdWFudGlsZVZhbHVlcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLmZsYWdzID0gbnVsbCwgaS5jcmVhdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBpZiAodCB8fCAodCA9ICRXcml0ZXIuY3JlYXRlKCkpLCBlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJzdGFydFRpbWVVbml4TmFub1wiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgMTdcbiAgICAgICAgICAgICkuZml4ZWQ2NChlLnN0YXJ0VGltZVVuaXhOYW5vKSwgZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInRpbWVVbml4TmFub1wiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMywgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgMjVcbiAgICAgICAgICAgICkuZml4ZWQ2NChlLnRpbWVVbml4TmFubyksIGUuY291bnQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImNvdW50XCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA0LCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAzM1xuICAgICAgICAgICAgKS5maXhlZDY0KGUuY291bnQpLCBlLnN1bSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwic3VtXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA1LCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICA0MVxuICAgICAgICAgICAgKS5kb3VibGUoZS5zdW0pLCBlLnF1YW50aWxlVmFsdWVzICE9IG51bGwgJiYgZS5xdWFudGlsZVZhbHVlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5xdWFudGlsZVZhbHVlcy5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUuZW5jb2RlKGUucXVhbnRpbGVWYWx1ZXNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgNiwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDUwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgaWYgKGUuYXR0cmlidXRlcyAhPSBudWxsICYmIGUuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShlLmF0dHJpYnV0ZXNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgNywgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDU4XG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIGUuZmxhZ3MgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImZsYWdzXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA4LCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICA2NFxuICAgICAgICAgICAgKS51aW50MzIoZS5mbGFncyksIHQ7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoZSwgdCkubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9ICRSZWFkZXIuY3JlYXRlKGUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSB0ID09PSB2b2lkIDAgPyBlLmxlbiA6IGUucG9zICsgdCwgbiA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludCgpOyBlLnBvcyA8IHI7ICkge1xuICAgICAgICAgICAgICB2YXIgbCA9IGUudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAobCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgbi5hdHRyaWJ1dGVzICYmIG4uYXR0cmlidXRlcy5sZW5ndGggfHwgKG4uYXR0cmlidXRlcyA9IFtdKSwgbi5hdHRyaWJ1dGVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZGVjb2RlKGUsIGUudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgIG4uc3RhcnRUaW1lVW5peE5hbm8gPSBlLmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgIG4udGltZVVuaXhOYW5vID0gZS5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICBuLmNvdW50ID0gZS5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICBuLnN1bSA9IGUuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA2OiB7XG4gICAgICAgICAgICAgICAgICBuLnF1YW50aWxlVmFsdWVzICYmIG4ucXVhbnRpbGVWYWx1ZXMubGVuZ3RoIHx8IChuLnF1YW50aWxlVmFsdWVzID0gW10pLCBuLnF1YW50aWxlVmFsdWVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlLmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA4OiB7XG4gICAgICAgICAgICAgICAgICBuLmZsYWdzID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImF0dHJpYnV0ZXNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShlLmF0dHJpYnV0ZXNbdF0pO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlcy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5zdGFydFRpbWVVbml4TmFubykgJiYgIShlLnN0YXJ0VGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcihlLnN0YXJ0VGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKGUuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJzdGFydFRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwidGltZVVuaXhOYW5vXCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS50aW1lVW5peE5hbm8pICYmICEoZS50aW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKGUudGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKGUudGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwidGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLmNvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImNvdW50XCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5jb3VudCkgJiYgIShlLmNvdW50ICYmICR1dGlsLmlzSW50ZWdlcihlLmNvdW50LmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKGUuY291bnQuaGlnaCkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJjb3VudDogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5zdW0gIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic3VtXCIpICYmIHR5cGVvZiBlLnN1bSAhPSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICByZXR1cm4gXCJzdW06IG51bWJlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUucXVhbnRpbGVWYWx1ZXMgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwicXVhbnRpbGVWYWx1ZXNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUucXVhbnRpbGVWYWx1ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInF1YW50aWxlVmFsdWVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IGUucXVhbnRpbGVWYWx1ZXMubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZS52ZXJpZnkoZS5xdWFudGlsZVZhbHVlc1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJxdWFudGlsZVZhbHVlcy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmZsYWdzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5mbGFncykgPyBcImZsYWdzOiBpbnRlZ2VyIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQpXG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQoKTtcbiAgICAgICAgICAgIGlmIChlLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuYXR0cmlidXRlc1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LmF0dHJpYnV0ZXM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LmF0dHJpYnV0ZXNbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KGUuYXR0cmlidXRlc1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgKCR1dGlsLkxvbmcgPyAodC5zdGFydFRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKGUuc3RhcnRUaW1lVW5peE5hbm8pKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIGUuc3RhcnRUaW1lVW5peE5hbm8gPT0gXCJzdHJpbmdcIiA/IHQuc3RhcnRUaW1lVW5peE5hbm8gPSBwYXJzZUludChlLnN0YXJ0VGltZVVuaXhOYW5vLCAxMCkgOiB0eXBlb2YgZS5zdGFydFRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gdC5zdGFydFRpbWVVbml4TmFubyA9IGUuc3RhcnRUaW1lVW5peE5hbm8gOiB0eXBlb2YgZS5zdGFydFRpbWVVbml4TmFubyA9PSBcIm9iamVjdFwiICYmICh0LnN0YXJ0VGltZVVuaXhOYW5vID0gbmV3ICR1dGlsLkxvbmdCaXRzKGUuc3RhcnRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBlLnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkpKSwgZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/ICh0LnRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKGUudGltZVVuaXhOYW5vKSkudW5zaWduZWQgPSAhMSA6IHR5cGVvZiBlLnRpbWVVbml4TmFubyA9PSBcInN0cmluZ1wiID8gdC50aW1lVW5peE5hbm8gPSBwYXJzZUludChlLnRpbWVVbml4TmFubywgMTApIDogdHlwZW9mIGUudGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyB0LnRpbWVVbml4TmFubyA9IGUudGltZVVuaXhOYW5vIDogdHlwZW9mIGUudGltZVVuaXhOYW5vID09IFwib2JqZWN0XCIgJiYgKHQudGltZVVuaXhOYW5vID0gbmV3ICR1dGlsLkxvbmdCaXRzKGUudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgZS50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCBlLmNvdW50ICE9IG51bGwgJiYgKCR1dGlsLkxvbmcgPyAodC5jb3VudCA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKGUuY291bnQpKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIGUuY291bnQgPT0gXCJzdHJpbmdcIiA/IHQuY291bnQgPSBwYXJzZUludChlLmNvdW50LCAxMCkgOiB0eXBlb2YgZS5jb3VudCA9PSBcIm51bWJlclwiID8gdC5jb3VudCA9IGUuY291bnQgOiB0eXBlb2YgZS5jb3VudCA9PSBcIm9iamVjdFwiICYmICh0LmNvdW50ID0gbmV3ICR1dGlsLkxvbmdCaXRzKGUuY291bnQubG93ID4+PiAwLCBlLmNvdW50LmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkpKSwgZS5zdW0gIT0gbnVsbCAmJiAodC5zdW0gPSBOdW1iZXIoZS5zdW0pKSwgZS5xdWFudGlsZVZhbHVlcykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5xdWFudGlsZVZhbHVlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LnF1YW50aWxlVmFsdWVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5xdWFudGlsZVZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUucXVhbnRpbGVWYWx1ZXMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUucXVhbnRpbGVWYWx1ZXNbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5xdWFudGlsZVZhbHVlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHQucXVhbnRpbGVWYWx1ZXNbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUuZnJvbU9iamVjdChlLnF1YW50aWxlVmFsdWVzW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuZmxhZ3MgIT0gbnVsbCAmJiAodC5mbGFncyA9IGUuZmxhZ3MgPj4+IDApLCB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIucXVhbnRpbGVWYWx1ZXMgPSBbXSwgci5hdHRyaWJ1dGVzID0gW10pLCB0LmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSBuZXcgJHV0aWwuTG9uZygwLCAwLCAhMSk7XG4gICAgICAgICAgICAgICAgci5zdGFydFRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/IG4udG9TdHJpbmcoKSA6IHQubG9uZ3MgPT09IE51bWJlciA/IG4udG9OdW1iZXIoKSA6IG47XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHIuc3RhcnRUaW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSBuZXcgJHV0aWwuTG9uZygwLCAwLCAhMSk7XG4gICAgICAgICAgICAgICAgci50aW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBuLnRvU3RyaW5nKCkgOiB0LmxvbmdzID09PSBOdW1iZXIgPyBuLnRvTnVtYmVyKCkgOiBuO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByLnRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICByLmNvdW50ID0gdC5sb25ncyA9PT0gU3RyaW5nID8gbi50b1N0cmluZygpIDogdC5sb25ncyA9PT0gTnVtYmVyID8gbi50b051bWJlcigpIDogbjtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgci5jb3VudCA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgci5zdW0gPSAwLCByLmZsYWdzID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmICh0eXBlb2YgZS5zdGFydFRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gci5zdGFydFRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhlLnN0YXJ0VGltZVVuaXhOYW5vKSA6IGUuc3RhcnRUaW1lVW5peE5hbm8gOiByLnN0YXJ0VGltZVVuaXhOYW5vID0gdC5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLnN0YXJ0VGltZVVuaXhOYW5vKSA6IHQubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhlLnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgZS5zdGFydFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogZS5zdGFydFRpbWVVbml4TmFubyksIGUudGltZVVuaXhOYW5vICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSAmJiAodHlwZW9mIGUudGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyByLnRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhlLnRpbWVVbml4TmFubykgOiBlLnRpbWVVbml4TmFubyA6IHIudGltZVVuaXhOYW5vID0gdC5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLnRpbWVVbml4TmFubykgOiB0LmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMoZS50aW1lVW5peE5hbm8ubG93ID4+PiAwLCBlLnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogZS50aW1lVW5peE5hbm8pLCBlLmNvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImNvdW50XCIpICYmICh0eXBlb2YgZS5jb3VudCA9PSBcIm51bWJlclwiID8gci5jb3VudCA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhlLmNvdW50KSA6IGUuY291bnQgOiByLmNvdW50ID0gdC5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLmNvdW50KSA6IHQubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhlLmNvdW50LmxvdyA+Pj4gMCwgZS5jb3VudC5oaWdoID4+PiAwKS50b051bWJlcigpIDogZS5jb3VudCksIGUuc3VtICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSAmJiAoci5zdW0gPSB0Lmpzb24gJiYgIWlzRmluaXRlKGUuc3VtKSA/IFN0cmluZyhlLnN1bSkgOiBlLnN1bSksIGUucXVhbnRpbGVWYWx1ZXMgJiYgZS5xdWFudGlsZVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5xdWFudGlsZVZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGUucXVhbnRpbGVWYWx1ZXMubGVuZ3RoOyArK2wpXG4gICAgICAgICAgICAgICAgci5xdWFudGlsZVZhbHVlc1tsXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZS50b09iamVjdChlLnF1YW50aWxlVmFsdWVzW2xdLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmF0dHJpYnV0ZXMgJiYgZS5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2wpXG4gICAgICAgICAgICAgICAgci5hdHRyaWJ1dGVzW2xdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudG9PYmplY3QoZS5hdHRyaWJ1dGVzW2xdLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmZsYWdzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpICYmIChyLmZsYWdzID0gZS5mbGFncyksIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnRcIjtcbiAgICAgICAgICB9LCBpLlZhbHVlQXRRdWFudGlsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gbyhlKSB7XG4gICAgICAgICAgICAgIGlmIChlKVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhlKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICAgZVt0W3JdXSAhPSBudWxsICYmICh0aGlzW3Rbcl1dID0gZVt0W3JdXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gby5wcm90b3R5cGUucXVhbnRpbGUgPSBudWxsLCBvLnByb3RvdHlwZS52YWx1ZSA9IG51bGwsIG8uY3JlYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IG8odCk7XG4gICAgICAgICAgICB9LCBvLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHIgfHwgKHIgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgdC5xdWFudGlsZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwicXVhbnRpbGVcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgICA5XG4gICAgICAgICAgICAgICkuZG91YmxlKHQucXVhbnRpbGUpLCB0LnZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJ2YWx1ZVwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAgIDE3XG4gICAgICAgICAgICAgICkuZG91YmxlKHQudmFsdWUpLCByO1xuICAgICAgICAgICAgfSwgby5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZSh0LCByKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9ICRSZWFkZXIuY3JlYXRlKHQpKTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IHIgPT09IHZvaWQgMCA/IHQubGVuIDogdC5wb3MgKyByLCBsID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZSgpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICBsLnF1YW50aWxlID0gdC5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgbC52YWx1ZSA9IHQuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdC5za2lwVHlwZShwICYgNyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSBuZXcgJFJlYWRlcih0KSksIHRoaXMuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgfSwgby52ZXJpZnkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwgPyBcIm9iamVjdCBleHBlY3RlZFwiIDogdC5xdWFudGlsZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJxdWFudGlsZVwiKSAmJiB0eXBlb2YgdC5xdWFudGlsZSAhPSBcIm51bWJlclwiID8gXCJxdWFudGlsZTogbnVtYmVyIGV4cGVjdGVkXCIgOiB0LnZhbHVlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpICYmIHR5cGVvZiB0LnZhbHVlICE9IFwibnVtYmVyXCIgPyBcInZhbHVlOiBudW1iZXIgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgICB9LCBvLmZyb21PYmplY3QgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgICB2YXIgciA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHQucXVhbnRpbGUgIT0gbnVsbCAmJiAoci5xdWFudGlsZSA9IE51bWJlcih0LnF1YW50aWxlKSksIHQudmFsdWUgIT0gbnVsbCAmJiAoci52YWx1ZSA9IE51bWJlcih0LnZhbHVlKSksIHI7XG4gICAgICAgICAgICB9LCBvLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByIHx8IChyID0ge30pO1xuICAgICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgICByZXR1cm4gci5kZWZhdWx0cyAmJiAobi5xdWFudGlsZSA9IDAsIG4udmFsdWUgPSAwKSwgdC5xdWFudGlsZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJxdWFudGlsZVwiKSAmJiAobi5xdWFudGlsZSA9IHIuanNvbiAmJiAhaXNGaW5pdGUodC5xdWFudGlsZSkgPyBTdHJpbmcodC5xdWFudGlsZSkgOiB0LnF1YW50aWxlKSwgdC52YWx1ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKSAmJiAobi52YWx1ZSA9IHIuanNvbiAmJiAhaXNGaW5pdGUodC52YWx1ZSkgPyBTdHJpbmcodC52YWx1ZSkgOiB0LnZhbHVlKSwgbjtcbiAgICAgICAgICAgIH0sIG8ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgIH0sIG8uZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgdCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZVwiO1xuICAgICAgICAgICAgfSwgbztcbiAgICAgICAgICB9KCksIGk7XG4gICAgICAgIH0oKSwgZi5FeGVtcGxhciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkoZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRBdHRyaWJ1dGVzID0gW10sIGUpXG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhlKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgIGVbdFtyXV0gIT0gbnVsbCAmJiAodGhpc1t0W3JdXSA9IGVbdFtyXV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpLnByb3RvdHlwZS5maWx0ZXJlZEF0dHJpYnV0ZXMgPSAkdXRpbC5lbXB0eUFycmF5LCBpLnByb3RvdHlwZS50aW1lVW5peE5hbm8gPSBudWxsLCBpLnByb3RvdHlwZS5hc0RvdWJsZSA9IG51bGwsIGkucHJvdG90eXBlLmFzSW50ID0gbnVsbCwgaS5wcm90b3R5cGUuc3BhbklkID0gbnVsbCwgaS5wcm90b3R5cGUudHJhY2VJZCA9IG51bGw7XG4gICAgICAgICAgdmFyIG87XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKG8gPSBbXCJhc0RvdWJsZVwiLCBcImFzSW50XCJdKSxcbiAgICAgICAgICAgIHNldDogJHV0aWwub25lT2ZTZXR0ZXIobylcbiAgICAgICAgICB9KSwgaS5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkodCk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICBpZiAociB8fCAociA9ICRXcml0ZXIuY3JlYXRlKCkpLCB0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwidGltZVVuaXhOYW5vXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAxN1xuICAgICAgICAgICAgKS5maXhlZDY0KHQudGltZVVuaXhOYW5vKSwgdC5hc0RvdWJsZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiYXNEb3VibGVcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDMsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDI1XG4gICAgICAgICAgICApLmRvdWJsZSh0LmFzRG91YmxlKSwgdC5zcGFuSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInNwYW5JZFwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgNCwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMzRcbiAgICAgICAgICAgICkuYnl0ZXModC5zcGFuSWQpLCB0LnRyYWNlSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInRyYWNlSWRcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDUsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDQyXG4gICAgICAgICAgICApLmJ5dGVzKHQudHJhY2VJZCksIHQuYXNJbnQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImFzSW50XCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA2LCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICA0OVxuICAgICAgICAgICAgKS5zZml4ZWQ2NCh0LmFzSW50KSwgdC5maWx0ZXJlZEF0dHJpYnV0ZXMgIT0gbnVsbCAmJiB0LmZpbHRlcmVkQXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5maWx0ZXJlZEF0dHJpYnV0ZXMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZW5jb2RlKHQuZmlsdGVyZWRBdHRyaWJ1dGVzW25dLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDcsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICA1OFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHQsIHIpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICBmb3IgKHZhciBuID0gciA9PT0gdm9pZCAwID8gdC5sZW4gOiB0LnBvcyArIHIsIGwgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyKCk7IHQucG9zIDwgbjsgKSB7XG4gICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChwID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICBsLmZpbHRlcmVkQXR0cmlidXRlcyAmJiBsLmZpbHRlcmVkQXR0cmlidXRlcy5sZW5ndGggfHwgKGwuZmlsdGVyZWRBdHRyaWJ1dGVzID0gW10pLCBsLmZpbHRlcmVkQXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZSh0LCB0LnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBsLnRpbWVVbml4TmFubyA9IHQuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgbC5hc0RvdWJsZSA9IHQuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA2OiB7XG4gICAgICAgICAgICAgICAgICBsLmFzSW50ID0gdC5zZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgbC5zcGFuSWQgPSB0LmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICBsLnRyYWNlSWQgPSB0LmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICh0LmZpbHRlcmVkQXR0cmlidXRlcyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJmaWx0ZXJlZEF0dHJpYnV0ZXNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuZmlsdGVyZWRBdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJmaWx0ZXJlZEF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5maWx0ZXJlZEF0dHJpYnV0ZXMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeSh0LmZpbHRlcmVkQXR0cmlidXRlc1tuXSk7XG4gICAgICAgICAgICAgICAgaWYgKGwpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJmaWx0ZXJlZEF0dHJpYnV0ZXMuXCIgKyBsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwidGltZVVuaXhOYW5vXCIpICYmICEkdXRpbC5pc0ludGVnZXIodC50aW1lVW5peE5hbm8pICYmICEodC50aW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKHQudGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKHQudGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwidGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmICh0LmFzRG91YmxlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImFzRG91YmxlXCIpICYmIChyLnZhbHVlID0gMSwgdHlwZW9mIHQuYXNEb3VibGUgIT0gXCJudW1iZXJcIikpXG4gICAgICAgICAgICAgIHJldHVybiBcImFzRG91YmxlOiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmICh0LmFzSW50ICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImFzSW50XCIpKSB7XG4gICAgICAgICAgICAgIGlmIChyLnZhbHVlID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgaWYgKHIudmFsdWUgPSAxLCAhJHV0aWwuaXNJbnRlZ2VyKHQuYXNJbnQpICYmICEodC5hc0ludCAmJiAkdXRpbC5pc0ludGVnZXIodC5hc0ludC5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LmFzSW50LmhpZ2gpKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJhc0ludDogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdC5zcGFuSWQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwic3BhbklkXCIpICYmICEodC5zcGFuSWQgJiYgdHlwZW9mIHQuc3BhbklkLmxlbmd0aCA9PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKHQuc3BhbklkKSkgPyBcInNwYW5JZDogYnVmZmVyIGV4cGVjdGVkXCIgOiB0LnRyYWNlSWQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSAmJiAhKHQudHJhY2VJZCAmJiB0eXBlb2YgdC50cmFjZUlkLmxlbmd0aCA9PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKHQudHJhY2VJZCkpID8gXCJ0cmFjZUlkOiBidWZmZXIgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgfSwgaS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIpXG4gICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgdmFyIHIgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyKCk7XG4gICAgICAgICAgICBpZiAodC5maWx0ZXJlZEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuZmlsdGVyZWRBdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmZpbHRlcmVkQXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHIuZmlsdGVyZWRBdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5maWx0ZXJlZEF0dHJpYnV0ZXMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuZmlsdGVyZWRBdHRyaWJ1dGVzW25dICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmZpbHRlcmVkQXR0cmlidXRlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHIuZmlsdGVyZWRBdHRyaWJ1dGVzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdCh0LmZpbHRlcmVkQXR0cmlidXRlc1tuXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0LnRpbWVVbml4TmFubyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIudGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC50aW1lVW5peE5hbm8pKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIHQudGltZVVuaXhOYW5vID09IFwic3RyaW5nXCIgPyByLnRpbWVVbml4TmFubyA9IHBhcnNlSW50KHQudGltZVVuaXhOYW5vLCAxMCkgOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHIudGltZVVuaXhOYW5vID0gdC50aW1lVW5peE5hbm8gOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJvYmplY3RcIiAmJiAoci50aW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHModC50aW1lVW5peE5hbm8ubG93ID4+PiAwLCB0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQuYXNEb3VibGUgIT0gbnVsbCAmJiAoci5hc0RvdWJsZSA9IE51bWJlcih0LmFzRG91YmxlKSksIHQuYXNJbnQgIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/IChyLmFzSW50ID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC5hc0ludCkpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgdC5hc0ludCA9PSBcInN0cmluZ1wiID8gci5hc0ludCA9IHBhcnNlSW50KHQuYXNJbnQsIDEwKSA6IHR5cGVvZiB0LmFzSW50ID09IFwibnVtYmVyXCIgPyByLmFzSW50ID0gdC5hc0ludCA6IHR5cGVvZiB0LmFzSW50ID09IFwib2JqZWN0XCIgJiYgKHIuYXNJbnQgPSBuZXcgJHV0aWwuTG9uZ0JpdHModC5hc0ludC5sb3cgPj4+IDAsIHQuYXNJbnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCB0LnNwYW5JZCAhPSBudWxsICYmICh0eXBlb2YgdC5zcGFuSWQgPT0gXCJzdHJpbmdcIiA/ICR1dGlsLmJhc2U2NC5kZWNvZGUodC5zcGFuSWQsIHIuc3BhbklkID0gJHV0aWwubmV3QnVmZmVyKCR1dGlsLmJhc2U2NC5sZW5ndGgodC5zcGFuSWQpKSwgMCkgOiB0LnNwYW5JZC5sZW5ndGggPj0gMCAmJiAoci5zcGFuSWQgPSB0LnNwYW5JZCkpLCB0LnRyYWNlSWQgIT0gbnVsbCAmJiAodHlwZW9mIHQudHJhY2VJZCA9PSBcInN0cmluZ1wiID8gJHV0aWwuYmFzZTY0LmRlY29kZSh0LnRyYWNlSWQsIHIudHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKHQudHJhY2VJZCkpLCAwKSA6IHQudHJhY2VJZC5sZW5ndGggPj0gMCAmJiAoci50cmFjZUlkID0gdC50cmFjZUlkKSksIHI7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgaWYgKChyLmFycmF5cyB8fCByLmRlZmF1bHRzKSAmJiAobi5maWx0ZXJlZEF0dHJpYnV0ZXMgPSBbXSksIHIuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IGwudG9TdHJpbmcoKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IGwudG9OdW1iZXIoKSA6IGw7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICByLmJ5dGVzID09PSBTdHJpbmcgPyBuLnNwYW5JZCA9IFwiXCIgOiAobi5zcGFuSWQgPSBbXSwgci5ieXRlcyAhPT0gQXJyYXkgJiYgKG4uc3BhbklkID0gJHV0aWwubmV3QnVmZmVyKG4uc3BhbklkKSkpLCByLmJ5dGVzID09PSBTdHJpbmcgPyBuLnRyYWNlSWQgPSBcIlwiIDogKG4udHJhY2VJZCA9IFtdLCByLmJ5dGVzICE9PSBBcnJheSAmJiAobi50cmFjZUlkID0gJHV0aWwubmV3QnVmZmVyKG4udHJhY2VJZCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikgJiYgKHR5cGVvZiB0LnRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gbi50aW1lVW5peE5hbm8gPSByLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcodC50aW1lVW5peE5hbm8pIDogdC50aW1lVW5peE5hbm8gOiBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodC50aW1lVW5peE5hbm8pIDogci5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKHQudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgdC50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IHQudGltZVVuaXhOYW5vKSwgdC5hc0RvdWJsZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhc0RvdWJsZVwiKSAmJiAobi5hc0RvdWJsZSA9IHIuanNvbiAmJiAhaXNGaW5pdGUodC5hc0RvdWJsZSkgPyBTdHJpbmcodC5hc0RvdWJsZSkgOiB0LmFzRG91YmxlLCByLm9uZW9mcyAmJiAobi52YWx1ZSA9IFwiYXNEb3VibGVcIikpLCB0LnNwYW5JZCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJzcGFuSWRcIikgJiYgKG4uc3BhbklkID0gci5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZSh0LnNwYW5JZCwgMCwgdC5zcGFuSWQubGVuZ3RoKSA6IHIuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5zcGFuSWQpIDogdC5zcGFuSWQpLCB0LnRyYWNlSWQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSAmJiAobi50cmFjZUlkID0gci5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZSh0LnRyYWNlSWQsIDAsIHQudHJhY2VJZC5sZW5ndGgpIDogci5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LnRyYWNlSWQpIDogdC50cmFjZUlkKSwgdC5hc0ludCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhc0ludFwiKSAmJiAodHlwZW9mIHQuYXNJbnQgPT0gXCJudW1iZXJcIiA/IG4uYXNJbnQgPSByLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcodC5hc0ludCkgOiB0LmFzSW50IDogbi5hc0ludCA9IHIubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodC5hc0ludCkgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC5hc0ludC5sb3cgPj4+IDAsIHQuYXNJbnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IHQuYXNJbnQsIHIub25lb2ZzICYmIChuLnZhbHVlID0gXCJhc0ludFwiKSksIHQuZmlsdGVyZWRBdHRyaWJ1dGVzICYmIHQuZmlsdGVyZWRBdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBuLmZpbHRlcmVkQXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHQuZmlsdGVyZWRBdHRyaWJ1dGVzLmxlbmd0aDsgKytwKVxuICAgICAgICAgICAgICAgIG4uZmlsdGVyZWRBdHRyaWJ1dGVzW3BdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudG9PYmplY3QodC5maWx0ZXJlZEF0dHJpYnV0ZXNbcF0sIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICByZXR1cm4gdCA9PT0gdm9pZCAwICYmICh0ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCB0ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmO1xuICAgICAgfSgpLCBjO1xuICAgIH0oKSwgdS5sb2dzID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYyA9IHt9O1xuICAgICAgcmV0dXJuIGMudjEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGYgPSB7fTtcbiAgICAgICAgcmV0dXJuIGYuTG9nc0RhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jdGlvbiBpKG8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc291cmNlTG9ncyA9IFtdLCBvKVxuICAgICAgICAgICAgICBmb3IgKHZhciBlID0gT2JqZWN0LmtleXMobyksIHQgPSAwOyB0IDwgZS5sZW5ndGg7ICsrdClcbiAgICAgICAgICAgICAgICBvW2VbdF1dICE9IG51bGwgJiYgKHRoaXNbZVt0XV0gPSBvW2VbdF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkucHJvdG90eXBlLnJlc291cmNlTG9ncyA9ICR1dGlsLmVtcHR5QXJyYXksIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgaWYgKHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS5yZXNvdXJjZUxvZ3MgIT0gbnVsbCAmJiBlLnJlc291cmNlTG9ncy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5yZXNvdXJjZUxvZ3MubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy5lbmNvZGUoZS5yZXNvdXJjZUxvZ3Nbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoZSwgdCkubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9ICRSZWFkZXIuY3JlYXRlKGUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSB0ID09PSB2b2lkIDAgPyBlLmxlbiA6IGUucG9zICsgdCwgbiA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGEoKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4ucmVzb3VyY2VMb2dzICYmIG4ucmVzb3VyY2VMb2dzLmxlbmd0aCB8fCAobi5yZXNvdXJjZUxvZ3MgPSBbXSksIG4ucmVzb3VyY2VMb2dzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnJlc291cmNlTG9ncyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZUxvZ3NcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUucmVzb3VyY2VMb2dzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZUxvZ3M6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS5yZXNvdXJjZUxvZ3MubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MudmVyaWZ5KGUucmVzb3VyY2VMb2dzW3RdKTtcbiAgICAgICAgICAgICAgICBpZiAocilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlTG9ncy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YSgpO1xuICAgICAgICAgICAgaWYgKGUucmVzb3VyY2VMb2dzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLnJlc291cmNlTG9ncykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YS5yZXNvdXJjZUxvZ3M6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LnJlc291cmNlTG9ncyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUucmVzb3VyY2VMb2dzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnJlc291cmNlTG9nc1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YS5yZXNvdXJjZUxvZ3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LnJlc291cmNlTG9nc1tyXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MuZnJvbU9iamVjdChlLnJlc291cmNlTG9nc1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIucmVzb3VyY2VMb2dzID0gW10pLCBlLnJlc291cmNlTG9ncyAmJiBlLnJlc291cmNlTG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5yZXNvdXJjZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLnJlc291cmNlTG9ncy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLnJlc291cmNlTG9nc1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MudG9PYmplY3QoZS5yZXNvdXJjZUxvZ3Nbbl0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLlJlc291cmNlTG9ncyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkobykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2NvcGVMb2dzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUucmVzb3VyY2UgPSBudWxsLCBpLnByb3RvdHlwZS5zY29wZUxvZ3MgPSAkdXRpbC5lbXB0eUFycmF5LCBpLnByb3RvdHlwZS5zY2hlbWFVcmwgPSBudWxsLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGlmICh0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUucmVzb3VyY2UgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInJlc291cmNlXCIpICYmICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UuZW5jb2RlKGUucmVzb3VyY2UsIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCBlLnNjb3BlTG9ncyAhPSBudWxsICYmIGUuc2NvcGVMb2dzLmxlbmd0aClcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLnNjb3BlTG9ncy5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzLmVuY29kZShlLnNjb3BlTG9nc1tyXSwgdC51aW50MzIoXG4gICAgICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgICAgMThcbiAgICAgICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInNjaGVtYVVybFwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMywgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMjZcbiAgICAgICAgICAgICkuc3RyaW5nKGUuc2NoZW1hVXJsKSwgdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MoKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4ucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgIG4uc2NvcGVMb2dzICYmIG4uc2NvcGVMb2dzLmxlbmd0aCB8fCAobi5zY29wZUxvZ3MgPSBbXSksIG4uc2NvcGVMb2dzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9ncy5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgbi5zY2hlbWFVcmwgPSBlLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnJlc291cmNlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlXCIpKSB7XG4gICAgICAgICAgICAgIHZhciB0ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS52ZXJpZnkoZS5yZXNvdXJjZSk7XG4gICAgICAgICAgICAgIGlmICh0KVxuICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlLlwiICsgdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnNjb3BlTG9ncyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY29wZUxvZ3NcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuc2NvcGVMb2dzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzY29wZUxvZ3M6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5zY29wZUxvZ3MubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICB2YXIgdCA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MudmVyaWZ5KGUuc2NvcGVMb2dzW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlTG9ncy5cIiArIHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikgJiYgISR1dGlsLmlzU3RyaW5nKGUuc2NoZW1hVXJsKSA/IFwic2NoZW1hVXJsOiBzdHJpbmcgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgfSwgaS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MoKTtcbiAgICAgICAgICAgIGlmIChlLnJlc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnJlc291cmNlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MucmVzb3VyY2U6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5yZXNvdXJjZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UuZnJvbU9iamVjdChlLnJlc291cmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnNjb3BlTG9ncykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5zY29wZUxvZ3MpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLnNjb3BlTG9nczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQuc2NvcGVMb2dzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5zY29wZUxvZ3MubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuc2NvcGVMb2dzW3JdICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy5zY29wZUxvZ3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LnNjb3BlTG9nc1tyXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MuZnJvbU9iamVjdChlLnNjb3BlTG9nc1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmICh0LnNjaGVtYVVybCA9IFN0cmluZyhlLnNjaGVtYVVybCkpLCB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIuc2NvcGVMb2dzID0gW10pLCB0LmRlZmF1bHRzICYmIChyLnJlc291cmNlID0gbnVsbCwgci5zY2hlbWFVcmwgPSBcIlwiKSwgZS5yZXNvdXJjZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZVwiKSAmJiAoci5yZXNvdXJjZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UudG9PYmplY3QoZS5yZXNvdXJjZSwgdCkpLCBlLnNjb3BlTG9ncyAmJiBlLnNjb3BlTG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5zY29wZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLnNjb3BlTG9ncy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLnNjb3BlTG9nc1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MudG9PYmplY3QoZS5zY29wZUxvZ3Nbbl0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuc2NoZW1hVXJsICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSAmJiAoci5zY2hlbWFVcmwgPSBlLnNjaGVtYVVybCksIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc1wiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZi5TY29wZUxvZ3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jdGlvbiBpKG8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvZ1JlY29yZHMgPSBbXSwgbylcbiAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IE9iamVjdC5rZXlzKG8pLCB0ID0gMDsgdCA8IGUubGVuZ3RoOyArK3QpXG4gICAgICAgICAgICAgICAgb1tlW3RdXSAhPSBudWxsICYmICh0aGlzW2VbdF1dID0gb1tlW3RdXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnByb3RvdHlwZS5zY29wZSA9IG51bGwsIGkucHJvdG90eXBlLmxvZ1JlY29yZHMgPSAkdXRpbC5lbXB0eUFycmF5LCBpLnByb3RvdHlwZS5zY2hlbWFVcmwgPSBudWxsLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGlmICh0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUuc2NvcGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInNjb3BlXCIpICYmICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmVuY29kZShlLnNjb3BlLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKSwgZS5sb2dSZWNvcmRzICE9IG51bGwgJiYgZS5sb2dSZWNvcmRzLmxlbmd0aClcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmxvZ1JlY29yZHMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC5lbmNvZGUoZS5sb2dSZWNvcmRzW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxOFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwic2NoZW1hVXJsXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAyNlxuICAgICAgICAgICAgKS5zdHJpbmcoZS5zY2hlbWFVcmwpLCB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9ncygpOyBlLnBvcyA8IHI7ICkge1xuICAgICAgICAgICAgICB2YXIgbCA9IGUudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAobCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgbi5zY29wZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgIG4ubG9nUmVjb3JkcyAmJiBuLmxvZ1JlY29yZHMubGVuZ3RoIHx8IChuLmxvZ1JlY29yZHMgPSBbXSksIG4ubG9nUmVjb3Jkcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQuZGVjb2RlKGUsIGUudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgIG4uc2NoZW1hVXJsID0gZS5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5zY29wZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY29wZVwiKSkge1xuICAgICAgICAgICAgICB2YXIgdCA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLnZlcmlmeShlLnNjb3BlKTtcbiAgICAgICAgICAgICAgaWYgKHQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2NvcGUuXCIgKyB0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUubG9nUmVjb3JkcyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJsb2dSZWNvcmRzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmxvZ1JlY29yZHMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImxvZ1JlY29yZHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5sb2dSZWNvcmRzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHQgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkLnZlcmlmeShlLmxvZ1JlY29yZHNbcl0pO1xuICAgICAgICAgICAgICAgIGlmICh0KVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibG9nUmVjb3Jkcy5cIiArIHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikgJiYgISR1dGlsLmlzU3RyaW5nKGUuc2NoZW1hVXJsKSA/IFwic2NoZW1hVXJsOiBzdHJpbmcgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgfSwgaS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MoKTtcbiAgICAgICAgICAgIGlmIChlLnNjb3BlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnNjb3BlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3Muc2NvcGU6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5zY29wZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmZyb21PYmplY3QoZS5zY29wZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5sb2dSZWNvcmRzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmxvZ1JlY29yZHMpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzLmxvZ1JlY29yZHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LmxvZ1JlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmxvZ1JlY29yZHMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUubG9nUmVjb3Jkc1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MubG9nUmVjb3Jkczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHQubG9nUmVjb3Jkc1tyXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQuZnJvbU9iamVjdChlLmxvZ1JlY29yZHNbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiAodC5zY2hlbWFVcmwgPSBTdHJpbmcoZS5zY2hlbWFVcmwpKSwgdDtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgdCB8fCAodCA9IHt9KTtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAoKHQuYXJyYXlzIHx8IHQuZGVmYXVsdHMpICYmIChyLmxvZ1JlY29yZHMgPSBbXSksIHQuZGVmYXVsdHMgJiYgKHIuc2NvcGUgPSBudWxsLCByLnNjaGVtYVVybCA9IFwiXCIpLCBlLnNjb3BlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlXCIpICYmIChyLnNjb3BlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUudG9PYmplY3QoZS5zY29wZSwgdCkpLCBlLmxvZ1JlY29yZHMgJiYgZS5sb2dSZWNvcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByLmxvZ1JlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLmxvZ1JlY29yZHMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgci5sb2dSZWNvcmRzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC50b09iamVjdChlLmxvZ1JlY29yZHNbbl0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuc2NoZW1hVXJsICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSAmJiAoci5zY2hlbWFVcmwgPSBlLnNjaGVtYVVybCksIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9nc1wiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZi5TZXZlcml0eU51bWJlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpID0ge30sIG8gPSBPYmplY3QuY3JlYXRlKGkpO1xuICAgICAgICAgIHJldHVybiBvW2lbMF0gPSBcIlNFVkVSSVRZX05VTUJFUl9VTlNQRUNJRklFRFwiXSA9IDAsIG9baVsxXSA9IFwiU0VWRVJJVFlfTlVNQkVSX1RSQUNFXCJdID0gMSwgb1tpWzJdID0gXCJTRVZFUklUWV9OVU1CRVJfVFJBQ0UyXCJdID0gMiwgb1tpWzNdID0gXCJTRVZFUklUWV9OVU1CRVJfVFJBQ0UzXCJdID0gMywgb1tpWzRdID0gXCJTRVZFUklUWV9OVU1CRVJfVFJBQ0U0XCJdID0gNCwgb1tpWzVdID0gXCJTRVZFUklUWV9OVU1CRVJfREVCVUdcIl0gPSA1LCBvW2lbNl0gPSBcIlNFVkVSSVRZX05VTUJFUl9ERUJVRzJcIl0gPSA2LCBvW2lbN10gPSBcIlNFVkVSSVRZX05VTUJFUl9ERUJVRzNcIl0gPSA3LCBvW2lbOF0gPSBcIlNFVkVSSVRZX05VTUJFUl9ERUJVRzRcIl0gPSA4LCBvW2lbOV0gPSBcIlNFVkVSSVRZX05VTUJFUl9JTkZPXCJdID0gOSwgb1tpWzEwXSA9IFwiU0VWRVJJVFlfTlVNQkVSX0lORk8yXCJdID0gMTAsIG9baVsxMV0gPSBcIlNFVkVSSVRZX05VTUJFUl9JTkZPM1wiXSA9IDExLCBvW2lbMTJdID0gXCJTRVZFUklUWV9OVU1CRVJfSU5GTzRcIl0gPSAxMiwgb1tpWzEzXSA9IFwiU0VWRVJJVFlfTlVNQkVSX1dBUk5cIl0gPSAxMywgb1tpWzE0XSA9IFwiU0VWRVJJVFlfTlVNQkVSX1dBUk4yXCJdID0gMTQsIG9baVsxNV0gPSBcIlNFVkVSSVRZX05VTUJFUl9XQVJOM1wiXSA9IDE1LCBvW2lbMTZdID0gXCJTRVZFUklUWV9OVU1CRVJfV0FSTjRcIl0gPSAxNiwgb1tpWzE3XSA9IFwiU0VWRVJJVFlfTlVNQkVSX0VSUk9SXCJdID0gMTcsIG9baVsxOF0gPSBcIlNFVkVSSVRZX05VTUJFUl9FUlJPUjJcIl0gPSAxOCwgb1tpWzE5XSA9IFwiU0VWRVJJVFlfTlVNQkVSX0VSUk9SM1wiXSA9IDE5LCBvW2lbMjBdID0gXCJTRVZFUklUWV9OVU1CRVJfRVJST1I0XCJdID0gMjAsIG9baVsyMV0gPSBcIlNFVkVSSVRZX05VTUJFUl9GQVRBTFwiXSA9IDIxLCBvW2lbMjJdID0gXCJTRVZFUklUWV9OVU1CRVJfRkFUQUwyXCJdID0gMjIsIG9baVsyM10gPSBcIlNFVkVSSVRZX05VTUJFUl9GQVRBTDNcIl0gPSAyMywgb1tpWzI0XSA9IFwiU0VWRVJJVFlfTlVNQkVSX0ZBVEFMNFwiXSA9IDI0LCBvO1xuICAgICAgICB9KCksIGYuTG9nUmVjb3JkRmxhZ3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgaSA9IHt9LCBvID0gT2JqZWN0LmNyZWF0ZShpKTtcbiAgICAgICAgICByZXR1cm4gb1tpWzBdID0gXCJMT0dfUkVDT1JEX0ZMQUdTX0RPX05PVF9VU0VcIl0gPSAwLCBvW2lbMjU1XSA9IFwiTE9HX1JFQ09SRF9GTEFHU19UUkFDRV9GTEFHU19NQVNLXCJdID0gMjU1LCBvO1xuICAgICAgICB9KCksIGYuTG9nUmVjb3JkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUudGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8gPSBudWxsLCBpLnByb3RvdHlwZS5zZXZlcml0eU51bWJlciA9IG51bGwsIGkucHJvdG90eXBlLnNldmVyaXR5VGV4dCA9IG51bGwsIGkucHJvdG90eXBlLmJvZHkgPSBudWxsLCBpLnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG51bGwsIGkucHJvdG90eXBlLmZsYWdzID0gbnVsbCwgaS5wcm90b3R5cGUudHJhY2VJZCA9IG51bGwsIGkucHJvdG90eXBlLnNwYW5JZCA9IG51bGwsIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgaWYgKHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInRpbWVVbml4TmFub1wiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgOVxuICAgICAgICAgICAgKS5maXhlZDY0KGUudGltZVVuaXhOYW5vKSwgZS5zZXZlcml0eU51bWJlciAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwic2V2ZXJpdHlOdW1iZXJcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDAgPSovXG4gICAgICAgICAgICAgIDE2XG4gICAgICAgICAgICApLmludDMyKGUuc2V2ZXJpdHlOdW1iZXIpLCBlLnNldmVyaXR5VGV4dCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwic2V2ZXJpdHlUZXh0XCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAyNlxuICAgICAgICAgICAgKS5zdHJpbmcoZS5zZXZlcml0eVRleHQpLCBlLmJvZHkgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImJvZHlcIikgJiYgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZW5jb2RlKGUuYm9keSwgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDUsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDQyXG4gICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCksIGUuYXR0cmlidXRlcyAhPSBudWxsICYmIGUuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShlLmF0dHJpYnV0ZXNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgNiwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDUwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgNywgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgNTZcbiAgICAgICAgICAgICkudWludDMyKGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCksIGUuZmxhZ3MgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImZsYWdzXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA4LCB3aXJlVHlwZSA1ID0qL1xuICAgICAgICAgICAgICA2OVxuICAgICAgICAgICAgKS5maXhlZDMyKGUuZmxhZ3MpLCBlLnRyYWNlSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInRyYWNlSWRcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDksIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDc0XG4gICAgICAgICAgICApLmJ5dGVzKGUudHJhY2VJZCksIGUuc3BhbklkICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJzcGFuSWRcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDEwLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICA4MlxuICAgICAgICAgICAgKS5ieXRlcyhlLnNwYW5JZCksIGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcIm9ic2VydmVkVGltZVVuaXhOYW5vXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxMSwgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgODlcbiAgICAgICAgICAgICkuZml4ZWQ2NChlLm9ic2VydmVkVGltZVVuaXhOYW5vKSwgdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQoKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4udGltZVVuaXhOYW5vID0gZS5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAxMToge1xuICAgICAgICAgICAgICAgICAgbi5vYnNlcnZlZFRpbWVVbml4TmFubyA9IGUuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgbi5zZXZlcml0eU51bWJlciA9IGUuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgIG4uc2V2ZXJpdHlUZXh0ID0gZS5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgIG4uYm9keSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDY6IHtcbiAgICAgICAgICAgICAgICAgIG4uYXR0cmlidXRlcyAmJiBuLmF0dHJpYnV0ZXMubGVuZ3RoIHx8IChuLmF0dHJpYnV0ZXMgPSBbXSksIG4uYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICBuLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgODoge1xuICAgICAgICAgICAgICAgICAgbi5mbGFncyA9IGUuZml4ZWQzMigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgOToge1xuICAgICAgICAgICAgICAgICAgbi50cmFjZUlkID0gZS5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHtcbiAgICAgICAgICAgICAgICAgIG4uc3BhbklkID0gZS5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikgJiYgISR1dGlsLmlzSW50ZWdlcihlLnRpbWVVbml4TmFubykgJiYgIShlLnRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIoZS50aW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIoZS50aW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJ0aW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwib2JzZXJ2ZWRUaW1lVW5peE5hbm9cIikgJiYgISR1dGlsLmlzSW50ZWdlcihlLm9ic2VydmVkVGltZVVuaXhOYW5vKSAmJiAhKGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIoZS5vYnNlcnZlZFRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9ic2VydmVkVGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnNldmVyaXR5TnVtYmVyICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNldmVyaXR5TnVtYmVyXCIpKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGUuc2V2ZXJpdHlOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2V2ZXJpdHlOdW1iZXI6IGVudW0gdmFsdWUgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuc2V2ZXJpdHlUZXh0ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNldmVyaXR5VGV4dFwiKSAmJiAhJHV0aWwuaXNTdHJpbmcoZS5zZXZlcml0eVRleHQpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJzZXZlcml0eVRleHQ6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUuYm9keSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJib2R5XCIpKSB7XG4gICAgICAgICAgICAgIHZhciB0ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUudmVyaWZ5KGUuYm9keSk7XG4gICAgICAgICAgICAgIGlmICh0KVxuICAgICAgICAgICAgICAgIHJldHVybiBcImJvZHkuXCIgKyB0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuYXR0cmlidXRlcyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHQgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkoZS5hdHRyaWJ1dGVzW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyB0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikgJiYgISR1dGlsLmlzSW50ZWdlcihlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpID8gXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50OiBpbnRlZ2VyIGV4cGVjdGVkXCIgOiBlLmZsYWdzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5mbGFncykgPyBcImZsYWdzOiBpbnRlZ2VyIGV4cGVjdGVkXCIgOiBlLnRyYWNlSWQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSAmJiAhKGUudHJhY2VJZCAmJiB0eXBlb2YgZS50cmFjZUlkLmxlbmd0aCA9PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKGUudHJhY2VJZCkpID8gXCJ0cmFjZUlkOiBidWZmZXIgZXhwZWN0ZWRcIiA6IGUuc3BhbklkICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNwYW5JZFwiKSAmJiAhKGUuc3BhbklkICYmIHR5cGVvZiBlLnNwYW5JZC5sZW5ndGggPT0gXCJudW1iZXJcIiB8fCAkdXRpbC5pc1N0cmluZyhlLnNwYW5JZCkpID8gXCJzcGFuSWQ6IGJ1ZmZlciBleHBlY3RlZFwiIDogbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQpXG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZCgpO1xuICAgICAgICAgICAgc3dpdGNoIChlLnRpbWVVbml4TmFubyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHQudGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUoZS50aW1lVW5peE5hbm8pKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIGUudGltZVVuaXhOYW5vID09IFwic3RyaW5nXCIgPyB0LnRpbWVVbml4TmFubyA9IHBhcnNlSW50KGUudGltZVVuaXhOYW5vLCAxMCkgOiB0eXBlb2YgZS50aW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHQudGltZVVuaXhOYW5vID0gZS50aW1lVW5peE5hbm8gOiB0eXBlb2YgZS50aW1lVW5peE5hbm8gPT0gXCJvYmplY3RcIiAmJiAodC50aW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMoZS50aW1lVW5peE5hbm8ubG93ID4+PiAwLCBlLnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpKSksIGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/ICh0Lm9ic2VydmVkVGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUoZS5vYnNlcnZlZFRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgZS5vYnNlcnZlZFRpbWVVbml4TmFubyA9PSBcInN0cmluZ1wiID8gdC5vYnNlcnZlZFRpbWVVbml4TmFubyA9IHBhcnNlSW50KGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8sIDEwKSA6IHR5cGVvZiBlLm9ic2VydmVkVGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyB0Lm9ic2VydmVkVGltZVVuaXhOYW5vID0gZS5vYnNlcnZlZFRpbWVVbml4TmFubyA6IHR5cGVvZiBlLm9ic2VydmVkVGltZVVuaXhOYW5vID09IFwib2JqZWN0XCIgJiYgKHQub2JzZXJ2ZWRUaW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMoZS5vYnNlcnZlZFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCBlLnNldmVyaXR5TnVtYmVyKSB7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnNldmVyaXR5TnVtYmVyID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgIHQuc2V2ZXJpdHlOdW1iZXIgPSBlLnNldmVyaXR5TnVtYmVyO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX1VOU1BFQ0lGSUVEXCI6XG4gICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9UUkFDRVwiOlxuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfVFJBQ0UyXCI6XG4gICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9UUkFDRTNcIjpcbiAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHQuc2V2ZXJpdHlOdW1iZXIgPSAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX1RSQUNFNFwiOlxuICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfREVCVUdcIjpcbiAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIHQuc2V2ZXJpdHlOdW1iZXIgPSA1O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0RFQlVHMlwiOlxuICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfREVCVUczXCI6XG4gICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gNztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9ERUJVRzRcIjpcbiAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgIHQuc2V2ZXJpdHlOdW1iZXIgPSA4O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0lORk9cIjpcbiAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgIHQuc2V2ZXJpdHlOdW1iZXIgPSA5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0lORk8yXCI6XG4gICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDEwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0lORk8zXCI6XG4gICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDExO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0lORk80XCI6XG4gICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDEyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX1dBUk5cIjpcbiAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMTM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfV0FSTjJcIjpcbiAgICAgICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMTQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfV0FSTjNcIjpcbiAgICAgICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfV0FSTjRcIjpcbiAgICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMTY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfRVJST1JcIjpcbiAgICAgICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMTc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfRVJST1IyXCI6XG4gICAgICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDE4O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0VSUk9SM1wiOlxuICAgICAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgICAgIHQuc2V2ZXJpdHlOdW1iZXIgPSAxOTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9FUlJPUjRcIjpcbiAgICAgICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMjA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfRkFUQUxcIjpcbiAgICAgICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMjE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfRkFUQUwyXCI6XG4gICAgICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDIyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0ZBVEFMM1wiOlxuICAgICAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgICAgIHQuc2V2ZXJpdHlOdW1iZXIgPSAyMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9GQVRBTDRcIjpcbiAgICAgICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMjQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5zZXZlcml0eVRleHQgIT0gbnVsbCAmJiAodC5zZXZlcml0eVRleHQgPSBTdHJpbmcoZS5zZXZlcml0eVRleHQpKSwgZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLmJvZHkgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC5ib2R5OiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQuYm9keSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLmZyb21PYmplY3QoZS5ib2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQuYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuYXR0cmlidXRlcy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5hdHRyaWJ1dGVzW3JdICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5hdHRyaWJ1dGVzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChlLmF0dHJpYnV0ZXNbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgKHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA+Pj4gMCksIGUuZmxhZ3MgIT0gbnVsbCAmJiAodC5mbGFncyA9IGUuZmxhZ3MgPj4+IDApLCBlLnRyYWNlSWQgIT0gbnVsbCAmJiAodHlwZW9mIGUudHJhY2VJZCA9PSBcInN0cmluZ1wiID8gJHV0aWwuYmFzZTY0LmRlY29kZShlLnRyYWNlSWQsIHQudHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKGUudHJhY2VJZCkpLCAwKSA6IGUudHJhY2VJZC5sZW5ndGggPj0gMCAmJiAodC50cmFjZUlkID0gZS50cmFjZUlkKSksIGUuc3BhbklkICE9IG51bGwgJiYgKHR5cGVvZiBlLnNwYW5JZCA9PSBcInN0cmluZ1wiID8gJHV0aWwuYmFzZTY0LmRlY29kZShlLnNwYW5JZCwgdC5zcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIoJHV0aWwuYmFzZTY0Lmxlbmd0aChlLnNwYW5JZCkpLCAwKSA6IGUuc3BhbklkLmxlbmd0aCA+PSAwICYmICh0LnNwYW5JZCA9IGUuc3BhbklkKSksIHQ7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHQgfHwgKHQgPSB7fSk7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgaWYgKCh0LmFycmF5cyB8fCB0LmRlZmF1bHRzKSAmJiAoci5hdHRyaWJ1dGVzID0gW10pLCB0LmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSBuZXcgJHV0aWwuTG9uZygwLCAwLCAhMSk7XG4gICAgICAgICAgICAgICAgci50aW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBuLnRvU3RyaW5nKCkgOiB0LmxvbmdzID09PSBOdW1iZXIgPyBuLnRvTnVtYmVyKCkgOiBuO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByLnRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgaWYgKHIuc2V2ZXJpdHlOdW1iZXIgPSB0LmVudW1zID09PSBTdHJpbmcgPyBcIlNFVkVSSVRZX05VTUJFUl9VTlNQRUNJRklFRFwiIDogMCwgci5zZXZlcml0eVRleHQgPSBcIlwiLCByLmJvZHkgPSBudWxsLCByLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSAwLCByLmZsYWdzID0gMCwgdC5ieXRlcyA9PT0gU3RyaW5nID8gci50cmFjZUlkID0gXCJcIiA6IChyLnRyYWNlSWQgPSBbXSwgdC5ieXRlcyAhPT0gQXJyYXkgJiYgKHIudHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcihyLnRyYWNlSWQpKSksIHQuYnl0ZXMgPT09IFN0cmluZyA/IHIuc3BhbklkID0gXCJcIiA6IChyLnNwYW5JZCA9IFtdLCB0LmJ5dGVzICE9PSBBcnJheSAmJiAoci5zcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIoci5zcGFuSWQpKSksICR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICByLm9ic2VydmVkVGltZVVuaXhOYW5vID0gdC5sb25ncyA9PT0gU3RyaW5nID8gbi50b1N0cmluZygpIDogdC5sb25ncyA9PT0gTnVtYmVyID8gbi50b051bWJlcigpIDogbjtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgci5vYnNlcnZlZFRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikgJiYgKHR5cGVvZiBlLnRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gci50aW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcoZS50aW1lVW5peE5hbm8pIDogZS50aW1lVW5peE5hbm8gOiByLnRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZS50aW1lVW5peE5hbm8pIDogdC5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKGUudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgZS50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IGUudGltZVVuaXhOYW5vKSwgZS5zZXZlcml0eU51bWJlciAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzZXZlcml0eU51bWJlclwiKSAmJiAoci5zZXZlcml0eU51bWJlciA9IHQuZW51bXMgPT09IFN0cmluZyA/ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TZXZlcml0eU51bWJlcltlLnNldmVyaXR5TnVtYmVyXSA9PT0gdm9pZCAwID8gZS5zZXZlcml0eU51bWJlciA6ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TZXZlcml0eU51bWJlcltlLnNldmVyaXR5TnVtYmVyXSA6IGUuc2V2ZXJpdHlOdW1iZXIpLCBlLnNldmVyaXR5VGV4dCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzZXZlcml0eVRleHRcIikgJiYgKHIuc2V2ZXJpdHlUZXh0ID0gZS5zZXZlcml0eVRleHQpLCBlLmJvZHkgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiYm9keVwiKSAmJiAoci5ib2R5ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUudG9PYmplY3QoZS5ib2R5LCB0KSksIGUuYXR0cmlidXRlcyAmJiBlLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGUuYXR0cmlidXRlcy5sZW5ndGg7ICsrbClcbiAgICAgICAgICAgICAgICByLmF0dHJpYnV0ZXNbbF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdChlLmF0dHJpYnV0ZXNbbF0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpICYmIChyLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpLCBlLmZsYWdzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpICYmIChyLmZsYWdzID0gZS5mbGFncyksIGUudHJhY2VJZCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJ0cmFjZUlkXCIpICYmIChyLnRyYWNlSWQgPSB0LmJ5dGVzID09PSBTdHJpbmcgPyAkdXRpbC5iYXNlNjQuZW5jb2RlKGUudHJhY2VJZCwgMCwgZS50cmFjZUlkLmxlbmd0aCkgOiB0LmJ5dGVzID09PSBBcnJheSA/IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUudHJhY2VJZCkgOiBlLnRyYWNlSWQpLCBlLnNwYW5JZCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzcGFuSWRcIikgJiYgKHIuc3BhbklkID0gdC5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZShlLnNwYW5JZCwgMCwgZS5zcGFuSWQubGVuZ3RoKSA6IHQuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5zcGFuSWQpIDogZS5zcGFuSWQpLCBlLm9ic2VydmVkVGltZVVuaXhOYW5vICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcIm9ic2VydmVkVGltZVVuaXhOYW5vXCIpICYmICh0eXBlb2YgZS5vYnNlcnZlZFRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gci5vYnNlcnZlZFRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhlLm9ic2VydmVkVGltZVVuaXhOYW5vKSA6IGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8gOiByLm9ic2VydmVkVGltZVVuaXhOYW5vID0gdC5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLm9ic2VydmVkVGltZVVuaXhOYW5vKSA6IHQubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhlLm9ic2VydmVkVGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgZS5vYnNlcnZlZFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogZS5vYnNlcnZlZFRpbWVVbml4TmFubyksIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFwiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZjtcbiAgICAgIH0oKSwgYztcbiAgICB9KCksIHU7XG4gIH0oKSwgYTtcbn0oKTtcbnZhciByb290ID0gJHJvb3Q7XG5mdW5jdGlvbiBoclRpbWVUb05hbm9zKGEpIHtcbiAgdmFyIHUgPSBCaWdJbnQoMWU5KTtcbiAgcmV0dXJuIEJpZ0ludChhWzBdKSAqIHUgKyBCaWdJbnQoYVsxXSk7XG59XG5mdW5jdGlvbiB0b0xvbmdCaXRzKGEpIHtcbiAgdmFyIHUgPSBOdW1iZXIoQmlnSW50LmFzVWludE4oMzIsIGEpKSwgYyA9IE51bWJlcihCaWdJbnQuYXNVaW50TigzMiwgYSA+PiBCaWdJbnQoMzIpKSk7XG4gIHJldHVybiB7IGxvdzogdSwgaGlnaDogYyB9O1xufVxuZnVuY3Rpb24gZW5jb2RlQXNMb25nQml0cyhhKSB7XG4gIHZhciB1ID0gaHJUaW1lVG9OYW5vcyhhKTtcbiAgcmV0dXJuIHRvTG9uZ0JpdHModSk7XG59XG5mdW5jdGlvbiBvcHRpb25hbEhleFRvQmluYXJ5KGEpIHtcbiAgaWYgKGEgIT09IHZvaWQgMClcbiAgICByZXR1cm4gQShhKTtcbn1cbnZhciBERUZBVUxUX0VOQ09ERVIgPSB7XG4gIGVuY29kZUhyVGltZTogZW5jb2RlQXNMb25nQml0cyxcbiAgZW5jb2RlU3BhbkNvbnRleHQ6IEEsXG4gIGVuY29kZU9wdGlvbmFsU3BhbkNvbnRleHQ6IG9wdGlvbmFsSGV4VG9CaW5hcnlcbn07XG5mdW5jdGlvbiBnZXRPdGxwRW5jb2RlcihhKSB7XG4gIHJldHVybiBERUZBVUxUX0VOQ09ERVI7XG59XG52YXIgX19yZWFkJDMgPSBmdW5jdGlvbihhLCB1KSB7XG4gIHZhciBjID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgYVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWMpIHJldHVybiBhO1xuICB2YXIgZiA9IGMuY2FsbChhKSwgaSwgbyA9IFtdLCBlO1xuICB0cnkge1xuICAgIGZvciAoOyAodSA9PT0gdm9pZCAwIHx8IHUtLSA+IDApICYmICEoaSA9IGYubmV4dCgpKS5kb25lOyApIG8ucHVzaChpLnZhbHVlKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIGUgPSB7IGVycm9yOiB0IH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGkgJiYgIWkuZG9uZSAmJiAoYyA9IGYucmV0dXJuKSAmJiBjLmNhbGwoZik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbztcbn07XG5mdW5jdGlvbiBjcmVhdGVSZXNvdXJjZShhKSB7XG4gIHJldHVybiB7XG4gICAgYXR0cmlidXRlczogdG9BdHRyaWJ1dGVzKGEuYXR0cmlidXRlcyksXG4gICAgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogMFxuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlSW5zdHJ1bWVudGF0aW9uU2NvcGUoYSkge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGEubmFtZSxcbiAgICB2ZXJzaW9uOiBhLnZlcnNpb25cbiAgfTtcbn1cbmZ1bmN0aW9uIHRvQXR0cmlidXRlcyhhKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhhKS5tYXAoZnVuY3Rpb24odSkge1xuICAgIHJldHVybiB0b0tleVZhbHVlKHUsIGFbdV0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHRvS2V5VmFsdWUoYSwgdSkge1xuICByZXR1cm4ge1xuICAgIGtleTogYSxcbiAgICB2YWx1ZTogdG9BbnlWYWx1ZSh1KVxuICB9O1xufVxuZnVuY3Rpb24gdG9BbnlWYWx1ZShhKSB7XG4gIHZhciB1ID0gdHlwZW9mIGE7XG4gIHJldHVybiB1ID09PSBcInN0cmluZ1wiID8geyBzdHJpbmdWYWx1ZTogYSB9IDogdSA9PT0gXCJudW1iZXJcIiA/IE51bWJlci5pc0ludGVnZXIoYSkgPyB7IGludFZhbHVlOiBhIH0gOiB7IGRvdWJsZVZhbHVlOiBhIH0gOiB1ID09PSBcImJvb2xlYW5cIiA/IHsgYm9vbFZhbHVlOiBhIH0gOiBhIGluc3RhbmNlb2YgVWludDhBcnJheSA/IHsgYnl0ZXNWYWx1ZTogYSB9IDogQXJyYXkuaXNBcnJheShhKSA/IHsgYXJyYXlWYWx1ZTogeyB2YWx1ZXM6IGEubWFwKHRvQW55VmFsdWUpIH0gfSA6IHUgPT09IFwib2JqZWN0XCIgJiYgYSAhPSBudWxsID8ge1xuICAgIGt2bGlzdFZhbHVlOiB7XG4gICAgICB2YWx1ZXM6IE9iamVjdC5lbnRyaWVzKGEpLm1hcChmdW5jdGlvbihjKSB7XG4gICAgICAgIHZhciBmID0gX19yZWFkJDMoYywgMiksIGkgPSBmWzBdLCBvID0gZlsxXTtcbiAgICAgICAgcmV0dXJuIHRvS2V5VmFsdWUoaSwgbyk7XG4gICAgICB9KVxuICAgIH1cbiAgfSA6IHt9O1xufVxudmFyIF9fdmFsdWVzID0gZnVuY3Rpb24oYSkge1xuICB2YXIgdSA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgYyA9IHUgJiYgYVt1XSwgZiA9IDA7XG4gIGlmIChjKSByZXR1cm4gYy5jYWxsKGEpO1xuICBpZiAoYSAmJiB0eXBlb2YgYS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBhICYmIGYgPj0gYS5sZW5ndGggJiYgKGEgPSB2b2lkIDApLCB7IHZhbHVlOiBhICYmIGFbZisrXSwgZG9uZTogIWEgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodSA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn0sIF9fcmVhZCQyID0gZnVuY3Rpb24oYSwgdSkge1xuICB2YXIgYyA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGFbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFjKSByZXR1cm4gYTtcbiAgdmFyIGYgPSBjLmNhbGwoYSksIGksIG8gPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHUgPT09IHZvaWQgMCB8fCB1LS0gPiAwKSAmJiAhKGkgPSBmLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goaS52YWx1ZSk7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBlID0geyBlcnJvcjogdCB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpICYmICFpLmRvbmUgJiYgKGMgPSBmLnJldHVybikgJiYgYy5jYWxsKGYpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59O1xuZnVuY3Rpb24gc2RrU3BhblRvT3RscFNwYW4oYSwgdSkge1xuICB2YXIgYywgZiA9IGEuc3BhbkNvbnRleHQoKSwgaSA9IGEuc3RhdHVzO1xuICByZXR1cm4ge1xuICAgIHRyYWNlSWQ6IHUuZW5jb2RlU3BhbkNvbnRleHQoZi50cmFjZUlkKSxcbiAgICBzcGFuSWQ6IHUuZW5jb2RlU3BhbkNvbnRleHQoZi5zcGFuSWQpLFxuICAgIHBhcmVudFNwYW5JZDogdS5lbmNvZGVPcHRpb25hbFNwYW5Db250ZXh0KGEucGFyZW50U3BhbklkKSxcbiAgICB0cmFjZVN0YXRlOiAoYyA9IGYudHJhY2VTdGF0ZSkgPT09IG51bGwgfHwgYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYy5zZXJpYWxpemUoKSxcbiAgICBuYW1lOiBhLm5hbWUsXG4gICAgLy8gU3BhbiBraW5kIGlzIG9mZnNldCBieSAxIGJlY2F1c2UgdGhlIEFQSSBkb2VzIG5vdCBkZWZpbmUgYSB2YWx1ZSBmb3IgdW5zZXRcbiAgICBraW5kOiBhLmtpbmQgPT0gbnVsbCA/IDAgOiBhLmtpbmQgKyAxLFxuICAgIHN0YXJ0VGltZVVuaXhOYW5vOiB1LmVuY29kZUhyVGltZShhLnN0YXJ0VGltZSksXG4gICAgZW5kVGltZVVuaXhOYW5vOiB1LmVuY29kZUhyVGltZShhLmVuZFRpbWUpLFxuICAgIGF0dHJpYnV0ZXM6IHRvQXR0cmlidXRlcyhhLmF0dHJpYnV0ZXMpLFxuICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IGEuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCxcbiAgICBldmVudHM6IGEuZXZlbnRzLm1hcChmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gdG9PdGxwU3BhbkV2ZW50KG8sIHUpO1xuICAgIH0pLFxuICAgIGRyb3BwZWRFdmVudHNDb3VudDogYS5kcm9wcGVkRXZlbnRzQ291bnQsXG4gICAgc3RhdHVzOiB7XG4gICAgICAvLyBBUEkgYW5kIHByb3RvIGVudW1zIHNoYXJlIHRoZSBzYW1lIHZhbHVlc1xuICAgICAgY29kZTogaS5jb2RlLFxuICAgICAgbWVzc2FnZTogaS5tZXNzYWdlXG4gICAgfSxcbiAgICBsaW5rczogYS5saW5rcy5tYXAoZnVuY3Rpb24obykge1xuICAgICAgcmV0dXJuIHRvT3RscExpbmsobywgdSk7XG4gICAgfSksXG4gICAgZHJvcHBlZExpbmtzQ291bnQ6IGEuZHJvcHBlZExpbmtzQ291bnRcbiAgfTtcbn1cbmZ1bmN0aW9uIHRvT3RscExpbmsoYSwgdSkge1xuICB2YXIgYztcbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVzOiBhLmF0dHJpYnV0ZXMgPyB0b0F0dHJpYnV0ZXMoYS5hdHRyaWJ1dGVzKSA6IFtdLFxuICAgIHNwYW5JZDogdS5lbmNvZGVTcGFuQ29udGV4dChhLmNvbnRleHQuc3BhbklkKSxcbiAgICB0cmFjZUlkOiB1LmVuY29kZVNwYW5Db250ZXh0KGEuY29udGV4dC50cmFjZUlkKSxcbiAgICB0cmFjZVN0YXRlOiAoYyA9IGEuY29udGV4dC50cmFjZVN0YXRlKSA9PT0gbnVsbCB8fCBjID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjLnNlcmlhbGl6ZSgpLFxuICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IGEuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCB8fCAwXG4gIH07XG59XG5mdW5jdGlvbiB0b090bHBTcGFuRXZlbnQoYSwgdSkge1xuICByZXR1cm4ge1xuICAgIGF0dHJpYnV0ZXM6IGEuYXR0cmlidXRlcyA/IHRvQXR0cmlidXRlcyhhLmF0dHJpYnV0ZXMpIDogW10sXG4gICAgbmFtZTogYS5uYW1lLFxuICAgIHRpbWVVbml4TmFubzogdS5lbmNvZGVIclRpbWUoYS50aW1lKSxcbiAgICBkcm9wcGVkQXR0cmlidXRlc0NvdW50OiBhLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgfHwgMFxuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdChhLCB1KSB7XG4gIHZhciBjID0gZ2V0T3RscEVuY29kZXIoKTtcbiAgcmV0dXJuIHtcbiAgICByZXNvdXJjZVNwYW5zOiBzcGFuUmVjb3Jkc1RvUmVzb3VyY2VTcGFucyhhLCBjKVxuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlUmVzb3VyY2VNYXAoYSkge1xuICB2YXIgdSwgYywgZiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIHRyeSB7XG4gICAgZm9yICh2YXIgaSA9IF9fdmFsdWVzKGEpLCBvID0gaS5uZXh0KCk7ICFvLmRvbmU7IG8gPSBpLm5leHQoKSkge1xuICAgICAgdmFyIGUgPSBvLnZhbHVlLCB0ID0gZi5nZXQoZS5yZXNvdXJjZSk7XG4gICAgICB0IHx8ICh0ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgZi5zZXQoZS5yZXNvdXJjZSwgdCkpO1xuICAgICAgdmFyIHIgPSBlLmluc3RydW1lbnRhdGlvbkxpYnJhcnkubmFtZSArIFwiQFwiICsgKGUuaW5zdHJ1bWVudGF0aW9uTGlicmFyeS52ZXJzaW9uIHx8IFwiXCIpICsgXCI6XCIgKyAoZS5pbnN0cnVtZW50YXRpb25MaWJyYXJ5LnNjaGVtYVVybCB8fCBcIlwiKSwgbiA9IHQuZ2V0KHIpO1xuICAgICAgbiB8fCAobiA9IFtdLCB0LnNldChyLCBuKSksIG4ucHVzaChlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGwpIHtcbiAgICB1ID0geyBlcnJvcjogbCB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKGMgPSBpLnJldHVybikgJiYgYy5jYWxsKGkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAodSkgdGhyb3cgdS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5mdW5jdGlvbiBzcGFuUmVjb3Jkc1RvUmVzb3VyY2VTcGFucyhhLCB1KSB7XG4gIGZvciAodmFyIGMgPSBjcmVhdGVSZXNvdXJjZU1hcChhKSwgZiA9IFtdLCBpID0gYy5lbnRyaWVzKCksIG8gPSBpLm5leHQoKTsgIW8uZG9uZTsgKSB7XG4gICAgZm9yICh2YXIgZSA9IF9fcmVhZCQyKG8udmFsdWUsIDIpLCB0ID0gZVswXSwgciA9IGVbMV0sIG4gPSBbXSwgbCA9IHIudmFsdWVzKCksIHAgPSBsLm5leHQoKTsgIXAuZG9uZTsgKSB7XG4gICAgICB2YXIgcyA9IHAudmFsdWU7XG4gICAgICBpZiAocy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciB5ID0gcy5tYXAoZnVuY3Rpb24oaCkge1xuICAgICAgICAgIHJldHVybiBzZGtTcGFuVG9PdGxwU3BhbihoLCB1KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG4ucHVzaCh7XG4gICAgICAgICAgc2NvcGU6IGNyZWF0ZUluc3RydW1lbnRhdGlvblNjb3BlKHNbMF0uaW5zdHJ1bWVudGF0aW9uTGlicmFyeSksXG4gICAgICAgICAgc3BhbnM6IHksXG4gICAgICAgICAgc2NoZW1hVXJsOiBzWzBdLmluc3RydW1lbnRhdGlvbkxpYnJhcnkuc2NoZW1hVXJsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcCA9IGwubmV4dCgpO1xuICAgIH1cbiAgICB2YXIgZCA9IHtcbiAgICAgIHJlc291cmNlOiBjcmVhdGVSZXNvdXJjZSh0KSxcbiAgICAgIHNjb3BlU3BhbnM6IG4sXG4gICAgICBzY2hlbWFVcmw6IHZvaWQgMFxuICAgIH07XG4gICAgZi5wdXNoKGQpLCBvID0gaS5uZXh0KCk7XG4gIH1cbiAgcmV0dXJuIGY7XG59XG52YXIgdHJhY2VSZXNwb25zZVR5cGUgPSByb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLCB0cmFjZVJlcXVlc3RUeXBlID0gcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LCBQcm90b2J1ZlRyYWNlU2VyaWFsaXplciA9IHtcbiAgc2VyaWFsaXplUmVxdWVzdDogZnVuY3Rpb24oYSkge1xuICAgIHZhciB1ID0gY3JlYXRlRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdChhKTtcbiAgICByZXR1cm4gdHJhY2VSZXF1ZXN0VHlwZS5lbmNvZGUodSkuZmluaXNoKCk7XG4gIH0sXG4gIGRlc2VyaWFsaXplUmVzcG9uc2U6IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gdHJhY2VSZXNwb25zZVR5cGUuZGVjb2RlKGEpO1xuICB9XG59LCBfX2F3YWl0ZXIgPSBmdW5jdGlvbihhLCB1LCBjLCBmKSB7XG4gIGZ1bmN0aW9uIGkobykge1xuICAgIHJldHVybiBvIGluc3RhbmNlb2YgYyA/IG8gOiBuZXcgYyhmdW5jdGlvbihlKSB7XG4gICAgICBlKG8pO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKGMgfHwgKGMgPSBQcm9taXNlKSkoZnVuY3Rpb24obywgZSkge1xuICAgIGZ1bmN0aW9uIHQobCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbihmLm5leHQobCkpO1xuICAgICAgfSBjYXRjaCAocCkge1xuICAgICAgICBlKHApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByKGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG4oZi50aHJvdyhsKSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIGUocCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG4obCkge1xuICAgICAgbC5kb25lID8gbyhsLnZhbHVlKSA6IGkobC52YWx1ZSkudGhlbih0LCByKTtcbiAgICB9XG4gICAgbigoZiA9IGYuYXBwbHkoYSwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn0sIF9fZ2VuZXJhdG9yID0gZnVuY3Rpb24oYSwgdSkge1xuICB2YXIgYyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChvWzBdICYgMSkgdGhyb3cgb1sxXTtcbiAgICByZXR1cm4gb1sxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgaSwgbywgZTtcbiAgcmV0dXJuIGUgPSB7IG5leHQ6IHQoMCksIHRocm93OiB0KDEpLCByZXR1cm46IHQoMikgfSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZTtcbiAgZnVuY3Rpb24gdChuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGwpIHtcbiAgICAgIHJldHVybiByKFtuLCBsXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiByKG4pIHtcbiAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IGM7ICkgdHJ5IHtcbiAgICAgIGlmIChmID0gMSwgaSAmJiAobyA9IG5bMF0gJiAyID8gaS5yZXR1cm4gOiBuWzBdID8gaS50aHJvdyB8fCAoKG8gPSBpLnJldHVybikgJiYgby5jYWxsKGkpLCAwKSA6IGkubmV4dCkgJiYgIShvID0gby5jYWxsKGksIG5bMV0pKS5kb25lKSByZXR1cm4gbztcbiAgICAgIHN3aXRjaCAoaSA9IDAsIG8gJiYgKG4gPSBbblswXSAmIDIsIG8udmFsdWVdKSwgblswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBvID0gbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBjLmxhYmVsKyssIHsgdmFsdWU6IG5bMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBjLmxhYmVsKyssIGkgPSBuWzFdLCBuID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbiA9IGMub3BzLnBvcCgpLCBjLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKG8gPSBjLnRyeXMsICEobyA9IG8ubGVuZ3RoID4gMCAmJiBvW28ubGVuZ3RoIC0gMV0pICYmIChuWzBdID09PSA2IHx8IG5bMF0gPT09IDIpKSB7XG4gICAgICAgICAgICBjID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoblswXSA9PT0gMyAmJiAoIW8gfHwgblsxXSA+IG9bMF0gJiYgblsxXSA8IG9bM10pKSB7XG4gICAgICAgICAgICBjLmxhYmVsID0gblsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoblswXSA9PT0gNiAmJiBjLmxhYmVsIDwgb1sxXSkge1xuICAgICAgICAgICAgYy5sYWJlbCA9IG9bMV0sIG8gPSBuO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvICYmIGMubGFiZWwgPCBvWzJdKSB7XG4gICAgICAgICAgICBjLmxhYmVsID0gb1syXSwgYy5vcHMucHVzaChuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvWzJdICYmIGMub3BzLnBvcCgpLCBjLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBuID0gdS5jYWxsKGEsIGMpO1xuICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgIG4gPSBbNiwgbF0sIGkgPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBmID0gbyA9IDA7XG4gICAgfVxuICAgIGlmIChuWzBdICYgNSkgdGhyb3cgblsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogblswXSA/IG5bMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn0sIE1BWF9BVFRFTVBUUyA9IDUsIElOSVRJQUxfQkFDS09GRiA9IDFlMywgTUFYX0JBQ0tPRkYgPSA1ZTMsIEJBQ0tPRkZfTVVMVElQTElFUiA9IDEuNSwgSklUVEVSID0gMC4yO1xuZnVuY3Rpb24gZ2V0Sml0dGVyKCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKSAqICgyICogSklUVEVSKSAtIEpJVFRFUjtcbn1cbnZhciBSZXRyeWluZ1RyYW5zcG9ydCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBhKHUpIHtcbiAgICAgIHRoaXMuX3RyYW5zcG9ydCA9IHU7XG4gICAgfVxuICAgIHJldHVybiBhLnByb3RvdHlwZS5yZXRyeSA9IGZ1bmN0aW9uKHUsIGMsIGYpIHtcbiAgICAgIHZhciBpID0gdGhpcztcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvLCBlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaS5fdHJhbnNwb3J0LnNlbmQodSwgYykudGhlbihvLCBlKTtcbiAgICAgICAgfSwgZik7XG4gICAgICB9KTtcbiAgICB9LCBhLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24odSwgYykge1xuICAgICAgdmFyIGY7XG4gICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGksIG8sIGUsIHQsIHIsIG4sIGw7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbihwKSB7XG4gICAgICAgICAgc3dpdGNoIChwLmxhYmVsKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHJldHVybiBpID0gRGF0ZS5ub3coKSArIGMsIFs0LCB0aGlzLl90cmFuc3BvcnQuc2VuZCh1LCBjKV07XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIG8gPSBwLnNlbnQoKSwgZSA9IE1BWF9BVFRFTVBUUywgdCA9IElOSVRJQUxfQkFDS09GRiwgcC5sYWJlbCA9IDI7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIHJldHVybiBvLnN0YXR1cyA9PT0gXCJyZXRyeWFibGVcIiAmJiBlID4gMCA/IChlLS0sIHIgPSBNYXRoLm1heChNYXRoLm1pbih0LCBNQVhfQkFDS09GRikgKyBnZXRKaXR0ZXIoKSwgMCksIHQgPSB0ICogQkFDS09GRl9NVUxUSVBMSUVSLCBuID0gKGYgPSBvLnJldHJ5SW5NaWxsaXMpICE9PSBudWxsICYmIGYgIT09IHZvaWQgMCA/IGYgOiByLCBsID0gaSAtIERhdGUubm93KCksIG4gPiBsID8gWzIsIG9dIDogWzQsIHRoaXMucmV0cnkodSwgbCwgbildKSA6IFszLCA0XTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIG8gPSBwLnNlbnQoKSwgWzMsIDJdO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gWzIsIG9dO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCBhLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5zaHV0ZG93bigpO1xuICAgIH0sIGE7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIGNyZWF0ZVJldHJ5aW5nVHJhbnNwb3J0KGEpIHtcbiAgcmV0dXJuIG5ldyBSZXRyeWluZ1RyYW5zcG9ydChhLnRyYW5zcG9ydCk7XG59XG5mdW5jdGlvbiBpc0V4cG9ydFJldHJ5YWJsZShhKSB7XG4gIHZhciB1ID0gWzQyOSwgNTAyLCA1MDMsIDUwNF07XG4gIHJldHVybiB1LmluY2x1ZGVzKGEpO1xufVxuZnVuY3Rpb24gcGFyc2VSZXRyeUFmdGVyVG9NaWxscyhhKSB7XG4gIGlmIChhICE9IG51bGwpIHtcbiAgICB2YXIgdSA9IE51bWJlci5wYXJzZUludChhLCAxMCk7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIodSkpXG4gICAgICByZXR1cm4gdSA+IDAgPyB1ICogMWUzIDogLTE7XG4gICAgdmFyIGMgPSBuZXcgRGF0ZShhKS5nZXRUaW1lKCkgLSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBjID49IDAgPyBjIDogMDtcbiAgfVxufVxudmFyIF9fcmVhZCQxID0gZnVuY3Rpb24oYSwgdSkge1xuICB2YXIgYyA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGFbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFjKSByZXR1cm4gYTtcbiAgdmFyIGYgPSBjLmNhbGwoYSksIGksIG8gPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHUgPT09IHZvaWQgMCB8fCB1LS0gPiAwKSAmJiAhKGkgPSBmLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goaS52YWx1ZSk7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBlID0geyBlcnJvcjogdCB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpICYmICFpLmRvbmUgJiYgKGMgPSBmLnJldHVybikgJiYgYy5jYWxsKGYpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59LCBYaHJUcmFuc3BvcnQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gYSh1KSB7XG4gICAgICB0aGlzLl9wYXJhbWV0ZXJzID0gdTtcbiAgICB9XG4gICAgcmV0dXJuIGEucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbih1LCBjKSB7XG4gICAgICB2YXIgZiA9IHRoaXM7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaSkge1xuICAgICAgICB2YXIgbyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICBvLnRpbWVvdXQgPSBjLCBvLm9wZW4oXCJQT1NUXCIsIGYuX3BhcmFtZXRlcnMudXJsKTtcbiAgICAgICAgdmFyIGUgPSBmLl9wYXJhbWV0ZXJzLmhlYWRlcnMoKTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KSB7XG4gICAgICAgICAgdmFyIHIgPSBfX3JlYWQkMSh0LCAyKSwgbiA9IHJbMF0sIGwgPSByWzFdO1xuICAgICAgICAgIG8uc2V0UmVxdWVzdEhlYWRlcihuLCBsKTtcbiAgICAgICAgfSksIG8ub250aW1lb3V0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgIGkoe1xuICAgICAgICAgICAgc3RhdHVzOiBcImZhaWx1cmVcIixcbiAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJYSFIgcmVxdWVzdCB0aW1lZCBvdXRcIilcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgby5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBvLnN0YXR1cyA+PSAyMDAgJiYgby5zdGF0dXMgPD0gMjk5ID8gKHIuZGVidWcoXCJYSFIgc3VjY2Vzc1wiKSwgaSh7XG4gICAgICAgICAgICBzdGF0dXM6IFwic3VjY2Vzc1wiXG4gICAgICAgICAgfSkpIDogby5zdGF0dXMgJiYgaXNFeHBvcnRSZXRyeWFibGUoby5zdGF0dXMpID8gaSh7XG4gICAgICAgICAgICBzdGF0dXM6IFwicmV0cnlhYmxlXCIsXG4gICAgICAgICAgICByZXRyeUluTWlsbGlzOiBwYXJzZVJldHJ5QWZ0ZXJUb01pbGxzKG8uZ2V0UmVzcG9uc2VIZWFkZXIoXCJSZXRyeS1BZnRlclwiKSlcbiAgICAgICAgICB9KSA6IG8uc3RhdHVzICE9PSAwICYmIGkoe1xuICAgICAgICAgICAgc3RhdHVzOiBcImZhaWx1cmVcIixcbiAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJYSFIgcmVxdWVzdCBmYWlsZWQgd2l0aCBub24tcmV0cnlhYmxlIHN0YXR1c1wiKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBvLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpKHtcbiAgICAgICAgICAgIHN0YXR1czogXCJmYWlsdXJlXCIsXG4gICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiWEhSIHJlcXVlc3QgYWJvcnRlZFwiKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBvLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpKHtcbiAgICAgICAgICAgIHN0YXR1czogXCJmYWlsdXJlXCIsXG4gICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiWEhSIHJlcXVlc3QgZXJyb3JlZFwiKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBvLnNlbmQodSk7XG4gICAgICB9KTtcbiAgICB9LCBhLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgIH0sIGE7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIGNyZWF0ZVhoclRyYW5zcG9ydChhKSB7XG4gIHJldHVybiBuZXcgWGhyVHJhbnNwb3J0KGEpO1xufVxudmFyIFNlbmRCZWFjb25UcmFuc3BvcnQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gYSh1KSB7XG4gICAgICB0aGlzLl9wYXJhbXMgPSB1O1xuICAgIH1cbiAgICByZXR1cm4gYS5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHZhciBjID0gdGhpcztcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihmKSB7XG4gICAgICAgIG5hdmlnYXRvci5zZW5kQmVhY29uKGMuX3BhcmFtcy51cmwsIG5ldyBCbG9iKFt1XSwgeyB0eXBlOiBjLl9wYXJhbXMuYmxvYlR5cGUgfSkpID8gKHIuZGVidWcoXCJTZW5kQmVhY29uIHN1Y2Nlc3NcIiksIGYoe1xuICAgICAgICAgIHN0YXR1czogXCJzdWNjZXNzXCJcbiAgICAgICAgfSkpIDogZih7XG4gICAgICAgICAgc3RhdHVzOiBcImZhaWx1cmVcIixcbiAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiU2VuZEJlYWNvbiBmYWlsZWRcIilcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCBhLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgIH0sIGE7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIGNyZWF0ZVNlbmRCZWFjb25UcmFuc3BvcnQoYSkge1xuICByZXR1cm4gbmV3IFNlbmRCZWFjb25UcmFuc3BvcnQoYSk7XG59XG5mdW5jdGlvbiBjcmVhdGVPdGxwWGhyRXhwb3J0RGVsZWdhdGUoYSwgdSkge1xuICByZXR1cm4gY3JlYXRlT3RscE5ldHdvcmtFeHBvcnREZWxlZ2F0ZShhLCB1LCBjcmVhdGVSZXRyeWluZ1RyYW5zcG9ydCh7XG4gICAgdHJhbnNwb3J0OiBjcmVhdGVYaHJUcmFuc3BvcnQoYSlcbiAgfSkpO1xufVxuZnVuY3Rpb24gY3JlYXRlT3RscFNlbmRCZWFjb25FeHBvcnREZWxlZ2F0ZShhLCB1KSB7XG4gIHJldHVybiBjcmVhdGVPdGxwTmV0d29ya0V4cG9ydERlbGVnYXRlKGEsIHUsIGNyZWF0ZVJldHJ5aW5nVHJhbnNwb3J0KHtcbiAgICB0cmFuc3BvcnQ6IGNyZWF0ZVNlbmRCZWFjb25UcmFuc3BvcnQoe1xuICAgICAgdXJsOiBhLnVybCxcbiAgICAgIGJsb2JUeXBlOiBhLmhlYWRlcnMoKVtcIkNvbnRlbnQtVHlwZVwiXVxuICAgIH0pXG4gIH0pKTtcbn1cbnZhciBfX3JlYWQgPSBmdW5jdGlvbihhLCB1KSB7XG4gIHZhciBjID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgYVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWMpIHJldHVybiBhO1xuICB2YXIgZiA9IGMuY2FsbChhKSwgaSwgbyA9IFtdLCBlO1xuICB0cnkge1xuICAgIGZvciAoOyAodSA9PT0gdm9pZCAwIHx8IHUtLSA+IDApICYmICEoaSA9IGYubmV4dCgpKS5kb25lOyApIG8ucHVzaChpLnZhbHVlKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIGUgPSB7IGVycm9yOiB0IH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGkgJiYgIWkuZG9uZSAmJiAoYyA9IGYucmV0dXJuKSAmJiBjLmNhbGwoZik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbztcbn07XG5mdW5jdGlvbiB2YWxpZGF0ZUFuZE5vcm1hbGl6ZUhlYWRlcnMoYSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHUsIGMgPSB7fTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoKHUgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhKCkpICE9PSBudWxsICYmIHUgIT09IHZvaWQgMCA/IHUgOiB7fSkuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICB2YXIgaSA9IF9fcmVhZChmLCAyKSwgbyA9IGlbMF0sIGUgPSBpWzFdO1xuICAgICAgdHlwZW9mIGUgPCBcInVcIiA/IGNbb10gPSBTdHJpbmcoZSkgOiByLndhcm4oJ0hlYWRlciBcIicgKyBvICsgJ1wiIGhhcyBpbnZhbGlkIHZhbHVlICgnICsgZSArIFwiKSBhbmQgd2lsbCBiZSBpZ25vcmVkXCIpO1xuICAgIH0pLCBjO1xuICB9O1xufVxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24oYSkge1xuICAgIGZvciAodmFyIHUsIGMgPSAxLCBmID0gYXJndW1lbnRzLmxlbmd0aDsgYyA8IGY7IGMrKykge1xuICAgICAgdSA9IGFyZ3VtZW50c1tjXTtcbiAgICAgIGZvciAodmFyIGkgaW4gdSkgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHUsIGkpICYmIChhW2ldID0gdVtpXSk7XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9LCBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbmZ1bmN0aW9uIG1lcmdlSGVhZGVycyhhLCB1LCBjKSB7XG4gIHZhciBmID0gX19hc3NpZ24oe30sIGMoKSksIGkgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB1ICE9IG51bGwgJiYgT2JqZWN0LmFzc2lnbihpLCB1KCkpLCBhICE9IG51bGwgJiYgT2JqZWN0LmFzc2lnbihpLCBhKCkpLCBPYmplY3QuYXNzaWduKGksIGYpO1xuICB9O1xufVxuZnVuY3Rpb24gdmFsaWRhdGVVc2VyUHJvdmlkZWRVcmwoYSkge1xuICBpZiAoYSAhPSBudWxsKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFVSTChhKSwgYTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbmZpZ3VyYXRpb246IENvdWxkIG5vdCBwYXJzZSB1c2VyLXByb3ZpZGVkIGV4cG9ydCBVUkw6ICdcIiArIGEgKyBcIidcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gbWVyZ2VPdGxwSHR0cENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMoYSwgdSwgYykge1xuICB2YXIgZiwgaSwgbywgZTtcbiAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBtZXJnZU90bHBTaGFyZWRDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzKGEsIHUsIGMpKSwgeyBoZWFkZXJzOiBtZXJnZUhlYWRlcnModmFsaWRhdGVBbmROb3JtYWxpemVIZWFkZXJzKGEuaGVhZGVycyksIHUuaGVhZGVycywgYy5oZWFkZXJzKSwgdXJsOiAoaSA9IChmID0gdmFsaWRhdGVVc2VyUHJvdmlkZWRVcmwoYS51cmwpKSAhPT0gbnVsbCAmJiBmICE9PSB2b2lkIDAgPyBmIDogdS51cmwpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBjLnVybCwgYWdlbnRPcHRpb25zOiAoZSA9IChvID0gYS5hZ2VudE9wdGlvbnMpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiB1LmFnZW50T3B0aW9ucykgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IGMuYWdlbnRPcHRpb25zIH0pO1xufVxuZnVuY3Rpb24gZ2V0SHR0cENvbmZpZ3VyYXRpb25EZWZhdWx0cyhhLCB1KSB7XG4gIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkRlZmF1bHRzKCkpLCB7IGhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhO1xuICB9LCB1cmw6IFwiaHR0cDovL2xvY2FsaG9zdDo0MzE4L1wiICsgdSwgYWdlbnRPcHRpb25zOiB7IGtlZXBBbGl2ZTogITAgfSB9KTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRMZWdhY3lCcm93c2VySHR0cE9wdGlvbnMoYSwgdSwgYykge1xuICByZXR1cm4gbWVyZ2VPdGxwSHR0cENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMoXG4gICAge1xuICAgICAgdXJsOiBhLnVybCxcbiAgICAgIHRpbWVvdXRNaWxsaXM6IGEudGltZW91dE1pbGxpcyxcbiAgICAgIGhlYWRlcnM6IHdyYXBTdGF0aWNIZWFkZXJzSW5GdW5jdGlvbihhLmhlYWRlcnMpLFxuICAgICAgY29uY3VycmVuY3lMaW1pdDogYS5jb25jdXJyZW5jeUxpbWl0XG4gICAgfSxcbiAgICB7fSxcbiAgICAvLyBubyBmYWxsYmFjayBmb3IgYnJvd3NlciBjYXNlXG4gICAgZ2V0SHR0cENvbmZpZ3VyYXRpb25EZWZhdWx0cyhjLCB1KVxuICApO1xufVxuZnVuY3Rpb24gY3JlYXRlTGVnYWN5T3RscEJyb3dzZXJFeHBvcnREZWxlZ2F0ZShhLCB1LCBjLCBmKSB7XG4gIHZhciBpID0gISFhLmhlYWRlcnMgfHwgdHlwZW9mIG5hdmlnYXRvci5zZW5kQmVhY29uICE9IFwiZnVuY3Rpb25cIiwgbyA9IGNvbnZlcnRMZWdhY3lCcm93c2VySHR0cE9wdGlvbnMoYSwgYywgZik7XG4gIHJldHVybiBpID8gY3JlYXRlT3RscFhockV4cG9ydERlbGVnYXRlKG8sIHUpIDogY3JlYXRlT3RscFNlbmRCZWFjb25FeHBvcnREZWxlZ2F0ZShvLCB1KTtcbn1cbnZhciBfX2V4dGVuZHMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gIHZhciBhID0gZnVuY3Rpb24odSwgYykge1xuICAgIHJldHVybiBhID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oZiwgaSkge1xuICAgICAgZi5fX3Byb3RvX18gPSBpO1xuICAgIH0gfHwgZnVuY3Rpb24oZiwgaSkge1xuICAgICAgZm9yICh2YXIgbyBpbiBpKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSwgbykgJiYgKGZbb10gPSBpW29dKTtcbiAgICB9LCBhKHUsIGMpO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24odSwgYykge1xuICAgIGlmICh0eXBlb2YgYyAhPSBcImZ1bmN0aW9uXCIgJiYgYyAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGMpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBhKHUsIGMpO1xuICAgIGZ1bmN0aW9uIGYoKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gdTtcbiAgICB9XG4gICAgdS5wcm90b3R5cGUgPSBjID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShjKSA6IChmLnByb3RvdHlwZSA9IGMucHJvdG90eXBlLCBuZXcgZigpKTtcbiAgfTtcbn0oKSwgREVGQVVMVF9DT0xMRUNUT1JfUkVTT1VSQ0VfUEFUSCA9IFwidjEvdHJhY2VzXCIsIE9UTFBUcmFjZUV4cG9ydGVyID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKGEpIHtcbiAgICBfX2V4dGVuZHModSwgYSk7XG4gICAgZnVuY3Rpb24gdShjKSB7XG4gICAgICByZXR1cm4gYyA9PT0gdm9pZCAwICYmIChjID0ge30pLCBhLmNhbGwodGhpcywgY3JlYXRlTGVnYWN5T3RscEJyb3dzZXJFeHBvcnREZWxlZ2F0ZShjLCBQcm90b2J1ZlRyYWNlU2VyaWFsaXplciwgREVGQVVMVF9DT0xMRUNUT1JfUkVTT1VSQ0VfUEFUSCwgeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL3gtcHJvdG9idWZcIiB9KSkgfHwgdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIHU7XG4gIH0oT1RMUEV4cG9ydGVyQmFzZSlcbik7XG5cbmV4cG9ydCB7IE9UTFBUcmFjZUV4cG9ydGVyIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxTQUFTO0FBQ2xCLFNBQVMsR0FBRyxTQUFTO0FBQ3JCLFNBQVMsU0FB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R0FBR0MsRUFBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUdDLEVBQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHQyxFQUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBR0MsRUFBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUdDLEVBQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHQyxFQUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFBQSxJQUM3STtBQUNBLGFBQVNILEVBQUVFLEdBQUdFLEdBQUdELEdBQUc7QUFDbEIsUUFBRSxDQUFDLElBQUlELEdBQUdFLEVBQUVELENBQUMsSUFBSSxFQUFFLENBQUMsR0FBR0MsRUFBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUdDLEVBQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHQyxFQUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBR0MsRUFBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUdDLEVBQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHQyxFQUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBR0MsRUFBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQUEsSUFDN0k7QUFDQSxJQUFBTCxFQUFFLGdCQUFnQkMsSUFBSSxJQUFJQyxHQUFHRixFQUFFLGdCQUFnQkMsSUFBSUMsSUFBSTtBQUN2RCxhQUFTLEVBQUVFLEdBQUdFLEdBQUc7QUFDZixhQUFPLEVBQUUsQ0FBQyxJQUFJRixFQUFFRSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUlGLEVBQUVFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJRixFQUFFRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSUYsRUFBRUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUlGLEVBQUVFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJRixFQUFFRSxJQUFJ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QUFFLGtCQUFrQixTQUFTLENBQUMsRUFBRSxTQUFTLEtBQUtBLEVBQUUsZ0JBQWdCLFNBQVMsTUFBTSxRQUFRQyxFQUFFLGVBQWUsTUFBTSxLQUFLLFVBQVVELEVBQUUsWUFBWSxHQUFHLFdBQVcsS0FBSyxPQUFPQSxFQUFFLGdCQUFnQixXQUFXQyxFQUFFLGVBQWUsU0FBU0QsRUFBRSxjQUFjLEVBQUUsSUFBSSxPQUFPQSxFQUFFLGdCQUFnQixXQUFXQyxFQUFFLGVBQWVELEVBQUUsZUFBZSxPQUFPQSxFQUFFLGdCQUFnQixhQUFhQyxFQUFFLGVBQWUsSUFBSSxNQUFNLFNBQVNELEVBQUUsYUFBYSxRQUFRLEdBQUdBLEVBQUUsYUFBYSxTQUFTLENBQUMsRUFBRSxTQUFTLEtBQUtBLEVBQUUsU0FBUyxTQUFTLE1BQU0sUUFBUUMsRUFBRSxRQUFRLE1BQU0sS0FBSyxVQUFVRCxFQUFFLEtBQUssR0FBRyxXQUFXLEtBQUssT0FBT0EsRUFBRSxTQUFTLFdBQVdDLEVBQUUsUUFBUSxTQUFTRCxFQUFFLE9BQU8sRUFBRSxJQUFJLE9BQU9BLEVBQUUsU0FBUyxXQUFXQyxFQUFFLFFBQVFELEVBQUUsUUFBUSxPQUFPQSxFQUFFLFNBQVMsYUFBYUMsRUFBRSxRQUFRLElBQUksTUFBTSxTQUFTRCxFQUFFLE1BQU0sUUFBUSxHQUFHQSxFQUFFLE1BQU0sU0FBUyxDQUFDLEVBQUUsU0FBUyxLQUFLQSxFQUFFLE9BQU8sU0FBU0MsRUFBRSxNQUFNLE9BQU9ELEVBQUUsR0FBRyxJQUFJQSxFQUFFLFNBQVMsU0FBU0MsRUFBRSxRQUFRRCxFQUFFLFFBQVEsSUFBSUEsRUFBRSxhQUFhLFNBQVMsTUFBTSxRQUFRQyxFQUFFLFlBQVksTUFBTSxLQUFLLFVBQVVELEVBQUUsU0FBUyxHQUFHLFdBQVcsS0FBSyxPQUFPQSxFQUFFLGFBQWEsV0FBV0MsRUFBRSxZQUFZLFNBQVNELEVBQUUsV0FBVyxFQUFFLElBQUksT0FBT0EsRUFBRSxhQUFhLFdBQVdDLEVBQUUsWUFBWUQsRUFBRSxZQUFZLE9BQU9BLEVBQUUsYUFBYSxhQUFhQyxFQUFFLFlBQVksSUFBSSxNQUFNLFNBQVNELEVBQUUsVUFBVSxRQUFRLEdBQUdBLEVBQUUsVUFBVSxTQUFTLENBQUMsRUFBRSxTQUFTLEtBQUtBLEVBQUUsWUFBWSxNQUFNO0FBQ3ZvRCxrQkFBSSxPQUFPQSxFQUFFLFlBQVk7QUFDdkIsc0JBQU0sVUFBVSx5RkFBeUY7QUFDM0csY0FBQUMsRUFBRSxXQUFXLE1BQU0sY0FBYyxNQUFNLFFBQVEsR0FBRyw4QkFBOEIsUUFBUSxXQUFXRCxFQUFFLFFBQVE7QUFBQSxZQUMvRztBQUNBLGdCQUFJQSxFQUFFLFlBQVksTUFBTTtBQUN0QixrQkFBSSxPQUFPQSxFQUFFLFlBQVk7QUFDdkIsc0JBQU0sVUFBVSx5RkFBeUY7QUFDM0csY0FBQUMsRUFBRSxXQUFXLE1BQU0sY0FBYyxNQUFNLFFBQVEsR0FBRyw4QkFBOEIsUUFBUSxXQUFXRCxFQUFFLFFBQVE7QUFBQSxZQUMvRztBQUNBLGdCQUFJQSxFQUFFLFNBQVMsU0FBU0MsRUFBRSxRQUFRRCxFQUFFLFVBQVUsSUFBSUEsRUFBRSxXQUFXO0FBQzdELGtCQUFJLENBQUMsTUFBTSxRQUFRQSxFQUFFLFNBQVM7QUFDNUIsc0JBQU0sVUFBVSx5RkFBeUY7QUFDM0csY0FBQUMsRUFBRSxZQUFZLENBQUM7QUFDZix1QkFBUyxJQUFJLEdBQUcsSUFBSUQsRUFBRSxVQUFVLFFBQVEsRUFBRSxHQUFHO0FBQzNDLG9CQUFJLE9BQU9BLEVBQUUsVUFBVSxDQUFDLEtBQUs7QUFDM0Isd0JBQU0sVUFBVSwwRkFBMEY7QUFDNUcsZ0JBQUFDLEVBQUUsVUFBVSxDQUFDLElBQUksTUFBTSxjQUFjLE1BQU0sUUFBUSxHQUFHLFNBQVMsV0FBV0QsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUFBLGNBQzFGO0FBQUEsWUFDRjtBQUNBLG1CQUFPQSxFQUFFLE9BQU8sU0FBU0MsRUFBRSxNQUFNLE9BQU9ELEVBQUUsR0FBRyxJQUFJQSxFQUFFLE9BQU8sU0FBU0MsRUFBRSxNQUFNLE9BQU9ELEVBQUUsR0FBRyxJQUFJQSxFQUFFLGlCQUFpQixTQUFTQyxFQUFFLGdCQUFnQixPQUFPRCxFQUFFLGFBQWEsSUFBSUM7QUFBQSxVQUNySyxHQUFHLEVBQUUsV0FBVyxTQUFTRCxHQUFHQyxHQUFHO0FBQzdCLFlBQUFBLE1BQU1BLElBQUksQ0FBQztBQUNYLGdCQUFJLElBQUksQ0FBQztBQUNULGlCQUFLQSxFQUFFLFVBQVVBLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUlBLEVBQUUsVUFBVTtBQUNqRixrQkFBSSxNQUFNLE1BQU07QUFDZCxvQkFBSUMsSUFBSSxJQUFJLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRTtBQUMvQixrQkFBRSxvQkFBb0JELEVBQUUsVUFBVSxTQUFTQyxFQUFFLFNBQVMsSUFBSUQsRUFBRSxVQUFVLFNBQVNDLEVBQUUsU0FBUyxJQUFJQTtBQUFBLGNBQ2hHO0FBQ0Usa0JBQUUsb0JBQW9CRCxFQUFFLFVBQVUsU0FBUyxNQUFNO0FBQ25ELGtCQUFJLE1BQU0sTUFBTTtBQUNkLG9CQUFJQyxJQUFJLElBQUksTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFO0FBQy9CLGtCQUFFLGVBQWVELEVBQUUsVUFBVSxTQUFTQyxFQUFFLFNBQVMsSUFBSUQsRUFBRSxVQUFVLFNBQVNDLEVBQUUsU0FBUyxJQUFJQTtBQUFBLGNBQzNGO0FBQ0Usa0JBQUUsZUFBZUQsRUFBRSxVQUFVLFNBQVMsTUFBTTtBQUM5QyxrQkFBSSxNQUFNLE1BQU07QUFDZCxvQkFBSUMsSUFBSSxJQUFJLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRTtBQUMvQixrQkFBRSxRQUFRRCxFQUFFLFVBQVUsU0FBU0MsRUFBRSxTQUFTLElBQUlELEVBQUUsVUFBVSxTQUFTQyxFQUFFLFNBQVMsSUFBSUE7QUFBQSxjQUNwRjtBQUNFLGtCQUFFLFFBQVFELEVBQUUsVUFBVSxTQUFTLE1BQU07QUFDdkMsa0JBQUksRUFBRSxRQUFRLEdBQUcsTUFBTSxNQUFNO0FBQzNCLG9CQUFJQyxJQUFJLElBQUksTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFO0FBQy9CLGtCQUFFLFlBQVlELEVBQUUsVUFBVSxTQUFTQyxFQUFFLFNBQVMsSUFBSUQsRUFBRSxVQUFVLFNBQVNDLEVBQUUsU0FBUyxJQUFJQTtBQUFBLGNBQ3hGO0FBQ0Usa0JBQUUsWUFBWUQsRUFBRSxVQUFVLFNBQVMsTUFBTTtBQUMzQyxnQkFBRSxXQUFXLE1BQU0sRUFBRSxXQUFXLE1BQU0sRUFBRSxRQUFRLEdBQUcsRUFBRSxnQkFBZ0I7QUFBQSxZQUN2RTtBQUNBLGdCQUFJRCxFQUFFLGNBQWNBLEVBQUUsV0FBVyxRQUFRO0FBQ3ZDLGdCQUFFLGFBQWEsQ0FBQztBQUNoQix1QkFBU0ksSUFBSSxHQUFHQSxJQUFJSixFQUFFLFdBQVcsUUFBUSxFQUFFSTtBQUN6QyxrQkFBRSxXQUFXQSxDQUFDLElBQUksTUFBTSxjQUFjLE1BQU0sT0FBTyxHQUFHLFNBQVMsU0FBU0osRUFBRSxXQUFXSSxDQUFDLEdBQUdILENBQUM7QUFBQSxZQUM5RjtBQUNBLGdCQUFJRCxFQUFFLHFCQUFxQixRQUFRQSxFQUFFLGVBQWUsbUJBQW1CLE1BQU0sT0FBT0EsRUFBRSxxQkFBcUIsV0FBVyxFQUFFLG9CQUFvQkMsRUFBRSxVQUFVLFNBQVMsT0FBT0QsRUFBRSxpQkFBaUIsSUFBSUEsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0JDLEVBQUUsVUFBVSxTQUFTLE1BQU0sS0FBSyxVQUFVLFNBQVMsS0FBS0QsRUFBRSxpQkFBaUIsSUFBSUMsRUFBRSxVQUFVLFNBQVMsSUFBSSxNQUFNLFNBQVNELEVBQUUsa0JBQWtCLFFBQVEsR0FBR0EsRUFBRSxrQkFBa0IsU0FBUyxDQUFDLEVBQUUsU0FBUyxJQUFJQSxFQUFFLG9CQUFvQkEsRUFBRSxnQkFBZ0IsUUFBUUEsRUFBRSxlQUFlLGNBQWMsTUFBTSxPQUFPQSxFQUFFLGdCQUFnQixXQUFXLEVBQUUsZUFBZUMsRUFBRSxVQUFVLFNBQVMsT0FBT0QsRUFBRSxZQUFZLElBQUlBLEVBQUUsZUFBZSxFQUFFLGVBQWVDLEVBQUUsVUFBVSxTQUFTLE1BQU0sS0FBSyxVQUFVLFNBQVMsS0FBS0QsRUFBRSxZQUFZLElBQUlDLEVBQUUsVUFBVSxTQUFTLElBQUksTUFBTSxTQUFTRCxFQUFFLGFBQWEsUUFBUSxHQUFHQSxFQUFFLGFBQWEsU0FBUyxDQUFDLEVBQUUsU0FBUyxJQUFJQSxFQUFFLGVBQWVBLEVBQUUsU0FBUyxRQUFRQSxFQUFFLGVBQWUsT0FBTyxNQUFNLE9BQU9BLEVBQUUsU0FBUyxXQUFXLEVBQUUsUUFBUUMsRUFBRSxVQUFVLFNBQVMsT0FBT0QsRUFBRSxLQUFLLElBQUlBLEVBQUUsUUFBUSxFQUFFLFFBQVFDLEVBQUUsVUFBVSxTQUFTLE1BQU0sS0FBSyxVQUFVLFNBQVMsS0FBS0QsRUFBRSxLQUFLLElBQUlDLEVBQUUsVUFBVSxTQUFTLElBQUksTUFBTSxTQUFTRCxFQUFFLE1BQU0sUUFBUSxHQUFHQSxFQUFFLE1BQU0sU0FBUyxDQUFDLEVBQUUsU0FBUyxJQUFJQSxFQUFFLFFBQVFBLEVBQUUsT0FBTyxRQUFRQSxFQUFFLGVBQWUsS0FBSyxNQUFNLEVBQUUsTUFBTUMsRUFBRSxRQUFRLENBQUMsU0FBU0QsRUFBRSxHQUFHLElBQUksT0FBT0EsRUFBRSxHQUFHLElBQUlBLEVBQUUsS0FBS0MsRUFBRSxXQUFXLEVBQUUsT0FBTyxTQUFTRCxFQUFFLFNBQVMsUUFBUUEsRUFBRSxlQUFlLE9BQU8sTUFBTSxFQUFFLFFBQVFBLEVBQUUsUUFBUUEsRUFBRSxhQUFhLFFBQVFBLEVBQUUsZUFBZSxXQUFXLE1BQU0sT0FBT0EsRUFBRSxhQUFhLFdBQVcsRUFBRSxZQUFZQyxFQUFFLFVBQVUsU0FBUyxPQUFPRCxFQUFFLFNBQVMsSUFBSUEsRUFBRSxZQUFZLEVBQUUsWUFBWUMsRUFBRSxVQUFVLFNBQVMsTUFBTSxLQUFLLFVBQVUsU0FBUyxLQUFLRCxFQUFFLFNBQVMsSUFBSUMsRUFBRSxVQUFVLFNBQVMsSUFBSSxNQUFNLFNBQVNELEVBQUUsVUFBVSxRQUFRLEdBQUdBLEVBQUUsVUFBVSxTQUFTLENBQUMsRUFBRSxTQUFTLElBQUlBLEVBQUUsWUFBWUEsRUFBRSxZQUFZLFFB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UyxNQUFNLEtBQUssVUFBVSxTQUFTLEtBQUtELEVBQUUsWUFBWSxJQUFJQyxFQUFFLFVBQVUsU0FBUyxJQUFJLE1BQU0sU0FBU0QsRUFBRSxhQUFhLFFBQVEsR0FBR0EsRUFBRSxhQUFhLFNBQVMsQ0FBQyxFQUFFLFNBQVMsSUFBSUEsRUFBRSxlQUFlQSxFQUFFLFlBQVksUUFBUUEsRUFBRSxlQUFlLFVBQVUsTUFBTSxFQUFFLFdBQVdDLEVBQUUsUUFBUSxDQUFDLFNBQVNELEVBQUUsUUFBUSxJQUFJLE9BQU9BLEVBQUUsUUFBUSxJQUFJQSxFQUFFLFVBQVVDLEVBQUUsV0FBVyxFQUFFLFFBQVEsY0FBY0QsRUFBRSxVQUFVLFFBQVFBLEVBQUUsZUFBZSxRQUFRLE1BQU0sRUFBRSxTQUFTQyxFQUFFLFVBQVUsU0FBUyxNQUFNLE9BQU8sT0FBT0QsRUFBRSxRQUFRLEdBQUdBLEVBQUUsT0FBTyxNQUFNLElBQUlDLEVBQUUsVUFBVSxRQUFRLE1BQU0sVUFBVSxNQUFNLEtBQUtELEVBQUUsTUFBTSxJQUFJQSxFQUFFLFNBQVNBLEVBQUUsV0FBVyxRQUFRQSxFQUFFLGVBQWUsU0FBUyxNQUFNLEVBQUUsVUFBVUMsRUFBRSxVQUFVLFNBQVMsTUFBTSxPQUFPLE9BQU9ELEVBQUUsU0FBUyxHQUFHQSxFQUFFLFFBQVEsTUFBTSxJQUFJQyxFQUFFLFVBQVUsUUFBUSxNQUFNLFVBQVUsTUFBTSxLQUFLRCxFQUFFLE9BQU8sSUFBSUEsRUFBRSxVQUFVQSxFQUFFLFNBQVMsUUFBUUEsRUFBRSxlQUFlLE9BQU8sTUFBTSxPQUFPQSxFQUFFLFNBQVMsV0FBVyxFQUFFLFFBQVFDLEVBQUUsVUFBVSxTQUFTLE9BQU9ELEVBQUUsS0FBSyxJQUFJQSxFQUFFLFFBQVEsRUFBRSxRQUFRQyxFQUFFLFVBQVUsU0FBUyxNQUFNLEtBQUssVUFBVSxTQUFTLEtBQUtELEVBQUUsS0FBSyxJQUFJQyxFQUFFLFVBQVUsU0FBUyxJQUFJLE1BQU0sU0FBU0QsRUFBRSxNQUFNLFFBQVEsR0FBR0EsRUFBRSxNQUFNLFNBQVMsQ0FBQyxFQUFF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QUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlC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ZUFBZUEsRUFBRTtBQUFBLE1BQ2pCLFNBQVMsNEJBQTRCQSxFQUFFLE9BQU87QUFBQSxNQUM5QyxrQkFBa0JBLEVBQUU7QUFBQSxJQUN0QjtBQUFBLElBQ0EsQ0FBQztBQUFBO0FBQUEsSUFFRCw2QkFBNkIsR0FBRyxDQUFDO0FBQUEsRUFDbkM7QUFDRjtBQUNBLFNBQVMsc0NBQXNDQSxHQUFHLEdBQUcsR0FBR0MsR0FBRztBQUN6RCxNQUFJLElBQUksQ0FBQyxDQUFDRCxFQUFFLFdBQVcsT0FBTyxVQUFVLGNBQWMsWUFBWUUsSUFBSSxnQ0FBZ0NGLEdBQUcsR0FBR0MsQ0FBQztBQUM3RyxTQUFPLElBQUksNEJBQTRCQyxHQUFHLENBQUMsSUFBSSxtQ0FBbUNBLEdBQUcsQ0FBQztBQUN4RjtBQUNBLElBQUksWUFBNEIsMkJBQVc7QUFDekMsTUFBSUYsSUFBSSxTQUFTLEdBQUcsR0FBRztBQUNyQixXQUFPQSxJQUFJLE9BQU8sa0JBQWtCLEVBQUUsV0FBVyxDQUFDLEVBQUUsYUFBYSxTQUFTLFNBQVNDLEdBQUcsR0FBRztBQUN2RixNQUFBQSxFQUFFLFlBQVk7QUFBQSxJQUNoQixLQUFLLFNBQVNBLEdBQUcsR0FBRztBQUNsQixlQUFTQyxLQUFLLEVBQUcsUUFBTyxVQUFVLGVBQWUsS0FBSyxHQUFHQSxDQUFDLE1BQU1ELEVBQUVDLENBQUMsSUFBSSxFQUFFQSxDQUFDO0FBQUEsSUFDNUUsR0FBR0YsRUFBRSxHQUFHLENBQUM7QUFBQSxFQUNYO0FBQ0EsU0FBTyxTQUFTLEdBQUcsR0FBRztBQUNwQixRQUFJLE9BQU8sS0FBSyxjQUFjLE1BQU07QUFDbEMsWUFBTSxJQUFJLFVBQVUseUJBQXlCLE9BQU8sQ0FBQyxJQUFJLCtCQUErQjtBQUMxRixJQUFBQSxFQUFFLEdBQUcsQ0FBQztBQUNOLGFBQVNDLElBQUk7QUFDWCxXQUFLLGNBQWM7QUFBQSxJQUNyQjtBQUNBLE1BQUUsWUFBWSxNQUFNLE9BQU8sT0FBTyxPQUFPLENBQUMsS0FBS0EsRUFBRSxZQUFZLEVBQUUsV0FBVyxJQUFJQSxFQUFFO0FBQUEsRUFDbEY7QUFDRixFQUFFLEdBQUcsa0NBQWtDLGFBQWE7QUFBQTtBQUFBLEVBRWxELFNBQVNELEdBQUc7QUFDVixjQUFVLEdBQUdBLENBQUM7QUFDZCxhQUFTLEVBQUUsR0FBRztBQUNaLGFBQU8sTUFBTSxXQUFXLElBQUksQ0FBQyxJQUFJQSxFQUFFLEtBQUssTUFBTSxzQ0FBc0MsR0FBRyx5QkFBeUIsaUNBQWlDLEVBQUUsZ0JBQWdCLHlCQUF5QixDQUFDLENBQUMsS0FBSztBQUFBLElBQ3JNO0FBQ0EsV0FBTztBQUFBLEVBQ1QsRUFBRSxnQkFBZ0I7QUFBQTsiLAogICJuYW1lcyI6IFsiYSIsICJmIiwgIm8iLCAidCIsICJyIiwgImwiLCAibiIsICJwIiwgImEkMSIsICJzIiwgImQiLCAiaCIsICJ1IiwgImMiLCAiaSIsICJlIiwgImYkMSIsICJ5Il0KfQo=
6685
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtQkFOLWMwVTktIX57MDBrfX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHIgfSBmcm9tICcuL2RpYWctYXBpLXJCemVReG5ULSF+ezAwN31+LmpzJztcbmltcG9ydCB7IGEsIEEgfSBmcm9tICcuL0V4cG9ydFJlc3VsdC1CbzFRT3dmby0hfnswMGx9fi5qcyc7XG5pbXBvcnQgeyBmIH0gZnJvbSAnLi9fY29tbW9uanNIZWxwZXJzLURuTXpFLTcxLSF+ezAwaX1+LmpzJztcblxudmFyIE9UTFBFeHBvcnRlckJhc2UgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gYSh1KSB7XG4gICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHU7XG4gICAgfVxuICAgIHJldHVybiBhLnByb3RvdHlwZS5leHBvcnQgPSBmdW5jdGlvbih1LCBjKSB7XG4gICAgICB0aGlzLl9kZWxlZ2F0ZS5leHBvcnQodSwgYyk7XG4gICAgfSwgYS5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlLmZvcmNlRmx1c2goKTtcbiAgICB9LCBhLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlLnNodXRkb3duKCk7XG4gICAgfSwgYTtcbiAgfSgpXG4pLCBfX2V4dGVuZHMkMSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIGEgPSBmdW5jdGlvbih1LCBjKSB7XG4gICAgcmV0dXJuIGEgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihmLCBpKSB7XG4gICAgICBmLl9fcHJvdG9fXyA9IGk7XG4gICAgfSB8fCBmdW5jdGlvbihmLCBpKSB7XG4gICAgICBmb3IgKHZhciBvIGluIGkpIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCBvKSAmJiAoZltvXSA9IGlbb10pO1xuICAgIH0sIGEodSwgYyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbih1LCBjKSB7XG4gICAgaWYgKHR5cGVvZiBjICE9IFwiZnVuY3Rpb25cIiAmJiBjICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYykgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgIGEodSwgYyk7XG4gICAgZnVuY3Rpb24gZigpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSB1O1xuICAgIH1cbiAgICB1LnByb3RvdHlwZSA9IGMgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGMpIDogKGYucHJvdG90eXBlID0gYy5wcm90b3R5cGUsIG5ldyBmKCkpO1xuICB9O1xufSgpLCBPVExQRXhwb3J0ZXJFcnJvciA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbihhKSB7XG4gICAgX19leHRlbmRzJDEodSwgYSk7XG4gICAgZnVuY3Rpb24gdShjLCBmLCBpKSB7XG4gICAgICB2YXIgbyA9IGEuY2FsbCh0aGlzLCBjKSB8fCB0aGlzO1xuICAgICAgcmV0dXJuIG8ubmFtZSA9IFwiT1RMUEV4cG9ydGVyRXJyb3JcIiwgby5kYXRhID0gaSwgby5jb2RlID0gZiwgbztcbiAgICB9XG4gICAgcmV0dXJuIHU7XG4gIH0oRXJyb3IpXG4pO1xuZnVuY3Rpb24gdmFsaWRhdGVUaW1lb3V0TWlsbGlzKGEpIHtcbiAgaWYgKCFOdW1iZXIuaXNOYU4oYSkgJiYgTnVtYmVyLmlzRmluaXRlKGEpICYmIGEgPiAwKVxuICAgIHJldHVybiBhO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDb25maWd1cmF0aW9uOiB0aW1lb3V0TWlsbGlzIGlzIGludmFsaWQsIGV4cGVjdGVkIG51bWJlciBncmVhdGVyIHRoYW4gMCAoYWN0dWFsOiAnXCIgKyBhICsgXCInKVwiKTtcbn1cbmZ1bmN0aW9uIHdyYXBTdGF0aWNIZWFkZXJzSW5GdW5jdGlvbihhKSB7XG4gIGlmIChhICE9IG51bGwpXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGE7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIG1lcmdlT3RscFNoYXJlZENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMoYSwgdSwgYykge1xuICB2YXIgZiwgaSwgbywgZSwgdCwgcjtcbiAgcmV0dXJuIHtcbiAgICB0aW1lb3V0TWlsbGlzOiB2YWxpZGF0ZVRpbWVvdXRNaWxsaXMoKGkgPSAoZiA9IGEudGltZW91dE1pbGxpcykgIT09IG51bGwgJiYgZiAhPT0gdm9pZCAwID8gZiA6IHUudGltZW91dE1pbGxpcykgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IGMudGltZW91dE1pbGxpcyksXG4gICAgY29uY3VycmVuY3lMaW1pdDogKGUgPSAobyA9IGEuY29uY3VycmVuY3lMaW1pdCkgIT09IG51bGwgJiYgbyAhPT0gdm9pZCAwID8gbyA6IHUuY29uY3VycmVuY3lMaW1pdCkgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IGMuY29uY3VycmVuY3lMaW1pdCxcbiAgICBjb21wcmVzc2lvbjogKHIgPSAodCA9IGEuY29tcHJlc3Npb24pICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiB1LmNvbXByZXNzaW9uKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogYy5jb21wcmVzc2lvblxuICB9O1xufVxuZnVuY3Rpb24gZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkRlZmF1bHRzKCkge1xuICByZXR1cm4ge1xuICAgIHRpbWVvdXRNaWxsaXM6IDFlNCxcbiAgICBjb25jdXJyZW5jeUxpbWl0OiAzMCxcbiAgICBjb21wcmVzc2lvbjogXCJub25lXCJcbiAgfTtcbn1cbnZhciBfX2F3YWl0ZXIkMiA9IGZ1bmN0aW9uKGEsIHUsIGMsIGYpIHtcbiAgZnVuY3Rpb24gaShvKSB7XG4gICAgcmV0dXJuIG8gaW5zdGFuY2VvZiBjID8gbyA6IG5ldyBjKGZ1bmN0aW9uKGUpIHtcbiAgICAgIGUobyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAoYyB8fCAoYyA9IFByb21pc2UpKShmdW5jdGlvbihvLCBlKSB7XG4gICAgZnVuY3Rpb24gdChsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuKGYubmV4dChsKSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIGUocCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHIobCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbihmLnRocm93KGwpKTtcbiAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgZShwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbihsKSB7XG4gICAgICBsLmRvbmUgPyBvKGwudmFsdWUpIDogaShsLnZhbHVlKS50aGVuKHQsIHIpO1xuICAgIH1cbiAgICBuKChmID0gZi5hcHBseShhLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufSwgX19nZW5lcmF0b3IkMiA9IGZ1bmN0aW9uKGEsIHUpIHtcbiAgdmFyIGMgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAob1swXSAmIDEpIHRocm93IG9bMV07XG4gICAgcmV0dXJuIG9bMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIGksIG8sIGU7XG4gIHJldHVybiBlID0geyBuZXh0OiB0KDApLCB0aHJvdzogdCgxKSwgcmV0dXJuOiB0KDIpIH0sIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGU7XG4gIGZ1bmN0aW9uIHQobikge1xuICAgIHJldHVybiBmdW5jdGlvbihsKSB7XG4gICAgICByZXR1cm4gcihbbiwgbF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gcihuKSB7XG4gICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBjOyApIHRyeSB7XG4gICAgICBpZiAoZiA9IDEsIGkgJiYgKG8gPSBuWzBdICYgMiA/IGkucmV0dXJuIDogblswXSA/IGkudGhyb3cgfHwgKChvID0gaS5yZXR1cm4pICYmIG8uY2FsbChpKSwgMCkgOiBpLm5leHQpICYmICEobyA9IG8uY2FsbChpLCBuWzFdKSkuZG9uZSkgcmV0dXJuIG87XG4gICAgICBzd2l0Y2ggKGkgPSAwLCBvICYmIChuID0gW25bMF0gJiAyLCBvLnZhbHVlXSksIG5bMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbyA9IG47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gYy5sYWJlbCsrLCB7IHZhbHVlOiBuWzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgYy5sYWJlbCsrLCBpID0gblsxXSwgbiA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG4gPSBjLm9wcy5wb3AoKSwgYy50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChvID0gYy50cnlzLCAhKG8gPSBvLmxlbmd0aCA+IDAgJiYgb1tvLmxlbmd0aCAtIDFdKSAmJiAoblswXSA9PT0gNiB8fCBuWzBdID09PSAyKSkge1xuICAgICAgICAgICAgYyA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5bMF0gPT09IDMgJiYgKCFvIHx8IG5bMV0gPiBvWzBdICYmIG5bMV0gPCBvWzNdKSkge1xuICAgICAgICAgICAgYy5sYWJlbCA9IG5bMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5bMF0gPT09IDYgJiYgYy5sYWJlbCA8IG9bMV0pIHtcbiAgICAgICAgICAgIGMubGFiZWwgPSBvWzFdLCBvID0gbjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobyAmJiBjLmxhYmVsIDwgb1syXSkge1xuICAgICAgICAgICAgYy5sYWJlbCA9IG9bMl0sIGMub3BzLnB1c2gobik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgb1syXSAmJiBjLm9wcy5wb3AoKSwgYy50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbiA9IHUuY2FsbChhLCBjKTtcbiAgICB9IGNhdGNoIChsKSB7XG4gICAgICBuID0gWzYsIGxdLCBpID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZiA9IG8gPSAwO1xuICAgIH1cbiAgICBpZiAoblswXSAmIDUpIHRocm93IG5bMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IG5bMF0gPyBuWzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59LCBCb3VuZGVkUXVldWVFeHBvcnRQcm9taXNlSGFuZGxlciA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBhKHUpIHtcbiAgICAgIHRoaXMuX3NlbmRpbmdQcm9taXNlcyA9IFtdLCB0aGlzLl9jb25jdXJyZW5jeUxpbWl0ID0gdTtcbiAgICB9XG4gICAgcmV0dXJuIGEucHJvdG90eXBlLnB1c2hQcm9taXNlID0gZnVuY3Rpb24odSkge1xuICAgICAgdmFyIGMgPSB0aGlzO1xuICAgICAgaWYgKHRoaXMuaGFzUmVhY2hlZExpbWl0KCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbmN1cnJlbmN5IExpbWl0IHJlYWNoZWRcIik7XG4gICAgICB0aGlzLl9zZW5kaW5nUHJvbWlzZXMucHVzaCh1KTtcbiAgICAgIHZhciBmID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpID0gYy5fc2VuZGluZ1Byb21pc2VzLmluZGV4T2YodSk7XG4gICAgICAgIGMuX3NlbmRpbmdQcm9taXNlcy5zcGxpY2UoaSwgMSk7XG4gICAgICB9O1xuICAgICAgdS50aGVuKGYsIGYpO1xuICAgIH0sIGEucHJvdG90eXBlLmhhc1JlYWNoZWRMaW1pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbmRpbmdQcm9taXNlcy5sZW5ndGggPj0gdGhpcy5fY29uY3VycmVuY3lMaW1pdDtcbiAgICB9LCBhLnByb3RvdHlwZS5hd2FpdEFsbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIF9fYXdhaXRlciQyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yJDIodGhpcywgZnVuY3Rpb24odSkge1xuICAgICAgICAgIHN3aXRjaCAodS5sYWJlbCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gWzQsIFByb21pc2UuYWxsKHRoaXMuX3NlbmRpbmdQcm9taXNlcyldO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gdS5zZW50KCksIFtcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgLypyZXR1cm4qL1xuICAgICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCBhO1xuICB9KClcbik7XG5mdW5jdGlvbiBjcmVhdGVCb3VuZGVkUXVldWVFeHBvcnRQcm9taXNlSGFuZGxlcihhKSB7XG4gIHJldHVybiBuZXcgQm91bmRlZFF1ZXVlRXhwb3J0UHJvbWlzZUhhbmRsZXIoYS5jb25jdXJyZW5jeUxpbWl0KTtcbn1cbmZ1bmN0aW9uIGlzUGFydGlhbFN1Y2Nlc3NSZXNwb25zZShhKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgXCJwYXJ0aWFsU3VjY2Vzc1wiKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxvZ2dpbmdQYXJ0aWFsU3VjY2Vzc1Jlc3BvbnNlSGFuZGxlcigpIHtcbiAgcmV0dXJuIHtcbiAgICBoYW5kbGVSZXNwb25zZTogZnVuY3Rpb24oYSkge1xuICAgICAgYSA9PSBudWxsIHx8ICFpc1BhcnRpYWxTdWNjZXNzUmVzcG9uc2UoYSkgfHwgYS5wYXJ0aWFsU3VjY2VzcyA9PSBudWxsIHx8IE9iamVjdC5rZXlzKGEucGFydGlhbFN1Y2Nlc3MpLmxlbmd0aCA9PT0gMCB8fCByLndhcm4oXCJSZWNlaXZlZCBQYXJ0aWFsIFN1Y2Nlc3MgcmVzcG9uc2U6XCIsIEpTT04uc3RyaW5naWZ5KGEucGFydGlhbFN1Y2Nlc3MpKTtcbiAgICB9XG4gIH07XG59XG52YXIgX19hd2FpdGVyJDEgPSBmdW5jdGlvbihhLCB1LCBjLCBmKSB7XG4gIGZ1bmN0aW9uIGkobykge1xuICAgIHJldHVybiBvIGluc3RhbmNlb2YgYyA/IG8gOiBuZXcgYyhmdW5jdGlvbihlKSB7XG4gICAgICBlKG8pO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKGMgfHwgKGMgPSBQcm9taXNlKSkoZnVuY3Rpb24obywgZSkge1xuICAgIGZ1bmN0aW9uIHQobCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbihmLm5leHQobCkpO1xuICAgICAgfSBjYXRjaCAocCkge1xuICAgICAgICBlKHApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByKGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG4oZi50aHJvdyhsKSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIGUocCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG4obCkge1xuICAgICAgbC5kb25lID8gbyhsLnZhbHVlKSA6IGkobC52YWx1ZSkudGhlbih0LCByKTtcbiAgICB9XG4gICAgbigoZiA9IGYuYXBwbHkoYSwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn0sIF9fZ2VuZXJhdG9yJDEgPSBmdW5jdGlvbihhLCB1KSB7XG4gIHZhciBjID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKG9bMF0gJiAxKSB0aHJvdyBvWzFdO1xuICAgIHJldHVybiBvWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCBpLCBvLCBlO1xuICByZXR1cm4gZSA9IHsgbmV4dDogdCgwKSwgdGhyb3c6IHQoMSksIHJldHVybjogdCgyKSB9LCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoZVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlO1xuICBmdW5jdGlvbiB0KG4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24obCkge1xuICAgICAgcmV0dXJuIHIoW24sIGxdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHIobikge1xuICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgYzsgKSB0cnkge1xuICAgICAgaWYgKGYgPSAxLCBpICYmIChvID0gblswXSAmIDIgPyBpLnJldHVybiA6IG5bMF0gPyBpLnRocm93IHx8ICgobyA9IGkucmV0dXJuKSAmJiBvLmNhbGwoaSksIDApIDogaS5uZXh0KSAmJiAhKG8gPSBvLmNhbGwoaSwgblsxXSkpLmRvbmUpIHJldHVybiBvO1xuICAgICAgc3dpdGNoIChpID0gMCwgbyAmJiAobiA9IFtuWzBdICYgMiwgby52YWx1ZV0pLCBuWzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG8gPSBuO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIGMubGFiZWwrKywgeyB2YWx1ZTogblsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGMubGFiZWwrKywgaSA9IG5bMV0sIG4gPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBuID0gYy5vcHMucG9wKCksIGMudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAobyA9IGMudHJ5cywgIShvID0gby5sZW5ndGggPiAwICYmIG9bby5sZW5ndGggLSAxXSkgJiYgKG5bMF0gPT09IDYgfHwgblswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIGMgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuWzBdID09PSAzICYmICghbyB8fCBuWzFdID4gb1swXSAmJiBuWzFdIDwgb1szXSkpIHtcbiAgICAgICAgICAgIGMubGFiZWwgPSBuWzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuWzBdID09PSA2ICYmIGMubGFiZWwgPCBvWzFdKSB7XG4gICAgICAgICAgICBjLmxhYmVsID0gb1sxXSwgbyA9IG47XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG8gJiYgYy5sYWJlbCA8IG9bMl0pIHtcbiAgICAgICAgICAgIGMubGFiZWwgPSBvWzJdLCBjLm9wcy5wdXNoKG4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9bMl0gJiYgYy5vcHMucG9wKCksIGMudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG4gPSB1LmNhbGwoYSwgYyk7XG4gICAgfSBjYXRjaCAobCkge1xuICAgICAgbiA9IFs2LCBsXSwgaSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGYgPSBvID0gMDtcbiAgICB9XG4gICAgaWYgKG5bMF0gJiA1KSB0aHJvdyBuWzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiBuWzBdID8gblsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufSwgT1RMUEV4cG9ydERlbGVnYXRlID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGEkMSh1LCBjLCBmLCBpLCBvKSB7XG4gICAgICB0aGlzLl90cmFuc3BvcnQgPSB1LCB0aGlzLl9zZXJpYWxpemVyID0gYywgdGhpcy5fcmVzcG9uc2VIYW5kbGVyID0gZiwgdGhpcy5fcHJvbWlzZVF1ZXVlID0gaSwgdGhpcy5fdGltZW91dCA9IG8sIHRoaXMuX2RpYWdMb2dnZXIgPSByLmNyZWF0ZUNvbXBvbmVudExvZ2dlcih7XG4gICAgICAgIG5hbWVzcGFjZTogXCJPVExQRXhwb3J0RGVsZWdhdGVcIlxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhJDEucHJvdG90eXBlLmV4cG9ydCA9IGZ1bmN0aW9uKHUsIGMpIHtcbiAgICAgIHZhciBmID0gdGhpcztcbiAgICAgIGlmICh0aGlzLl9kaWFnTG9nZ2VyLmRlYnVnKFwiaXRlbXMgdG8gYmUgc2VudFwiLCB1KSwgdGhpcy5fcHJvbWlzZVF1ZXVlLmhhc1JlYWNoZWRMaW1pdCgpKSB7XG4gICAgICAgIGMoe1xuICAgICAgICAgIGNvZGU6IGEuRkFJTEVELFxuICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJDb25jdXJyZW50IGV4cG9ydCBsaW1pdCByZWFjaGVkXCIpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgaSA9IHRoaXMuX3NlcmlhbGl6ZXIuc2VyaWFsaXplUmVxdWVzdCh1KTtcbiAgICAgIGlmIChpID09IG51bGwpIHtcbiAgICAgICAgYyh7XG4gICAgICAgICAgY29kZTogYS5GQUlMRUQsXG4gICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIk5vdGhpbmcgdG8gc2VuZFwiKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fcHJvbWlzZVF1ZXVlLnB1c2hQcm9taXNlKHRoaXMuX3RyYW5zcG9ydC5zZW5kKGksIHRoaXMuX3RpbWVvdXQpLnRoZW4oZnVuY3Rpb24obykge1xuICAgICAgICBpZiAoby5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgaWYgKG8uZGF0YSAhPSBudWxsKVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZi5fcmVzcG9uc2VIYW5kbGVyLmhhbmRsZVJlc3BvbnNlKGYuX3NlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXNwb25zZShvLmRhdGEpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgZi5fZGlhZ0xvZ2dlci53YXJuKFwiRXhwb3J0IHN1Y2NlZWRlZCBidXQgY291bGQgbm90IGRlc2VyaWFsaXplIHJlc3BvbnNlIC0gaXMgdGhlIHJlc3BvbnNlIHNwZWNpZmljYXRpb24gY29tcGxpYW50P1wiLCBlLCBvLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGMoe1xuICAgICAgICAgICAgY29kZTogYS5TVUNDRVNTXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKG8uc3RhdHVzID09PSBcImZhaWx1cmVcIiAmJiBvLmVycm9yKSB7XG4gICAgICAgICAgYyh7XG4gICAgICAgICAgICBjb2RlOiBhLkZBSUxFRCxcbiAgICAgICAgICAgIGVycm9yOiBvLmVycm9yXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Ugby5zdGF0dXMgPT09IFwicmV0cnlhYmxlXCIgPyBjKHtcbiAgICAgICAgICBjb2RlOiBhLkZBSUxFRCxcbiAgICAgICAgICBlcnJvcjogbmV3IE9UTFBFeHBvcnRlckVycm9yKFwiRXhwb3J0IGZhaWxlZCB3aXRoIHJldHJ5YWJsZSBzdGF0dXNcIilcbiAgICAgICAgfSkgOiBjKHtcbiAgICAgICAgICBjb2RlOiBhLkZBSUxFRCxcbiAgICAgICAgICBlcnJvcjogbmV3IE9UTFBFeHBvcnRlckVycm9yKFwiRXhwb3J0IGZhaWxlZCB3aXRoIHVua25vd24gZXJyb3JcIilcbiAgICAgICAgfSk7XG4gICAgICB9LCBmdW5jdGlvbihvKSB7XG4gICAgICAgIHJldHVybiBjKHtcbiAgICAgICAgICBjb2RlOiBhLkZBSUxFRCxcbiAgICAgICAgICBlcnJvcjogb1xuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICB9LCBhJDEucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlUXVldWUuYXdhaXRBbGwoKTtcbiAgICB9LCBhJDEucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gX19hd2FpdGVyJDEodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IkMSh0aGlzLCBmdW5jdGlvbih1KSB7XG4gICAgICAgICAgc3dpdGNoICh1LmxhYmVsKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaWFnTG9nZ2VyLmRlYnVnKFwic2h1dGRvd24gc3RhcnRlZFwiKSwgWzQsIHRoaXMuZm9yY2VGbHVzaCgpXTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgcmV0dXJuIHUuc2VudCgpLCB0aGlzLl90cmFuc3BvcnQuc2h1dGRvd24oKSwgW1xuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAvKnJldHVybiovXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGEkMTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gY3JlYXRlT3RscEV4cG9ydERlbGVnYXRlKGEsIHUpIHtcbiAgcmV0dXJuIG5ldyBPVExQRXhwb3J0RGVsZWdhdGUoYS50cmFuc3BvcnQsIGEuc2VyaWFsaXplciwgY3JlYXRlTG9nZ2luZ1BhcnRpYWxTdWNjZXNzUmVzcG9uc2VIYW5kbGVyKCksIGEucHJvbWlzZUhhbmRsZXIsIHUudGltZW91dCk7XG59XG5mdW5jdGlvbiBjcmVhdGVPdGxwTmV0d29ya0V4cG9ydERlbGVnYXRlKGEsIHUsIGMpIHtcbiAgcmV0dXJuIGNyZWF0ZU90bHBFeHBvcnREZWxlZ2F0ZSh7XG4gICAgdHJhbnNwb3J0OiBjLFxuICAgIHNlcmlhbGl6ZXI6IHUsXG4gICAgcHJvbWlzZUhhbmRsZXI6IGNyZWF0ZUJvdW5kZWRRdWV1ZUV4cG9ydFByb21pc2VIYW5kbGVyKGEpXG4gIH0sIHsgdGltZW91dDogYS50aW1lb3V0TWlsbGlzIH0pO1xufVxudmFyIGluZGV4TWluaW1hbCA9IHt9LCBtaW5pbWFsJDEgPSB7fSwgYXNwcm9taXNlID0gYXNQcm9taXNlO1xuZnVuY3Rpb24gYXNQcm9taXNlKGEsIHUpIHtcbiAgZm9yICh2YXIgYyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSksIGYgPSAwLCBpID0gMiwgbyA9ICEwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKVxuICAgIGNbZisrXSA9IGFyZ3VtZW50c1tpKytdO1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCwgcikge1xuICAgIGNbZl0gPSBmdW5jdGlvbihsKSB7XG4gICAgICBpZiAobylcbiAgICAgICAgaWYgKG8gPSAhMSwgbClcbiAgICAgICAgICByKGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmb3IgKHZhciBwID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKSwgcyA9IDA7IHMgPCBwLmxlbmd0aDsgKVxuICAgICAgICAgICAgcFtzKytdID0gYXJndW1lbnRzW3NdO1xuICAgICAgICAgIHQuYXBwbHkobnVsbCwgcCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBhLmFwcGx5KHUgfHwgbnVsbCwgYyk7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgbyAmJiAobyA9ICExLCByKG4pKTtcbiAgICB9XG4gIH0pO1xufVxudmFyIGJhc2U2NCQxID0ge307XG4oZnVuY3Rpb24oYSkge1xuICB2YXIgdSA9IGE7XG4gIHUubGVuZ3RoID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdC5sZW5ndGg7XG4gICAgaWYgKCFyKVxuICAgICAgcmV0dXJuIDA7XG4gICAgZm9yICh2YXIgbiA9IDA7IC0tciAlIDQgPiAxICYmIHQuY2hhckF0KHIpID09PSBcIj1cIjsgKVxuICAgICAgKytuO1xuICAgIHJldHVybiBNYXRoLmNlaWwodC5sZW5ndGggKiAzKSAvIDQgLSBuO1xuICB9O1xuICBmb3IgKHZhciBjID0gbmV3IEFycmF5KDY0KSwgZiA9IG5ldyBBcnJheSgxMjMpLCBpID0gMDsgaSA8IDY0OyApXG4gICAgZltjW2ldID0gaSA8IDI2ID8gaSArIDY1IDogaSA8IDUyID8gaSArIDcxIDogaSA8IDYyID8gaSAtIDQgOiBpIC0gNTkgfCA0M10gPSBpKys7XG4gIHUuZW5jb2RlID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgIGZvciAodmFyIGwgPSBudWxsLCBwID0gW10sIHMgPSAwLCB5ID0gMCwgZDsgciA8IG47ICkge1xuICAgICAgdmFyIGggPSB0W3IrK107XG4gICAgICBzd2l0Y2ggKHkpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHBbcysrXSA9IGNbaCA+PiAyXSwgZCA9IChoICYgMykgPDwgNCwgeSA9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBwW3MrK10gPSBjW2QgfCBoID4+IDRdLCBkID0gKGggJiAxNSkgPDwgMiwgeSA9IDI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBwW3MrK10gPSBjW2QgfCBoID4+IDZdLCBwW3MrK10gPSBjW2ggJiA2M10sIHkgPSAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcyA+IDgxOTEgJiYgKChsIHx8IChsID0gW10pKS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBwKSksIHMgPSAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHkgJiYgKHBbcysrXSA9IGNbZF0sIHBbcysrXSA9IDYxLCB5ID09PSAxICYmIChwW3MrK10gPSA2MSkpLCBsID8gKHMgJiYgbC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBwLnNsaWNlKDAsIHMpKSksIGwuam9pbihcIlwiKSkgOiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgcC5zbGljZSgwLCBzKSk7XG4gIH07XG4gIHZhciBvID0gXCJpbnZhbGlkIGVuY29kaW5nXCI7XG4gIHUuZGVjb2RlID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgIGZvciAodmFyIGwgPSBuLCBwID0gMCwgcywgeSA9IDA7IHkgPCB0Lmxlbmd0aDsgKSB7XG4gICAgICB2YXIgZCA9IHQuY2hhckNvZGVBdCh5KyspO1xuICAgICAgaWYgKGQgPT09IDYxICYmIHAgPiAxKVxuICAgICAgICBicmVhaztcbiAgICAgIGlmICgoZCA9IGZbZF0pID09PSB2b2lkIDApXG4gICAgICAgIHRocm93IEVycm9yKG8pO1xuICAgICAgc3dpdGNoIChwKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBzID0gZCwgcCA9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByW24rK10gPSBzIDw8IDIgfCAoZCAmIDQ4KSA+PiA0LCBzID0gZCwgcCA9IDI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByW24rK10gPSAocyAmIDE1KSA8PCA0IHwgKGQgJiA2MCkgPj4gMiwgcyA9IGQsIHAgPSAzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcltuKytdID0gKHMgJiAzKSA8PCA2IHwgZCwgcCA9IDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwID09PSAxKVxuICAgICAgdGhyb3cgRXJyb3Iobyk7XG4gICAgcmV0dXJuIG4gLSBsO1xuICB9LCB1LnRlc3QgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIC9eKD86W0EtWmEtejAtOSsvXXs0fSkqKD86W0EtWmEtejAtOSsvXXsyfT09fFtBLVphLXowLTkrL117M309KT8kLy50ZXN0KHQpO1xuICB9O1xufSkoYmFzZTY0JDEpO1xudmFyIGV2ZW50ZW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fbGlzdGVuZXJzID0ge307XG59XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24odSwgYywgZikge1xuICByZXR1cm4gKHRoaXMuX2xpc3RlbmVyc1t1XSB8fCAodGhpcy5fbGlzdGVuZXJzW3VdID0gW10pKS5wdXNoKHtcbiAgICBmbjogYyxcbiAgICBjdHg6IGYgfHwgdGhpc1xuICB9KSwgdGhpcztcbn07XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uKHUsIGMpIHtcbiAgaWYgKHUgPT09IHZvaWQgMClcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcbiAgZWxzZSBpZiAoYyA9PT0gdm9pZCAwKVxuICAgIHRoaXMuX2xpc3RlbmVyc1t1XSA9IFtdO1xuICBlbHNlXG4gICAgZm9yICh2YXIgZiA9IHRoaXMuX2xpc3RlbmVyc1t1XSwgaSA9IDA7IGkgPCBmLmxlbmd0aDsgKVxuICAgICAgZltpXS5mbiA9PT0gYyA/IGYuc3BsaWNlKGksIDEpIDogKytpO1xuICByZXR1cm4gdGhpcztcbn07XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbih1KSB7XG4gIHZhciBjID0gdGhpcy5fbGlzdGVuZXJzW3VdO1xuICBpZiAoYykge1xuICAgIGZvciAodmFyIGYgPSBbXSwgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyApXG4gICAgICBmLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIGZvciAoaSA9IDA7IGkgPCBjLmxlbmd0aDsgKVxuICAgICAgY1tpXS5mbi5hcHBseShjW2krK10uY3R4LCBmKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG52YXIgZmxvYXQgPSBmYWN0b3J5KGZhY3RvcnkpO1xuZnVuY3Rpb24gZmFjdG9yeShhKSB7XG4gIHJldHVybiB0eXBlb2YgRmxvYXQzMkFycmF5IDwgXCJ1XCIgPyBmdW5jdGlvbigpIHtcbiAgICB2YXIgdSA9IG5ldyBGbG9hdDMyQXJyYXkoWy0wXSksIGMgPSBuZXcgVWludDhBcnJheSh1LmJ1ZmZlciksIGYgPSBjWzNdID09PSAxMjg7XG4gICAgZnVuY3Rpb24gaShyLCBuLCBsKSB7XG4gICAgICB1WzBdID0gciwgbltsXSA9IGNbMF0sIG5bbCArIDFdID0gY1sxXSwgbltsICsgMl0gPSBjWzJdLCBuW2wgKyAzXSA9IGNbM107XG4gICAgfVxuICAgIGZ1bmN0aW9uIG8ociwgbiwgbCkge1xuICAgICAgdVswXSA9IHIsIG5bbF0gPSBjWzNdLCBuW2wgKyAxXSA9IGNbMl0sIG5bbCArIDJdID0gY1sxXSwgbltsICsgM10gPSBjWzBdO1xuICAgIH1cbiAgICBhLndyaXRlRmxvYXRMRSA9IGYgPyBpIDogbywgYS53cml0ZUZsb2F0QkUgPSBmID8gbyA6IGk7XG4gICAgZnVuY3Rpb24gZShyLCBuKSB7XG4gICAgICByZXR1cm4gY1swXSA9IHJbbl0sIGNbMV0gPSByW24gKyAxXSwgY1syXSA9IHJbbiArIDJdLCBjWzNdID0gcltuICsgM10sIHVbMF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHQociwgbikge1xuICAgICAgcmV0dXJuIGNbM10gPSByW25dLCBjWzJdID0gcltuICsgMV0sIGNbMV0gPSByW24gKyAyXSwgY1swXSA9IHJbbiArIDNdLCB1WzBdO1xuICAgIH1cbiAgICBhLnJlYWRGbG9hdExFID0gZiA/IGUgOiB0LCBhLnJlYWRGbG9hdEJFID0gZiA/IHQgOiBlO1xuICB9KCkgOiBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiB1KGYsIGksIG8sIGUpIHtcbiAgICAgIHZhciB0ID0gaSA8IDAgPyAxIDogMDtcbiAgICAgIGlmICh0ICYmIChpID0gLWkpLCBpID09PSAwKVxuICAgICAgICBmKDEgLyBpID4gMCA/IChcbiAgICAgICAgICAvKiBwb3NpdGl2ZSAqL1xuICAgICAgICAgIDBcbiAgICAgICAgKSA6IChcbiAgICAgICAgICAvKiBuZWdhdGl2ZSAwICovXG4gICAgICAgICAgMjE0NzQ4MzY0OFxuICAgICAgICApLCBvLCBlKTtcbiAgICAgIGVsc2UgaWYgKGlzTmFOKGkpKVxuICAgICAgICBmKDIxNDMyODkzNDQsIG8sIGUpO1xuICAgICAgZWxzZSBpZiAoaSA+IDM0MDI4MjM0NjYzODUyODg2ZTIyKVxuICAgICAgICBmKCh0IDw8IDMxIHwgMjEzOTA5NTA0MCkgPj4+IDAsIG8sIGUpO1xuICAgICAgZWxzZSBpZiAoaSA8IDExNzU0OTQzNTA4MjIyODc1ZS01NClcbiAgICAgICAgZigodCA8PCAzMSB8IE1hdGgucm91bmQoaSAvIDE0MDEyOTg0NjQzMjQ4MTdlLTYwKSkgPj4+IDAsIG8sIGUpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciByID0gTWF0aC5mbG9vcihNYXRoLmxvZyhpKSAvIE1hdGguTE4yKSwgbiA9IE1hdGgucm91bmQoaSAqIE1hdGgucG93KDIsIC1yKSAqIDgzODg2MDgpICYgODM4ODYwNztcbiAgICAgICAgZigodCA8PCAzMSB8IHIgKyAxMjcgPDwgMjMgfCBuKSA+Pj4gMCwgbywgZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGEud3JpdGVGbG9hdExFID0gdS5iaW5kKG51bGwsIHdyaXRlVWludExFKSwgYS53cml0ZUZsb2F0QkUgPSB1LmJpbmQobnVsbCwgd3JpdGVVaW50QkUpO1xuICAgIGZ1bmN0aW9uIGMoZiwgaSwgbykge1xuICAgICAgdmFyIGUgPSBmKGksIG8pLCB0ID0gKGUgPj4gMzEpICogMiArIDEsIHIgPSBlID4+PiAyMyAmIDI1NSwgbiA9IGUgJiA4Mzg4NjA3O1xuICAgICAgcmV0dXJuIHIgPT09IDI1NSA/IG4gPyBOYU4gOiB0ICogKDEgLyAwKSA6IHIgPT09IDAgPyB0ICogMTQwMTI5ODQ2NDMyNDgxN2UtNjAgKiBuIDogdCAqIE1hdGgucG93KDIsIHIgLSAxNTApICogKG4gKyA4Mzg4NjA4KTtcbiAgICB9XG4gICAgYS5yZWFkRmxvYXRMRSA9IGMuYmluZChudWxsLCByZWFkVWludExFKSwgYS5yZWFkRmxvYXRCRSA9IGMuYmluZChudWxsLCByZWFkVWludEJFKTtcbiAgfSgpLCB0eXBlb2YgRmxvYXQ2NEFycmF5IDwgXCJ1XCIgPyBmdW5jdGlvbigpIHtcbiAgICB2YXIgdSA9IG5ldyBGbG9hdDY0QXJyYXkoWy0wXSksIGMgPSBuZXcgVWludDhBcnJheSh1LmJ1ZmZlciksIGYgPSBjWzddID09PSAxMjg7XG4gICAgZnVuY3Rpb24gaShyLCBuLCBsKSB7XG4gICAgICB1WzBdID0gciwgbltsXSA9IGNbMF0sIG5bbCArIDFdID0gY1sxXSwgbltsICsgMl0gPSBjWzJdLCBuW2wgKyAzXSA9IGNbM10sIG5bbCArIDRdID0gY1s0XSwgbltsICsgNV0gPSBjWzVdLCBuW2wgKyA2XSA9IGNbNl0sIG5bbCArIDddID0gY1s3XTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbyhyLCBuLCBsKSB7XG4gICAgICB1WzBdID0gciwgbltsXSA9IGNbN10sIG5bbCArIDFdID0gY1s2XSwgbltsICsgMl0gPSBjWzVdLCBuW2wgKyAzXSA9IGNbNF0sIG5bbCArIDRdID0gY1szXSwgbltsICsgNV0gPSBjWzJdLCBuW2wgKyA2XSA9IGNbMV0sIG5bbCArIDddID0gY1swXTtcbiAgICB9XG4gICAgYS53cml0ZURvdWJsZUxFID0gZiA/IGkgOiBvLCBhLndyaXRlRG91YmxlQkUgPSBmID8gbyA6IGk7XG4gICAgZnVuY3Rpb24gZShyLCBuKSB7XG4gICAgICByZXR1cm4gY1swXSA9IHJbbl0sIGNbMV0gPSByW24gKyAxXSwgY1syXSA9IHJbbiArIDJdLCBjWzNdID0gcltuICsgM10sIGNbNF0gPSByW24gKyA0XSwgY1s1XSA9IHJbbiArIDVdLCBjWzZdID0gcltuICsgNl0sIGNbN10gPSByW24gKyA3XSwgdVswXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgICByZXR1cm4gY1s3XSA9IHJbbl0sIGNbNl0gPSByW24gKyAxXSwgY1s1XSA9IHJbbiArIDJdLCBjWzRdID0gcltuICsgM10sIGNbM10gPSByW24gKyA0XSwgY1syXSA9IHJbbiArIDVdLCBjWzFdID0gcltuICsgNl0sIGNbMF0gPSByW24gKyA3XSwgdVswXTtcbiAgICB9XG4gICAgYS5yZWFkRG91YmxlTEUgPSBmID8gZSA6IHQsIGEucmVhZERvdWJsZUJFID0gZiA/IHQgOiBlO1xuICB9KCkgOiBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiB1KGYsIGksIG8sIGUsIHQsIHIpIHtcbiAgICAgIHZhciBuID0gZSA8IDAgPyAxIDogMDtcbiAgICAgIGlmIChuICYmIChlID0gLWUpLCBlID09PSAwKVxuICAgICAgICBmKDAsIHQsIHIgKyBpKSwgZigxIC8gZSA+IDAgPyAoXG4gICAgICAgICAgLyogcG9zaXRpdmUgKi9cbiAgICAgICAgICAwXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgLyogbmVnYXRpdmUgMCAqL1xuICAgICAgICAgIDIxNDc0ODM2NDhcbiAgICAgICAgKSwgdCwgciArIG8pO1xuICAgICAgZWxzZSBpZiAoaXNOYU4oZSkpXG4gICAgICAgIGYoMCwgdCwgciArIGkpLCBmKDIxNDY5NTkzNjAsIHQsIHIgKyBvKTtcbiAgICAgIGVsc2UgaWYgKGUgPiAxNzk3NjkzMTM0ODYyMzE1N2UyOTIpXG4gICAgICAgIGYoMCwgdCwgciArIGkpLCBmKChuIDw8IDMxIHwgMjE0NjQzNTA3MikgPj4+IDAsIHQsIHIgKyBvKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgbDtcbiAgICAgICAgaWYgKGUgPCAyMjI1MDczODU4NTA3MjAxNGUtMzI0KVxuICAgICAgICAgIGwgPSBlIC8gNWUtMzI0LCBmKGwgPj4+IDAsIHQsIHIgKyBpKSwgZigobiA8PCAzMSB8IGwgLyA0Mjk0OTY3Mjk2KSA+Pj4gMCwgdCwgciArIG8pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgcCA9IE1hdGguZmxvb3IoTWF0aC5sb2coZSkgLyBNYXRoLkxOMik7XG4gICAgICAgICAgcCA9PT0gMTAyNCAmJiAocCA9IDEwMjMpLCBsID0gZSAqIE1hdGgucG93KDIsIC1wKSwgZihsICogNDUwMzU5OTYyNzM3MDQ5NiA+Pj4gMCwgdCwgciArIGkpLCBmKChuIDw8IDMxIHwgcCArIDEwMjMgPDwgMjAgfCBsICogMTA0ODU3NiAmIDEwNDg1NzUpID4+PiAwLCB0LCByICsgbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYS53cml0ZURvdWJsZUxFID0gdS5iaW5kKG51bGwsIHdyaXRlVWludExFLCAwLCA0KSwgYS53cml0ZURvdWJsZUJFID0gdS5iaW5kKG51bGwsIHdyaXRlVWludEJFLCA0LCAwKTtcbiAgICBmdW5jdGlvbiBjKGYsIGksIG8sIGUsIHQpIHtcbiAgICAgIHZhciByID0gZihlLCB0ICsgaSksIG4gPSBmKGUsIHQgKyBvKSwgbCA9IChuID4+IDMxKSAqIDIgKyAxLCBwID0gbiA+Pj4gMjAgJiAyMDQ3LCBzID0gNDI5NDk2NzI5NiAqIChuICYgMTA0ODU3NSkgKyByO1xuICAgICAgcmV0dXJuIHAgPT09IDIwNDcgPyBzID8gTmFOIDogbCAqICgxIC8gMCkgOiBwID09PSAwID8gbCAqIDVlLTMyNCAqIHMgOiBsICogTWF0aC5wb3coMiwgcCAtIDEwNzUpICogKHMgKyA0NTAzNTk5NjI3MzcwNDk2KTtcbiAgICB9XG4gICAgYS5yZWFkRG91YmxlTEUgPSBjLmJpbmQobnVsbCwgcmVhZFVpbnRMRSwgMCwgNCksIGEucmVhZERvdWJsZUJFID0gYy5iaW5kKG51bGwsIHJlYWRVaW50QkUsIDQsIDApO1xuICB9KCksIGE7XG59XG5mdW5jdGlvbiB3cml0ZVVpbnRMRShhLCB1LCBjKSB7XG4gIHVbY10gPSBhICYgMjU1LCB1W2MgKyAxXSA9IGEgPj4+IDggJiAyNTUsIHVbYyArIDJdID0gYSA+Pj4gMTYgJiAyNTUsIHVbYyArIDNdID0gYSA+Pj4gMjQ7XG59XG5mdW5jdGlvbiB3cml0ZVVpbnRCRShhLCB1LCBjKSB7XG4gIHVbY10gPSBhID4+PiAyNCwgdVtjICsgMV0gPSBhID4+PiAxNiAmIDI1NSwgdVtjICsgMl0gPSBhID4+PiA4ICYgMjU1LCB1W2MgKyAzXSA9IGEgJiAyNTU7XG59XG5mdW5jdGlvbiByZWFkVWludExFKGEsIHUpIHtcbiAgcmV0dXJuIChhW3VdIHwgYVt1ICsgMV0gPDwgOCB8IGFbdSArIDJdIDw8IDE2IHwgYVt1ICsgM10gPDwgMjQpID4+PiAwO1xufVxuZnVuY3Rpb24gcmVhZFVpbnRCRShhLCB1KSB7XG4gIHJldHVybiAoYVt1XSA8PCAyNCB8IGFbdSArIDFdIDw8IDE2IHwgYVt1ICsgMl0gPDwgOCB8IGFbdSArIDNdKSA+Pj4gMDtcbn1cbnZhciBpbnF1aXJlXzEgPSBpbnF1aXJlO1xuZnVuY3Rpb24gaW5xdWlyZShtb2R1bGVOYW1lKSB7XG4gIHRyeSB7XG4gICAgdmFyIG1vZCA9IGV2YWwoXCJxdWlyZVwiLnJlcGxhY2UoL14vLCBcInJlXCIpKShtb2R1bGVOYW1lKTtcbiAgICBpZiAobW9kICYmIChtb2QubGVuZ3RoIHx8IE9iamVjdC5rZXlzKG1vZCkubGVuZ3RoKSlcbiAgICAgIHJldHVybiBtb2Q7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbnZhciB1dGY4JDIgPSB7fTtcbihmdW5jdGlvbihhKSB7XG4gIHZhciB1ID0gYTtcbiAgdS5sZW5ndGggPSBmdW5jdGlvbihmKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG8gPSAwLCBlID0gMDsgZSA8IGYubGVuZ3RoOyArK2UpXG4gICAgICBvID0gZi5jaGFyQ29kZUF0KGUpLCBvIDwgMTI4ID8gaSArPSAxIDogbyA8IDIwNDggPyBpICs9IDIgOiAobyAmIDY0NTEyKSA9PT0gNTUyOTYgJiYgKGYuY2hhckNvZGVBdChlICsgMSkgJiA2NDUxMikgPT09IDU2MzIwID8gKCsrZSwgaSArPSA0KSA6IGkgKz0gMztcbiAgICByZXR1cm4gaTtcbiAgfSwgdS5yZWFkID0gZnVuY3Rpb24oZiwgaSwgbykge1xuICAgIHZhciBlID0gbyAtIGk7XG4gICAgaWYgKGUgPCAxKVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgZm9yICh2YXIgdCA9IG51bGwsIHIgPSBbXSwgbiA9IDAsIGw7IGkgPCBvOyApXG4gICAgICBsID0gZltpKytdLCBsIDwgMTI4ID8gcltuKytdID0gbCA6IGwgPiAxOTEgJiYgbCA8IDIyNCA/IHJbbisrXSA9IChsICYgMzEpIDw8IDYgfCBmW2krK10gJiA2MyA6IGwgPiAyMzkgJiYgbCA8IDM2NSA/IChsID0gKChsICYgNykgPDwgMTggfCAoZltpKytdICYgNjMpIDw8IDEyIHwgKGZbaSsrXSAmIDYzKSA8PCA2IHwgZltpKytdICYgNjMpIC0gNjU1MzYsIHJbbisrXSA9IDU1Mjk2ICsgKGwgPj4gMTApLCByW24rK10gPSA1NjMyMCArIChsICYgMTAyMykpIDogcltuKytdID0gKGwgJiAxNSkgPDwgMTIgfCAoZltpKytdICYgNjMpIDw8IDYgfCBmW2krK10gJiA2MywgbiA+IDgxOTEgJiYgKCh0IHx8ICh0ID0gW10pKS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCByKSksIG4gPSAwKTtcbiAgICByZXR1cm4gdCA/IChuICYmIHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgci5zbGljZSgwLCBuKSkpLCB0LmpvaW4oXCJcIikpIDogU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIHIuc2xpY2UoMCwgbikpO1xuICB9LCB1LndyaXRlID0gZnVuY3Rpb24oZiwgaSwgbykge1xuICAgIGZvciAodmFyIGUgPSBvLCB0LCByLCBuID0gMDsgbiA8IGYubGVuZ3RoOyArK24pXG4gICAgICB0ID0gZi5jaGFyQ29kZUF0KG4pLCB0IDwgMTI4ID8gaVtvKytdID0gdCA6IHQgPCAyMDQ4ID8gKGlbbysrXSA9IHQgPj4gNiB8IDE5MiwgaVtvKytdID0gdCAmIDYzIHwgMTI4KSA6ICh0ICYgNjQ1MTIpID09PSA1NTI5NiAmJiAoKHIgPSBmLmNoYXJDb2RlQXQobiArIDEpKSAmIDY0NTEyKSA9PT0gNTYzMjAgPyAodCA9IDY1NTM2ICsgKCh0ICYgMTAyMykgPDwgMTApICsgKHIgJiAxMDIzKSwgKytuLCBpW28rK10gPSB0ID4+IDE4IHwgMjQwLCBpW28rK10gPSB0ID4+IDEyICYgNjMgfCAxMjgsIGlbbysrXSA9IHQgPj4gNiAmIDYzIHwgMTI4LCBpW28rK10gPSB0ICYgNjMgfCAxMjgpIDogKGlbbysrXSA9IHQgPj4gMTIgfCAyMjQsIGlbbysrXSA9IHQgPj4gNiAmIDYzIHwgMTI4LCBpW28rK10gPSB0ICYgNjMgfCAxMjgpO1xuICAgIHJldHVybiBvIC0gZTtcbiAgfTtcbn0pKHV0ZjgkMik7XG52YXIgcG9vbF8xID0gcG9vbDtcbmZ1bmN0aW9uIHBvb2woYSwgdSwgYykge1xuICB2YXIgZiA9IGMgfHwgODE5MiwgaSA9IGYgPj4+IDEsIG8gPSBudWxsLCBlID0gZjtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICBpZiAociA8IDEgfHwgciA+IGkpXG4gICAgICByZXR1cm4gYShyKTtcbiAgICBlICsgciA+IGYgJiYgKG8gPSBhKGYpLCBlID0gMCk7XG4gICAgdmFyIG4gPSB1LmNhbGwobywgZSwgZSArPSByKTtcbiAgICByZXR1cm4gZSAmIDcgJiYgKGUgPSAoZSB8IDcpICsgMSksIG47XG4gIH07XG59XG52YXIgbG9uZ2JpdHMsIGhhc1JlcXVpcmVkTG9uZ2JpdHM7XG5mdW5jdGlvbiByZXF1aXJlTG9uZ2JpdHMoKSB7XG4gIGlmIChoYXNSZXF1aXJlZExvbmdiaXRzKSByZXR1cm4gbG9uZ2JpdHM7XG4gIGhhc1JlcXVpcmVkTG9uZ2JpdHMgPSAxLCBsb25nYml0cyA9IHU7XG4gIHZhciBhID0gcmVxdWlyZU1pbmltYWwoKTtcbiAgZnVuY3Rpb24gdShvLCBlKSB7XG4gICAgdGhpcy5sbyA9IG8gPj4+IDAsIHRoaXMuaGkgPSBlID4+PiAwO1xuICB9XG4gIHZhciBjID0gdS56ZXJvID0gbmV3IHUoMCwgMCk7XG4gIGMudG9OdW1iZXIgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gMDtcbiAgfSwgYy56ekVuY29kZSA9IGMuenpEZWNvZGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgYy5sZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gMTtcbiAgfTtcbiAgdmFyIGYgPSB1Lnplcm9IYXNoID0gXCJcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcIjtcbiAgdS5mcm9tTnVtYmVyID0gZnVuY3Rpb24oZSkge1xuICAgIGlmIChlID09PSAwKVxuICAgICAgcmV0dXJuIGM7XG4gICAgdmFyIHQgPSBlIDwgMDtcbiAgICB0ICYmIChlID0gLWUpO1xuICAgIHZhciByID0gZSA+Pj4gMCwgbiA9IChlIC0gcikgLyA0Mjk0OTY3Mjk2ID4+PiAwO1xuICAgIHJldHVybiB0ICYmIChuID0gfm4gPj4+IDAsIHIgPSB+ciA+Pj4gMCwgKytyID4gNDI5NDk2NzI5NSAmJiAociA9IDAsICsrbiA+IDQyOTQ5NjcyOTUgJiYgKG4gPSAwKSkpLCBuZXcgdShyLCBuKTtcbiAgfSwgdS5mcm9tID0gZnVuY3Rpb24oZSkge1xuICAgIGlmICh0eXBlb2YgZSA9PSBcIm51bWJlclwiKVxuICAgICAgcmV0dXJuIHUuZnJvbU51bWJlcihlKTtcbiAgICBpZiAoYS5pc1N0cmluZyhlKSlcbiAgICAgIGlmIChhLkxvbmcpXG4gICAgICAgIGUgPSBhLkxvbmcuZnJvbVN0cmluZyhlKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHUuZnJvbU51bWJlcihwYXJzZUludChlLCAxMCkpO1xuICAgIHJldHVybiBlLmxvdyB8fCBlLmhpZ2ggPyBuZXcgdShlLmxvdyA+Pj4gMCwgZS5oaWdoID4+PiAwKSA6IGM7XG4gIH0sIHUucHJvdG90eXBlLnRvTnVtYmVyID0gZnVuY3Rpb24oZSkge1xuICAgIGlmICghZSAmJiB0aGlzLmhpID4+PiAzMSkge1xuICAgICAgdmFyIHQgPSB+dGhpcy5sbyArIDEgPj4+IDAsIHIgPSB+dGhpcy5oaSA+Pj4gMDtcbiAgICAgIHJldHVybiB0IHx8IChyID0gciArIDEgPj4+IDApLCAtKHQgKyByICogNDI5NDk2NzI5Nik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvICsgdGhpcy5oaSAqIDQyOTQ5NjcyOTY7XG4gIH0sIHUucHJvdG90eXBlLnRvTG9uZyA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gYS5Mb25nID8gbmV3IGEuTG9uZyh0aGlzLmxvIHwgMCwgdGhpcy5oaSB8IDAsICEhZSkgOiB7IGxvdzogdGhpcy5sbyB8IDAsIGhpZ2g6IHRoaXMuaGkgfCAwLCB1bnNpZ25lZDogISFlIH07XG4gIH07XG4gIHZhciBpID0gU3RyaW5nLnByb3RvdHlwZS5jaGFyQ29kZUF0O1xuICByZXR1cm4gdS5mcm9tSGFzaCA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gZSA9PT0gZiA/IGMgOiBuZXcgdShcbiAgICAgIChpLmNhbGwoZSwgMCkgfCBpLmNhbGwoZSwgMSkgPDwgOCB8IGkuY2FsbChlLCAyKSA8PCAxNiB8IGkuY2FsbChlLCAzKSA8PCAyNCkgPj4+IDAsXG4gICAgICAoaS5jYWxsKGUsIDQpIHwgaS5jYWxsKGUsIDUpIDw8IDggfCBpLmNhbGwoZSwgNikgPDwgMTYgfCBpLmNhbGwoZSwgNykgPDwgMjQpID4+PiAwXG4gICAgKTtcbiAgfSwgdS5wcm90b3R5cGUudG9IYXNoID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXG4gICAgICB0aGlzLmxvICYgMjU1LFxuICAgICAgdGhpcy5sbyA+Pj4gOCAmIDI1NSxcbiAgICAgIHRoaXMubG8gPj4+IDE2ICYgMjU1LFxuICAgICAgdGhpcy5sbyA+Pj4gMjQsXG4gICAgICB0aGlzLmhpICYgMjU1LFxuICAgICAgdGhpcy5oaSA+Pj4gOCAmIDI1NSxcbiAgICAgIHRoaXMuaGkgPj4+IDE2ICYgMjU1LFxuICAgICAgdGhpcy5oaSA+Pj4gMjRcbiAgICApO1xuICB9LCB1LnByb3RvdHlwZS56ekVuY29kZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gdGhpcy5oaSA+PiAzMTtcbiAgICByZXR1cm4gdGhpcy5oaSA9ICgodGhpcy5oaSA8PCAxIHwgdGhpcy5sbyA+Pj4gMzEpIF4gZSkgPj4+IDAsIHRoaXMubG8gPSAodGhpcy5sbyA8PCAxIF4gZSkgPj4+IDAsIHRoaXM7XG4gIH0sIHUucHJvdG90eXBlLnp6RGVjb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSAtKHRoaXMubG8gJiAxKTtcbiAgICByZXR1cm4gdGhpcy5sbyA9ICgodGhpcy5sbyA+Pj4gMSB8IHRoaXMuaGkgPDwgMzEpIF4gZSkgPj4+IDAsIHRoaXMuaGkgPSAodGhpcy5oaSA+Pj4gMSBeIGUpID4+PiAwLCB0aGlzO1xuICB9LCB1LnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IHRoaXMubG8sIHQgPSAodGhpcy5sbyA+Pj4gMjggfCB0aGlzLmhpIDw8IDQpID4+PiAwLCByID0gdGhpcy5oaSA+Pj4gMjQ7XG4gICAgcmV0dXJuIHIgPT09IDAgPyB0ID09PSAwID8gZSA8IDE2Mzg0ID8gZSA8IDEyOCA/IDEgOiAyIDogZSA8IDIwOTcxNTIgPyAzIDogNCA6IHQgPCAxNjM4NCA/IHQgPCAxMjggPyA1IDogNiA6IHQgPCAyMDk3MTUyID8gNyA6IDggOiByIDwgMTI4ID8gOSA6IDEwO1xuICB9LCBsb25nYml0cztcbn1cbnZhciBoYXNSZXF1aXJlZE1pbmltYWw7XG5mdW5jdGlvbiByZXF1aXJlTWluaW1hbCgpIHtcbiAgcmV0dXJuIGhhc1JlcXVpcmVkTWluaW1hbCB8fCAoaGFzUmVxdWlyZWRNaW5pbWFsID0gMSwgZnVuY3Rpb24oYSkge1xuICAgIHZhciB1ID0gYTtcbiAgICB1LmFzUHJvbWlzZSA9IGFzcHJvbWlzZSwgdS5iYXNlNjQgPSBiYXNlNjQkMSwgdS5FdmVudEVtaXR0ZXIgPSBldmVudGVtaXR0ZXIsIHUuZmxvYXQgPSBmbG9hdCwgdS5pbnF1aXJlID0gaW5xdWlyZV8xLCB1LnV0ZjggPSB1dGY4JDIsIHUucG9vbCA9IHBvb2xfMSwgdS5Mb25nQml0cyA9IHJlcXVpcmVMb25nYml0cygpLCB1LmlzTm9kZSA9ICEhKHR5cGVvZiBmIDwgXCJ1XCIgJiYgZiAmJiBmLnByb2Nlc3MgJiYgZi5wcm9jZXNzLnZlcnNpb25zICYmIGYucHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSwgdS5nbG9iYWwgPSB1LmlzTm9kZSAmJiBmIHx8IHR5cGVvZiB3aW5kb3cgPCBcInVcIiAmJiB3aW5kb3cgfHwgdHlwZW9mIHNlbGYgPCBcInVcIiAmJiBzZWxmIHx8IGYsIHUuZW1wdHlBcnJheSA9IE9iamVjdC5mcmVlemUgPyBPYmplY3QuZnJlZXplKFtdKSA6IChcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBbXVxuICAgICksIHUuZW1wdHlPYmplY3QgPSBPYmplY3QuZnJlZXplID8gT2JqZWN0LmZyZWV6ZSh7fSkgOiAoXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAge31cbiAgICApLCB1LmlzSW50ZWdlciA9IE51bWJlci5pc0ludGVnZXIgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG8gPT0gXCJudW1iZXJcIiAmJiBpc0Zpbml0ZShvKSAmJiBNYXRoLmZsb29yKG8pID09PSBvO1xuICAgIH0sIHUuaXNTdHJpbmcgPSBmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG8gPT0gXCJzdHJpbmdcIiB8fCBvIGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH0sIHUuaXNPYmplY3QgPSBmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gbyAmJiB0eXBlb2YgbyA9PSBcIm9iamVjdFwiO1xuICAgIH0sIHUuaXNzZXQgPSAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBwcm9wZXJ0eSBvbiBhIG1lc3NhZ2UgaXMgY29uc2lkZXJlZCB0byBiZSBwcmVzZW50LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogUGxhaW4gb2JqZWN0IG9yIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSBuYW1lXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBjb25zaWRlcmVkIHRvIGJlIHByZXNlbnQsIG90aGVyd2lzZSBgZmFsc2VgXG4gICAgICovXG4gICAgdS5pc1NldCA9IGZ1bmN0aW9uKG8sIGUpIHtcbiAgICAgIHZhciB0ID0gb1tlXTtcbiAgICAgIHJldHVybiB0ICE9IG51bGwgJiYgby5oYXNPd25Qcm9wZXJ0eShlKSA/IHR5cGVvZiB0ICE9IFwib2JqZWN0XCIgfHwgKEFycmF5LmlzQXJyYXkodCkgPyB0Lmxlbmd0aCA6IE9iamVjdC5rZXlzKHQpLmxlbmd0aCkgPiAwIDogITE7XG4gICAgfSwgdS5CdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBpID0gdS5pbnF1aXJlKFwiYnVmZmVyXCIpLkJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIGkucHJvdG90eXBlLnV0ZjhXcml0ZSA/IGkgOiAoXG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSgpLCB1Ll9CdWZmZXJfZnJvbSA9IG51bGwsIHUuX0J1ZmZlcl9hbGxvY1Vuc2FmZSA9IG51bGwsIHUubmV3QnVmZmVyID0gZnVuY3Rpb24obykge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvID09IFwibnVtYmVyXCIgPyB1LkJ1ZmZlciA/IHUuX0J1ZmZlcl9hbGxvY1Vuc2FmZShvKSA6IG5ldyB1LkFycmF5KG8pIDogdS5CdWZmZXIgPyB1Ll9CdWZmZXJfZnJvbShvKSA6IHR5cGVvZiBVaW50OEFycmF5ID4gXCJ1XCIgPyBvIDogbmV3IFVpbnQ4QXJyYXkobyk7XG4gICAgfSwgdS5BcnJheSA9IHR5cGVvZiBVaW50OEFycmF5IDwgXCJ1XCIgPyBVaW50OEFycmF5IDogQXJyYXksIHUuTG9uZyA9IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdS5nbG9iYWwuZGNvZGVJTyAmJiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHUuZ2xvYmFsLmRjb2RlSU8uTG9uZyB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHUuZ2xvYmFsLkxvbmcgfHwgdS5pbnF1aXJlKFwibG9uZ1wiKSwgdS5rZXkyUmUgPSAvXnRydWV8ZmFsc2V8MHwxJC8sIHUua2V5MzJSZSA9IC9eLT8oPzowfFsxLTldWzAtOV0qKSQvLCB1LmtleTY0UmUgPSAvXig/OltcXFxceDAwLVxcXFx4ZmZdezh9fC0/KD86MHxbMS05XVswLTldKikpJC8sIHUubG9uZ1RvSGFzaCA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgIHJldHVybiBvID8gdS5Mb25nQml0cy5mcm9tKG8pLnRvSGFzaCgpIDogdS5Mb25nQml0cy56ZXJvSGFzaDtcbiAgICB9LCB1LmxvbmdGcm9tSGFzaCA9IGZ1bmN0aW9uKG8sIGUpIHtcbiAgICAgIHZhciB0ID0gdS5Mb25nQml0cy5mcm9tSGFzaChvKTtcbiAgICAgIHJldHVybiB1LkxvbmcgPyB1LkxvbmcuZnJvbUJpdHModC5sbywgdC5oaSwgZSkgOiB0LnRvTnVtYmVyKCEhZSk7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBjKGksIG8sIGUpIHtcbiAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhvKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAoaVt0W3JdXSA9PT0gdm9pZCAwIHx8ICFlKSAmJiAoaVt0W3JdXSA9IG9bdFtyXV0pO1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIHUubWVyZ2UgPSBjLCB1LmxjRmlyc3QgPSBmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gby5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIG8uc3Vic3RyaW5nKDEpO1xuICAgIH07XG4gICAgZnVuY3Rpb24gZiQxKGkpIHtcbiAgICAgIGZ1bmN0aW9uIG8oZSwgdCkge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgbykpXG4gICAgICAgICAgcmV0dXJuIG5ldyBvKGUsIHQpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJtZXNzYWdlXCIsIHsgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgfSB9KSwgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBvKSA6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0YWNrXCIsIHsgdmFsdWU6IG5ldyBFcnJvcigpLnN0YWNrIHx8IFwiXCIgfSksIHQgJiYgYyh0aGlzLCB0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IG8sXG4gICAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZToge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldDogdm9pZCAwLFxuICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgIC8vIGNvbmZpZ3VyYWJsZTogZmFsc2Ugd291bGQgYWNjdXJhdGVseSBwcmVzZXJ2ZSB0aGUgYmVoYXZpb3Igb2ZcbiAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwsIGJ1dCBJJ20gZ3Vlc3NpbmcgdGhhdCB3YXMgbm90IGludGVudGlvbmFsLlxuICAgICAgICAgIC8vIEZvciBhbiBhY3R1YWwgZXJyb3Igc3ViY2xhc3MsIHRoaXMgcHJvcGVydHkgd291bGRcbiAgICAgICAgICAvLyBiZSBjb25maWd1cmFibGUuXG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgICB9LFxuICAgICAgICB0b1N0cmluZzoge1xuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyBcIjogXCIgKyB0aGlzLm1lc3NhZ2U7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgICB9XG4gICAgICB9KSwgbztcbiAgICB9XG4gICAgdS5uZXdFcnJvciA9IGYkMSwgdS5Qcm90b2NvbEVycm9yID0gZiQxKFwiUHJvdG9jb2xFcnJvclwiKSwgdS5vbmVPZkdldHRlciA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgIGZvciAodmFyIGUgPSB7fSwgdCA9IDA7IHQgPCBvLmxlbmd0aDsgKyt0KVxuICAgICAgICBlW29bdF1dID0gMTtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yICh2YXIgciA9IE9iamVjdC5rZXlzKHRoaXMpLCBuID0gci5sZW5ndGggLSAxOyBuID4gLTE7IC0tbilcbiAgICAgICAgICBpZiAoZVtyW25dXSA9PT0gMSAmJiB0aGlzW3Jbbl1dICE9PSB2b2lkIDAgJiYgdGhpc1tyW25dXSAhPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiByW25dO1xuICAgICAgfTtcbiAgICB9LCB1Lm9uZU9mU2V0dGVyID0gZnVuY3Rpb24obykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCBvLmxlbmd0aDsgKyt0KVxuICAgICAgICAgIG9bdF0gIT09IGUgJiYgZGVsZXRlIHRoaXNbb1t0XV07XG4gICAgICB9O1xuICAgIH0sIHUudG9KU09OT3B0aW9ucyA9IHtcbiAgICAgIGxvbmdzOiBTdHJpbmcsXG4gICAgICBlbnVtczogU3RyaW5nLFxuICAgICAgYnl0ZXM6IFN0cmluZyxcbiAgICAgIGpzb246ICEwXG4gICAgfSwgdS5fY29uZmlndXJlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHUuQnVmZmVyO1xuICAgICAgaWYgKCFpKSB7XG4gICAgICAgIHUuX0J1ZmZlcl9mcm9tID0gdS5fQnVmZmVyX2FsbG9jVW5zYWZlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdS5fQnVmZmVyX2Zyb20gPSBpLmZyb20gIT09IFVpbnQ4QXJyYXkuZnJvbSAmJiBpLmZyb20gfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBpKGUsIHQpO1xuICAgICAgfSwgdS5fQnVmZmVyX2FsbG9jVW5zYWZlID0gaS5hbGxvY1Vuc2FmZSB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICB9O1xuICAgIH07XG4gIH0obWluaW1hbCQxKSksIG1pbmltYWwkMTtcbn1cbnZhciB3cml0ZXIgPSBXcml0ZXIkMSwgdXRpbCQ0ID0gcmVxdWlyZU1pbmltYWwoKSwgQnVmZmVyV3JpdGVyJDEsIExvbmdCaXRzJDEgPSB1dGlsJDQuTG9uZ0JpdHMsIGJhc2U2NCA9IHV0aWwkNC5iYXNlNjQsIHV0ZjgkMSA9IHV0aWwkNC51dGY4O1xuZnVuY3Rpb24gT3AoYSwgdSwgYykge1xuICB0aGlzLmZuID0gYSwgdGhpcy5sZW4gPSB1LCB0aGlzLm5leHQgPSB2b2lkIDAsIHRoaXMudmFsID0gYztcbn1cbmZ1bmN0aW9uIG5vb3AoKSB7XG59XG5mdW5jdGlvbiBTdGF0ZShhKSB7XG4gIHRoaXMuaGVhZCA9IGEuaGVhZCwgdGhpcy50YWlsID0gYS50YWlsLCB0aGlzLmxlbiA9IGEubGVuLCB0aGlzLm5leHQgPSBhLnN0YXRlcztcbn1cbmZ1bmN0aW9uIFdyaXRlciQxKCkge1xuICB0aGlzLmxlbiA9IDAsIHRoaXMuaGVhZCA9IG5ldyBPcChub29wLCAwLCAwKSwgdGhpcy50YWlsID0gdGhpcy5oZWFkLCB0aGlzLnN0YXRlcyA9IG51bGw7XG59XG52YXIgY3JlYXRlJDEgPSBmdW5jdGlvbiBhKCkge1xuICByZXR1cm4gdXRpbCQ0LkJ1ZmZlciA/IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoV3JpdGVyJDEuY3JlYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbmV3IEJ1ZmZlcldyaXRlciQxKCk7XG4gICAgfSkoKTtcbiAgfSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgV3JpdGVyJDEoKTtcbiAgfTtcbn07XG5Xcml0ZXIkMS5jcmVhdGUgPSBjcmVhdGUkMSgpO1xuV3JpdGVyJDEuYWxsb2MgPSBmdW5jdGlvbiBhKHUpIHtcbiAgcmV0dXJuIG5ldyB1dGlsJDQuQXJyYXkodSk7XG59O1xudXRpbCQ0LkFycmF5ICE9PSBBcnJheSAmJiAoV3JpdGVyJDEuYWxsb2MgPSB1dGlsJDQucG9vbChXcml0ZXIkMS5hbGxvYywgdXRpbCQ0LkFycmF5LnByb3RvdHlwZS5zdWJhcnJheSkpO1xuV3JpdGVyJDEucHJvdG90eXBlLl9wdXNoID0gZnVuY3Rpb24gYSh1LCBjLCBmKSB7XG4gIHJldHVybiB0aGlzLnRhaWwgPSB0aGlzLnRhaWwubmV4dCA9IG5ldyBPcCh1LCBjLCBmKSwgdGhpcy5sZW4gKz0gYywgdGhpcztcbn07XG5mdW5jdGlvbiB3cml0ZUJ5dGUoYSwgdSwgYykge1xuICB1W2NdID0gYSAmIDI1NTtcbn1cbmZ1bmN0aW9uIHdyaXRlVmFyaW50MzIoYSwgdSwgYykge1xuICBmb3IgKDsgYSA+IDEyNzsgKVxuICAgIHVbYysrXSA9IGEgJiAxMjcgfCAxMjgsIGEgPj4+PSA3O1xuICB1W2NdID0gYTtcbn1cbmZ1bmN0aW9uIFZhcmludE9wKGEsIHUpIHtcbiAgdGhpcy5sZW4gPSBhLCB0aGlzLm5leHQgPSB2b2lkIDAsIHRoaXMudmFsID0gdTtcbn1cblZhcmludE9wLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT3AucHJvdG90eXBlKTtcblZhcmludE9wLnByb3RvdHlwZS5mbiA9IHdyaXRlVmFyaW50MzI7XG5Xcml0ZXIkMS5wcm90b3R5cGUudWludDMyID0gZnVuY3Rpb24gYSh1KSB7XG4gIHJldHVybiB0aGlzLmxlbiArPSAodGhpcy50YWlsID0gdGhpcy50YWlsLm5leHQgPSBuZXcgVmFyaW50T3AoXG4gICAgKHUgPSB1ID4+PiAwKSA8IDEyOCA/IDEgOiB1IDwgMTYzODQgPyAyIDogdSA8IDIwOTcxNTIgPyAzIDogdSA8IDI2ODQzNTQ1NiA/IDQgOiA1LFxuICAgIHVcbiAgKSkubGVuLCB0aGlzO1xufTtcbldyaXRlciQxLnByb3RvdHlwZS5pbnQzMiA9IGZ1bmN0aW9uIGEodSkge1xuICByZXR1cm4gdSA8IDAgPyB0aGlzLl9wdXNoKHdyaXRlVmFyaW50NjQsIDEwLCBMb25nQml0cyQxLmZyb21OdW1iZXIodSkpIDogdGhpcy51aW50MzIodSk7XG59O1xuV3JpdGVyJDEucHJvdG90eXBlLnNpbnQzMiA9IGZ1bmN0aW9uIGEodSkge1xuICByZXR1cm4gdGhpcy51aW50MzIoKHUgPDwgMSBeIHUgPj4gMzEpID4+PiAwKTtcbn07XG5mdW5jdGlvbiB3cml0ZVZhcmludDY0KGEsIHUsIGMpIHtcbiAgZm9yICg7IGEuaGk7IClcbiAgICB1W2MrK10gPSBhLmxvICYgMTI3IHwgMTI4LCBhLmxvID0gKGEubG8gPj4+IDcgfCBhLmhpIDw8IDI1KSA+Pj4gMCwgYS5oaSA+Pj49IDc7XG4gIGZvciAoOyBhLmxvID4gMTI3OyApXG4gICAgdVtjKytdID0gYS5sbyAmIDEyNyB8IDEyOCwgYS5sbyA9IGEubG8gPj4+IDc7XG4gIHVbYysrXSA9IGEubG87XG59XG5Xcml0ZXIkMS5wcm90b3R5cGUudWludDY0ID0gZnVuY3Rpb24gYSh1KSB7XG4gIHZhciBjID0gTG9uZ0JpdHMkMS5mcm9tKHUpO1xuICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCBjLmxlbmd0aCgpLCBjKTtcbn07XG5Xcml0ZXIkMS5wcm90b3R5cGUuaW50NjQgPSBXcml0ZXIkMS5wcm90b3R5cGUudWludDY0O1xuV3JpdGVyJDEucHJvdG90eXBlLnNpbnQ2NCA9IGZ1bmN0aW9uIGEodSkge1xuICB2YXIgYyA9IExvbmdCaXRzJDEuZnJvbSh1KS56ekVuY29kZSgpO1xuICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCBjLmxlbmd0aCgpLCBjKTtcbn07XG5Xcml0ZXIkMS5wcm90b3R5cGUuYm9vbCA9IGZ1bmN0aW9uIGEodSkge1xuICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZUJ5dGUsIDEsIHUgPyAxIDogMCk7XG59O1xuZnVuY3Rpb24gd3JpdGVGaXhlZDMyKGEsIHUsIGMpIHtcbiAgdVtjXSA9IGEgJiAyNTUsIHVbYyArIDFdID0gYSA+Pj4gOCAmIDI1NSwgdVtjICsgMl0gPSBhID4+PiAxNiAmIDI1NSwgdVtjICsgM10gPSBhID4+PiAyNDtcbn1cbldyaXRlciQxLnByb3RvdHlwZS5maXhlZDMyID0gZnVuY3Rpb24gYSh1KSB7XG4gIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgdSA+Pj4gMCk7XG59O1xuV3JpdGVyJDEucHJvdG90eXBlLnNmaXhlZDMyID0gV3JpdGVyJDEucHJvdG90eXBlLmZpeGVkMzI7XG5Xcml0ZXIkMS5wcm90b3R5cGUuZml4ZWQ2NCA9IGZ1bmN0aW9uIGEodSkge1xuICB2YXIgYyA9IExvbmdCaXRzJDEuZnJvbSh1KTtcbiAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVGaXhlZDMyLCA0LCBjLmxvKS5fcHVzaCh3cml0ZUZpeGVkMzIsIDQsIGMuaGkpO1xufTtcbldyaXRlciQxLnByb3RvdHlwZS5zZml4ZWQ2NCA9IFdyaXRlciQxLnByb3RvdHlwZS5maXhlZDY0O1xuV3JpdGVyJDEucHJvdG90eXBlLmZsb2F0ID0gZnVuY3Rpb24gYSh1KSB7XG4gIHJldHVybiB0aGlzLl9wdXNoKHV0aWwkNC5mbG9hdC53cml0ZUZsb2F0TEUsIDQsIHUpO1xufTtcbldyaXRlciQxLnByb3RvdHlwZS5kb3VibGUgPSBmdW5jdGlvbiBhKHUpIHtcbiAgcmV0dXJuIHRoaXMuX3B1c2godXRpbCQ0LmZsb2F0LndyaXRlRG91YmxlTEUsIDgsIHUpO1xufTtcbnZhciB3cml0ZUJ5dGVzID0gdXRpbCQ0LkFycmF5LnByb3RvdHlwZS5zZXQgPyBmdW5jdGlvbiBhKHUsIGMsIGYpIHtcbiAgYy5zZXQodSwgZik7XG59IDogZnVuY3Rpb24gYSh1LCBjLCBmKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdS5sZW5ndGg7ICsraSlcbiAgICBjW2YgKyBpXSA9IHVbaV07XG59O1xuV3JpdGVyJDEucHJvdG90eXBlLmJ5dGVzID0gZnVuY3Rpb24gYSh1KSB7XG4gIHZhciBjID0gdS5sZW5ndGggPj4+IDA7XG4gIGlmICghYylcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZUJ5dGUsIDEsIDApO1xuICBpZiAodXRpbCQ0LmlzU3RyaW5nKHUpKSB7XG4gICAgdmFyIGYgPSBXcml0ZXIkMS5hbGxvYyhjID0gYmFzZTY0Lmxlbmd0aCh1KSk7XG4gICAgYmFzZTY0LmRlY29kZSh1LCBmLCAwKSwgdSA9IGY7XG4gIH1cbiAgcmV0dXJuIHRoaXMudWludDMyKGMpLl9wdXNoKHdyaXRlQnl0ZXMsIGMsIHUpO1xufTtcbldyaXRlciQxLnByb3RvdHlwZS5zdHJpbmcgPSBmdW5jdGlvbiBhKHUpIHtcbiAgdmFyIGMgPSB1dGY4JDEubGVuZ3RoKHUpO1xuICByZXR1cm4gYyA/IHRoaXMudWludDMyKGMpLl9wdXNoKHV0ZjgkMS53cml0ZSwgYywgdSkgOiB0aGlzLl9wdXNoKHdyaXRlQnl0ZSwgMSwgMCk7XG59O1xuV3JpdGVyJDEucHJvdG90eXBlLmZvcmsgPSBmdW5jdGlvbiBhKCkge1xuICByZXR1cm4gdGhpcy5zdGF0ZXMgPSBuZXcgU3RhdGUodGhpcyksIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG5ldyBPcChub29wLCAwLCAwKSwgdGhpcy5sZW4gPSAwLCB0aGlzO1xufTtcbldyaXRlciQxLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uIGEoKSB7XG4gIHJldHVybiB0aGlzLnN0YXRlcyA/ICh0aGlzLmhlYWQgPSB0aGlzLnN0YXRlcy5oZWFkLCB0aGlzLnRhaWwgPSB0aGlzLnN0YXRlcy50YWlsLCB0aGlzLmxlbiA9IHRoaXMuc3RhdGVzLmxlbiwgdGhpcy5zdGF0ZXMgPSB0aGlzLnN0YXRlcy5uZXh0KSA6ICh0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgT3Aobm9vcCwgMCwgMCksIHRoaXMubGVuID0gMCksIHRoaXM7XG59O1xuV3JpdGVyJDEucHJvdG90eXBlLmxkZWxpbSA9IGZ1bmN0aW9uIGEoKSB7XG4gIHZhciB1ID0gdGhpcy5oZWFkLCBjID0gdGhpcy50YWlsLCBmID0gdGhpcy5sZW47XG4gIHJldHVybiB0aGlzLnJlc2V0KCkudWludDMyKGYpLCBmICYmICh0aGlzLnRhaWwubmV4dCA9IHUubmV4dCwgdGhpcy50YWlsID0gYywgdGhpcy5sZW4gKz0gZiksIHRoaXM7XG59O1xuV3JpdGVyJDEucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uIGEoKSB7XG4gIGZvciAodmFyIHUgPSB0aGlzLmhlYWQubmV4dCwgYyA9IHRoaXMuY29uc3RydWN0b3IuYWxsb2ModGhpcy5sZW4pLCBmID0gMDsgdTsgKVxuICAgIHUuZm4odS52YWwsIGMsIGYpLCBmICs9IHUubGVuLCB1ID0gdS5uZXh0O1xuICByZXR1cm4gYztcbn07XG5Xcml0ZXIkMS5fY29uZmlndXJlID0gZnVuY3Rpb24oYSkge1xuICBCdWZmZXJXcml0ZXIkMSA9IGEsIFdyaXRlciQxLmNyZWF0ZSA9IGNyZWF0ZSQxKCksIEJ1ZmZlcldyaXRlciQxLl9jb25maWd1cmUoKTtcbn07XG52YXIgd3JpdGVyX2J1ZmZlciA9IEJ1ZmZlcldyaXRlciwgV3JpdGVyID0gd3JpdGVyO1xuKEJ1ZmZlcldyaXRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdyaXRlci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IEJ1ZmZlcldyaXRlcjtcbnZhciB1dGlsJDMgPSByZXF1aXJlTWluaW1hbCgpO1xuZnVuY3Rpb24gQnVmZmVyV3JpdGVyKCkge1xuICBXcml0ZXIuY2FsbCh0aGlzKTtcbn1cbkJ1ZmZlcldyaXRlci5fY29uZmlndXJlID0gZnVuY3Rpb24oKSB7XG4gIEJ1ZmZlcldyaXRlci5hbGxvYyA9IHV0aWwkMy5fQnVmZmVyX2FsbG9jVW5zYWZlLCBCdWZmZXJXcml0ZXIud3JpdGVCeXRlc0J1ZmZlciA9IHV0aWwkMy5CdWZmZXIgJiYgdXRpbCQzLkJ1ZmZlci5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIHV0aWwkMy5CdWZmZXIucHJvdG90eXBlLnNldC5uYW1lID09PSBcInNldFwiID8gZnVuY3Rpb24odSwgYywgZikge1xuICAgIGMuc2V0KHUsIGYpO1xuICB9IDogZnVuY3Rpb24odSwgYywgZikge1xuICAgIGlmICh1LmNvcHkpXG4gICAgICB1LmNvcHkoYywgZiwgMCwgdS5sZW5ndGgpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IDA7IGkgPCB1Lmxlbmd0aDsgKVxuICAgICAgY1tmKytdID0gdVtpKytdO1xuICB9O1xufTtcbkJ1ZmZlcldyaXRlci5wcm90b3R5cGUuYnl0ZXMgPSBmdW5jdGlvbiBhKHUpIHtcbiAgdXRpbCQzLmlzU3RyaW5nKHUpICYmICh1ID0gdXRpbCQzLl9CdWZmZXJfZnJvbSh1LCBcImJhc2U2NFwiKSk7XG4gIHZhciBjID0gdS5sZW5ndGggPj4+IDA7XG4gIHJldHVybiB0aGlzLnVpbnQzMihjKSwgYyAmJiB0aGlzLl9wdXNoKEJ1ZmZlcldyaXRlci53cml0ZUJ5dGVzQnVmZmVyLCBjLCB1KSwgdGhpcztcbn07XG5mdW5jdGlvbiB3cml0ZVN0cmluZ0J1ZmZlcihhLCB1LCBjKSB7XG4gIGEubGVuZ3RoIDwgNDAgPyB1dGlsJDMudXRmOC53cml0ZShhLCB1LCBjKSA6IHUudXRmOFdyaXRlID8gdS51dGY4V3JpdGUoYSwgYykgOiB1LndyaXRlKGEsIGMpO1xufVxuQnVmZmVyV3JpdGVyLnByb3RvdHlwZS5zdHJpbmcgPSBmdW5jdGlvbiBhKHUpIHtcbiAgdmFyIGMgPSB1dGlsJDMuQnVmZmVyLmJ5dGVMZW5ndGgodSk7XG4gIHJldHVybiB0aGlzLnVpbnQzMihjKSwgYyAmJiB0aGlzLl9wdXNoKHdyaXRlU3RyaW5nQnVmZmVyLCBjLCB1KSwgdGhpcztcbn07XG5CdWZmZXJXcml0ZXIuX2NvbmZpZ3VyZSgpO1xudmFyIHJlYWRlciA9IFJlYWRlciQxLCB1dGlsJDIgPSByZXF1aXJlTWluaW1hbCgpLCBCdWZmZXJSZWFkZXIkMSwgTG9uZ0JpdHMgPSB1dGlsJDIuTG9uZ0JpdHMsIHV0ZjggPSB1dGlsJDIudXRmODtcbmZ1bmN0aW9uIGluZGV4T3V0T2ZSYW5nZShhLCB1KSB7XG4gIHJldHVybiBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlOiBcIiArIGEucG9zICsgXCIgKyBcIiArICh1IHx8IDEpICsgXCIgPiBcIiArIGEubGVuKTtcbn1cbmZ1bmN0aW9uIFJlYWRlciQxKGEpIHtcbiAgdGhpcy5idWYgPSBhLCB0aGlzLnBvcyA9IDAsIHRoaXMubGVuID0gYS5sZW5ndGg7XG59XG52YXIgY3JlYXRlX2FycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgPCBcInVcIiA/IGZ1bmN0aW9uIGEodSkge1xuICBpZiAodSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgQXJyYXkuaXNBcnJheSh1KSlcbiAgICByZXR1cm4gbmV3IFJlYWRlciQxKHUpO1xuICB0aHJvdyBFcnJvcihcImlsbGVnYWwgYnVmZmVyXCIpO1xufSA6IGZ1bmN0aW9uIGEodSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh1KSlcbiAgICByZXR1cm4gbmV3IFJlYWRlciQxKHUpO1xuICB0aHJvdyBFcnJvcihcImlsbGVnYWwgYnVmZmVyXCIpO1xufSwgY3JlYXRlID0gZnVuY3Rpb24gYSgpIHtcbiAgcmV0dXJuIHV0aWwkMi5CdWZmZXIgPyBmdW5jdGlvbihjKSB7XG4gICAgcmV0dXJuIChSZWFkZXIkMS5jcmVhdGUgPSBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gdXRpbCQyLkJ1ZmZlci5pc0J1ZmZlcihpKSA/IG5ldyBCdWZmZXJSZWFkZXIkMShpKSA6IGNyZWF0ZV9hcnJheShpKTtcbiAgICB9KShjKTtcbiAgfSA6IGNyZWF0ZV9hcnJheTtcbn07XG5SZWFkZXIkMS5jcmVhdGUgPSBjcmVhdGUoKTtcblJlYWRlciQxLnByb3RvdHlwZS5fc2xpY2UgPSB1dGlsJDIuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5IHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG51dGlsJDIuQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuUmVhZGVyJDEucHJvdG90eXBlLnVpbnQzMiA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbiBhKCkge1xuICB2YXIgdSA9IDQyOTQ5NjcyOTU7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpZiAodSA9ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpID4+PiAwLCB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCB8fCAodSA9ICh1IHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgNykgPj4+IDAsIHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSB8fCAodSA9ICh1IHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgMTQpID4+PiAwLCB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgfHwgKHUgPSAodSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IDIxKSA+Pj4gMCwgdGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHx8ICh1ID0gKHUgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTUpIDw8IDI4KSA+Pj4gMCwgdGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpKSByZXR1cm4gdTtcbiAgICBpZiAoKHRoaXMucG9zICs9IDUpID4gdGhpcy5sZW4pXG4gICAgICB0aHJvdyB0aGlzLnBvcyA9IHRoaXMubGVuLCBpbmRleE91dE9mUmFuZ2UodGhpcywgMTApO1xuICAgIHJldHVybiB1O1xuICB9O1xufSgpO1xuUmVhZGVyJDEucHJvdG90eXBlLmludDMyID0gZnVuY3Rpb24gYSgpIHtcbiAgcmV0dXJuIHRoaXMudWludDMyKCkgfCAwO1xufTtcblJlYWRlciQxLnByb3RvdHlwZS5zaW50MzIgPSBmdW5jdGlvbiBhKCkge1xuICB2YXIgdSA9IHRoaXMudWludDMyKCk7XG4gIHJldHVybiB1ID4+PiAxIF4gLSh1ICYgMSkgfCAwO1xufTtcbmZ1bmN0aW9uIHJlYWRMb25nVmFyaW50KCkge1xuICB2YXIgYSA9IG5ldyBMb25nQml0cygwLCAwKSwgdSA9IDA7XG4gIGlmICh0aGlzLmxlbiAtIHRoaXMucG9zID4gNCkge1xuICAgIGZvciAoOyB1IDwgNDsgKyt1KVxuICAgICAgaWYgKGEubG8gPSAoYS5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IHUgKiA3KSA+Pj4gMCwgdGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgIHJldHVybiBhO1xuICAgIGlmIChhLmxvID0gKGEubG8gfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCAyOCkgPj4+IDAsIGEuaGkgPSAoYS5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpID4+IDQpID4+PiAwLCB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgIHJldHVybiBhO1xuICAgIHUgPSAwO1xuICB9IGVsc2Uge1xuICAgIGZvciAoOyB1IDwgMzsgKyt1KSB7XG4gICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzKTtcbiAgICAgIGlmIChhLmxvID0gKGEubG8gfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCB1ICogNykgPj4+IDAsIHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG4gICAgcmV0dXJuIGEubG8gPSAoYS5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSAmIDEyNykgPDwgdSAqIDcpID4+PiAwLCBhO1xuICB9XG4gIGlmICh0aGlzLmxlbiAtIHRoaXMucG9zID4gNCkge1xuICAgIGZvciAoOyB1IDwgNTsgKyt1KVxuICAgICAgaWYgKGEuaGkgPSAoYS5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IHUgKiA3ICsgMykgPj4+IDAsIHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICByZXR1cm4gYTtcbiAgfSBlbHNlXG4gICAgZm9yICg7IHUgPCA1OyArK3UpIHtcbiAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgICAgaWYgKGEuaGkgPSAoYS5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IHUgKiA3ICsgMykgPj4+IDAsIHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG4gIHRocm93IEVycm9yKFwiaW52YWxpZCB2YXJpbnQgZW5jb2RpbmdcIik7XG59XG5SZWFkZXIkMS5wcm90b3R5cGUuYm9vbCA9IGZ1bmN0aW9uIGEoKSB7XG4gIHJldHVybiB0aGlzLnVpbnQzMigpICE9PSAwO1xufTtcbmZ1bmN0aW9uIHJlYWRGaXhlZDMyX2VuZChhLCB1KSB7XG4gIHJldHVybiAoYVt1IC0gNF0gfCBhW3UgLSAzXSA8PCA4IHwgYVt1IC0gMl0gPDwgMTYgfCBhW3UgLSAxXSA8PCAyNCkgPj4+IDA7XG59XG5SZWFkZXIkMS5wcm90b3R5cGUuZml4ZWQzMiA9IGZ1bmN0aW9uIGEoKSB7XG4gIGlmICh0aGlzLnBvcyArIDQgPiB0aGlzLmxlbilcbiAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG4gIHJldHVybiByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpO1xufTtcblJlYWRlciQxLnByb3RvdHlwZS5zZml4ZWQzMiA9IGZ1bmN0aW9uIGEoKSB7XG4gIGlmICh0aGlzLnBvcyArIDQgPiB0aGlzLmxlbilcbiAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG4gIHJldHVybiByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpIHwgMDtcbn07XG5mdW5jdGlvbiByZWFkRml4ZWQ2NCgpIHtcbiAgaWYgKHRoaXMucG9zICsgOCA+IHRoaXMubGVuKVxuICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA4KTtcbiAgcmV0dXJuIG5ldyBMb25nQml0cyhyZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpLCByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpKTtcbn1cblJlYWRlciQxLnByb3RvdHlwZS5mbG9hdCA9IGZ1bmN0aW9uIGEoKSB7XG4gIGlmICh0aGlzLnBvcyArIDQgPiB0aGlzLmxlbilcbiAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG4gIHZhciB1ID0gdXRpbCQyLmZsb2F0LnJlYWRGbG9hdExFKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gIHJldHVybiB0aGlzLnBvcyArPSA0LCB1O1xufTtcblJlYWRlciQxLnByb3RvdHlwZS5kb3VibGUgPSBmdW5jdGlvbiBhKCkge1xuICBpZiAodGhpcy5wb3MgKyA4ID4gdGhpcy5sZW4pXG4gICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDQpO1xuICB2YXIgdSA9IHV0aWwkMi5mbG9hdC5yZWFkRG91YmxlTEUodGhpcy5idWYsIHRoaXMucG9zKTtcbiAgcmV0dXJuIHRoaXMucG9zICs9IDgsIHU7XG59O1xuUmVhZGVyJDEucHJvdG90eXBlLmJ5dGVzID0gZnVuY3Rpb24gYSgpIHtcbiAgdmFyIHUgPSB0aGlzLnVpbnQzMigpLCBjID0gdGhpcy5wb3MsIGYgPSB0aGlzLnBvcyArIHU7XG4gIGlmIChmID4gdGhpcy5sZW4pXG4gICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIHUpO1xuICBpZiAodGhpcy5wb3MgKz0gdSwgQXJyYXkuaXNBcnJheSh0aGlzLmJ1ZikpXG4gICAgcmV0dXJuIHRoaXMuYnVmLnNsaWNlKGMsIGYpO1xuICBpZiAoYyA9PT0gZikge1xuICAgIHZhciBpID0gdXRpbCQyLkJ1ZmZlcjtcbiAgICByZXR1cm4gaSA/IGkuYWxsb2MoMCkgOiBuZXcgdGhpcy5idWYuY29uc3RydWN0b3IoMCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuX3NsaWNlLmNhbGwodGhpcy5idWYsIGMsIGYpO1xufTtcblJlYWRlciQxLnByb3RvdHlwZS5zdHJpbmcgPSBmdW5jdGlvbiBhKCkge1xuICB2YXIgdSA9IHRoaXMuYnl0ZXMoKTtcbiAgcmV0dXJuIHV0ZjgucmVhZCh1LCAwLCB1Lmxlbmd0aCk7XG59O1xuUmVhZGVyJDEucHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbiBhKHUpIHtcbiAgaWYgKHR5cGVvZiB1ID09IFwibnVtYmVyXCIpIHtcbiAgICBpZiAodGhpcy5wb3MgKyB1ID4gdGhpcy5sZW4pXG4gICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgdSk7XG4gICAgdGhpcy5wb3MgKz0gdTtcbiAgfSBlbHNlXG4gICAgZG9cbiAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgIHdoaWxlICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSAmIDEyOCk7XG4gIHJldHVybiB0aGlzO1xufTtcblJlYWRlciQxLnByb3RvdHlwZS5za2lwVHlwZSA9IGZ1bmN0aW9uKGEpIHtcbiAgc3dpdGNoIChhKSB7XG4gICAgY2FzZSAwOlxuICAgICAgdGhpcy5za2lwKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICB0aGlzLnNraXAoOCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB0aGlzLnNraXAodGhpcy51aW50MzIoKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICBmb3IgKDsgKGEgPSB0aGlzLnVpbnQzMigpICYgNykgIT09IDQ7IClcbiAgICAgICAgdGhpcy5za2lwVHlwZShhKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIHRoaXMuc2tpcCg0KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBFcnJvcihcImludmFsaWQgd2lyZSB0eXBlIFwiICsgYSArIFwiIGF0IG9mZnNldCBcIiArIHRoaXMucG9zKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5SZWFkZXIkMS5fY29uZmlndXJlID0gZnVuY3Rpb24oYSkge1xuICBCdWZmZXJSZWFkZXIkMSA9IGEsIFJlYWRlciQxLmNyZWF0ZSA9IGNyZWF0ZSgpLCBCdWZmZXJSZWFkZXIkMS5fY29uZmlndXJlKCk7XG4gIHZhciB1ID0gdXRpbCQyLkxvbmcgPyBcInRvTG9uZ1wiIDogKFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgXCJ0b051bWJlclwiXG4gICk7XG4gIHV0aWwkMi5tZXJnZShSZWFkZXIkMS5wcm90b3R5cGUsIHtcbiAgICBpbnQ2NDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKVt1XSghMSk7XG4gICAgfSxcbiAgICB1aW50NjQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHJlYWRMb25nVmFyaW50LmNhbGwodGhpcylbdV0oITApO1xuICAgIH0sXG4gICAgc2ludDY0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByZWFkTG9uZ1ZhcmludC5jYWxsKHRoaXMpLnp6RGVjb2RlKClbdV0oITEpO1xuICAgIH0sXG4gICAgZml4ZWQ2NDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVt1XSghMCk7XG4gICAgfSxcbiAgICBzZml4ZWQ2NDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVt1XSghMSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgcmVhZGVyX2J1ZmZlciA9IEJ1ZmZlclJlYWRlciwgUmVhZGVyID0gcmVhZGVyO1xuKEJ1ZmZlclJlYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlYWRlci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IEJ1ZmZlclJlYWRlcjtcbnZhciB1dGlsJDEgPSByZXF1aXJlTWluaW1hbCgpO1xuZnVuY3Rpb24gQnVmZmVyUmVhZGVyKGEpIHtcbiAgUmVhZGVyLmNhbGwodGhpcywgYSk7XG59XG5CdWZmZXJSZWFkZXIuX2NvbmZpZ3VyZSA9IGZ1bmN0aW9uKCkge1xuICB1dGlsJDEuQnVmZmVyICYmIChCdWZmZXJSZWFkZXIucHJvdG90eXBlLl9zbGljZSA9IHV0aWwkMS5CdWZmZXIucHJvdG90eXBlLnNsaWNlKTtcbn07XG5CdWZmZXJSZWFkZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIGEoKSB7XG4gIHZhciB1ID0gdGhpcy51aW50MzIoKTtcbiAgcmV0dXJuIHRoaXMuYnVmLnV0ZjhTbGljZSA/IHRoaXMuYnVmLnV0ZjhTbGljZSh0aGlzLnBvcywgdGhpcy5wb3MgPSBNYXRoLm1pbih0aGlzLnBvcyArIHUsIHRoaXMubGVuKSkgOiB0aGlzLmJ1Zi50b1N0cmluZyhcInV0Zi04XCIsIHRoaXMucG9zLCB0aGlzLnBvcyA9IE1hdGgubWluKHRoaXMucG9zICsgdSwgdGhpcy5sZW4pKTtcbn07XG5CdWZmZXJSZWFkZXIuX2NvbmZpZ3VyZSgpO1xudmFyIHJwYyA9IHt9LCBzZXJ2aWNlID0gU2VydmljZSwgdXRpbCA9IHJlcXVpcmVNaW5pbWFsKCk7XG4oU2VydmljZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHV0aWwuRXZlbnRFbWl0dGVyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gU2VydmljZTtcbmZ1bmN0aW9uIFNlcnZpY2UoYSwgdSwgYykge1xuICBpZiAodHlwZW9mIGEgIT0gXCJmdW5jdGlvblwiKVxuICAgIHRocm93IFR5cGVFcnJvcihcInJwY0ltcGwgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB1dGlsLkV2ZW50RW1pdHRlci5jYWxsKHRoaXMpLCB0aGlzLnJwY0ltcGwgPSBhLCB0aGlzLnJlcXVlc3REZWxpbWl0ZWQgPSAhIXUsIHRoaXMucmVzcG9uc2VEZWxpbWl0ZWQgPSAhIWM7XG59XG5TZXJ2aWNlLnByb3RvdHlwZS5ycGNDYWxsID0gZnVuY3Rpb24gYSh1LCBjLCBmLCBpLCBvKSB7XG4gIGlmICghaSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoXCJyZXF1ZXN0IG11c3QgYmUgc3BlY2lmaWVkXCIpO1xuICB2YXIgZSA9IHRoaXM7XG4gIGlmICghbylcbiAgICByZXR1cm4gdXRpbC5hc1Byb21pc2UoYSwgZSwgdSwgYywgZiwgaSk7XG4gIGlmICghZS5ycGNJbXBsKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIG8oRXJyb3IoXCJhbHJlYWR5IGVuZGVkXCIpKTtcbiAgICB9LCAwKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gZS5ycGNJbXBsKFxuICAgICAgdSxcbiAgICAgIGNbZS5yZXF1ZXN0RGVsaW1pdGVkID8gXCJlbmNvZGVEZWxpbWl0ZWRcIiA6IFwiZW5jb2RlXCJdKGkpLmZpbmlzaCgpLFxuICAgICAgZnVuY3Rpb24ociwgbikge1xuICAgICAgICBpZiAocilcbiAgICAgICAgICByZXR1cm4gZS5lbWl0KFwiZXJyb3JcIiwgciwgdSksIG8ocik7XG4gICAgICAgIGlmIChuID09PSBudWxsKSB7XG4gICAgICAgICAgZS5lbmQoXG4gICAgICAgICAgICAvKiBlbmRlZEJ5UlBDICovXG4gICAgICAgICAgICAhMFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKG4gaW5zdGFuY2VvZiBmKSlcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbiA9IGZbZS5yZXNwb25zZURlbGltaXRlZCA/IFwiZGVjb2RlRGVsaW1pdGVkXCIgOiBcImRlY29kZVwiXShuKTtcbiAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICByZXR1cm4gZS5lbWl0KFwiZXJyb3JcIiwgbCwgdSksIG8obCk7XG4gICAgICAgICAgfVxuICAgICAgICByZXR1cm4gZS5lbWl0KFwiZGF0YVwiLCBuLCB1KSwgbyhudWxsLCBuKTtcbiAgICAgIH1cbiAgICApO1xuICB9IGNhdGNoICh0KSB7XG4gICAgZS5lbWl0KFwiZXJyb3JcIiwgdCwgdSksIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBvKHQpO1xuICAgIH0sIDApO1xuICAgIHJldHVybjtcbiAgfVxufTtcblNlcnZpY2UucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIGEodSkge1xuICByZXR1cm4gdGhpcy5ycGNJbXBsICYmICh1IHx8IHRoaXMucnBjSW1wbChudWxsLCBudWxsLCBudWxsKSwgdGhpcy5ycGNJbXBsID0gbnVsbCwgdGhpcy5lbWl0KFwiZW5kXCIpLm9mZigpKSwgdGhpcztcbn07XG4oZnVuY3Rpb24oYSkge1xuICB2YXIgdSA9IGE7XG4gIHUuU2VydmljZSA9IHNlcnZpY2U7XG59KShycGMpO1xudmFyIHJvb3RzID0ge307XG4oZnVuY3Rpb24oYSkge1xuICB2YXIgdSA9IGE7XG4gIHUuYnVpbGQgPSBcIm1pbmltYWxcIiwgdS5Xcml0ZXIgPSB3cml0ZXIsIHUuQnVmZmVyV3JpdGVyID0gd3JpdGVyX2J1ZmZlciwgdS5SZWFkZXIgPSByZWFkZXIsIHUuQnVmZmVyUmVhZGVyID0gcmVhZGVyX2J1ZmZlciwgdS51dGlsID0gcmVxdWlyZU1pbmltYWwoKSwgdS5ycGMgPSBycGMsIHUucm9vdHMgPSByb290cywgdS5jb25maWd1cmUgPSBjO1xuICBmdW5jdGlvbiBjKCkge1xuICAgIHUudXRpbC5fY29uZmlndXJlKCksIHUuV3JpdGVyLl9jb25maWd1cmUodS5CdWZmZXJXcml0ZXIpLCB1LlJlYWRlci5fY29uZmlndXJlKHUuQnVmZmVyUmVhZGVyKTtcbiAgfVxuICBjKCk7XG59KShpbmRleE1pbmltYWwpO1xudmFyIG1pbmltYWwgPSBpbmRleE1pbmltYWwsICRwcm90b2J1ZiA9IG1pbmltYWwsICRSZWFkZXIgPSAkcHJvdG9idWYuUmVhZGVyLCAkV3JpdGVyID0gJHByb3RvYnVmLldyaXRlciwgJHV0aWwgPSAkcHJvdG9idWYudXRpbCwgJHJvb3QgPSAkcHJvdG9idWYucm9vdHMuZGVmYXVsdCB8fCAoJHByb3RvYnVmLnJvb3RzLmRlZmF1bHQgPSB7fSk7XG4kcm9vdC5vcGVudGVsZW1ldHJ5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhID0ge307XG4gIHJldHVybiBhLnByb3RvID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHUgPSB7fTtcbiAgICByZXR1cm4gdS5jb21tb24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjID0ge307XG4gICAgICByZXR1cm4gYy52MSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZiA9IHt9O1xuICAgICAgICByZXR1cm4gZi5BbnlWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkoZSkge1xuICAgICAgICAgICAgaWYgKGUpXG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhlKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgIGVbdFtyXV0gIT0gbnVsbCAmJiAodGhpc1t0W3JdXSA9IGVbdFtyXV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpLnByb3RvdHlwZS5zdHJpbmdWYWx1ZSA9IG51bGwsIGkucHJvdG90eXBlLmJvb2xWYWx1ZSA9IG51bGwsIGkucHJvdG90eXBlLmludFZhbHVlID0gbnVsbCwgaS5wcm90b3R5cGUuZG91YmxlVmFsdWUgPSBudWxsLCBpLnByb3RvdHlwZS5hcnJheVZhbHVlID0gbnVsbCwgaS5wcm90b3R5cGUua3ZsaXN0VmFsdWUgPSBudWxsLCBpLnByb3RvdHlwZS5ieXRlc1ZhbHVlID0gbnVsbDtcbiAgICAgICAgICB2YXIgbztcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgICAgICAgICAgIGdldDogJHV0aWwub25lT2ZHZXR0ZXIobyA9IFtcInN0cmluZ1ZhbHVlXCIsIFwiYm9vbFZhbHVlXCIsIFwiaW50VmFsdWVcIiwgXCJkb3VibGVWYWx1ZVwiLCBcImFycmF5VmFsdWVcIiwgXCJrdmxpc3RWYWx1ZVwiLCBcImJ5dGVzVmFsdWVcIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaSh0KTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgIHJldHVybiByIHx8IChyID0gJFdyaXRlci5jcmVhdGUoKSksIHQuc3RyaW5nVmFsdWUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInN0cmluZ1ZhbHVlXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgKS5zdHJpbmcodC5zdHJpbmdWYWx1ZSksIHQuYm9vbFZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJib29sVmFsdWVcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDAgPSovXG4gICAgICAgICAgICAgIDE2XG4gICAgICAgICAgICApLmJvb2wodC5ib29sVmFsdWUpLCB0LmludFZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJpbnRWYWx1ZVwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMywgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgMjRcbiAgICAgICAgICAgICkuaW50NjQodC5pbnRWYWx1ZSksIHQuZG91YmxlVmFsdWUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImRvdWJsZVZhbHVlXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA0LCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAzM1xuICAgICAgICAgICAgKS5kb3VibGUodC5kb3VibGVWYWx1ZSksIHQuYXJyYXlWYWx1ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiYXJyYXlWYWx1ZVwiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlLmVuY29kZSh0LmFycmF5VmFsdWUsIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA1LCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICA0MlxuICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCB0Lmt2bGlzdFZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJrdmxpc3RWYWx1ZVwiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QuZW5jb2RlKHQua3ZsaXN0VmFsdWUsIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA2LCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICA1MFxuICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCB0LmJ5dGVzVmFsdWUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImJ5dGVzVmFsdWVcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDcsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDU4XG4gICAgICAgICAgICApLmJ5dGVzKHQuYnl0ZXNWYWx1ZSksIHI7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9ICRSZWFkZXIuY3JlYXRlKHQpKTtcbiAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZSgpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICB2YXIgcCA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAocCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgbC5zdHJpbmdWYWx1ZSA9IHQuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBsLmJvb2xWYWx1ZSA9IHQuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgbC5pbnRWYWx1ZSA9IHQuaW50NjQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICAgICAgICAgIGwuZG91YmxlVmFsdWUgPSB0LmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNToge1xuICAgICAgICAgICAgICAgICAgbC5hcnJheVZhbHVlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZS5kZWNvZGUodCwgdC51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA2OiB7XG4gICAgICAgICAgICAgICAgICBsLmt2bGlzdFZhbHVlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0LmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDc6IHtcbiAgICAgICAgICAgICAgICAgIGwuYnl0ZXNWYWx1ZSA9IHQuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgdC5za2lwVHlwZShwICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICByZXR1cm4gdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSBuZXcgJFJlYWRlcih0KSksIHRoaXMuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0ICE9IFwib2JqZWN0XCIgfHwgdCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgaWYgKHQuc3RyaW5nVmFsdWUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwic3RyaW5nVmFsdWVcIikgJiYgKHIudmFsdWUgPSAxLCAhJHV0aWwuaXNTdHJpbmcodC5zdHJpbmdWYWx1ZSkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdWYWx1ZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAodC5ib29sVmFsdWUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiYm9vbFZhbHVlXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChyLnZhbHVlID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgaWYgKHIudmFsdWUgPSAxLCB0eXBlb2YgdC5ib29sVmFsdWUgIT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYm9vbFZhbHVlOiBib29sZWFuIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5pbnRWYWx1ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJpbnRWYWx1ZVwiKSkge1xuICAgICAgICAgICAgICBpZiAoci52YWx1ZSA9PT0gMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgIGlmIChyLnZhbHVlID0gMSwgISR1dGlsLmlzSW50ZWdlcih0LmludFZhbHVlKSAmJiAhKHQuaW50VmFsdWUgJiYgJHV0aWwuaXNJbnRlZ2VyKHQuaW50VmFsdWUubG93KSAmJiAkdXRpbC5pc0ludGVnZXIodC5pbnRWYWx1ZS5oaWdoKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiaW50VmFsdWU6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuZG91YmxlVmFsdWUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZG91YmxlVmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgaWYgKHIudmFsdWUgPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidmFsdWU6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICBpZiAoci52YWx1ZSA9IDEsIHR5cGVvZiB0LmRvdWJsZVZhbHVlICE9IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZG91YmxlVmFsdWU6IG51bWJlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuYXJyYXlWYWx1ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhcnJheVZhbHVlXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChyLnZhbHVlID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgci52YWx1ZSA9IDE7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUudmVyaWZ5KHQuYXJyYXlWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJhcnJheVZhbHVlLlwiICsgbjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQua3ZsaXN0VmFsdWUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwia3ZsaXN0VmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgaWYgKHIudmFsdWUgPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidmFsdWU6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICByLnZhbHVlID0gMTtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBuID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0LnZlcmlmeSh0Lmt2bGlzdFZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImt2bGlzdFZhbHVlLlwiICsgbjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuYnl0ZXNWYWx1ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJieXRlc1ZhbHVlXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChyLnZhbHVlID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgaWYgKHIudmFsdWUgPSAxLCAhKHQuYnl0ZXNWYWx1ZSAmJiB0eXBlb2YgdC5ieXRlc1ZhbHVlLmxlbmd0aCA9PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKHQuYnl0ZXNWYWx1ZSkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImJ5dGVzVmFsdWU6IGJ1ZmZlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSwgaS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZSlcbiAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICB2YXIgciA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKHQuc3RyaW5nVmFsdWUgIT0gbnVsbCAmJiAoci5zdHJpbmdWYWx1ZSA9IFN0cmluZyh0LnN0cmluZ1ZhbHVlKSksIHQuYm9vbFZhbHVlICE9IG51bGwgJiYgKHIuYm9vbFZhbHVlID0gISF0LmJvb2xWYWx1ZSksIHQuaW50VmFsdWUgIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/IChyLmludFZhbHVlID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC5pbnRWYWx1ZSkpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgdC5pbnRWYWx1ZSA9PSBcInN0cmluZ1wiID8gci5pbnRWYWx1ZSA9IHBhcnNlSW50KHQuaW50VmFsdWUsIDEwKSA6IHR5cGVvZiB0LmludFZhbHVlID09IFwibnVtYmVyXCIgPyByLmludFZhbHVlID0gdC5pbnRWYWx1ZSA6IHR5cGVvZiB0LmludFZhbHVlID09IFwib2JqZWN0XCIgJiYgKHIuaW50VmFsdWUgPSBuZXcgJHV0aWwuTG9uZ0JpdHModC5pbnRWYWx1ZS5sb3cgPj4+IDAsIHQuaW50VmFsdWUuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCB0LmRvdWJsZVZhbHVlICE9IG51bGwgJiYgKHIuZG91YmxlVmFsdWUgPSBOdW1iZXIodC5kb3VibGVWYWx1ZSkpLCB0LmFycmF5VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuYXJyYXlWYWx1ZSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5hcnJheVZhbHVlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHIuYXJyYXlWYWx1ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUuZnJvbU9iamVjdCh0LmFycmF5VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQua3ZsaXN0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQua3ZsaXN0VmFsdWUgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUua3ZsaXN0VmFsdWU6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgci5rdmxpc3RWYWx1ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdC5mcm9tT2JqZWN0KHQua3ZsaXN0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQuYnl0ZXNWYWx1ZSAhPSBudWxsICYmICh0eXBlb2YgdC5ieXRlc1ZhbHVlID09IFwic3RyaW5nXCIgPyAkdXRpbC5iYXNlNjQuZGVjb2RlKHQuYnl0ZXNWYWx1ZSwgci5ieXRlc1ZhbHVlID0gJHV0aWwubmV3QnVmZmVyKCR1dGlsLmJhc2U2NC5sZW5ndGgodC5ieXRlc1ZhbHVlKSksIDApIDogdC5ieXRlc1ZhbHVlLmxlbmd0aCA+PSAwICYmIChyLmJ5dGVzVmFsdWUgPSB0LmJ5dGVzVmFsdWUpKSwgcjtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgciB8fCAociA9IHt9KTtcbiAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICByZXR1cm4gdC5zdHJpbmdWYWx1ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJzdHJpbmdWYWx1ZVwiKSAmJiAobi5zdHJpbmdWYWx1ZSA9IHQuc3RyaW5nVmFsdWUsIHIub25lb2ZzICYmIChuLnZhbHVlID0gXCJzdHJpbmdWYWx1ZVwiKSksIHQuYm9vbFZhbHVlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImJvb2xWYWx1ZVwiKSAmJiAobi5ib29sVmFsdWUgPSB0LmJvb2xWYWx1ZSwgci5vbmVvZnMgJiYgKG4udmFsdWUgPSBcImJvb2xWYWx1ZVwiKSksIHQuaW50VmFsdWUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiaW50VmFsdWVcIikgJiYgKHR5cGVvZiB0LmludFZhbHVlID09IFwibnVtYmVyXCIgPyBuLmludFZhbHVlID0gci5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHQuaW50VmFsdWUpIDogdC5pbnRWYWx1ZSA6IG4uaW50VmFsdWUgPSByLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQuaW50VmFsdWUpIDogci5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKHQuaW50VmFsdWUubG93ID4+PiAwLCB0LmludFZhbHVlLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiB0LmludFZhbHVlLCByLm9uZW9mcyAmJiAobi52YWx1ZSA9IFwiaW50VmFsdWVcIikpLCB0LmRvdWJsZVZhbHVlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImRvdWJsZVZhbHVlXCIpICYmIChuLmRvdWJsZVZhbHVlID0gci5qc29uICYmICFpc0Zpbml0ZSh0LmRvdWJsZVZhbHVlKSA/IFN0cmluZyh0LmRvdWJsZVZhbHVlKSA6IHQuZG91YmxlVmFsdWUsIHIub25lb2ZzICYmIChuLnZhbHVlID0gXCJkb3VibGVWYWx1ZVwiKSksIHQuYXJyYXlWYWx1ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhcnJheVZhbHVlXCIpICYmIChuLmFycmF5VmFsdWUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlLnRvT2JqZWN0KHQuYXJyYXlWYWx1ZSwgciksIHIub25lb2ZzICYmIChuLnZhbHVlID0gXCJhcnJheVZhbHVlXCIpKSwgdC5rdmxpc3RWYWx1ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJrdmxpc3RWYWx1ZVwiKSAmJiAobi5rdmxpc3RWYWx1ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdC50b09iamVjdCh0Lmt2bGlzdFZhbHVlLCByKSwgci5vbmVvZnMgJiYgKG4udmFsdWUgPSBcImt2bGlzdFZhbHVlXCIpKSwgdC5ieXRlc1ZhbHVlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImJ5dGVzVmFsdWVcIikgJiYgKG4uYnl0ZXNWYWx1ZSA9IHIuYnl0ZXMgPT09IFN0cmluZyA/ICR1dGlsLmJhc2U2NC5lbmNvZGUodC5ieXRlc1ZhbHVlLCAwLCB0LmJ5dGVzVmFsdWUubGVuZ3RoKSA6IHIuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5ieXRlc1ZhbHVlKSA6IHQuYnl0ZXNWYWx1ZSwgci5vbmVvZnMgJiYgKG4udmFsdWUgPSBcImJ5dGVzVmFsdWVcIikpLCBuO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgdCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLkFycmF5VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jdGlvbiBpKG8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlcyA9IFtdLCBvKVxuICAgICAgICAgICAgICBmb3IgKHZhciBlID0gT2JqZWN0LmtleXMobyksIHQgPSAwOyB0IDwgZS5sZW5ndGg7ICsrdClcbiAgICAgICAgICAgICAgICBvW2VbdF1dICE9IG51bGwgJiYgKHRoaXNbZVt0XV0gPSBvW2VbdF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkucHJvdG90eXBlLnZhbHVlcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgaWYgKHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS52YWx1ZXMgIT0gbnVsbCAmJiBlLnZhbHVlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS52YWx1ZXMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZW5jb2RlKGUudmFsdWVzW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZSgpOyBlLnBvcyA8IHI7ICkge1xuICAgICAgICAgICAgICB2YXIgbCA9IGUudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAobCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgbi52YWx1ZXMgJiYgbi52YWx1ZXMubGVuZ3RoIHx8IChuLnZhbHVlcyA9IFtdKSwgbi52YWx1ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnZhbHVlcyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZXNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUudmFsdWVzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS52YWx1ZXMubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLnZlcmlmeShlLnZhbHVlc1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZXMuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUpXG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKGUudmFsdWVzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLnZhbHVlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUudmFsdWVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC52YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLnZhbHVlcy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS52YWx1ZXNbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlLnZhbHVlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHQudmFsdWVzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZnJvbU9iamVjdChlLnZhbHVlc1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIudmFsdWVzID0gW10pLCBlLnZhbHVlcyAmJiBlLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci52YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLnZhbHVlcy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLnZhbHVlc1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLnRvT2JqZWN0KGUudmFsdWVzW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWVcIjtcbiAgICAgICAgICB9LCBpO1xuICAgICAgICB9KCksIGYuS2V5VmFsdWVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZXMgPSBbXSwgbylcbiAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IE9iamVjdC5rZXlzKG8pLCB0ID0gMDsgdCA8IGUubGVuZ3RoOyArK3QpXG4gICAgICAgICAgICAgICAgb1tlW3RdXSAhPSBudWxsICYmICh0aGlzW2VbdF1dID0gb1tlW3RdXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnByb3RvdHlwZS52YWx1ZXMgPSAkdXRpbC5lbXB0eUFycmF5LCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGlmICh0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUudmFsdWVzICE9IG51bGwgJiYgZS52YWx1ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUudmFsdWVzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShlLnZhbHVlc1tyXSwgdC51aW50MzIoXG4gICAgICAgICAgICAgICAgICAvKiBpZCAxLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdCgpOyBlLnBvcyA8IHI7ICkge1xuICAgICAgICAgICAgICB2YXIgbCA9IGUudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAobCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgbi52YWx1ZXMgJiYgbi52YWx1ZXMubGVuZ3RoIHx8IChuLnZhbHVlcyA9IFtdKSwgbi52YWx1ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnZhbHVlcyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZXNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUudmFsdWVzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS52YWx1ZXMubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShlLnZhbHVlc1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZXMuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdClcbiAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICB2YXIgdCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QoKTtcbiAgICAgICAgICAgIGlmIChlLnZhbHVlcykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS52YWx1ZXMpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QudmFsdWVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC52YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLnZhbHVlcy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS52YWx1ZXNbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QudmFsdWVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC52YWx1ZXNbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KGUudmFsdWVzW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHQgfHwgKHQgPSB7fSk7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgaWYgKCh0LmFycmF5cyB8fCB0LmRlZmF1bHRzKSAmJiAoci52YWx1ZXMgPSBbXSksIGUudmFsdWVzICYmIGUudmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByLnZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGUudmFsdWVzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgIHIudmFsdWVzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudG9PYmplY3QoZS52YWx1ZXNbbl0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0XCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLktleVZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAobylcbiAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IE9iamVjdC5rZXlzKG8pLCB0ID0gMDsgdCA8IGUubGVuZ3RoOyArK3QpXG4gICAgICAgICAgICAgICAgb1tlW3RdXSAhPSBudWxsICYmICh0aGlzW2VbdF1dID0gb1tlW3RdXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnByb3RvdHlwZS5rZXkgPSBudWxsLCBpLnByb3RvdHlwZS52YWx1ZSA9IG51bGwsIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS5rZXkgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImtleVwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICkuc3RyaW5nKGUua2V5KSwgZS52YWx1ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwidmFsdWVcIikgJiYgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZW5jb2RlKGUudmFsdWUsIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAxOFxuICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUoKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4ua2V5ID0gZS5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgIG4udmFsdWUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGUuc2tpcFR5cGUobCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gbmV3ICRSZWFkZXIoZSkpLCB0aGlzLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8IGUgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUua2V5ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImtleVwiKSAmJiAhJHV0aWwuaXNTdHJpbmcoZS5rZXkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJrZXk6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUudmFsdWUgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwidmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgdmFyIHQgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS52ZXJpZnkoZS52YWx1ZSk7XG4gICAgICAgICAgICAgIGlmICh0KVxuICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlLlwiICsgdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUpXG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChlLmtleSAhPSBudWxsICYmICh0LmtleSA9IFN0cmluZyhlLmtleSkpLCBlLnZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnZhbHVlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZhbHVlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQudmFsdWUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5mcm9tT2JqZWN0KGUudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHQgfHwgKHQgPSB7fSk7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgcmV0dXJuIHQuZGVmYXVsdHMgJiYgKHIua2V5ID0gXCJcIiwgci52YWx1ZSA9IG51bGwpLCBlLmtleSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJrZXlcIikgJiYgKHIua2V5ID0gZS5rZXkpLCBlLnZhbHVlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpICYmIChyLnZhbHVlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUudG9PYmplY3QoZS52YWx1ZSwgdCkpLCByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLkluc3RydW1lbnRhdGlvblNjb3BlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUubmFtZSA9IG51bGwsIGkucHJvdG90eXBlLnZlcnNpb24gPSBudWxsLCBpLnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG51bGwsIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgaWYgKHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS5uYW1lICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJuYW1lXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgKS5zdHJpbmcoZS5uYW1lKSwgZS52ZXJzaW9uICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJ2ZXJzaW9uXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAxOFxuICAgICAgICAgICAgKS5zdHJpbmcoZS52ZXJzaW9uKSwgZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgZS5hdHRyaWJ1dGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZW5jb2RlKGUuYXR0cmlidXRlc1tyXSwgdC51aW50MzIoXG4gICAgICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgICAgMjZcbiAgICAgICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICByZXR1cm4gZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA0LCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICAzMlxuICAgICAgICAgICAgKS51aW50MzIoZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50KSwgdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLm5hbWUgPSBlLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgbi52ZXJzaW9uID0gZS5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgIG4uYXR0cmlidXRlcyAmJiBuLmF0dHJpYnV0ZXMubGVuZ3RoIHx8IChuLmF0dHJpYnV0ZXMgPSBbXSksIG4uYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICBuLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLm5hbWUgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwibmFtZVwiKSAmJiAhJHV0aWwuaXNTdHJpbmcoZS5uYW1lKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwibmFtZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS52ZXJzaW9uICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInZlcnNpb25cIikgJiYgISR1dGlsLmlzU3RyaW5nKGUudmVyc2lvbikpXG4gICAgICAgICAgICAgIHJldHVybiBcInZlcnNpb246IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUuYXR0cmlidXRlcyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkoZS5hdHRyaWJ1dGVzW3RdKTtcbiAgICAgICAgICAgICAgICBpZiAocilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikgJiYgISR1dGlsLmlzSW50ZWdlcihlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpID8gXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50OiBpbnRlZ2VyIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUpXG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUoKTtcbiAgICAgICAgICAgIGlmIChlLm5hbWUgIT0gbnVsbCAmJiAodC5uYW1lID0gU3RyaW5nKGUubmFtZSkpLCBlLnZlcnNpb24gIT0gbnVsbCAmJiAodC52ZXJzaW9uID0gU3RyaW5nKGUudmVyc2lvbikpLCBlLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuYXR0cmlidXRlc1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmF0dHJpYnV0ZXM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LmF0dHJpYnV0ZXNbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KGUuYXR0cmlidXRlc1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiAodC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID4+PiAwKSwgdDtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgdCB8fCAodCA9IHt9KTtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAoKHQuYXJyYXlzIHx8IHQuZGVmYXVsdHMpICYmIChyLmF0dHJpYnV0ZXMgPSBbXSksIHQuZGVmYXVsdHMgJiYgKHIubmFtZSA9IFwiXCIsIHIudmVyc2lvbiA9IFwiXCIsIHIuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IDApLCBlLm5hbWUgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwibmFtZVwiKSAmJiAoci5uYW1lID0gZS5uYW1lKSwgZS52ZXJzaW9uICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInZlcnNpb25cIikgJiYgKHIudmVyc2lvbiA9IGUudmVyc2lvbiksIGUuYXR0cmlidXRlcyAmJiBlLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGUuYXR0cmlidXRlcy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLmF0dHJpYnV0ZXNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdChlLmF0dHJpYnV0ZXNbbl0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpICYmIChyLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpLCByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmO1xuICAgICAgfSgpLCBjO1xuICAgIH0oKSwgdS5yZXNvdXJjZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGMgPSB7fTtcbiAgICAgIHJldHVybiBjLnYxID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmID0ge307XG4gICAgICAgIHJldHVybiBmLlJlc291cmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBudWxsLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGlmICh0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUuYXR0cmlidXRlcyAhPSBudWxsICYmIGUuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShlLmF0dHJpYnV0ZXNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgMTZcbiAgICAgICAgICAgICkudWludDMyKGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCksIHQ7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoZSwgdCkubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9ICRSZWFkZXIuY3JlYXRlKGUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSB0ID09PSB2b2lkIDAgPyBlLmxlbiA6IGUucG9zICsgdCwgbiA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLmF0dHJpYnV0ZXMgJiYgbi5hdHRyaWJ1dGVzLmxlbmd0aCB8fCAobi5hdHRyaWJ1dGVzID0gW10pLCBuLmF0dHJpYnV0ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgbi5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImF0dHJpYnV0ZXNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShlLmF0dHJpYnV0ZXNbdF0pO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlcy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCkgPyBcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IGludGVnZXIgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgfSwgaS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UoKTtcbiAgICAgICAgICAgIGlmIChlLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UuYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuYXR0cmlidXRlcy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5hdHRyaWJ1dGVzW3JdICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5hdHRyaWJ1dGVzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChlLmF0dHJpYnV0ZXNbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgKHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA+Pj4gMCksIHQ7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHQgfHwgKHQgPSB7fSk7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgaWYgKCh0LmFycmF5cyB8fCB0LmRlZmF1bHRzKSAmJiAoci5hdHRyaWJ1dGVzID0gW10pLCB0LmRlZmF1bHRzICYmIChyLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSAwKSwgZS5hdHRyaWJ1dGVzICYmIGUuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgIHIuYXR0cmlidXRlc1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KGUuYXR0cmlidXRlc1tuXSwgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikgJiYgKHIuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCksIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZVwiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZjtcbiAgICAgIH0oKSwgYztcbiAgICB9KCksIHUudHJhY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjID0ge307XG4gICAgICByZXR1cm4gYy52MSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZiA9IHt9O1xuICAgICAgICByZXR1cm4gZi5UcmFjZXNEYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZVNwYW5zID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUucmVzb3VyY2VTcGFucyA9ICR1dGlsLmVtcHR5QXJyYXksIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgaWYgKHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS5yZXNvdXJjZVNwYW5zICE9IG51bGwgJiYgZS5yZXNvdXJjZVNwYW5zLmxlbmd0aClcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLnJlc291cmNlU3BhbnMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLmVuY29kZShlLnJlc291cmNlU3BhbnNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoZSwgdCkubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9ICRSZWFkZXIuY3JlYXRlKGUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSB0ID09PSB2b2lkIDAgPyBlLmxlbiA6IGUucG9zICsgdCwgbiA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGEoKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4ucmVzb3VyY2VTcGFucyAmJiBuLnJlc291cmNlU3BhbnMubGVuZ3RoIHx8IChuLnJlc291cmNlU3BhbnMgPSBbXSksIG4ucmVzb3VyY2VTcGFucy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnJlc291cmNlU3BhbnMgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwicmVzb3VyY2VTcGFuc1wiKSkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5yZXNvdXJjZVNwYW5zKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZVNwYW5zOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IGUucmVzb3VyY2VTcGFucy5sZW5ndGg7ICsrdCkge1xuICAgICAgICAgICAgICAgIHZhciByID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnZlcmlmeShlLnJlc291cmNlU3BhbnNbdF0pO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VTcGFucy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YSgpO1xuICAgICAgICAgICAgaWYgKGUucmVzb3VyY2VTcGFucykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5yZXNvdXJjZVNwYW5zKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhLnJlc291cmNlU3BhbnM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LnJlc291cmNlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLnJlc291cmNlU3BhbnMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUucmVzb3VyY2VTcGFuc1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YS5yZXNvdXJjZVNwYW5zOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5yZXNvdXJjZVNwYW5zW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLmZyb21PYmplY3QoZS5yZXNvdXJjZVNwYW5zW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHQgfHwgKHQgPSB7fSk7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgaWYgKCh0LmFycmF5cyB8fCB0LmRlZmF1bHRzKSAmJiAoci5yZXNvdXJjZVNwYW5zID0gW10pLCBlLnJlc291cmNlU3BhbnMgJiYgZS5yZXNvdXJjZVNwYW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICByLnJlc291cmNlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLnJlc291cmNlU3BhbnMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgci5yZXNvdXJjZVNwYW5zW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnRvT2JqZWN0KGUucmVzb3VyY2VTcGFuc1tuXSwgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICB9LCBpLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgIH0sIGkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIGUgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGFcIjtcbiAgICAgICAgICB9LCBpO1xuICAgICAgICB9KCksIGYuUmVzb3VyY2VTcGFucyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkobykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2NvcGVTcGFucyA9IFtdLCBvKVxuICAgICAgICAgICAgICBmb3IgKHZhciBlID0gT2JqZWN0LmtleXMobyksIHQgPSAwOyB0IDwgZS5sZW5ndGg7ICsrdClcbiAgICAgICAgICAgICAgICBvW2VbdF1dICE9IG51bGwgJiYgKHRoaXNbZVt0XV0gPSBvW2VbdF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkucHJvdG90eXBlLnJlc291cmNlID0gbnVsbCwgaS5wcm90b3R5cGUuc2NvcGVTcGFucyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLnNjaGVtYVVybCA9IG51bGwsIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgaWYgKHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS5yZXNvdXJjZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwicmVzb3VyY2VcIikgJiYgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS5lbmNvZGUoZS5yZXNvdXJjZSwgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCksIGUuc2NvcGVTcGFucyAhPSBudWxsICYmIGUuc2NvcGVTcGFucy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5zY29wZVNwYW5zLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucy5lbmNvZGUoZS5zY29wZVNwYW5zW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxOFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwic2NoZW1hVXJsXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAyNlxuICAgICAgICAgICAgKS5zdHJpbmcoZS5zY2hlbWFVcmwpLCB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLnJlc291cmNlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBuLnNjb3BlU3BhbnMgJiYgbi5zY29wZVNwYW5zLmxlbmd0aCB8fCAobi5zY29wZVNwYW5zID0gW10pLCBuLnNjb3BlU3BhbnMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMuZGVjb2RlKGUsIGUudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgIG4uc2NoZW1hVXJsID0gZS5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5yZXNvdXJjZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZVwiKSkge1xuICAgICAgICAgICAgICB2YXIgdCA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UudmVyaWZ5KGUucmVzb3VyY2UpO1xuICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZS5cIiArIHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5zY29wZVNwYW5zICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlU3BhbnNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuc2NvcGVTcGFucykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2NvcGVTcGFuczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLnNjb3BlU3BhbnMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICB2YXIgdCA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucy52ZXJpZnkoZS5zY29wZVNwYW5zW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlU3BhbnMuXCIgKyB0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpICYmICEkdXRpbC5pc1N0cmluZyhlLnNjaGVtYVVybCkgPyBcInNjaGVtYVVybDogc3RyaW5nIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucygpO1xuICAgICAgICAgICAgaWYgKGUucmVzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGUucmVzb3VyY2UgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnJlc291cmNlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmZyb21PYmplY3QoZS5yZXNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5zY29wZVNwYW5zKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLnNjb3BlU3BhbnMpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMuc2NvcGVTcGFuczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQuc2NvcGVTcGFucyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuc2NvcGVTcGFucy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5zY29wZVNwYW5zW3JdICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnNjb3BlU3BhbnM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LnNjb3BlU3BhbnNbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMuZnJvbU9iamVjdChlLnNjb3BlU3BhbnNbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiAodC5zY2hlbWFVcmwgPSBTdHJpbmcoZS5zY2hlbWFVcmwpKSwgdDtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgdCB8fCAodCA9IHt9KTtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAoKHQuYXJyYXlzIHx8IHQuZGVmYXVsdHMpICYmIChyLnNjb3BlU3BhbnMgPSBbXSksIHQuZGVmYXVsdHMgJiYgKHIucmVzb3VyY2UgPSBudWxsLCByLnNjaGVtYVVybCA9IFwiXCIpLCBlLnJlc291cmNlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlXCIpICYmIChyLnJlc291cmNlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS50b09iamVjdChlLnJlc291cmNlLCB0KSksIGUuc2NvcGVTcGFucyAmJiBlLnNjb3BlU3BhbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIuc2NvcGVTcGFucyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGUuc2NvcGVTcGFucy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLnNjb3BlU3BhbnNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMudG9PYmplY3QoZS5zY29wZVNwYW5zW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikgJiYgKHIuc2NoZW1hVXJsID0gZS5zY2hlbWFVcmwpLCByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFuc1wiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZi5TY29wZVNwYW5zID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zcGFucyA9IFtdLCBvKVxuICAgICAgICAgICAgICBmb3IgKHZhciBlID0gT2JqZWN0LmtleXMobyksIHQgPSAwOyB0IDwgZS5sZW5ndGg7ICsrdClcbiAgICAgICAgICAgICAgICBvW2VbdF1dICE9IG51bGwgJiYgKHRoaXNbZVt0XV0gPSBvW2VbdF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkucHJvdG90eXBlLnNjb3BlID0gbnVsbCwgaS5wcm90b3R5cGUuc3BhbnMgPSAkdXRpbC5lbXB0eUFycmF5LCBpLnByb3RvdHlwZS5zY2hlbWFVcmwgPSBudWxsLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGlmICh0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUuc2NvcGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInNjb3BlXCIpICYmICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmVuY29kZShlLnNjb3BlLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKSwgZS5zcGFucyAhPSBudWxsICYmIGUuc3BhbnMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuc3BhbnMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLmVuY29kZShlLnNwYW5zW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxOFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwic2NoZW1hVXJsXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAyNlxuICAgICAgICAgICAgKS5zdHJpbmcoZS5zY2hlbWFVcmwpLCB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLnNjb3BlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgbi5zcGFucyAmJiBuLnNwYW5zLmxlbmd0aCB8fCAobi5zcGFucyA9IFtdKSwgbi5zcGFucy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgbi5zY2hlbWFVcmwgPSBlLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnNjb3BlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlXCIpKSB7XG4gICAgICAgICAgICAgIHZhciB0ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUudmVyaWZ5KGUuc2NvcGUpO1xuICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzY29wZS5cIiArIHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5zcGFucyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzcGFuc1wiKSkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5zcGFucykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic3BhbnM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5zcGFucy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIHZhciB0ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLnZlcmlmeShlLnNwYW5zW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInNwYW5zLlwiICsgdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuc2NoZW1hVXJsICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSAmJiAhJHV0aWwuaXNTdHJpbmcoZS5zY2hlbWFVcmwpID8gXCJzY2hlbWFVcmw6IHN0cmluZyBleHBlY3RlZFwiIDogbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucylcbiAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICB2YXIgdCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMoKTtcbiAgICAgICAgICAgIGlmIChlLnNjb3BlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnNjb3BlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucy5zY29wZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LnNjb3BlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUuZnJvbU9iamVjdChlLnNjb3BlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnNwYW5zKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLnNwYW5zKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zLnNwYW5zOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5zcGFucyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuc3BhbnMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuc3BhbnNbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMuc3BhbnM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LnNwYW5zW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLmZyb21PYmplY3QoZS5zcGFuc1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmICh0LnNjaGVtYVVybCA9IFN0cmluZyhlLnNjaGVtYVVybCkpLCB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIuc3BhbnMgPSBbXSksIHQuZGVmYXVsdHMgJiYgKHIuc2NvcGUgPSBudWxsLCByLnNjaGVtYVVybCA9IFwiXCIpLCBlLnNjb3BlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlXCIpICYmIChyLnNjb3BlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUudG9PYmplY3QoZS5zY29wZSwgdCkpLCBlLnNwYW5zICYmIGUuc3BhbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIuc3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLnNwYW5zLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgIHIuc3BhbnNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4udG9PYmplY3QoZS5zcGFuc1tuXSwgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpICYmIChyLnNjaGVtYVVybCA9IGUuc2NoZW1hVXJsKSwgcjtcbiAgICAgICAgICB9LCBpLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgIH0sIGkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIGUgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnNcIjtcbiAgICAgICAgICB9LCBpO1xuICAgICAgICB9KCksIGYuU3BhbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkobykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcyA9IFtdLCB0aGlzLmV2ZW50cyA9IFtdLCB0aGlzLmxpbmtzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUudHJhY2VJZCA9IG51bGwsIGkucHJvdG90eXBlLnNwYW5JZCA9IG51bGwsIGkucHJvdG90eXBlLnRyYWNlU3RhdGUgPSBudWxsLCBpLnByb3RvdHlwZS5wYXJlbnRTcGFuSWQgPSBudWxsLCBpLnByb3RvdHlwZS5uYW1lID0gbnVsbCwgaS5wcm90b3R5cGUua2luZCA9IG51bGwsIGkucHJvdG90eXBlLnN0YXJ0VGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUuZW5kVGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBudWxsLCBpLnByb3RvdHlwZS5ldmVudHMgPSAkdXRpbC5lbXB0eUFycmF5LCBpLnByb3RvdHlwZS5kcm9wcGVkRXZlbnRzQ291bnQgPSBudWxsLCBpLnByb3RvdHlwZS5saW5rcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLmRyb3BwZWRMaW5rc0NvdW50ID0gbnVsbCwgaS5wcm90b3R5cGUuc3RhdHVzID0gbnVsbCwgaS5jcmVhdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBpZiAodCB8fCAodCA9ICRXcml0ZXIuY3JlYXRlKCkpLCBlLnRyYWNlSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInRyYWNlSWRcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICApLmJ5dGVzKGUudHJhY2VJZCksIGUuc3BhbklkICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJzcGFuSWRcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDE4XG4gICAgICAgICAgICApLmJ5dGVzKGUuc3BhbklkKSwgZS50cmFjZVN0YXRlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJ0cmFjZVN0YXRlXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAyNlxuICAgICAgICAgICAgKS5zdHJpbmcoZS50cmFjZVN0YXRlKSwgZS5wYXJlbnRTcGFuSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInBhcmVudFNwYW5JZFwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgNCwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMzRcbiAgICAgICAgICAgICkuYnl0ZXMoZS5wYXJlbnRTcGFuSWQpLCBlLm5hbWUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcIm5hbWVcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDUsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDQyXG4gICAgICAgICAgICApLnN0cmluZyhlLm5hbWUpLCBlLmtpbmQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImtpbmRcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDYsIHdpcmVUeXBlIDAgPSovXG4gICAgICAgICAgICAgIDQ4XG4gICAgICAgICAgICApLmludDMyKGUua2luZCksIGUuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA3LCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICA1N1xuICAgICAgICAgICAgKS5maXhlZDY0KGUuc3RhcnRUaW1lVW5peE5hbm8pLCBlLmVuZFRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiZW5kVGltZVVuaXhOYW5vXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA4LCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICA2NVxuICAgICAgICAgICAgKS5maXhlZDY0KGUuZW5kVGltZVVuaXhOYW5vKSwgZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgZS5hdHRyaWJ1dGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZW5jb2RlKGUuYXR0cmlidXRlc1tyXSwgdC51aW50MzIoXG4gICAgICAgICAgICAgICAgICAvKiBpZCA5LCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgICAgNzRcbiAgICAgICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICBpZiAoZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxMCwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgODBcbiAgICAgICAgICAgICkudWludDMyKGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCksIGUuZXZlbnRzICE9IG51bGwgJiYgZS5ldmVudHMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuZXZlbnRzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudC5lbmNvZGUoZS5ldmVudHNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMTEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICA5MFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIGlmIChlLmRyb3BwZWRFdmVudHNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiZHJvcHBlZEV2ZW50c0NvdW50XCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxMiwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgOTZcbiAgICAgICAgICAgICkudWludDMyKGUuZHJvcHBlZEV2ZW50c0NvdW50KSwgZS5saW5rcyAhPSBudWxsICYmIGUubGlua3MubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUubGlua3MubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsuZW5jb2RlKGUubGlua3Nbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMTMsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxMDZcbiAgICAgICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICByZXR1cm4gZS5kcm9wcGVkTGlua3NDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiZHJvcHBlZExpbmtzQ291bnRcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDE0LCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICAxMTJcbiAgICAgICAgICAgICkudWludDMyKGUuZHJvcHBlZExpbmtzQ291bnQpLCBlLnN0YXR1cyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwic3RhdHVzXCIpICYmICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLmVuY29kZShlLnN0YXR1cywgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDE1LCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAxMjJcbiAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKSwgdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhbigpOyBlLnBvcyA8IHI7ICkge1xuICAgICAgICAgICAgICB2YXIgbCA9IGUudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAobCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgbi50cmFjZUlkID0gZS5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgbi5zcGFuSWQgPSBlLmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICBuLnRyYWNlU3RhdGUgPSBlLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgbi5wYXJlbnRTcGFuSWQgPSBlLmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICBuLm5hbWUgPSBlLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNjoge1xuICAgICAgICAgICAgICAgICAgbi5raW5kID0gZS5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgbi5zdGFydFRpbWVVbml4TmFubyA9IGUuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgODoge1xuICAgICAgICAgICAgICAgICAgbi5lbmRUaW1lVW5peE5hbm8gPSBlLmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDk6IHtcbiAgICAgICAgICAgICAgICAgIG4uYXR0cmlidXRlcyAmJiBuLmF0dHJpYnV0ZXMubGVuZ3RoIHx8IChuLmF0dHJpYnV0ZXMgPSBbXSksIG4uYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAxMDoge1xuICAgICAgICAgICAgICAgICAgbi5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDExOiB7XG4gICAgICAgICAgICAgICAgICBuLmV2ZW50cyAmJiBuLmV2ZW50cy5sZW5ndGggfHwgKG4uZXZlbnRzID0gW10pLCBuLmV2ZW50cy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudC5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMTI6IHtcbiAgICAgICAgICAgICAgICAgIG4uZHJvcHBlZEV2ZW50c0NvdW50ID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDEzOiB7XG4gICAgICAgICAgICAgICAgICBuLmxpbmtzICYmIG4ubGlua3MubGVuZ3RoIHx8IChuLmxpbmtzID0gW10pLCBuLmxpbmtzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsuZGVjb2RlKGUsIGUudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDE0OiB7XG4gICAgICAgICAgICAgICAgICBuLmRyb3BwZWRMaW5rc0NvdW50ID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDE1OiB7XG4gICAgICAgICAgICAgICAgICBuLnN0YXR1cyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS50cmFjZUlkICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInRyYWNlSWRcIikgJiYgIShlLnRyYWNlSWQgJiYgdHlwZW9mIGUudHJhY2VJZC5sZW5ndGggPT0gXCJudW1iZXJcIiB8fCAkdXRpbC5pc1N0cmluZyhlLnRyYWNlSWQpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwidHJhY2VJZDogYnVmZmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5zcGFuSWQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic3BhbklkXCIpICYmICEoZS5zcGFuSWQgJiYgdHlwZW9mIGUuc3BhbklkLmxlbmd0aCA9PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKGUuc3BhbklkKSkpXG4gICAgICAgICAgICAgIHJldHVybiBcInNwYW5JZDogYnVmZmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS50cmFjZVN0YXRlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInRyYWNlU3RhdGVcIikgJiYgISR1dGlsLmlzU3RyaW5nKGUudHJhY2VTdGF0ZSkpXG4gICAgICAgICAgICAgIHJldHVybiBcInRyYWNlU3RhdGU6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUucGFyZW50U3BhbklkICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInBhcmVudFNwYW5JZFwiKSAmJiAhKGUucGFyZW50U3BhbklkICYmIHR5cGVvZiBlLnBhcmVudFNwYW5JZC5sZW5ndGggPT0gXCJudW1iZXJcIiB8fCAkdXRpbC5pc1N0cmluZyhlLnBhcmVudFNwYW5JZCkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJwYXJlbnRTcGFuSWQ6IGJ1ZmZlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUubmFtZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpICYmICEkdXRpbC5pc1N0cmluZyhlLm5hbWUpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJuYW1lOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLmtpbmQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwia2luZFwiKSlcbiAgICAgICAgICAgICAgc3dpdGNoIChlLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwia2luZDogZW51bSB2YWx1ZSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5zdGFydFRpbWVVbml4TmFubykgJiYgIShlLnN0YXJ0VGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcihlLnN0YXJ0VGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKGUuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJzdGFydFRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5lbmRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiZW5kVGltZVVuaXhOYW5vXCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5lbmRUaW1lVW5peE5hbm8pICYmICEoZS5lbmRUaW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKGUuZW5kVGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKGUuZW5kVGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwiZW5kVGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiYXR0cmlidXRlc1wiKSkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IGUuYXR0cmlidXRlcy5sZW5ndGg7ICsrdCkge1xuICAgICAgICAgICAgICAgIHZhciByID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5KGUuYXR0cmlidXRlc1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzLlwiICsgcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50KSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUuZXZlbnRzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImV2ZW50c1wiKSkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5ldmVudHMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImV2ZW50czogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCBlLmV2ZW50cy5sZW5ndGg7ICsrdCkge1xuICAgICAgICAgICAgICAgIHZhciByID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50LnZlcmlmeShlLmV2ZW50c1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJldmVudHMuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5kcm9wcGVkRXZlbnRzQ291bnQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiZHJvcHBlZEV2ZW50c0NvdW50XCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5kcm9wcGVkRXZlbnRzQ291bnQpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJkcm9wcGVkRXZlbnRzQ291bnQ6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLmxpbmtzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImxpbmtzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmxpbmtzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJsaW5rczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCBlLmxpbmtzLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluay52ZXJpZnkoZS5saW5rc1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJsaW5rcy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmRyb3BwZWRMaW5rc0NvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRMaW5rc0NvdW50XCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5kcm9wcGVkTGlua3NDb3VudCkpXG4gICAgICAgICAgICAgIHJldHVybiBcImRyb3BwZWRMaW5rc0NvdW50OiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5zdGF0dXMgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic3RhdHVzXCIpKSB7XG4gICAgICAgICAgICAgIHZhciByID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXMudmVyaWZ5KGUuc3RhdHVzKTtcbiAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic3RhdHVzLlwiICsgcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhbigpO1xuICAgICAgICAgICAgc3dpdGNoIChlLnRyYWNlSWQgIT0gbnVsbCAmJiAodHlwZW9mIGUudHJhY2VJZCA9PSBcInN0cmluZ1wiID8gJHV0aWwuYmFzZTY0LmRlY29kZShlLnRyYWNlSWQsIHQudHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKGUudHJhY2VJZCkpLCAwKSA6IGUudHJhY2VJZC5sZW5ndGggPj0gMCAmJiAodC50cmFjZUlkID0gZS50cmFjZUlkKSksIGUuc3BhbklkICE9IG51bGwgJiYgKHR5cGVvZiBlLnNwYW5JZCA9PSBcInN0cmluZ1wiID8gJHV0aWwuYmFzZTY0LmRlY29kZShlLnNwYW5JZCwgdC5zcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIoJHV0aWwuYmFzZTY0Lmxlbmd0aChlLnNwYW5JZCkpLCAwKSA6IGUuc3BhbklkLmxlbmd0aCA+PSAwICYmICh0LnNwYW5JZCA9IGUuc3BhbklkKSksIGUudHJhY2VTdGF0ZSAhPSBudWxsICYmICh0LnRyYWNlU3RhdGUgPSBTdHJpbmcoZS50cmFjZVN0YXRlKSksIGUucGFyZW50U3BhbklkICE9IG51bGwgJiYgKHR5cGVvZiBlLnBhcmVudFNwYW5JZCA9PSBcInN0cmluZ1wiID8gJHV0aWwuYmFzZTY0LmRlY29kZShlLnBhcmVudFNwYW5JZCwgdC5wYXJlbnRTcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIoJHV0aWwuYmFzZTY0Lmxlbmd0aChlLnBhcmVudFNwYW5JZCkpLCAwKSA6IGUucGFyZW50U3BhbklkLmxlbmd0aCA+PSAwICYmICh0LnBhcmVudFNwYW5JZCA9IGUucGFyZW50U3BhbklkKSksIGUubmFtZSAhPSBudWxsICYmICh0Lm5hbWUgPSBTdHJpbmcoZS5uYW1lKSksIGUua2luZCkge1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5raW5kID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgIHQua2luZCA9IGUua2luZDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNQQU5fS0lORF9VTlNQRUNJRklFRFwiOlxuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgdC5raW5kID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNQQU5fS0lORF9JTlRFUk5BTFwiOlxuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdC5raW5kID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNQQU5fS0lORF9TRVJWRVJcIjpcbiAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHQua2luZCA9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTUEFOX0tJTkRfQ0xJRU5UXCI6XG4gICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICB0LmtpbmQgPSAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU1BBTl9LSU5EX1BST0RVQ0VSXCI6XG4gICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICB0LmtpbmQgPSA0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU1BBTl9LSU5EX0NPTlNVTUVSXCI6XG4gICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICB0LmtpbmQgPSA1O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/ICh0LnN0YXJ0VGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUoZS5zdGFydFRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgZS5zdGFydFRpbWVVbml4TmFubyA9PSBcInN0cmluZ1wiID8gdC5zdGFydFRpbWVVbml4TmFubyA9IHBhcnNlSW50KGUuc3RhcnRUaW1lVW5peE5hbm8sIDEwKSA6IHR5cGVvZiBlLnN0YXJ0VGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyB0LnN0YXJ0VGltZVVuaXhOYW5vID0gZS5zdGFydFRpbWVVbml4TmFubyA6IHR5cGVvZiBlLnN0YXJ0VGltZVVuaXhOYW5vID09IFwib2JqZWN0XCIgJiYgKHQuc3RhcnRUaW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMoZS5zdGFydFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIGUuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCBlLmVuZFRpbWVVbml4TmFubyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHQuZW5kVGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUoZS5lbmRUaW1lVW5peE5hbm8pKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIGUuZW5kVGltZVVuaXhOYW5vID09IFwic3RyaW5nXCIgPyB0LmVuZFRpbWVVbml4TmFubyA9IHBhcnNlSW50KGUuZW5kVGltZVVuaXhOYW5vLCAxMCkgOiB0eXBlb2YgZS5lbmRUaW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHQuZW5kVGltZVVuaXhOYW5vID0gZS5lbmRUaW1lVW5peE5hbm8gOiB0eXBlb2YgZS5lbmRUaW1lVW5peE5hbm8gPT0gXCJvYmplY3RcIiAmJiAodC5lbmRUaW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMoZS5lbmRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBlLmVuZFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpKSksIGUuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuYXR0cmlidXRlc1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5hdHRyaWJ1dGVzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChlLmF0dHJpYnV0ZXNbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgKHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA+Pj4gMCksIGUuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmV2ZW50cykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5ldmVudHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LmV2ZW50cyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuZXZlbnRzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLmV2ZW50c1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5ldmVudHM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LmV2ZW50c1tyXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudC5mcm9tT2JqZWN0KGUuZXZlbnRzW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuZHJvcHBlZEV2ZW50c0NvdW50ICE9IG51bGwgJiYgKHQuZHJvcHBlZEV2ZW50c0NvdW50ID0gZS5kcm9wcGVkRXZlbnRzQ291bnQgPj4+IDApLCBlLmxpbmtzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmxpbmtzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLmxpbmtzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5saW5rcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUubGlua3MubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUubGlua3Nbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4ubGlua3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LmxpbmtzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsuZnJvbU9iamVjdChlLmxpbmtzW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuZHJvcHBlZExpbmtzQ291bnQgIT0gbnVsbCAmJiAodC5kcm9wcGVkTGlua3NDb3VudCA9IGUuZHJvcHBlZExpbmtzQ291bnQgPj4+IDApLCBlLnN0YXR1cyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5zdGF0dXMgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLnN0YXR1czogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LnN0YXR1cyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLmZyb21PYmplY3QoZS5zdGF0dXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHQgfHwgKHQgPSB7fSk7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgaWYgKCh0LmFycmF5cyB8fCB0LmRlZmF1bHRzKSAmJiAoci5hdHRyaWJ1dGVzID0gW10sIHIuZXZlbnRzID0gW10sIHIubGlua3MgPSBbXSksIHQuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgaWYgKHQuYnl0ZXMgPT09IFN0cmluZyA/IHIudHJhY2VJZCA9IFwiXCIgOiAoci50cmFjZUlkID0gW10sIHQuYnl0ZXMgIT09IEFycmF5ICYmIChyLnRyYWNlSWQgPSAkdXRpbC5uZXdCdWZmZXIoci50cmFjZUlkKSkpLCB0LmJ5dGVzID09PSBTdHJpbmcgPyByLnNwYW5JZCA9IFwiXCIgOiAoci5zcGFuSWQgPSBbXSwgdC5ieXRlcyAhPT0gQXJyYXkgJiYgKHIuc3BhbklkID0gJHV0aWwubmV3QnVmZmVyKHIuc3BhbklkKSkpLCByLnRyYWNlU3RhdGUgPSBcIlwiLCB0LmJ5dGVzID09PSBTdHJpbmcgPyByLnBhcmVudFNwYW5JZCA9IFwiXCIgOiAoci5wYXJlbnRTcGFuSWQgPSBbXSwgdC5ieXRlcyAhPT0gQXJyYXkgJiYgKHIucGFyZW50U3BhbklkID0gJHV0aWwubmV3QnVmZmVyKHIucGFyZW50U3BhbklkKSkpLCByLm5hbWUgPSBcIlwiLCByLmtpbmQgPSB0LmVudW1zID09PSBTdHJpbmcgPyBcIlNQQU5fS0lORF9VTlNQRUNJRklFRFwiIDogMCwgJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgITEpO1xuICAgICAgICAgICAgICAgIHIuc3RhcnRUaW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBuLnRvU3RyaW5nKCkgOiB0LmxvbmdzID09PSBOdW1iZXIgPyBuLnRvTnVtYmVyKCkgOiBuO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByLnN0YXJ0VGltZVVuaXhOYW5vID0gdC5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgITEpO1xuICAgICAgICAgICAgICAgIHIuZW5kVGltZVVuaXhOYW5vID0gdC5sb25ncyA9PT0gU3RyaW5nID8gbi50b1N0cmluZygpIDogdC5sb25ncyA9PT0gTnVtYmVyID8gbi50b051bWJlcigpIDogbjtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgci5lbmRUaW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgIHIuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IDAsIHIuZHJvcHBlZEV2ZW50c0NvdW50ID0gMCwgci5kcm9wcGVkTGlua3NDb3VudCA9IDAsIHIuc3RhdHVzID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnRyYWNlSWQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSAmJiAoci50cmFjZUlkID0gdC5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZShlLnRyYWNlSWQsIDAsIGUudHJhY2VJZC5sZW5ndGgpIDogdC5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLnRyYWNlSWQpIDogZS50cmFjZUlkKSwgZS5zcGFuSWQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic3BhbklkXCIpICYmIChyLnNwYW5JZCA9IHQuYnl0ZXMgPT09IFN0cmluZyA/ICR1dGlsLmJhc2U2NC5lbmNvZGUoZS5zcGFuSWQsIDAsIGUuc3BhbklkLmxlbmd0aCkgOiB0LmJ5dGVzID09PSBBcnJheSA/IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuc3BhbklkKSA6IGUuc3BhbklkKSwgZS50cmFjZVN0YXRlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInRyYWNlU3RhdGVcIikgJiYgKHIudHJhY2VTdGF0ZSA9IGUudHJhY2VTdGF0ZSksIGUucGFyZW50U3BhbklkICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInBhcmVudFNwYW5JZFwiKSAmJiAoci5wYXJlbnRTcGFuSWQgPSB0LmJ5dGVzID09PSBTdHJpbmcgPyAkdXRpbC5iYXNlNjQuZW5jb2RlKGUucGFyZW50U3BhbklkLCAwLCBlLnBhcmVudFNwYW5JZC5sZW5ndGgpIDogdC5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLnBhcmVudFNwYW5JZCkgOiBlLnBhcmVudFNwYW5JZCksIGUubmFtZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpICYmIChyLm5hbWUgPSBlLm5hbWUpLCBlLmtpbmQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwia2luZFwiKSAmJiAoci5raW5kID0gdC5lbnVtcyA9PT0gU3RyaW5nID8gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLlNwYW5LaW5kW2Uua2luZF0gPT09IHZvaWQgMCA/IGUua2luZCA6ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5TcGFuS2luZFtlLmtpbmRdIDogZS5raW5kKSwgZS5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSAmJiAodHlwZW9mIGUuc3RhcnRUaW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHIuc3RhcnRUaW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcoZS5zdGFydFRpbWVVbml4TmFubykgOiBlLnN0YXJ0VGltZVVuaXhOYW5vIDogci5zdGFydFRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZS5zdGFydFRpbWVVbml4TmFubykgOiB0LmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMoZS5zdGFydFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIGUuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IGUuc3RhcnRUaW1lVW5peE5hbm8pLCBlLmVuZFRpbWVVbml4TmFubyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJlbmRUaW1lVW5peE5hbm9cIikgJiYgKHR5cGVvZiBlLmVuZFRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gci5lbmRUaW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcoZS5lbmRUaW1lVW5peE5hbm8pIDogZS5lbmRUaW1lVW5peE5hbm8gOiByLmVuZFRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZS5lbmRUaW1lVW5peE5hbm8pIDogdC5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKGUuZW5kVGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgZS5lbmRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IGUuZW5kVGltZVVuaXhOYW5vKSwgZS5hdHRyaWJ1dGVzICYmIGUuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytsKVxuICAgICAgICAgICAgICAgIHIuYXR0cmlidXRlc1tsXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KGUuYXR0cmlidXRlc1tsXSwgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikgJiYgKHIuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCksIGUuZXZlbnRzICYmIGUuZXZlbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByLmV2ZW50cyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGUuZXZlbnRzLmxlbmd0aDsgKytsKVxuICAgICAgICAgICAgICAgIHIuZXZlbnRzW2xdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50LnRvT2JqZWN0KGUuZXZlbnRzW2xdLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmRyb3BwZWRFdmVudHNDb3VudCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkRXZlbnRzQ291bnRcIikgJiYgKHIuZHJvcHBlZEV2ZW50c0NvdW50ID0gZS5kcm9wcGVkRXZlbnRzQ291bnQpLCBlLmxpbmtzICYmIGUubGlua3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIubGlua3MgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBlLmxpbmtzLmxlbmd0aDsgKytsKVxuICAgICAgICAgICAgICAgIHIubGlua3NbbF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluay50b09iamVjdChlLmxpbmtzW2xdLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmRyb3BwZWRMaW5rc0NvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRMaW5rc0NvdW50XCIpICYmIChyLmRyb3BwZWRMaW5rc0NvdW50ID0gZS5kcm9wcGVkTGlua3NDb3VudCksIGUuc3RhdHVzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInN0YXR1c1wiKSAmJiAoci5zdGF0dXMgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1cy50b09iamVjdChlLnN0YXR1cywgdCkpLCByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblwiO1xuICAgICAgICAgIH0sIGkuU3BhbktpbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBvID0ge30sIGUgPSBPYmplY3QuY3JlYXRlKG8pO1xuICAgICAgICAgICAgcmV0dXJuIGVbb1swXSA9IFwiU1BBTl9LSU5EX1VOU1BFQ0lGSUVEXCJdID0gMCwgZVtvWzFdID0gXCJTUEFOX0tJTkRfSU5URVJOQUxcIl0gPSAxLCBlW29bMl0gPSBcIlNQQU5fS0lORF9TRVJWRVJcIl0gPSAyLCBlW29bM10gPSBcIlNQQU5fS0lORF9DTElFTlRcIl0gPSAzLCBlW29bNF0gPSBcIlNQQU5fS0lORF9QUk9EVUNFUlwiXSA9IDQsIGVbb1s1XSA9IFwiU1BBTl9LSU5EX0NPTlNVTUVSXCJdID0gNSwgZTtcbiAgICAgICAgICB9KCksIGkuRXZlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIG8oZSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVzID0gW10sIGUpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IE9iamVjdC5rZXlzKGUpLCByID0gMDsgciA8IHQubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgICBlW3Rbcl1dICE9IG51bGwgJiYgKHRoaXNbdFtyXV0gPSBlW3Rbcl1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvLnByb3RvdHlwZS50aW1lVW5peE5hbm8gPSBudWxsLCBvLnByb3RvdHlwZS5uYW1lID0gbnVsbCwgby5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXksIG8ucHJvdG90eXBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBudWxsLCBvLmNyZWF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBvKHQpO1xuICAgICAgICAgICAgfSwgby5lbmNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIGlmIChyIHx8IChyID0gJFdyaXRlci5jcmVhdGUoKSksIHQudGltZVVuaXhOYW5vICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJ0aW1lVW5peE5hbm9cIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgICA5XG4gICAgICAgICAgICAgICkuZml4ZWQ2NCh0LnRpbWVVbml4TmFubyksIHQubmFtZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwibmFtZVwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgIDE4XG4gICAgICAgICAgICAgICkuc3RyaW5nKHQubmFtZSksIHQuYXR0cmlidXRlcyAhPSBudWxsICYmIHQuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUodC5hdHRyaWJ1dGVzW25dLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAgICAgLyogaWQgMywgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgICAgMjZcbiAgICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCA0LCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICAgIDMyXG4gICAgICAgICAgICAgICkudWludDMyKHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCksIHI7XG4gICAgICAgICAgICB9LCBvLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHQsIHIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgfSwgby5kZWNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gJFJlYWRlci5jcmVhdGUodCkpO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gciA9PT0gdm9pZCAwID8gdC5sZW4gOiB0LnBvcyArIHIsIGwgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50KCk7IHQucG9zIDwgbjsgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSB0LnVpbnQzMigpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocCA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgIGwudGltZVVuaXhOYW5vID0gdC5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgIGwubmFtZSA9IHQuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgIGwuYXR0cmlidXRlcyAmJiBsLmF0dHJpYnV0ZXMubGVuZ3RoIHx8IChsLmF0dHJpYnV0ZXMgPSBbXSksIGwuYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZSh0LCB0LnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICAgIGwuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdC5za2lwVHlwZShwICYgNyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSBuZXcgJFJlYWRlcih0KSksIHRoaXMuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgfSwgby52ZXJpZnkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGlmICh0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikgJiYgISR1dGlsLmlzSW50ZWdlcih0LnRpbWVVbml4TmFubykgJiYgISh0LnRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIodC50aW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIodC50aW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGlmICh0Lm5hbWUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwibmFtZVwiKSAmJiAhJHV0aWwuaXNTdHJpbmcodC5uYW1lKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJuYW1lOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgaWYgKHQuYXR0cmlidXRlcyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbiA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeSh0LmF0dHJpYnV0ZXNbcl0pO1xuICAgICAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikgJiYgISR1dGlsLmlzSW50ZWdlcih0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpID8gXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50OiBpbnRlZ2VyIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgICAgfSwgby5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudClcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgdmFyIHIgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50KCk7XG4gICAgICAgICAgICAgIGlmICh0LnRpbWVVbml4TmFubyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIudGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC50aW1lVW5peE5hbm8pKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIHQudGltZVVuaXhOYW5vID09IFwic3RyaW5nXCIgPyByLnRpbWVVbml4TmFubyA9IHBhcnNlSW50KHQudGltZVVuaXhOYW5vLCAxMCkgOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHIudGltZVVuaXhOYW5vID0gdC50aW1lVW5peE5hbm8gOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJvYmplY3RcIiAmJiAoci50aW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHModC50aW1lVW5peE5hbm8ubG93ID4+PiAwLCB0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQubmFtZSAhPSBudWxsICYmIChyLm5hbWUgPSBTdHJpbmcodC5uYW1lKSksIHQuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudC5hdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICByLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0LmF0dHJpYnV0ZXNbbl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudC5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICByLmF0dHJpYnV0ZXNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KHQuYXR0cmlidXRlc1tuXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiAoci5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID4+PiAwKSwgcjtcbiAgICAgICAgICAgIH0sIG8udG9PYmplY3QgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICAgIGlmICgoci5hcnJheXMgfHwgci5kZWZhdWx0cykgJiYgKG4uYXR0cmlidXRlcyA9IFtdKSwgci5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICAgIG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gbC50b1N0cmluZygpIDogci5sb25ncyA9PT0gTnVtYmVyID8gbC50b051bWJlcigpIDogbDtcbiAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgIG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgIG4ubmFtZSA9IFwiXCIsIG4uZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHQudGltZVVuaXhOYW5vICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSAmJiAodHlwZW9mIHQudGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyh0LnRpbWVVbml4TmFubykgOiB0LnRpbWVVbml4TmFubyA6IG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0LnRpbWVVbml4TmFubykgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC50aW1lVW5peE5hbm8ubG93ID4+PiAwLCB0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogdC50aW1lVW5peE5hbm8pLCB0Lm5hbWUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwibmFtZVwiKSAmJiAobi5uYW1lID0gdC5uYW1lKSwgdC5hdHRyaWJ1dGVzICYmIHQuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBuLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrcClcbiAgICAgICAgICAgICAgICAgIG4uYXR0cmlidXRlc1twXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KHQuYXR0cmlidXRlc1twXSwgcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpICYmIChuLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSB0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpLCBuO1xuICAgICAgICAgICAgfSwgby5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgfSwgby5nZXRUeXBlVXJsID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCA9PT0gdm9pZCAwICYmICh0ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCB0ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50XCI7XG4gICAgICAgICAgICB9LCBvO1xuICAgICAgICAgIH0oKSwgaS5MaW5rID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBvKGUpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcyA9IFtdLCBlKVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhlKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICAgZVt0W3JdXSAhPSBudWxsICYmICh0aGlzW3Rbcl1dID0gZVt0W3JdXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gby5wcm90b3R5cGUudHJhY2VJZCA9IG51bGwsIG8ucHJvdG90eXBlLnNwYW5JZCA9IG51bGwsIG8ucHJvdG90eXBlLnRyYWNlU3RhdGUgPSBudWxsLCBvLnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheSwgby5wcm90b3R5cGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG51bGwsIG8uY3JlYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IG8odCk7XG4gICAgICAgICAgICB9LCBvLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgaWYgKHIgfHwgKHIgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgdC50cmFjZUlkICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJ0cmFjZUlkXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICAgKS5ieXRlcyh0LnRyYWNlSWQpLCB0LnNwYW5JZCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwic3BhbklkXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgMThcbiAgICAgICAgICAgICAgKS5ieXRlcyh0LnNwYW5JZCksIHQudHJhY2VTdGF0ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwidHJhY2VTdGF0ZVwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgIDI2XG4gICAgICAgICAgICAgICkuc3RyaW5nKHQudHJhY2VTdGF0ZSksIHQuYXR0cmlidXRlcyAhPSBudWxsICYmIHQuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUodC5hdHRyaWJ1dGVzW25dLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAgICAgLyogaWQgNCwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgICAgMzRcbiAgICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCA1LCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICAgIDQwXG4gICAgICAgICAgICAgICkudWludDMyKHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCksIHI7XG4gICAgICAgICAgICB9LCBvLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHQsIHIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgfSwgby5kZWNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gJFJlYWRlci5jcmVhdGUodCkpO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gciA9PT0gdm9pZCAwID8gdC5sZW4gOiB0LnBvcyArIHIsIGwgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsoKTsgdC5wb3MgPCBuOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgcCA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChwID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgbC50cmFjZUlkID0gdC5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICBsLnNwYW5JZCA9IHQuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgbC50cmFjZVN0YXRlID0gdC5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICAgICAgICAgICAgbC5hdHRyaWJ1dGVzICYmIGwuYXR0cmlidXRlcy5sZW5ndGggfHwgKGwuYXR0cmlidXRlcyA9IFtdKSwgbC5hdHRyaWJ1dGVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZGVjb2RlKHQsIHQudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgICAgbC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0LnNraXBUeXBlKHAgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgICAgfSwgby5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9IG5ldyAkUmVhZGVyKHQpKSwgdGhpcy5kZWNvZGUodCwgdC51aW50MzIoKSk7XG4gICAgICAgICAgICB9LCBvLnZlcmlmeSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0ICE9IFwib2JqZWN0XCIgfHwgdCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgaWYgKHQudHJhY2VJZCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ0cmFjZUlkXCIpICYmICEodC50cmFjZUlkICYmIHR5cGVvZiB0LnRyYWNlSWQubGVuZ3RoID09IFwibnVtYmVyXCIgfHwgJHV0aWwuaXNTdHJpbmcodC50cmFjZUlkKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidHJhY2VJZDogYnVmZmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGlmICh0LnNwYW5JZCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJzcGFuSWRcIikgJiYgISh0LnNwYW5JZCAmJiB0eXBlb2YgdC5zcGFuSWQubGVuZ3RoID09IFwibnVtYmVyXCIgfHwgJHV0aWwuaXNTdHJpbmcodC5zcGFuSWQpKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzcGFuSWQ6IGJ1ZmZlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBpZiAodC50cmFjZVN0YXRlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInRyYWNlU3RhdGVcIikgJiYgISR1dGlsLmlzU3RyaW5nKHQudHJhY2VTdGF0ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidHJhY2VTdGF0ZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGlmICh0LmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiYXR0cmlidXRlc1wiKSkge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgICAgdmFyIG4gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkodC5hdHRyaWJ1dGVzW3JdKTtcbiAgICAgICAgICAgICAgICAgIGlmIChuKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzLlwiICsgbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpICYmICEkdXRpbC5pc0ludGVnZXIodC5kcm9wcGVkQXR0cmlidXRlc0NvdW50KSA/IFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogaW50ZWdlciBleHBlY3RlZFwiIDogbnVsbDtcbiAgICAgICAgICAgIH0sIG8uZnJvbU9iamVjdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluaylcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgdmFyIHIgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsoKTtcbiAgICAgICAgICAgICAgaWYgKHQudHJhY2VJZCAhPSBudWxsICYmICh0eXBlb2YgdC50cmFjZUlkID09IFwic3RyaW5nXCIgPyAkdXRpbC5iYXNlNjQuZGVjb2RlKHQudHJhY2VJZCwgci50cmFjZUlkID0gJHV0aWwubmV3QnVmZmVyKCR1dGlsLmJhc2U2NC5sZW5ndGgodC50cmFjZUlkKSksIDApIDogdC50cmFjZUlkLmxlbmd0aCA+PSAwICYmIChyLnRyYWNlSWQgPSB0LnRyYWNlSWQpKSwgdC5zcGFuSWQgIT0gbnVsbCAmJiAodHlwZW9mIHQuc3BhbklkID09IFwic3RyaW5nXCIgPyAkdXRpbC5iYXNlNjQuZGVjb2RlKHQuc3BhbklkLCByLnNwYW5JZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKHQuc3BhbklkKSksIDApIDogdC5zcGFuSWQubGVuZ3RoID49IDAgJiYgKHIuc3BhbklkID0gdC5zcGFuSWQpKSwgdC50cmFjZVN0YXRlICE9IG51bGwgJiYgKHIudHJhY2VTdGF0ZSA9IFN0cmluZyh0LnRyYWNlU3RhdGUpKSwgdC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsuYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgci5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5hdHRyaWJ1dGVzW25dICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluay5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICByLmF0dHJpYnV0ZXNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KHQuYXR0cmlidXRlc1tuXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiAoci5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID4+PiAwKSwgcjtcbiAgICAgICAgICAgIH0sIG8udG9PYmplY3QgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICAgIGlmICgoci5hcnJheXMgfHwgci5kZWZhdWx0cykgJiYgKG4uYXR0cmlidXRlcyA9IFtdKSwgci5kZWZhdWx0cyAmJiAoci5ieXRlcyA9PT0gU3RyaW5nID8gbi50cmFjZUlkID0gXCJcIiA6IChuLnRyYWNlSWQgPSBbXSwgci5ieXRlcyAhPT0gQXJyYXkgJiYgKG4udHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcihuLnRyYWNlSWQpKSksIHIuYnl0ZXMgPT09IFN0cmluZyA/IG4uc3BhbklkID0gXCJcIiA6IChuLnNwYW5JZCA9IFtdLCByLmJ5dGVzICE9PSBBcnJheSAmJiAobi5zcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIobi5zcGFuSWQpKSksIG4udHJhY2VTdGF0ZSA9IFwiXCIsIG4uZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IDApLCB0LnRyYWNlSWQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSAmJiAobi50cmFjZUlkID0gci5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZSh0LnRyYWNlSWQsIDAsIHQudHJhY2VJZC5sZW5ndGgpIDogci5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LnRyYWNlSWQpIDogdC50cmFjZUlkKSwgdC5zcGFuSWQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwic3BhbklkXCIpICYmIChuLnNwYW5JZCA9IHIuYnl0ZXMgPT09IFN0cmluZyA/ICR1dGlsLmJhc2U2NC5lbmNvZGUodC5zcGFuSWQsIDAsIHQuc3BhbklkLmxlbmd0aCkgOiByLmJ5dGVzID09PSBBcnJheSA/IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuc3BhbklkKSA6IHQuc3BhbklkKSwgdC50cmFjZVN0YXRlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInRyYWNlU3RhdGVcIikgJiYgKG4udHJhY2VTdGF0ZSA9IHQudHJhY2VTdGF0ZSksIHQuYXR0cmlidXRlcyAmJiB0LmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbi5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCB0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK2wpXG4gICAgICAgICAgICAgICAgICBuLmF0dHJpYnV0ZXNbbF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdCh0LmF0dHJpYnV0ZXNbbF0sIHIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSAmJiAobi5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50KSwgbjtcbiAgICAgICAgICAgIH0sIG8ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgIH0sIG8uZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgdCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rXCI7XG4gICAgICAgICAgICB9LCBvO1xuICAgICAgICAgIH0oKSwgaTtcbiAgICAgICAgfSgpLCBmLlN0YXR1cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkobykge1xuICAgICAgICAgICAgaWYgKG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUubWVzc2FnZSA9IG51bGwsIGkucHJvdG90eXBlLmNvZGUgPSBudWxsLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUubWVzc2FnZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwibWVzc2FnZVwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMThcbiAgICAgICAgICAgICkuc3RyaW5nKGUubWVzc2FnZSksIGUuY29kZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiY29kZVwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMywgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgMjRcbiAgICAgICAgICAgICkuaW50MzIoZS5jb2RlKSwgdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBuLm1lc3NhZ2UgPSBlLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgbi5jb2RlID0gZS5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLm1lc3NhZ2UgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwibWVzc2FnZVwiKSAmJiAhJHV0aWwuaXNTdHJpbmcoZS5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwibWVzc2FnZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5jb2RlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImNvZGVcIikpXG4gICAgICAgICAgICAgIHN3aXRjaCAoZS5jb2RlKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvZGU6IGVudW0gdmFsdWUgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGUubWVzc2FnZSAhPSBudWxsICYmICh0Lm1lc3NhZ2UgPSBTdHJpbmcoZS5tZXNzYWdlKSksIGUuY29kZSkge1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5jb2RlID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgIHQuY29kZSA9IGUuY29kZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNUQVRVU19DT0RFX1VOU0VUXCI6XG4gICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICB0LmNvZGUgPSAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU1RBVFVTX0NPREVfT0tcIjpcbiAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHQuY29kZSA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTVEFUVVNfQ09ERV9FUlJPUlwiOlxuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgdC5jb2RlID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIHJldHVybiB0LmRlZmF1bHRzICYmIChyLm1lc3NhZ2UgPSBcIlwiLCByLmNvZGUgPSB0LmVudW1zID09PSBTdHJpbmcgPyBcIlNUQVRVU19DT0RFX1VOU0VUXCIgOiAwKSwgZS5tZXNzYWdlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcIm1lc3NhZ2VcIikgJiYgKHIubWVzc2FnZSA9IGUubWVzc2FnZSksIGUuY29kZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJjb2RlXCIpICYmIChyLmNvZGUgPSB0LmVudW1zID09PSBTdHJpbmcgPyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1cy5TdGF0dXNDb2RlW2UuY29kZV0gPT09IHZvaWQgMCA/IGUuY29kZSA6ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLlN0YXR1c0NvZGVbZS5jb2RlXSA6IGUuY29kZSksIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXNcIjtcbiAgICAgICAgICB9LCBpLlN0YXR1c0NvZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBvID0ge30sIGUgPSBPYmplY3QuY3JlYXRlKG8pO1xuICAgICAgICAgICAgcmV0dXJuIGVbb1swXSA9IFwiU1RBVFVTX0NPREVfVU5TRVRcIl0gPSAwLCBlW29bMV0gPSBcIlNUQVRVU19DT0RFX09LXCJdID0gMSwgZVtvWzJdID0gXCJTVEFUVVNfQ09ERV9FUlJPUlwiXSA9IDIsIGU7XG4gICAgICAgICAgfSgpLCBpO1xuICAgICAgICB9KCksIGY7XG4gICAgICB9KCksIGM7XG4gICAgfSgpLCB1LmNvbGxlY3RvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGMgPSB7fTtcbiAgICAgIHJldHVybiBjLnRyYWNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmID0ge307XG4gICAgICAgIHJldHVybiBmLnYxID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGkgPSB7fTtcbiAgICAgICAgICByZXR1cm4gaS5UcmFjZVNlcnZpY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIG8oZSwgdCwgcikge1xuICAgICAgICAgICAgICAkcHJvdG9idWYucnBjLlNlcnZpY2UuY2FsbCh0aGlzLCBlLCB0LCByKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoby5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCRwcm90b2J1Zi5ycGMuU2VydmljZS5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IG8sIG8uY3JlYXRlID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXModCwgciwgbik7XG4gICAgICAgICAgICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkoby5wcm90b3R5cGUuZXhwb3J0ID0gZnVuY3Rpb24gZSh0LCByKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnJwY0NhbGwoZSwgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCwgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UsIHQsIHIpO1xuICAgICAgICAgICAgfSwgXCJuYW1lXCIsIHsgdmFsdWU6IFwiRXhwb3J0XCIgfSksIG87XG4gICAgICAgICAgfSgpLCBpLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIG8oZSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZVNwYW5zID0gW10sIGUpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IE9iamVjdC5rZXlzKGUpLCByID0gMDsgciA8IHQubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgICBlW3Rbcl1dICE9IG51bGwgJiYgKHRoaXNbdFtyXV0gPSBlW3Rbcl1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvLnByb3RvdHlwZS5yZXNvdXJjZVNwYW5zID0gJHV0aWwuZW1wdHlBcnJheSwgby5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgbyh0KTtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICBpZiAociB8fCAociA9ICRXcml0ZXIuY3JlYXRlKCkpLCB0LnJlc291cmNlU3BhbnMgIT0gbnVsbCAmJiB0LnJlc291cmNlU3BhbnMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5yZXNvdXJjZVNwYW5zLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLmVuY29kZSh0LnJlc291cmNlU3BhbnNbbl0sIHIudWludDMyKFxuICAgICAgICAgICAgICAgICAgICAvKiBpZCAxLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgICB9LCBvLmRlY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0KCk7IHQucG9zIDwgbjsgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSB0LnVpbnQzMigpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocCA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgIGwucmVzb3VyY2VTcGFucyAmJiBsLnJlc291cmNlU3BhbnMubGVuZ3RoIHx8IChsLnJlc291cmNlU3BhbnMgPSBbXSksIGwucmVzb3VyY2VTcGFucy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy5kZWNvZGUodCwgdC51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICB9LCBvLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgIH0sIG8udmVyaWZ5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBpZiAodC5yZXNvdXJjZVNwYW5zICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlU3BhbnNcIikpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5yZXNvdXJjZVNwYW5zKSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlU3BhbnM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB0LnJlc291cmNlU3BhbnMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBuID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnZlcmlmeSh0LnJlc291cmNlU3BhbnNbcl0pO1xuICAgICAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlU3BhbnMuXCIgKyBuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0sIG8uZnJvbU9iamVjdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0KVxuICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgICB2YXIgciA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgIGlmICh0LnJlc291cmNlU3BhbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5yZXNvdXJjZVNwYW5zKSlcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LnJlc291cmNlU3BhbnM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHIucmVzb3VyY2VTcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5yZXNvdXJjZVNwYW5zLmxlbmd0aDsgKytuKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQucmVzb3VyY2VTcGFuc1tuXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdC5yZXNvdXJjZVNwYW5zOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICByLnJlc291cmNlU3BhbnNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMuZnJvbU9iamVjdCh0LnJlc291cmNlU3BhbnNbbl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0sIG8udG9PYmplY3QgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICAgIGlmICgoci5hcnJheXMgfHwgci5kZWZhdWx0cykgJiYgKG4ucmVzb3VyY2VTcGFucyA9IFtdKSwgdC5yZXNvdXJjZVNwYW5zICYmIHQucmVzb3VyY2VTcGFucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBuLnJlc291cmNlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHQucmVzb3VyY2VTcGFucy5sZW5ndGg7ICsrbClcbiAgICAgICAgICAgICAgICAgIG4ucmVzb3VyY2VTcGFuc1tsXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy50b09iamVjdCh0LnJlc291cmNlU3BhbnNbbF0sIHIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgICAgfSwgby5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgfSwgby5nZXRUeXBlVXJsID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCA9PT0gdm9pZCAwICYmICh0ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCB0ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdFwiO1xuICAgICAgICAgICAgfSwgbztcbiAgICAgICAgICB9KCksIGkuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIG8oZSkge1xuICAgICAgICAgICAgICBpZiAoZSlcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gT2JqZWN0LmtleXMoZSksIHIgPSAwOyByIDwgdC5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAgIGVbdFtyXV0gIT0gbnVsbCAmJiAodGhpc1t0W3JdXSA9IGVbdFtyXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG8ucHJvdG90eXBlLnBhcnRpYWxTdWNjZXNzID0gbnVsbCwgby5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgbyh0KTtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gciB8fCAociA9ICRXcml0ZXIuY3JlYXRlKCkpLCB0LnBhcnRpYWxTdWNjZXNzICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJwYXJ0aWFsU3VjY2Vzc1wiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLmVuY29kZSh0LnBhcnRpYWxTdWNjZXNzLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAxLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKSwgcjtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgICB9LCBvLmRlY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSgpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICBsLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy5kZWNvZGUodCwgdC51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdC5za2lwVHlwZShwICYgNyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSBuZXcgJFJlYWRlcih0KSksIHRoaXMuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgfSwgby52ZXJpZnkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGlmICh0LnBhcnRpYWxTdWNjZXNzICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInBhcnRpYWxTdWNjZXNzXCIpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLnZlcmlmeSh0LnBhcnRpYWxTdWNjZXNzKTtcbiAgICAgICAgICAgICAgICBpZiAocilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInBhcnRpYWxTdWNjZXNzLlwiICsgcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0sIG8uZnJvbU9iamVjdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgdmFyIHIgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UoKTtcbiAgICAgICAgICAgICAgaWYgKHQucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5wYXJ0aWFsU3VjY2VzcyAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLnBhcnRpYWxTdWNjZXNzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgci5wYXJ0aWFsU3VjY2VzcyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MuZnJvbU9iamVjdCh0LnBhcnRpYWxTdWNjZXNzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0sIG8udG9PYmplY3QgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICAgIHJldHVybiByLmRlZmF1bHRzICYmIChuLnBhcnRpYWxTdWNjZXNzID0gbnVsbCksIHQucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwicGFydGlhbFN1Y2Nlc3NcIikgJiYgKG4ucGFydGlhbFN1Y2Nlc3MgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLnRvT2JqZWN0KHQucGFydGlhbFN1Y2Nlc3MsIHIpKSwgbjtcbiAgICAgICAgICAgIH0sIG8ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgIH0sIG8uZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgdCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXCI7XG4gICAgICAgICAgICB9LCBvO1xuICAgICAgICAgIH0oKSwgaS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBvKGUpIHtcbiAgICAgICAgICAgICAgaWYgKGUpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IE9iamVjdC5rZXlzKGUpLCByID0gMDsgciA8IHQubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgICBlW3Rbcl1dICE9IG51bGwgJiYgKHRoaXNbdFtyXV0gPSBlW3Rbcl1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvLnByb3RvdHlwZS5yZWplY3RlZFNwYW5zID0gbnVsbCwgby5wcm90b3R5cGUuZXJyb3JNZXNzYWdlID0gbnVsbCwgby5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgbyh0KTtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gciB8fCAociA9ICRXcml0ZXIuY3JlYXRlKCkpLCB0LnJlamVjdGVkU3BhbnMgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInJlamVjdGVkU3BhbnNcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgICA4XG4gICAgICAgICAgICAgICkuaW50NjQodC5yZWplY3RlZFNwYW5zKSwgdC5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImVycm9yTWVzc2FnZVwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgIDE4XG4gICAgICAgICAgICAgICkuc3RyaW5nKHQuZXJyb3JNZXNzYWdlKSwgcjtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgICB9LCBvLmRlY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzKCk7IHQucG9zIDwgbjsgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSB0LnVpbnQzMigpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocCA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgIGwucmVqZWN0ZWRTcGFucyA9IHQuaW50NjQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgbC5lcnJvck1lc3NhZ2UgPSB0LnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICB9LCBvLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgIH0sIG8udmVyaWZ5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsID8gXCJvYmplY3QgZXhwZWN0ZWRcIiA6IHQucmVqZWN0ZWRTcGFucyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJyZWplY3RlZFNwYW5zXCIpICYmICEkdXRpbC5pc0ludGVnZXIodC5yZWplY3RlZFNwYW5zKSAmJiAhKHQucmVqZWN0ZWRTcGFucyAmJiAkdXRpbC5pc0ludGVnZXIodC5yZWplY3RlZFNwYW5zLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKHQucmVqZWN0ZWRTcGFucy5oaWdoKSkgPyBcInJlamVjdGVkU3BhbnM6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiIDogdC5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZXJyb3JNZXNzYWdlXCIpICYmICEkdXRpbC5pc1N0cmluZyh0LmVycm9yTWVzc2FnZSkgPyBcImVycm9yTWVzc2FnZTogc3RyaW5nIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgICAgfSwgby5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgIHZhciByID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHQucmVqZWN0ZWRTcGFucyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIucmVqZWN0ZWRTcGFucyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKHQucmVqZWN0ZWRTcGFucykpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgdC5yZWplY3RlZFNwYW5zID09IFwic3RyaW5nXCIgPyByLnJlamVjdGVkU3BhbnMgPSBwYXJzZUludCh0LnJlamVjdGVkU3BhbnMsIDEwKSA6IHR5cGVvZiB0LnJlamVjdGVkU3BhbnMgPT0gXCJudW1iZXJcIiA/IHIucmVqZWN0ZWRTcGFucyA9IHQucmVqZWN0ZWRTcGFucyA6IHR5cGVvZiB0LnJlamVjdGVkU3BhbnMgPT0gXCJvYmplY3RcIiAmJiAoci5yZWplY3RlZFNwYW5zID0gbmV3ICR1dGlsLkxvbmdCaXRzKHQucmVqZWN0ZWRTcGFucy5sb3cgPj4+IDAsIHQucmVqZWN0ZWRTcGFucy5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgKHIuZXJyb3JNZXNzYWdlID0gU3RyaW5nKHQuZXJyb3JNZXNzYWdlKSksIHI7XG4gICAgICAgICAgICB9LCBvLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByIHx8IChyID0ge30pO1xuICAgICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgICBpZiAoci5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICAgIG4ucmVqZWN0ZWRTcGFucyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IGwudG9TdHJpbmcoKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IGwudG9OdW1iZXIoKSA6IGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICBuLnJlamVjdGVkU3BhbnMgPSByLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgbi5lcnJvck1lc3NhZ2UgPSBcIlwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0LnJlamVjdGVkU3BhbnMgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwicmVqZWN0ZWRTcGFuc1wiKSAmJiAodHlwZW9mIHQucmVqZWN0ZWRTcGFucyA9PSBcIm51bWJlclwiID8gbi5yZWplY3RlZFNwYW5zID0gci5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHQucmVqZWN0ZWRTcGFucykgOiB0LnJlamVjdGVkU3BhbnMgOiBuLnJlamVjdGVkU3BhbnMgPSByLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQucmVqZWN0ZWRTcGFucykgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC5yZWplY3RlZFNwYW5zLmxvdyA+Pj4gMCwgdC5yZWplY3RlZFNwYW5zLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiB0LnJlamVjdGVkU3BhbnMpLCB0LmVycm9yTWVzc2FnZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJlcnJvck1lc3NhZ2VcIikgJiYgKG4uZXJyb3JNZXNzYWdlID0gdC5lcnJvck1lc3NhZ2UpLCBuO1xuICAgICAgICAgICAgfSwgby5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgfSwgby5nZXRUeXBlVXJsID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCA9PT0gdm9pZCAwICYmICh0ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCB0ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1wiO1xuICAgICAgICAgICAgfSwgbztcbiAgICAgICAgICB9KCksIGk7XG4gICAgICAgIH0oKSwgZjtcbiAgICAgIH0oKSwgYy5tZXRyaWNzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmID0ge307XG4gICAgICAgIHJldHVybiBmLnYxID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGkgPSB7fTtcbiAgICAgICAgICByZXR1cm4gaS5NZXRyaWNzU2VydmljZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gbyhlLCB0LCByKSB7XG4gICAgICAgICAgICAgICRwcm90b2J1Zi5ycGMuU2VydmljZS5jYWxsKHRoaXMsIGUsIHQsIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChvLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoJHByb3RvYnVmLnJwYy5TZXJ2aWNlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gbywgby5jcmVhdGUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyh0LCByLCBuKTtcbiAgICAgICAgICAgIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLnByb3RvdHlwZS5leHBvcnQgPSBmdW5jdGlvbiBlKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjQ2FsbChlLCAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCwgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlLCB0LCByKTtcbiAgICAgICAgICAgIH0sIFwibmFtZVwiLCB7IHZhbHVlOiBcIkV4cG9ydFwiIH0pLCBvO1xuICAgICAgICAgIH0oKSwgaS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIG8oZSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZU1ldHJpY3MgPSBbXSwgZSlcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gT2JqZWN0LmtleXMoZSksIHIgPSAwOyByIDwgdC5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAgIGVbdFtyXV0gIT0gbnVsbCAmJiAodGhpc1t0W3JdXSA9IGVbdFtyXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG8ucHJvdG90eXBlLnJlc291cmNlTWV0cmljcyA9ICR1dGlsLmVtcHR5QXJyYXksIG8uY3JlYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IG8odCk7XG4gICAgICAgICAgICB9LCBvLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgaWYgKHIgfHwgKHIgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgdC5yZXNvdXJjZU1ldHJpY3MgIT0gbnVsbCAmJiB0LnJlc291cmNlTWV0cmljcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LnJlc291cmNlTWV0cmljcy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MuZW5jb2RlKHQucmVzb3VyY2VNZXRyaWNzW25dLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9LCBvLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHQsIHIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgfSwgby5kZWNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gJFJlYWRlci5jcmVhdGUodCkpO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gciA9PT0gdm9pZCAwID8gdC5sZW4gOiB0LnBvcyArIHIsIGwgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QoKTsgdC5wb3MgPCBuOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgcCA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChwID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgbC5yZXNvdXJjZU1ldHJpY3MgJiYgbC5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoIHx8IChsLnJlc291cmNlTWV0cmljcyA9IFtdKSwgbC5yZXNvdXJjZU1ldHJpY3MucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLmRlY29kZSh0LCB0LnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdC5za2lwVHlwZShwICYgNyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSBuZXcgJFJlYWRlcih0KSksIHRoaXMuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgfSwgby52ZXJpZnkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGlmICh0LnJlc291cmNlTWV0cmljcyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZU1ldHJpY3NcIikpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5yZXNvdXJjZU1ldHJpY3MpKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VNZXRyaWNzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgdC5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBuID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcy52ZXJpZnkodC5yZXNvdXJjZU1ldHJpY3Nbcl0pO1xuICAgICAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlTWV0cmljcy5cIiArIG47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSwgby5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0KVxuICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgICB2YXIgciA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCgpO1xuICAgICAgICAgICAgICBpZiAodC5yZXNvdXJjZU1ldHJpY3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5yZXNvdXJjZU1ldHJpY3MpKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LnJlc291cmNlTWV0cmljczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgci5yZXNvdXJjZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQucmVzb3VyY2VNZXRyaWNzLmxlbmd0aDsgKytuKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQucmVzb3VyY2VNZXRyaWNzW25dICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdC5yZXNvdXJjZU1ldHJpY3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgIHIucmVzb3VyY2VNZXRyaWNzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcy5mcm9tT2JqZWN0KHQucmVzb3VyY2VNZXRyaWNzW25dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9LCBvLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByIHx8IChyID0ge30pO1xuICAgICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgICBpZiAoKHIuYXJyYXlzIHx8IHIuZGVmYXVsdHMpICYmIChuLnJlc291cmNlTWV0cmljcyA9IFtdKSwgdC5yZXNvdXJjZU1ldHJpY3MgJiYgdC5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbi5yZXNvdXJjZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHQucmVzb3VyY2VNZXRyaWNzLmxlbmd0aDsgKytsKVxuICAgICAgICAgICAgICAgICAgbi5yZXNvdXJjZU1ldHJpY3NbbF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnRvT2JqZWN0KHQucmVzb3VyY2VNZXRyaWNzW2xdLCByKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICAgIH0sIG8ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgIH0sIG8uZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgdCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XCI7XG4gICAgICAgICAgICB9LCBvO1xuICAgICAgICAgIH0oKSwgaS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBvKGUpIHtcbiAgICAgICAgICAgICAgaWYgKGUpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IE9iamVjdC5rZXlzKGUpLCByID0gMDsgciA8IHQubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgICBlW3Rbcl1dICE9IG51bGwgJiYgKHRoaXNbdFtyXV0gPSBlW3Rbcl1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvLnByb3RvdHlwZS5wYXJ0aWFsU3VjY2VzcyA9IG51bGwsIG8uY3JlYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IG8odCk7XG4gICAgICAgICAgICB9LCBvLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHIgfHwgKHIgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgdC5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwicGFydGlhbFN1Y2Nlc3NcIikgJiYgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MuZW5jb2RlKHQucGFydGlhbFN1Y2Nlc3MsIHIudWludDMyKFxuICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCByO1xuICAgICAgICAgICAgfSwgby5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZSh0LCByKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9ICRSZWFkZXIuY3JlYXRlKHQpKTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IHIgPT09IHZvaWQgMCA/IHQubGVuIDogdC5wb3MgKyByLCBsID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSgpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICBsLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICB9LCBvLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgIH0sIG8udmVyaWZ5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBpZiAodC5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJwYXJ0aWFsU3VjY2Vzc1wiKSkge1xuICAgICAgICAgICAgICAgIHZhciByID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MudmVyaWZ5KHQucGFydGlhbFN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicGFydGlhbFN1Y2Nlc3MuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSwgby5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgdmFyIHIgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlKCk7XG4gICAgICAgICAgICAgIGlmICh0LnBhcnRpYWxTdWNjZXNzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQucGFydGlhbFN1Y2Nlc3MgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UucGFydGlhbFN1Y2Nlc3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICByLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MuZnJvbU9iamVjdCh0LnBhcnRpYWxTdWNjZXNzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0sIG8udG9PYmplY3QgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICAgIHJldHVybiByLmRlZmF1bHRzICYmIChuLnBhcnRpYWxTdWNjZXNzID0gbnVsbCksIHQucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwicGFydGlhbFN1Y2Nlc3NcIikgJiYgKG4ucGFydGlhbFN1Y2Nlc3MgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy50b09iamVjdCh0LnBhcnRpYWxTdWNjZXNzLCByKSksIG47XG4gICAgICAgICAgICB9LCBvLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICB9LCBvLmdldFR5cGVVcmwgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIHQgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2VcIjtcbiAgICAgICAgICAgIH0sIG87XG4gICAgICAgICAgfSgpLCBpLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gbyhlKSB7XG4gICAgICAgICAgICAgIGlmIChlKVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhlKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICAgZVt0W3JdXSAhPSBudWxsICYmICh0aGlzW3Rbcl1dID0gZVt0W3JdXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gby5wcm90b3R5cGUucmVqZWN0ZWREYXRhUG9pbnRzID0gbnVsbCwgby5wcm90b3R5cGUuZXJyb3JNZXNzYWdlID0gbnVsbCwgby5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgbyh0KTtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gciB8fCAociA9ICRXcml0ZXIuY3JlYXRlKCkpLCB0LnJlamVjdGVkRGF0YVBvaW50cyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwicmVqZWN0ZWREYXRhUG9pbnRzXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDAgPSovXG4gICAgICAgICAgICAgICAgOFxuICAgICAgICAgICAgICApLmludDY0KHQucmVqZWN0ZWREYXRhUG9pbnRzKSwgdC5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImVycm9yTWVzc2FnZVwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgIDE4XG4gICAgICAgICAgICAgICkuc3RyaW5nKHQuZXJyb3JNZXNzYWdlKSwgcjtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgICB9LCBvLmRlY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcygpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICBsLnJlamVjdGVkRGF0YVBvaW50cyA9IHQuaW50NjQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgbC5lcnJvck1lc3NhZ2UgPSB0LnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICB9LCBvLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgIH0sIG8udmVyaWZ5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsID8gXCJvYmplY3QgZXhwZWN0ZWRcIiA6IHQucmVqZWN0ZWREYXRhUG9pbnRzICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInJlamVjdGVkRGF0YVBvaW50c1wiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQucmVqZWN0ZWREYXRhUG9pbnRzKSAmJiAhKHQucmVqZWN0ZWREYXRhUG9pbnRzICYmICR1dGlsLmlzSW50ZWdlcih0LnJlamVjdGVkRGF0YVBvaW50cy5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LnJlamVjdGVkRGF0YVBvaW50cy5oaWdoKSkgPyBcInJlamVjdGVkRGF0YVBvaW50czogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCIgOiB0LmVycm9yTWVzc2FnZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJlcnJvck1lc3NhZ2VcIikgJiYgISR1dGlsLmlzU3RyaW5nKHQuZXJyb3JNZXNzYWdlKSA/IFwiZXJyb3JNZXNzYWdlOiBzdHJpbmcgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgICB9LCBvLmZyb21PYmplY3QgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgIHZhciByID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzKCk7XG4gICAgICAgICAgICAgIHJldHVybiB0LnJlamVjdGVkRGF0YVBvaW50cyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIucmVqZWN0ZWREYXRhUG9pbnRzID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC5yZWplY3RlZERhdGFQb2ludHMpKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIHQucmVqZWN0ZWREYXRhUG9pbnRzID09IFwic3RyaW5nXCIgPyByLnJlamVjdGVkRGF0YVBvaW50cyA9IHBhcnNlSW50KHQucmVqZWN0ZWREYXRhUG9pbnRzLCAxMCkgOiB0eXBlb2YgdC5yZWplY3RlZERhdGFQb2ludHMgPT0gXCJudW1iZXJcIiA/IHIucmVqZWN0ZWREYXRhUG9pbnRzID0gdC5yZWplY3RlZERhdGFQb2ludHMgOiB0eXBlb2YgdC5yZWplY3RlZERhdGFQb2ludHMgPT0gXCJvYmplY3RcIiAmJiAoci5yZWplY3RlZERhdGFQb2ludHMgPSBuZXcgJHV0aWwuTG9uZ0JpdHModC5yZWplY3RlZERhdGFQb2ludHMubG93ID4+PiAwLCB0LnJlamVjdGVkRGF0YVBvaW50cy5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgKHIuZXJyb3JNZXNzYWdlID0gU3RyaW5nKHQuZXJyb3JNZXNzYWdlKSksIHI7XG4gICAgICAgICAgICB9LCBvLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByIHx8IChyID0ge30pO1xuICAgICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgICBpZiAoci5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICAgIG4ucmVqZWN0ZWREYXRhUG9pbnRzID0gci5sb25ncyA9PT0gU3RyaW5nID8gbC50b1N0cmluZygpIDogci5sb25ncyA9PT0gTnVtYmVyID8gbC50b051bWJlcigpIDogbDtcbiAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgIG4ucmVqZWN0ZWREYXRhUG9pbnRzID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgIG4uZXJyb3JNZXNzYWdlID0gXCJcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdC5yZWplY3RlZERhdGFQb2ludHMgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwicmVqZWN0ZWREYXRhUG9pbnRzXCIpICYmICh0eXBlb2YgdC5yZWplY3RlZERhdGFQb2ludHMgPT0gXCJudW1iZXJcIiA/IG4ucmVqZWN0ZWREYXRhUG9pbnRzID0gci5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHQucmVqZWN0ZWREYXRhUG9pbnRzKSA6IHQucmVqZWN0ZWREYXRhUG9pbnRzIDogbi5yZWplY3RlZERhdGFQb2ludHMgPSByLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQucmVqZWN0ZWREYXRhUG9pbnRzKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyh0LnJlamVjdGVkRGF0YVBvaW50cy5sb3cgPj4+IDAsIHQucmVqZWN0ZWREYXRhUG9pbnRzLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiB0LnJlamVjdGVkRGF0YVBvaW50cyksIHQuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImVycm9yTWVzc2FnZVwiKSAmJiAobi5lcnJvck1lc3NhZ2UgPSB0LmVycm9yTWVzc2FnZSksIG47XG4gICAgICAgICAgICB9LCBvLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICB9LCBvLmdldFR5cGVVcmwgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIHQgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc1wiO1xuICAgICAgICAgICAgfSwgbztcbiAgICAgICAgICB9KCksIGk7XG4gICAgICAgIH0oKSwgZjtcbiAgICAgIH0oKSwgYy5sb2dzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmID0ge307XG4gICAgICAgIHJldHVybiBmLnYxID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGkgPSB7fTtcbiAgICAgICAgICByZXR1cm4gaS5Mb2dzU2VydmljZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gbyhlLCB0LCByKSB7XG4gICAgICAgICAgICAgICRwcm90b2J1Zi5ycGMuU2VydmljZS5jYWxsKHRoaXMsIGUsIHQsIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChvLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoJHByb3RvYnVmLnJwYy5TZXJ2aWNlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gbywgby5jcmVhdGUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyh0LCByLCBuKTtcbiAgICAgICAgICAgIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLnByb3RvdHlwZS5leHBvcnQgPSBmdW5jdGlvbiBlKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjQ2FsbChlLCAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCwgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLCB0LCByKTtcbiAgICAgICAgICAgIH0sIFwibmFtZVwiLCB7IHZhbHVlOiBcIkV4cG9ydFwiIH0pLCBvO1xuICAgICAgICAgIH0oKSwgaS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIG8oZSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZUxvZ3MgPSBbXSwgZSlcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gT2JqZWN0LmtleXMoZSksIHIgPSAwOyByIDwgdC5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAgIGVbdFtyXV0gIT0gbnVsbCAmJiAodGhpc1t0W3JdXSA9IGVbdFtyXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG8ucHJvdG90eXBlLnJlc291cmNlTG9ncyA9ICR1dGlsLmVtcHR5QXJyYXksIG8uY3JlYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IG8odCk7XG4gICAgICAgICAgICB9LCBvLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgaWYgKHIgfHwgKHIgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgdC5yZXNvdXJjZUxvZ3MgIT0gbnVsbCAmJiB0LnJlc291cmNlTG9ncy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LnJlc291cmNlTG9ncy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MuZW5jb2RlKHQucmVzb3VyY2VMb2dzW25dLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9LCBvLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHQsIHIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgfSwgby5kZWNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gJFJlYWRlci5jcmVhdGUodCkpO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gciA9PT0gdm9pZCAwID8gdC5sZW4gOiB0LnBvcyArIHIsIGwgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3QoKTsgdC5wb3MgPCBuOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgcCA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChwID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgbC5yZXNvdXJjZUxvZ3MgJiYgbC5yZXNvdXJjZUxvZ3MubGVuZ3RoIHx8IChsLnJlc291cmNlTG9ncyA9IFtdKSwgbC5yZXNvdXJjZUxvZ3MucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLmRlY29kZSh0LCB0LnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdC5za2lwVHlwZShwICYgNyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSBuZXcgJFJlYWRlcih0KSksIHRoaXMuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgfSwgby52ZXJpZnkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGlmICh0LnJlc291cmNlTG9ncyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZUxvZ3NcIikpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5yZXNvdXJjZUxvZ3MpKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VMb2dzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgdC5yZXNvdXJjZUxvZ3MubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBuID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy52ZXJpZnkodC5yZXNvdXJjZUxvZ3Nbcl0pO1xuICAgICAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlTG9ncy5cIiArIG47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSwgby5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0KVxuICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgICB2YXIgciA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCgpO1xuICAgICAgICAgICAgICBpZiAodC5yZXNvdXJjZUxvZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5yZXNvdXJjZUxvZ3MpKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0LnJlc291cmNlTG9nczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgci5yZXNvdXJjZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQucmVzb3VyY2VMb2dzLmxlbmd0aDsgKytuKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQucmVzb3VyY2VMb2dzW25dICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC5yZXNvdXJjZUxvZ3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgIHIucmVzb3VyY2VMb2dzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy5mcm9tT2JqZWN0KHQucmVzb3VyY2VMb2dzW25dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9LCBvLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByIHx8IChyID0ge30pO1xuICAgICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgICBpZiAoKHIuYXJyYXlzIHx8IHIuZGVmYXVsdHMpICYmIChuLnJlc291cmNlTG9ncyA9IFtdKSwgdC5yZXNvdXJjZUxvZ3MgJiYgdC5yZXNvdXJjZUxvZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbi5yZXNvdXJjZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHQucmVzb3VyY2VMb2dzLmxlbmd0aDsgKytsKVxuICAgICAgICAgICAgICAgICAgbi5yZXNvdXJjZUxvZ3NbbF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLnRvT2JqZWN0KHQucmVzb3VyY2VMb2dzW2xdLCByKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICAgIH0sIG8ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgIH0sIG8uZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgdCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XCI7XG4gICAgICAgICAgICB9LCBvO1xuICAgICAgICAgIH0oKSwgaS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBvKGUpIHtcbiAgICAgICAgICAgICAgaWYgKGUpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IE9iamVjdC5rZXlzKGUpLCByID0gMDsgciA8IHQubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgICBlW3Rbcl1dICE9IG51bGwgJiYgKHRoaXNbdFtyXV0gPSBlW3Rbcl1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvLnByb3RvdHlwZS5wYXJ0aWFsU3VjY2VzcyA9IG51bGwsIG8uY3JlYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IG8odCk7XG4gICAgICAgICAgICB9LCBvLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHIgfHwgKHIgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgdC5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwicGFydGlhbFN1Y2Nlc3NcIikgJiYgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MuZW5jb2RlKHQucGFydGlhbFN1Y2Nlc3MsIHIudWludDMyKFxuICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCByO1xuICAgICAgICAgICAgfSwgby5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZSh0LCByKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9ICRSZWFkZXIuY3JlYXRlKHQpKTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IHIgPT09IHZvaWQgMCA/IHQubGVuIDogdC5wb3MgKyByLCBsID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSgpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICBsLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICB9LCBvLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgIH0sIG8udmVyaWZ5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBpZiAodC5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJwYXJ0aWFsU3VjY2Vzc1wiKSkge1xuICAgICAgICAgICAgICAgIHZhciByID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MudmVyaWZ5KHQucGFydGlhbFN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicGFydGlhbFN1Y2Nlc3MuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSwgby5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgdmFyIHIgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlKCk7XG4gICAgICAgICAgICAgIGlmICh0LnBhcnRpYWxTdWNjZXNzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQucGFydGlhbFN1Y2Nlc3MgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UucGFydGlhbFN1Y2Nlc3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICByLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MuZnJvbU9iamVjdCh0LnBhcnRpYWxTdWNjZXNzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0sIG8udG9PYmplY3QgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICAgIHJldHVybiByLmRlZmF1bHRzICYmIChuLnBhcnRpYWxTdWNjZXNzID0gbnVsbCksIHQucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwicGFydGlhbFN1Y2Nlc3NcIikgJiYgKG4ucGFydGlhbFN1Y2Nlc3MgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy50b09iamVjdCh0LnBhcnRpYWxTdWNjZXNzLCByKSksIG47XG4gICAgICAgICAgICB9LCBvLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICB9LCBvLmdldFR5cGVVcmwgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIHQgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcIjtcbiAgICAgICAgICAgIH0sIG87XG4gICAgICAgICAgfSgpLCBpLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gbyhlKSB7XG4gICAgICAgICAgICAgIGlmIChlKVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhlKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICAgZVt0W3JdXSAhPSBudWxsICYmICh0aGlzW3Rbcl1dID0gZVt0W3JdXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gby5wcm90b3R5cGUucmVqZWN0ZWRMb2dSZWNvcmRzID0gbnVsbCwgby5wcm90b3R5cGUuZXJyb3JNZXNzYWdlID0gbnVsbCwgby5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgbyh0KTtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gciB8fCAociA9ICRXcml0ZXIuY3JlYXRlKCkpLCB0LnJlamVjdGVkTG9nUmVjb3JkcyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwicmVqZWN0ZWRMb2dSZWNvcmRzXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDAgPSovXG4gICAgICAgICAgICAgICAgOFxuICAgICAgICAgICAgICApLmludDY0KHQucmVqZWN0ZWRMb2dSZWNvcmRzKSwgdC5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImVycm9yTWVzc2FnZVwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgIDE4XG4gICAgICAgICAgICAgICkuc3RyaW5nKHQuZXJyb3JNZXNzYWdlKSwgcjtcbiAgICAgICAgICAgIH0sIG8uZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgICB9LCBvLmRlY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcygpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICBsLnJlamVjdGVkTG9nUmVjb3JkcyA9IHQuaW50NjQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgbC5lcnJvck1lc3NhZ2UgPSB0LnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICB9LCBvLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgIH0sIG8udmVyaWZ5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsID8gXCJvYmplY3QgZXhwZWN0ZWRcIiA6IHQucmVqZWN0ZWRMb2dSZWNvcmRzICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInJlamVjdGVkTG9nUmVjb3Jkc1wiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQucmVqZWN0ZWRMb2dSZWNvcmRzKSAmJiAhKHQucmVqZWN0ZWRMb2dSZWNvcmRzICYmICR1dGlsLmlzSW50ZWdlcih0LnJlamVjdGVkTG9nUmVjb3Jkcy5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LnJlamVjdGVkTG9nUmVjb3Jkcy5oaWdoKSkgPyBcInJlamVjdGVkTG9nUmVjb3JkczogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCIgOiB0LmVycm9yTWVzc2FnZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJlcnJvck1lc3NhZ2VcIikgJiYgISR1dGlsLmlzU3RyaW5nKHQuZXJyb3JNZXNzYWdlKSA/IFwiZXJyb3JNZXNzYWdlOiBzdHJpbmcgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgICB9LCBvLmZyb21PYmplY3QgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgIHZhciByID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzKCk7XG4gICAgICAgICAgICAgIHJldHVybiB0LnJlamVjdGVkTG9nUmVjb3JkcyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIucmVqZWN0ZWRMb2dSZWNvcmRzID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC5yZWplY3RlZExvZ1JlY29yZHMpKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIHQucmVqZWN0ZWRMb2dSZWNvcmRzID09IFwic3RyaW5nXCIgPyByLnJlamVjdGVkTG9nUmVjb3JkcyA9IHBhcnNlSW50KHQucmVqZWN0ZWRMb2dSZWNvcmRzLCAxMCkgOiB0eXBlb2YgdC5yZWplY3RlZExvZ1JlY29yZHMgPT0gXCJudW1iZXJcIiA/IHIucmVqZWN0ZWRMb2dSZWNvcmRzID0gdC5yZWplY3RlZExvZ1JlY29yZHMgOiB0eXBlb2YgdC5yZWplY3RlZExvZ1JlY29yZHMgPT0gXCJvYmplY3RcIiAmJiAoci5yZWplY3RlZExvZ1JlY29yZHMgPSBuZXcgJHV0aWwuTG9uZ0JpdHModC5yZWplY3RlZExvZ1JlY29yZHMubG93ID4+PiAwLCB0LnJlamVjdGVkTG9nUmVjb3Jkcy5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgKHIuZXJyb3JNZXNzYWdlID0gU3RyaW5nKHQuZXJyb3JNZXNzYWdlKSksIHI7XG4gICAgICAgICAgICB9LCBvLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByIHx8IChyID0ge30pO1xuICAgICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgICBpZiAoci5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICAgIG4ucmVqZWN0ZWRMb2dSZWNvcmRzID0gci5sb25ncyA9PT0gU3RyaW5nID8gbC50b1N0cmluZygpIDogci5sb25ncyA9PT0gTnVtYmVyID8gbC50b051bWJlcigpIDogbDtcbiAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgIG4ucmVqZWN0ZWRMb2dSZWNvcmRzID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgIG4uZXJyb3JNZXNzYWdlID0gXCJcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdC5yZWplY3RlZExvZ1JlY29yZHMgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwicmVqZWN0ZWRMb2dSZWNvcmRzXCIpICYmICh0eXBlb2YgdC5yZWplY3RlZExvZ1JlY29yZHMgPT0gXCJudW1iZXJcIiA/IG4ucmVqZWN0ZWRMb2dSZWNvcmRzID0gci5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHQucmVqZWN0ZWRMb2dSZWNvcmRzKSA6IHQucmVqZWN0ZWRMb2dSZWNvcmRzIDogbi5yZWplY3RlZExvZ1JlY29yZHMgPSByLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQucmVqZWN0ZWRMb2dSZWNvcmRzKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyh0LnJlamVjdGVkTG9nUmVjb3Jkcy5sb3cgPj4+IDAsIHQucmVqZWN0ZWRMb2dSZWNvcmRzLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiB0LnJlamVjdGVkTG9nUmVjb3JkcyksIHQuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImVycm9yTWVzc2FnZVwiKSAmJiAobi5lcnJvck1lc3NhZ2UgPSB0LmVycm9yTWVzc2FnZSksIG47XG4gICAgICAgICAgICB9LCBvLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICB9LCBvLmdldFR5cGVVcmwgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIHQgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1wiO1xuICAgICAgICAgICAgfSwgbztcbiAgICAgICAgICB9KCksIGk7XG4gICAgICAgIH0oKSwgZjtcbiAgICAgIH0oKSwgYztcbiAgICB9KCksIHUubWV0cmljcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGMgPSB7fTtcbiAgICAgIHJldHVybiBjLnYxID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmID0ge307XG4gICAgICAgIHJldHVybiBmLk1ldHJpY3NEYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZU1ldHJpY3MgPSBbXSwgbylcbiAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IE9iamVjdC5rZXlzKG8pLCB0ID0gMDsgdCA8IGUubGVuZ3RoOyArK3QpXG4gICAgICAgICAgICAgICAgb1tlW3RdXSAhPSBudWxsICYmICh0aGlzW2VbdF1dID0gb1tlW3RdXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnByb3RvdHlwZS5yZXNvdXJjZU1ldHJpY3MgPSAkdXRpbC5lbXB0eUFycmF5LCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGlmICh0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUucmVzb3VyY2VNZXRyaWNzICE9IG51bGwgJiYgZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUucmVzb3VyY2VNZXRyaWNzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MuZW5jb2RlKGUucmVzb3VyY2VNZXRyaWNzW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLnJlc291cmNlTWV0cmljcyAmJiBuLnJlc291cmNlTWV0cmljcy5sZW5ndGggfHwgKG4ucmVzb3VyY2VNZXRyaWNzID0gW10pLCBuLnJlc291cmNlTWV0cmljcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MuZGVjb2RlKGUsIGUudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5yZXNvdXJjZU1ldHJpY3MgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwicmVzb3VyY2VNZXRyaWNzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLnJlc291cmNlTWV0cmljcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VNZXRyaWNzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IGUucmVzb3VyY2VNZXRyaWNzLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnZlcmlmeShlLnJlc291cmNlTWV0cmljc1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZU1ldHJpY3MuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YSlcbiAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICB2YXIgdCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGEoKTtcbiAgICAgICAgICAgIGlmIChlLnJlc291cmNlTWV0cmljcykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5yZXNvdXJjZU1ldHJpY3MpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGEucmVzb3VyY2VNZXRyaWNzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5yZXNvdXJjZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLnJlc291cmNlTWV0cmljcy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5yZXNvdXJjZU1ldHJpY3Nbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGEucmVzb3VyY2VNZXRyaWNzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5yZXNvdXJjZU1ldHJpY3Nbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLmZyb21PYmplY3QoZS5yZXNvdXJjZU1ldHJpY3Nbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgdCB8fCAodCA9IHt9KTtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAoKHQuYXJyYXlzIHx8IHQuZGVmYXVsdHMpICYmIChyLnJlc291cmNlTWV0cmljcyA9IFtdKSwgZS5yZXNvdXJjZU1ldHJpY3MgJiYgZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIucmVzb3VyY2VNZXRyaWNzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgci5yZXNvdXJjZU1ldHJpY3Nbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnRvT2JqZWN0KGUucmVzb3VyY2VNZXRyaWNzW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YVwiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZi5SZXNvdXJjZU1ldHJpY3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jdGlvbiBpKG8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNjb3BlTWV0cmljcyA9IFtdLCBvKVxuICAgICAgICAgICAgICBmb3IgKHZhciBlID0gT2JqZWN0LmtleXMobyksIHQgPSAwOyB0IDwgZS5sZW5ndGg7ICsrdClcbiAgICAgICAgICAgICAgICBvW2VbdF1dICE9IG51bGwgJiYgKHRoaXNbZVt0XV0gPSBvW2VbdF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkucHJvdG90eXBlLnJlc291cmNlID0gbnVsbCwgaS5wcm90b3R5cGUuc2NvcGVNZXRyaWNzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuc2NoZW1hVXJsID0gbnVsbCwgaS5jcmVhdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBpZiAodCB8fCAodCA9ICRXcml0ZXIuY3JlYXRlKCkpLCBlLnJlc291cmNlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJyZXNvdXJjZVwiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmVuY29kZShlLnJlc291cmNlLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKSwgZS5zY29wZU1ldHJpY3MgIT0gbnVsbCAmJiBlLnNjb3BlTWV0cmljcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5zY29wZU1ldHJpY3MubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljcy5lbmNvZGUoZS5zY29wZU1ldHJpY3Nbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDE4XG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIGUuc2NoZW1hVXJsICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJzY2hlbWFVcmxcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDMsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDI2XG4gICAgICAgICAgICApLnN0cmluZyhlLnNjaGVtYVVybCksIHQ7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoZSwgdCkubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9ICRSZWFkZXIuY3JlYXRlKGUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSB0ID09PSB2b2lkIDAgPyBlLmxlbiA6IGUucG9zICsgdCwgbiA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLnJlc291cmNlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBuLnNjb3BlTWV0cmljcyAmJiBuLnNjb3BlTWV0cmljcy5sZW5ndGggfHwgKG4uc2NvcGVNZXRyaWNzID0gW10pLCBuLnNjb3BlTWV0cmljcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3MuZGVjb2RlKGUsIGUudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgIG4uc2NoZW1hVXJsID0gZS5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5yZXNvdXJjZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZVwiKSkge1xuICAgICAgICAgICAgICB2YXIgdCA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UudmVyaWZ5KGUucmVzb3VyY2UpO1xuICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZS5cIiArIHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5zY29wZU1ldHJpY3MgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic2NvcGVNZXRyaWNzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLnNjb3BlTWV0cmljcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2NvcGVNZXRyaWNzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuc2NvcGVNZXRyaWNzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHQgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLnZlcmlmeShlLnNjb3BlTWV0cmljc1tyXSk7XG4gICAgICAgICAgICAgICAgaWYgKHQpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJzY29wZU1ldHJpY3MuXCIgKyB0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpICYmICEkdXRpbC5pc1N0cmluZyhlLnNjaGVtYVVybCkgPyBcInNjaGVtYVVybDogc3RyaW5nIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcylcbiAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICB2YXIgdCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzKCk7XG4gICAgICAgICAgICBpZiAoZS5yZXNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5yZXNvdXJjZSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnJlc291cmNlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmZyb21PYmplY3QoZS5yZXNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5zY29wZU1ldHJpY3MpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuc2NvcGVNZXRyaWNzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcy5zY29wZU1ldHJpY3M6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LnNjb3BlTWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuc2NvcGVNZXRyaWNzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnNjb3BlTWV0cmljc1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3Muc2NvcGVNZXRyaWNzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5zY29wZU1ldHJpY3Nbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLmZyb21PYmplY3QoZS5zY29wZU1ldHJpY3Nbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiAodC5zY2hlbWFVcmwgPSBTdHJpbmcoZS5zY2hlbWFVcmwpKSwgdDtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgdCB8fCAodCA9IHt9KTtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAoKHQuYXJyYXlzIHx8IHQuZGVmYXVsdHMpICYmIChyLnNjb3BlTWV0cmljcyA9IFtdKSwgdC5kZWZhdWx0cyAmJiAoci5yZXNvdXJjZSA9IG51bGwsIHIuc2NoZW1hVXJsID0gXCJcIiksIGUucmVzb3VyY2UgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwicmVzb3VyY2VcIikgJiYgKHIucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLnRvT2JqZWN0KGUucmVzb3VyY2UsIHQpKSwgZS5zY29wZU1ldHJpY3MgJiYgZS5zY29wZU1ldHJpY3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIuc2NvcGVNZXRyaWNzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgZS5zY29wZU1ldHJpY3MubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgci5zY29wZU1ldHJpY3Nbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLnRvT2JqZWN0KGUuc2NvcGVNZXRyaWNzW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikgJiYgKHIuc2NoZW1hVXJsID0gZS5zY2hlbWFVcmwpLCByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3NcIjtcbiAgICAgICAgICB9LCBpO1xuICAgICAgICB9KCksIGYuU2NvcGVNZXRyaWNzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tZXRyaWNzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUuc2NvcGUgPSBudWxsLCBpLnByb3RvdHlwZS5tZXRyaWNzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuc2NoZW1hVXJsID0gbnVsbCwgaS5jcmVhdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBpZiAodCB8fCAodCA9ICRXcml0ZXIuY3JlYXRlKCkpLCBlLnNjb3BlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJzY29wZVwiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS5lbmNvZGUoZS5zY29wZSwgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCksIGUubWV0cmljcyAhPSBudWxsICYmIGUubWV0cmljcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5tZXRyaWNzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMuZW5jb2RlKGUubWV0cmljc1tyXSwgdC51aW50MzIoXG4gICAgICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgICAgMThcbiAgICAgICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInNjaGVtYVVybFwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMywgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMjZcbiAgICAgICAgICAgICkuc3RyaW5nKGUuc2NoZW1hVXJsKSwgdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3MoKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4uc2NvcGUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBuLm1ldHJpY3MgJiYgbi5tZXRyaWNzLmxlbmd0aCB8fCAobi5tZXRyaWNzID0gW10pLCBuLm1ldHJpY3MucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljLmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICBuLnNjaGVtYVVybCA9IGUuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGUuc2tpcFR5cGUobCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gbmV3ICRSZWFkZXIoZSkpLCB0aGlzLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8IGUgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUuc2NvcGUgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic2NvcGVcIikpIHtcbiAgICAgICAgICAgICAgdmFyIHQgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS52ZXJpZnkoZS5zY29wZSk7XG4gICAgICAgICAgICAgIGlmICh0KVxuICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlLlwiICsgdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLm1ldHJpY3MgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwibWV0cmljc1wiKSkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5tZXRyaWNzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJtZXRyaWNzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUubWV0cmljcy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIHZhciB0ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy52ZXJpZnkoZS5tZXRyaWNzW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1ldHJpY3MuXCIgKyB0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpICYmICEkdXRpbC5pc1N0cmluZyhlLnNjaGVtYVVybCkgPyBcInNjaGVtYVVybDogc3RyaW5nIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljcylcbiAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICB2YXIgdCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzKCk7XG4gICAgICAgICAgICBpZiAoZS5zY29wZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5zY29wZSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLnNjb3BlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQuc2NvcGUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS5mcm9tT2JqZWN0KGUuc2NvcGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUubWV0cmljcykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5tZXRyaWNzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljcy5tZXRyaWNzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5tZXRyaWNzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5tZXRyaWNzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLm1ldHJpY3Nbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLm1ldHJpY3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0Lm1ldHJpY3Nbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljLmZyb21PYmplY3QoZS5tZXRyaWNzW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuc2NoZW1hVXJsICE9IG51bGwgJiYgKHQuc2NoZW1hVXJsID0gU3RyaW5nKGUuc2NoZW1hVXJsKSksIHQ7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHQgfHwgKHQgPSB7fSk7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgaWYgKCh0LmFycmF5cyB8fCB0LmRlZmF1bHRzKSAmJiAoci5tZXRyaWNzID0gW10pLCB0LmRlZmF1bHRzICYmIChyLnNjb3BlID0gbnVsbCwgci5zY2hlbWFVcmwgPSBcIlwiKSwgZS5zY29wZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY29wZVwiKSAmJiAoci5zY29wZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLnRvT2JqZWN0KGUuc2NvcGUsIHQpKSwgZS5tZXRyaWNzICYmIGUubWV0cmljcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5tZXRyaWNzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgZS5tZXRyaWNzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgIHIubWV0cmljc1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMudG9PYmplY3QoZS5tZXRyaWNzW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikgJiYgKHIuc2NoZW1hVXJsID0gZS5zY2hlbWFVcmwpLCByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3NcIjtcbiAgICAgICAgICB9LCBpO1xuICAgICAgICB9KCksIGYuTWV0cmljID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShlKSB7XG4gICAgICAgICAgICBpZiAoZSlcbiAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IE9iamVjdC5rZXlzKGUpLCByID0gMDsgciA8IHQubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgZVt0W3JdXSAhPSBudWxsICYmICh0aGlzW3Rbcl1dID0gZVt0W3JdXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGkucHJvdG90eXBlLm5hbWUgPSBudWxsLCBpLnByb3RvdHlwZS5kZXNjcmlwdGlvbiA9IG51bGwsIGkucHJvdG90eXBlLnVuaXQgPSBudWxsLCBpLnByb3RvdHlwZS5nYXVnZSA9IG51bGwsIGkucHJvdG90eXBlLnN1bSA9IG51bGwsIGkucHJvdG90eXBlLmhpc3RvZ3JhbSA9IG51bGwsIGkucHJvdG90eXBlLmV4cG9uZW50aWFsSGlzdG9ncmFtID0gbnVsbCwgaS5wcm90b3R5cGUuc3VtbWFyeSA9IG51bGw7XG4gICAgICAgICAgdmFyIG87XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLnByb3RvdHlwZSwgXCJkYXRhXCIsIHtcbiAgICAgICAgICAgIGdldDogJHV0aWwub25lT2ZHZXR0ZXIobyA9IFtcImdhdWdlXCIsIFwic3VtXCIsIFwiaGlzdG9ncmFtXCIsIFwiZXhwb25lbnRpYWxIaXN0b2dyYW1cIiwgXCJzdW1tYXJ5XCJdKSxcbiAgICAgICAgICAgIHNldDogJHV0aWwub25lT2ZTZXR0ZXIobylcbiAgICAgICAgICB9KSwgaS5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkodCk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICByZXR1cm4gciB8fCAociA9ICRXcml0ZXIuY3JlYXRlKCkpLCB0Lm5hbWUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcIm5hbWVcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICApLnN0cmluZyh0Lm5hbWUpLCB0LmRlc2NyaXB0aW9uICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJkZXNjcmlwdGlvblwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMThcbiAgICAgICAgICAgICkuc3RyaW5nKHQuZGVzY3JpcHRpb24pLCB0LnVuaXQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInVuaXRcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDMsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDI2XG4gICAgICAgICAgICApLnN0cmluZyh0LnVuaXQpLCB0LmdhdWdlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJnYXVnZVwiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2UuZW5jb2RlKHQuZ2F1Z2UsIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA1LCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICA0MlxuICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCB0LnN1bSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwic3VtXCIpICYmICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW0uZW5jb2RlKHQuc3VtLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgNywgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgNThcbiAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKSwgdC5oaXN0b2dyYW0gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImhpc3RvZ3JhbVwiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtLmVuY29kZSh0Lmhpc3RvZ3JhbSwgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDksIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDc0XG4gICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCksIHQuZXhwb25lbnRpYWxIaXN0b2dyYW0gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImV4cG9uZW50aWFsSGlzdG9ncmFtXCIpICYmICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbS5lbmNvZGUodC5leHBvbmVudGlhbEhpc3RvZ3JhbSwgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDEwLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICA4MlxuICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCB0LnN1bW1hcnkgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInN1bW1hcnlcIikgJiYgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkuZW5jb2RlKHQuc3VtbWFyeSwgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDExLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICA5MFxuICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCByO1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHQsIHIpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICBmb3IgKHZhciBuID0gciA9PT0gdm9pZCAwID8gdC5sZW4gOiB0LnBvcyArIHIsIGwgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYygpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICB2YXIgcCA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAocCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgbC5uYW1lID0gdC5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgIGwuZGVzY3JpcHRpb24gPSB0LnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgbC51bml0ID0gdC5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgIGwuZ2F1Z2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2UuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgbC5zdW0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDk6IHtcbiAgICAgICAgICAgICAgICAgIGwuaGlzdG9ncmFtID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbS5kZWNvZGUodCwgdC51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAxMDoge1xuICAgICAgICAgICAgICAgICAgbC5leHBvbmVudGlhbEhpc3RvZ3JhbSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbS5kZWNvZGUodCwgdC51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAxMToge1xuICAgICAgICAgICAgICAgICAgbC5zdW1tYXJ5ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICB0LnNraXBUeXBlKHAgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9IG5ldyAkUmVhZGVyKHQpKSwgdGhpcy5kZWNvZGUodCwgdC51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAodC5uYW1lICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcIm5hbWVcIikgJiYgISR1dGlsLmlzU3RyaW5nKHQubmFtZSkpXG4gICAgICAgICAgICAgIHJldHVybiBcIm5hbWU6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuZGVzY3JpcHRpb24gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZGVzY3JpcHRpb25cIikgJiYgISR1dGlsLmlzU3RyaW5nKHQuZGVzY3JpcHRpb24pKVxuICAgICAgICAgICAgICByZXR1cm4gXCJkZXNjcmlwdGlvbjogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAodC51bml0ICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInVuaXRcIikgJiYgISR1dGlsLmlzU3RyaW5nKHQudW5pdCkpXG4gICAgICAgICAgICAgIHJldHVybiBcInVuaXQ6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuZ2F1Z2UgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZ2F1Z2VcIikpIHtcbiAgICAgICAgICAgICAgci5kYXRhID0gMTtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBuID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlLnZlcmlmeSh0LmdhdWdlKTtcbiAgICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImdhdWdlLlwiICsgbjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuc3VtICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSkge1xuICAgICAgICAgICAgICBpZiAoci5kYXRhID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGE6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICByLmRhdGEgPSAxO1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtLnZlcmlmeSh0LnN1bSk7XG4gICAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdW0uXCIgKyBuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5oaXN0b2dyYW0gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiaGlzdG9ncmFtXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChyLmRhdGEgPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgIHIuZGF0YSA9IDE7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0udmVyaWZ5KHQuaGlzdG9ncmFtKTtcbiAgICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImhpc3RvZ3JhbS5cIiArIG47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmV4cG9uZW50aWFsSGlzdG9ncmFtICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImV4cG9uZW50aWFsSGlzdG9ncmFtXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChyLmRhdGEgPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgIHIuZGF0YSA9IDE7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbS52ZXJpZnkodC5leHBvbmVudGlhbEhpc3RvZ3JhbSk7XG4gICAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJleHBvbmVudGlhbEhpc3RvZ3JhbS5cIiArIG47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LnN1bW1hcnkgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwic3VtbWFyeVwiKSkge1xuICAgICAgICAgICAgICBpZiAoci5kYXRhID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGE6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICByLmRhdGEgPSAxO1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeS52ZXJpZnkodC5zdW1tYXJ5KTtcbiAgICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInN1bW1hcnkuXCIgKyBuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMpXG4gICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgdmFyIHIgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYygpO1xuICAgICAgICAgICAgaWYgKHQubmFtZSAhPSBudWxsICYmIChyLm5hbWUgPSBTdHJpbmcodC5uYW1lKSksIHQuZGVzY3JpcHRpb24gIT0gbnVsbCAmJiAoci5kZXNjcmlwdGlvbiA9IFN0cmluZyh0LmRlc2NyaXB0aW9uKSksIHQudW5pdCAhPSBudWxsICYmIChyLnVuaXQgPSBTdHJpbmcodC51bml0KSksIHQuZ2F1Z2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuZ2F1Z2UgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5nYXVnZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICByLmdhdWdlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlLmZyb21PYmplY3QodC5nYXVnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5zdW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuc3VtICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMuc3VtOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHIuc3VtID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bS5mcm9tT2JqZWN0KHQuc3VtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0Lmhpc3RvZ3JhbSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5oaXN0b2dyYW0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5oaXN0b2dyYW06IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgci5oaXN0b2dyYW0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtLmZyb21PYmplY3QodC5oaXN0b2dyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuZXhwb25lbnRpYWxIaXN0b2dyYW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuZXhwb25lbnRpYWxIaXN0b2dyYW0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5leHBvbmVudGlhbEhpc3RvZ3JhbTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICByLmV4cG9uZW50aWFsSGlzdG9ncmFtID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLmZyb21PYmplY3QodC5leHBvbmVudGlhbEhpc3RvZ3JhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5zdW1tYXJ5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0LnN1bW1hcnkgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5zdW1tYXJ5OiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHIuc3VtbWFyeSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5LmZyb21PYmplY3QodC5zdW1tYXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICByIHx8IChyID0ge30pO1xuICAgICAgICAgICAgdmFyIG4gPSB7fTtcbiAgICAgICAgICAgIHJldHVybiByLmRlZmF1bHRzICYmIChuLm5hbWUgPSBcIlwiLCBuLmRlc2NyaXB0aW9uID0gXCJcIiwgbi51bml0ID0gXCJcIiksIHQubmFtZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpICYmIChuLm5hbWUgPSB0Lm5hbWUpLCB0LmRlc2NyaXB0aW9uICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImRlc2NyaXB0aW9uXCIpICYmIChuLmRlc2NyaXB0aW9uID0gdC5kZXNjcmlwdGlvbiksIHQudW5pdCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ1bml0XCIpICYmIChuLnVuaXQgPSB0LnVuaXQpLCB0LmdhdWdlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImdhdWdlXCIpICYmIChuLmdhdWdlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlLnRvT2JqZWN0KHQuZ2F1Z2UsIHIpLCByLm9uZW9mcyAmJiAobi5kYXRhID0gXCJnYXVnZVwiKSksIHQuc3VtICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSAmJiAobi5zdW0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtLnRvT2JqZWN0KHQuc3VtLCByKSwgci5vbmVvZnMgJiYgKG4uZGF0YSA9IFwic3VtXCIpKSwgdC5oaXN0b2dyYW0gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiaGlzdG9ncmFtXCIpICYmIChuLmhpc3RvZ3JhbSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0udG9PYmplY3QodC5oaXN0b2dyYW0sIHIpLCByLm9uZW9mcyAmJiAobi5kYXRhID0gXCJoaXN0b2dyYW1cIikpLCB0LmV4cG9uZW50aWFsSGlzdG9ncmFtICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImV4cG9uZW50aWFsSGlzdG9ncmFtXCIpICYmIChuLmV4cG9uZW50aWFsSGlzdG9ncmFtID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLnRvT2JqZWN0KHQuZXhwb25lbnRpYWxIaXN0b2dyYW0sIHIpLCByLm9uZW9mcyAmJiAobi5kYXRhID0gXCJleHBvbmVudGlhbEhpc3RvZ3JhbVwiKSksIHQuc3VtbWFyeSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJzdW1tYXJ5XCIpICYmIChuLnN1bW1hcnkgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeS50b09iamVjdCh0LnN1bW1hcnksIHIpLCByLm9uZW9mcyAmJiAobi5kYXRhID0gXCJzdW1tYXJ5XCIpKSwgbjtcbiAgICAgICAgICB9LCBpLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgIH0sIGkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIHQgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLkdhdWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhUG9pbnRzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUuZGF0YVBvaW50cyA9ICR1dGlsLmVtcHR5QXJyYXksIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgaWYgKHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS5kYXRhUG9pbnRzICE9IG51bGwgJiYgZS5kYXRhUG9pbnRzLmxlbmd0aClcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmRhdGFQb2ludHMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC5lbmNvZGUoZS5kYXRhUG9pbnRzW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLmRhdGFQb2ludHMgJiYgbi5kYXRhUG9pbnRzLmxlbmd0aCB8fCAobi5kYXRhUG9pbnRzID0gW10pLCBuLmRhdGFQb2ludHMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGUuc2tpcFR5cGUobCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gbmV3ICRSZWFkZXIoZSkpLCB0aGlzLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8IGUgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUuZGF0YVBvaW50cyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJkYXRhUG9pbnRzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LnZlcmlmeShlLmRhdGFQb2ludHNbdF0pO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50cy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZSgpO1xuICAgICAgICAgICAgaWYgKGUuZGF0YVBvaW50cykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlLmRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmRhdGFQb2ludHMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuZGF0YVBvaW50c1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZS5kYXRhUG9pbnRzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5kYXRhUG9pbnRzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC5mcm9tT2JqZWN0KGUuZGF0YVBvaW50c1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIuZGF0YVBvaW50cyA9IFtdKSwgZS5kYXRhUG9pbnRzICYmIGUuZGF0YVBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgIHIuZGF0YVBvaW50c1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQudG9PYmplY3QoZS5kYXRhUG9pbnRzW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIH0sIGkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgfSwgaS5nZXRUeXBlVXJsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgZSArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZVwiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZi5TdW0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jdGlvbiBpKG8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFQb2ludHMgPSBbXSwgbylcbiAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IE9iamVjdC5rZXlzKG8pLCB0ID0gMDsgdCA8IGUubGVuZ3RoOyArK3QpXG4gICAgICAgICAgICAgICAgb1tlW3RdXSAhPSBudWxsICYmICh0aGlzW2VbdF1dID0gb1tlW3RdXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnByb3RvdHlwZS5kYXRhUG9pbnRzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IG51bGwsIGkucHJvdG90eXBlLmlzTW9ub3RvbmljID0gbnVsbCwgaS5jcmVhdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBpZiAodCB8fCAodCA9ICRXcml0ZXIuY3JlYXRlKCkpLCBlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBlLmRhdGFQb2ludHMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuZGF0YVBvaW50cy5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmVuY29kZShlLmRhdGFQb2ludHNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgMTZcbiAgICAgICAgICAgICkuaW50MzIoZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5KSwgZS5pc01vbm90b25pYyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiaXNNb25vdG9uaWNcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDMsIHdpcmVUeXBlIDAgPSovXG4gICAgICAgICAgICAgIDI0XG4gICAgICAgICAgICApLmJvb2woZS5pc01vbm90b25pYyksIHQ7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoZSwgdCkubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9ICRSZWFkZXIuY3JlYXRlKGUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSB0ID09PSB2b2lkIDAgPyBlLmxlbiA6IGUucG9zICsgdCwgbiA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtKCk7IGUucG9zIDwgcjsgKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChsID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICBuLmRhdGFQb2ludHMgJiYgbi5kYXRhUG9pbnRzLmxlbmd0aCB8fCAobi5kYXRhUG9pbnRzID0gW10pLCBuLmRhdGFQb2ludHMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBuLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBlLmludDMyKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICBuLmlzTW9ub3RvbmljID0gZS5ib29sKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGUuc2tpcFR5cGUobCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gbmV3ICRSZWFkZXIoZSkpLCB0aGlzLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8IGUgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUuZGF0YVBvaW50cyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJkYXRhUG9pbnRzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LnZlcmlmeShlLmRhdGFQb2ludHNbdF0pO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50cy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSlcbiAgICAgICAgICAgICAgc3dpdGNoIChlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eTogZW51bSB2YWx1ZSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmlzTW9ub3RvbmljICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImlzTW9ub3RvbmljXCIpICYmIHR5cGVvZiBlLmlzTW9ub3RvbmljICE9IFwiYm9vbGVhblwiID8gXCJpc01vbm90b25pYzogYm9vbGVhbiBleHBlY3RlZFwiIDogbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW0pXG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bSgpO1xuICAgICAgICAgICAgaWYgKGUuZGF0YVBvaW50cykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bS5kYXRhUG9pbnRzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLmRhdGFQb2ludHNbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtLmRhdGFQb2ludHM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LmRhdGFQb2ludHNbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmZyb21PYmplY3QoZS5kYXRhUG9pbnRzW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICB0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRFwiOlxuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0RFTFRBXCI6XG4gICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICB0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfQ1VNVUxBVElWRVwiOlxuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmlzTW9ub3RvbmljICE9IG51bGwgJiYgKHQuaXNNb25vdG9uaWMgPSAhIWUuaXNNb25vdG9uaWMpLCB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIuZGF0YVBvaW50cyA9IFtdKSwgdC5kZWZhdWx0cyAmJiAoci5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gdC5lbnVtcyA9PT0gU3RyaW5nID8gXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRFwiIDogMCwgci5pc01vbm90b25pYyA9ICExKSwgZS5kYXRhUG9pbnRzICYmIGUuZGF0YVBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgIHIuZGF0YVBvaW50c1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQudG9PYmplY3QoZS5kYXRhUG9pbnRzW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSAmJiAoci5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gdC5lbnVtcyA9PT0gU3RyaW5nID8gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSA9PT0gdm9pZCAwID8gZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5IDogJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSA6IGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSksIGUuaXNNb25vdG9uaWMgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiaXNNb25vdG9uaWNcIikgJiYgKHIuaXNNb25vdG9uaWMgPSBlLmlzTW9ub3RvbmljKSwgcjtcbiAgICAgICAgICB9LCBpLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgIH0sIGkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIGUgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLkhpc3RvZ3JhbSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkobykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVBvaW50cyA9IFtdLCBvKVxuICAgICAgICAgICAgICBmb3IgKHZhciBlID0gT2JqZWN0LmtleXMobyksIHQgPSAwOyB0IDwgZS5sZW5ndGg7ICsrdClcbiAgICAgICAgICAgICAgICBvW2VbdF1dICE9IG51bGwgJiYgKHRoaXNbZVt0XV0gPSBvW2VbdF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkucHJvdG90eXBlLmRhdGFQb2ludHMgPSAkdXRpbC5lbXB0eUFycmF5LCBpLnByb3RvdHlwZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gbnVsbCwgaS5jcmVhdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBpZiAodCB8fCAodCA9ICRXcml0ZXIuY3JlYXRlKCkpLCBlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBlLmRhdGFQb2ludHMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuZGF0YVBvaW50cy5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmVuY29kZShlLmRhdGFQb2ludHNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgMTZcbiAgICAgICAgICAgICkuaW50MzIoZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5KSwgdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0oKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4uZGF0YVBvaW50cyAmJiBuLmRhdGFQb2ludHMubGVuZ3RoIHx8IChuLmRhdGFQb2ludHMgPSBbXSksIG4uZGF0YVBvaW50cy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQuZGVjb2RlKGUsIGUudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgIG4uYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IGUuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5kYXRhUG9pbnRzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImRhdGFQb2ludHNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuZGF0YVBvaW50cykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50czogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCBlLmRhdGFQb2ludHMubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQudmVyaWZ5KGUuZGF0YVBvaW50c1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRhUG9pbnRzLlwiICsgcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJhZ2dyZWdhdGlvblRlbXBvcmFsaXR5XCIpKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSkge1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJhZ2dyZWdhdGlvblRlbXBvcmFsaXR5OiBlbnVtIHZhbHVlIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSwgaS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0oKTtcbiAgICAgICAgICAgIGlmIChlLmRhdGFQb2ludHMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuZGF0YVBvaW50cykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0uZGF0YVBvaW50czogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuZGF0YVBvaW50cy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5kYXRhUG9pbnRzW3JdICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbS5kYXRhUG9pbnRzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5kYXRhUG9pbnRzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludC5mcm9tT2JqZWN0KGUuZGF0YVBvaW50c1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5KSB7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfVU5TUEVDSUZJRURcIjpcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHQuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9ERUxUQVwiOlxuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0NVTVVMQVRJVkVcIjpcbiAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHQuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgdCB8fCAodCA9IHt9KTtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAoKHQuYXJyYXlzIHx8IHQuZGVmYXVsdHMpICYmIChyLmRhdGFQb2ludHMgPSBbXSksIHQuZGVmYXVsdHMgJiYgKHIuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IHQuZW51bXMgPT09IFN0cmluZyA/IFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfVU5TUEVDSUZJRURcIiA6IDApLCBlLmRhdGFQb2ludHMgJiYgZS5kYXRhUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByLmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLmRhdGFQb2ludHMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgci5kYXRhUG9pbnRzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludC50b09iamVjdChlLmRhdGFQb2ludHNbbl0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJhZ2dyZWdhdGlvblRlbXBvcmFsaXR5XCIpICYmIChyLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSB0LmVudW1zID09PSBTdHJpbmcgPyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuQWdncmVnYXRpb25UZW1wb3JhbGl0eVtlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHldID09PSB2b2lkIDAgPyBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgOiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuQWdncmVnYXRpb25UZW1wb3JhbGl0eVtlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHldIDogZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5KSwgcjtcbiAgICAgICAgICB9LCBpLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgIH0sIGkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIGUgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLkV4cG9uZW50aWFsSGlzdG9ncmFtID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhUG9pbnRzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUuZGF0YVBvaW50cyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBudWxsLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGlmICh0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUuZGF0YVBvaW50cyAhPSBudWxsICYmIGUuZGF0YVBvaW50cy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5lbmNvZGUoZS5kYXRhUG9pbnRzW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDAgPSovXG4gICAgICAgICAgICAgIDE2XG4gICAgICAgICAgICApLmludDMyKGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSksIHQ7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoZSwgdCkubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9ICRSZWFkZXIuY3JlYXRlKGUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSB0ID09PSB2b2lkIDAgPyBlLmxlbiA6IGUucG9zICsgdCwgbiA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW0oKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4uZGF0YVBvaW50cyAmJiBuLmRhdGFQb2ludHMubGVuZ3RoIHx8IChuLmRhdGFQb2ludHMgPSBbXSksIG4uZGF0YVBvaW50cy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgbi5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gZS5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiZGF0YVBvaW50c1wiKSkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRhUG9pbnRzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IGUuZGF0YVBvaW50cy5sZW5ndGg7ICsrdCkge1xuICAgICAgICAgICAgICAgIHZhciByID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LnZlcmlmeShlLmRhdGFQb2ludHNbdF0pO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50cy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSlcbiAgICAgICAgICAgICAgc3dpdGNoIChlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eTogZW51bSB2YWx1ZSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbSgpO1xuICAgICAgICAgICAgaWYgKGUuZGF0YVBvaW50cykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLmRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmRhdGFQb2ludHMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuZGF0YVBvaW50c1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbS5kYXRhUG9pbnRzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5kYXRhUG9pbnRzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmZyb21PYmplY3QoZS5kYXRhUG9pbnRzW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICB0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRFwiOlxuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0RFTFRBXCI6XG4gICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICB0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfQ1VNVUxBVElWRVwiOlxuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIuZGF0YVBvaW50cyA9IFtdKSwgdC5kZWZhdWx0cyAmJiAoci5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gdC5lbnVtcyA9PT0gU3RyaW5nID8gXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRFwiIDogMCksIGUuZGF0YVBvaW50cyAmJiBlLmRhdGFQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGUuZGF0YVBvaW50cy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLmRhdGFQb2ludHNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQudG9PYmplY3QoZS5kYXRhUG9pbnRzW25dLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSAmJiAoci5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gdC5lbnVtcyA9PT0gU3RyaW5nID8gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSA9PT0gdm9pZCAwID8gZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5IDogJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSA6IGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSksIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLlN1bW1hcnkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jdGlvbiBpKG8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFQb2ludHMgPSBbXSwgbylcbiAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IE9iamVjdC5rZXlzKG8pLCB0ID0gMDsgdCA8IGUubGVuZ3RoOyArK3QpXG4gICAgICAgICAgICAgICAgb1tlW3RdXSAhPSBudWxsICYmICh0aGlzW2VbdF1dID0gb1tlW3RdXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnByb3RvdHlwZS5kYXRhUG9pbnRzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5jcmVhdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBpZiAodCB8fCAodCA9ICRXcml0ZXIuY3JlYXRlKCkpLCBlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBlLmRhdGFQb2ludHMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuZGF0YVBvaW50cy5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5lbmNvZGUoZS5kYXRhUG9pbnRzW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkoKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4uZGF0YVBvaW50cyAmJiBuLmRhdGFQb2ludHMubGVuZ3RoIHx8IChuLmRhdGFQb2ludHMgPSBbXSksIG4uZGF0YVBvaW50cy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGUuc2tpcFR5cGUobCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gbmV3ICRSZWFkZXIoZSkpLCB0aGlzLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8IGUgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUuZGF0YVBvaW50cyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJkYXRhUG9pbnRzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC52ZXJpZnkoZS5kYXRhUG9pbnRzW3RdKTtcbiAgICAgICAgICAgICAgICBpZiAocilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHMuXCIgKyByO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5KVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5KCk7XG4gICAgICAgICAgICBpZiAoZS5kYXRhUG9pbnRzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeS5kYXRhUG9pbnRzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLmRhdGFQb2ludHNbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeS5kYXRhUG9pbnRzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5kYXRhUG9pbnRzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuZnJvbU9iamVjdChlLmRhdGFQb2ludHNbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgdCB8fCAodCA9IHt9KTtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAoKHQuYXJyYXlzIHx8IHQuZGVmYXVsdHMpICYmIChyLmRhdGFQb2ludHMgPSBbXSksIGUuZGF0YVBvaW50cyAmJiBlLmRhdGFQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGUuZGF0YVBvaW50cy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLmRhdGFQb2ludHNbbl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC50b09iamVjdChlLmRhdGFQb2ludHNbbl0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlcIjtcbiAgICAgICAgICB9LCBpO1xuICAgICAgICB9KCksIGYuQWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpID0ge30sIG8gPSBPYmplY3QuY3JlYXRlKGkpO1xuICAgICAgICAgIHJldHVybiBvW2lbMF0gPSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1VOU1BFQ0lGSUVEXCJdID0gMCwgb1tpWzFdID0gXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9ERUxUQVwiXSA9IDEsIG9baVsyXSA9IFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfQ1VNVUxBVElWRVwiXSA9IDIsIG87XG4gICAgICAgIH0oKSwgZi5EYXRhUG9pbnRGbGFncyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpID0ge30sIG8gPSBPYmplY3QuY3JlYXRlKGkpO1xuICAgICAgICAgIHJldHVybiBvW2lbMF0gPSBcIkRBVEFfUE9JTlRfRkxBR1NfRE9fTk9UX1VTRVwiXSA9IDAsIG9baVsxXSA9IFwiREFUQV9QT0lOVF9GTEFHU19OT19SRUNPUkRFRF9WQUxVRV9NQVNLXCJdID0gMSwgbztcbiAgICAgICAgfSgpLCBmLk51bWJlckRhdGFQb2ludCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkoZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcyA9IFtdLCB0aGlzLmV4ZW1wbGFycyA9IFtdLCBlKVxuICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gT2JqZWN0LmtleXMoZSksIHIgPSAwOyByIDwgdC5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICBlW3Rbcl1dICE9IG51bGwgJiYgKHRoaXNbdFtyXV0gPSBlW3Rbcl1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaS5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLnN0YXJ0VGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUudGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUuYXNEb3VibGUgPSBudWxsLCBpLnByb3RvdHlwZS5hc0ludCA9IG51bGwsIGkucHJvdG90eXBlLmV4ZW1wbGFycyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLmZsYWdzID0gbnVsbDtcbiAgICAgICAgICB2YXIgbztcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgICAgICAgICAgIGdldDogJHV0aWwub25lT2ZHZXR0ZXIobyA9IFtcImFzRG91YmxlXCIsIFwiYXNJbnRcIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaSh0KTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgIGlmIChyIHx8IChyID0gJFdyaXRlci5jcmVhdGUoKSksIHQuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAxN1xuICAgICAgICAgICAgKS5maXhlZDY0KHQuc3RhcnRUaW1lVW5peE5hbm8pLCB0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwidGltZVVuaXhOYW5vXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAyNVxuICAgICAgICAgICAgKS5maXhlZDY0KHQudGltZVVuaXhOYW5vKSwgdC5hc0RvdWJsZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiYXNEb3VibGVcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDQsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDMzXG4gICAgICAgICAgICApLmRvdWJsZSh0LmFzRG91YmxlKSwgdC5leGVtcGxhcnMgIT0gbnVsbCAmJiB0LmV4ZW1wbGFycy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5leGVtcGxhcnMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmVuY29kZSh0LmV4ZW1wbGFyc1tuXSwgci51aW50MzIoXG4gICAgICAgICAgICAgICAgICAvKiBpZCA1LCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgICAgNDJcbiAgICAgICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICBpZiAodC5hc0ludCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiYXNJbnRcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDYsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDQ5XG4gICAgICAgICAgICApLnNmaXhlZDY0KHQuYXNJbnQpLCB0LmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiB0LmF0dHJpYnV0ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUodC5hdHRyaWJ1dGVzW25dLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDcsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICA1OFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiB0LmZsYWdzICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJmbGFnc1wiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgOCwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgNjRcbiAgICAgICAgICAgICkudWludDMyKHQuZmxhZ3MpLCByO1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHQsIHIpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICBmb3IgKHZhciBuID0gciA9PT0gdm9pZCAwID8gdC5sZW4gOiB0LnBvcyArIHIsIGwgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludCgpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICB2YXIgcCA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAocCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgbC5hdHRyaWJ1dGVzICYmIGwuYXR0cmlidXRlcy5sZW5ndGggfHwgKGwuYXR0cmlidXRlcyA9IFtdKSwgbC5hdHRyaWJ1dGVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZGVjb2RlKHQsIHQudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgIGwuc3RhcnRUaW1lVW5peE5hbm8gPSB0LmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgIGwudGltZVVuaXhOYW5vID0gdC5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICBsLmFzRG91YmxlID0gdC5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDY6IHtcbiAgICAgICAgICAgICAgICAgIGwuYXNJbnQgPSB0LnNmaXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICBsLmV4ZW1wbGFycyAmJiBsLmV4ZW1wbGFycy5sZW5ndGggfHwgKGwuZXhlbXBsYXJzID0gW10pLCBsLmV4ZW1wbGFycy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5kZWNvZGUodCwgdC51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgODoge1xuICAgICAgICAgICAgICAgICAgbC5mbGFncyA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICh0LmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiYXR0cmlidXRlc1wiKSkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgIHZhciBsID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5KHQuYXR0cmlidXRlc1tuXSk7XG4gICAgICAgICAgICAgICAgaWYgKGwpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzLlwiICsgbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwic3RhcnRUaW1lVW5peE5hbm9cIikgJiYgISR1dGlsLmlzSW50ZWdlcih0LnN0YXJ0VGltZVVuaXhOYW5vKSAmJiAhKHQuc3RhcnRUaW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKHQuc3RhcnRUaW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIodC5zdGFydFRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgIHJldHVybiBcInN0YXJ0VGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmICh0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikgJiYgISR1dGlsLmlzSW50ZWdlcih0LnRpbWVVbml4TmFubykgJiYgISh0LnRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIodC50aW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIodC50aW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJ0aW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuYXNEb3VibGUgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiYXNEb3VibGVcIikgJiYgKHIudmFsdWUgPSAxLCB0eXBlb2YgdC5hc0RvdWJsZSAhPSBcIm51bWJlclwiKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwiYXNEb3VibGU6IG51bWJlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuYXNJbnQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiYXNJbnRcIikpIHtcbiAgICAgICAgICAgICAgaWYgKHIudmFsdWUgPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidmFsdWU6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICBpZiAoci52YWx1ZSA9IDEsICEkdXRpbC5pc0ludGVnZXIodC5hc0ludCkgJiYgISh0LmFzSW50ICYmICR1dGlsLmlzSW50ZWdlcih0LmFzSW50LmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKHQuYXNJbnQuaGlnaCkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImFzSW50OiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmV4ZW1wbGFycyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJleGVtcGxhcnNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuZXhlbXBsYXJzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJleGVtcGxhcnM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5leGVtcGxhcnMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci52ZXJpZnkodC5leGVtcGxhcnNbbl0pO1xuICAgICAgICAgICAgICAgIGlmIChsKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXhlbXBsYXJzLlwiICsgbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQuZmxhZ3MgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikgJiYgISR1dGlsLmlzSW50ZWdlcih0LmZsYWdzKSA/IFwiZmxhZ3M6IGludGVnZXIgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgfSwgaS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50KVxuICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgIHZhciByID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQoKTtcbiAgICAgICAgICAgIGlmICh0LmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQuYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHIuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5hdHRyaWJ1dGVzW25dICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgci5hdHRyaWJ1dGVzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdCh0LmF0dHJpYnV0ZXNbbl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIuc3RhcnRUaW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZSh0LnN0YXJ0VGltZVVuaXhOYW5vKSkudW5zaWduZWQgPSAhMSA6IHR5cGVvZiB0LnN0YXJ0VGltZVVuaXhOYW5vID09IFwic3RyaW5nXCIgPyByLnN0YXJ0VGltZVVuaXhOYW5vID0gcGFyc2VJbnQodC5zdGFydFRpbWVVbml4TmFubywgMTApIDogdHlwZW9mIHQuc3RhcnRUaW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHIuc3RhcnRUaW1lVW5peE5hbm8gPSB0LnN0YXJ0VGltZVVuaXhOYW5vIDogdHlwZW9mIHQuc3RhcnRUaW1lVW5peE5hbm8gPT0gXCJvYmplY3RcIiAmJiAoci5zdGFydFRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyh0LnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgdC5zdGFydFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQudGltZVVuaXhOYW5vICE9IG51bGwgJiYgKCR1dGlsLkxvbmcgPyAoci50aW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZSh0LnRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJzdHJpbmdcIiA/IHIudGltZVVuaXhOYW5vID0gcGFyc2VJbnQodC50aW1lVW5peE5hbm8sIDEwKSA6IHR5cGVvZiB0LnRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gci50aW1lVW5peE5hbm8gPSB0LnRpbWVVbml4TmFubyA6IHR5cGVvZiB0LnRpbWVVbml4TmFubyA9PSBcIm9iamVjdFwiICYmIChyLnRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyh0LnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIHQudGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkpKSwgdC5hc0RvdWJsZSAhPSBudWxsICYmIChyLmFzRG91YmxlID0gTnVtYmVyKHQuYXNEb3VibGUpKSwgdC5hc0ludCAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIuYXNJbnQgPSAkdXRpbC5Mb25nLmZyb21WYWx1ZSh0LmFzSW50KSkudW5zaWduZWQgPSAhMSA6IHR5cGVvZiB0LmFzSW50ID09IFwic3RyaW5nXCIgPyByLmFzSW50ID0gcGFyc2VJbnQodC5hc0ludCwgMTApIDogdHlwZW9mIHQuYXNJbnQgPT0gXCJudW1iZXJcIiA/IHIuYXNJbnQgPSB0LmFzSW50IDogdHlwZW9mIHQuYXNJbnQgPT0gXCJvYmplY3RcIiAmJiAoci5hc0ludCA9IG5ldyAkdXRpbC5Mb25nQml0cyh0LmFzSW50LmxvdyA+Pj4gMCwgdC5hc0ludC5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQuZXhlbXBsYXJzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmV4ZW1wbGFycykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQuZXhlbXBsYXJzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgci5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmV4ZW1wbGFycy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5leGVtcGxhcnNbbl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmV4ZW1wbGFyczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHIuZXhlbXBsYXJzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmZyb21PYmplY3QodC5leGVtcGxhcnNbbl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdC5mbGFncyAhPSBudWxsICYmIChyLmZsYWdzID0gdC5mbGFncyA+Pj4gMCksIHI7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgaWYgKChyLmFycmF5cyB8fCByLmRlZmF1bHRzKSAmJiAobi5leGVtcGxhcnMgPSBbXSwgbi5hdHRyaWJ1dGVzID0gW10pLCByLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgdmFyIGwgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCAhMSk7XG4gICAgICAgICAgICAgICAgbi5zdGFydFRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IGwudG9TdHJpbmcoKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IGwudG9OdW1iZXIoKSA6IGw7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIG4uc3RhcnRUaW1lVW5peE5hbm8gPSByLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgdmFyIGwgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCAhMSk7XG4gICAgICAgICAgICAgICAgbi50aW1lVW5peE5hbm8gPSByLmxvbmdzID09PSBTdHJpbmcgPyBsLnRvU3RyaW5nKCkgOiByLmxvbmdzID09PSBOdW1iZXIgPyBsLnRvTnVtYmVyKCkgOiBsO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgbi5mbGFncyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSAmJiAodHlwZW9mIHQuc3RhcnRUaW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IG4uc3RhcnRUaW1lVW5peE5hbm8gPSByLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcodC5zdGFydFRpbWVVbml4TmFubykgOiB0LnN0YXJ0VGltZVVuaXhOYW5vIDogbi5zdGFydFRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodC5zdGFydFRpbWVVbml4TmFubykgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC5zdGFydFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIHQuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IHQuc3RhcnRUaW1lVW5peE5hbm8pLCB0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikgJiYgKHR5cGVvZiB0LnRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gbi50aW1lVW5peE5hbm8gPSByLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcodC50aW1lVW5peE5hbm8pIDogdC50aW1lVW5peE5hbm8gOiBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodC50aW1lVW5peE5hbm8pIDogci5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKHQudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgdC50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IHQudGltZVVuaXhOYW5vKSwgdC5hc0RvdWJsZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhc0RvdWJsZVwiKSAmJiAobi5hc0RvdWJsZSA9IHIuanNvbiAmJiAhaXNGaW5pdGUodC5hc0RvdWJsZSkgPyBTdHJpbmcodC5hc0RvdWJsZSkgOiB0LmFzRG91YmxlLCByLm9uZW9mcyAmJiAobi52YWx1ZSA9IFwiYXNEb3VibGVcIikpLCB0LmV4ZW1wbGFycyAmJiB0LmV4ZW1wbGFycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgbi5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCB0LmV4ZW1wbGFycy5sZW5ndGg7ICsrcClcbiAgICAgICAgICAgICAgICBuLmV4ZW1wbGFyc1twXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci50b09iamVjdCh0LmV4ZW1wbGFyc1twXSwgcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5hc0ludCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhc0ludFwiKSAmJiAodHlwZW9mIHQuYXNJbnQgPT0gXCJudW1iZXJcIiA/IG4uYXNJbnQgPSByLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcodC5hc0ludCkgOiB0LmFzSW50IDogbi5hc0ludCA9IHIubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodC5hc0ludCkgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC5hc0ludC5sb3cgPj4+IDAsIHQuYXNJbnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IHQuYXNJbnQsIHIub25lb2ZzICYmIChuLnZhbHVlID0gXCJhc0ludFwiKSksIHQuYXR0cmlidXRlcyAmJiB0LmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIG4uYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrcClcbiAgICAgICAgICAgICAgICBuLmF0dHJpYnV0ZXNbcF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdCh0LmF0dHJpYnV0ZXNbcF0sIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQuZmxhZ3MgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikgJiYgKG4uZmxhZ3MgPSB0LmZsYWdzKSwgbjtcbiAgICAgICAgICB9LCBpLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgIH0sIGkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIHQgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50XCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLkhpc3RvZ3JhbURhdGFQb2ludCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkoZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcyA9IFtdLCB0aGlzLmJ1Y2tldENvdW50cyA9IFtdLCB0aGlzLmV4cGxpY2l0Qm91bmRzID0gW10sIHRoaXMuZXhlbXBsYXJzID0gW10sIGUpXG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhlKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgIGVbdFtyXV0gIT0gbnVsbCAmJiAodGhpc1t0W3JdXSA9IGVbdFtyXV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpLnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuc3RhcnRUaW1lVW5peE5hbm8gPSBudWxsLCBpLnByb3RvdHlwZS50aW1lVW5peE5hbm8gPSBudWxsLCBpLnByb3RvdHlwZS5jb3VudCA9IG51bGwsIGkucHJvdG90eXBlLnN1bSA9IG51bGwsIGkucHJvdG90eXBlLmJ1Y2tldENvdW50cyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLmV4cGxpY2l0Qm91bmRzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuZXhlbXBsYXJzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuZmxhZ3MgPSBudWxsLCBpLnByb3RvdHlwZS5taW4gPSBudWxsLCBpLnByb3RvdHlwZS5tYXggPSBudWxsO1xuICAgICAgICAgIHZhciBvO1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIFwiX3N1bVwiLCB7XG4gICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKG8gPSBbXCJzdW1cIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIFwiX21pblwiLCB7XG4gICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKG8gPSBbXCJtaW5cIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIFwiX21heFwiLCB7XG4gICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKG8gPSBbXCJtYXhcIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaSh0KTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgIGlmIChyIHx8IChyID0gJFdyaXRlci5jcmVhdGUoKSksIHQuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAxN1xuICAgICAgICAgICAgKS5maXhlZDY0KHQuc3RhcnRUaW1lVW5peE5hbm8pLCB0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwidGltZVVuaXhOYW5vXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAyNVxuICAgICAgICAgICAgKS5maXhlZDY0KHQudGltZVVuaXhOYW5vKSwgdC5jb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiY291bnRcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDQsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDMzXG4gICAgICAgICAgICApLmZpeGVkNjQodC5jb3VudCksIHQuc3VtICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJzdW1cIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDUsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDQxXG4gICAgICAgICAgICApLmRvdWJsZSh0LnN1bSksIHQuYnVja2V0Q291bnRzICE9IG51bGwgJiYgdC5idWNrZXRDb3VudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIudWludDMyKFxuICAgICAgICAgICAgICAgIC8qIGlkIDYsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgNTBcbiAgICAgICAgICAgICAgKS5mb3JrKCk7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5idWNrZXRDb3VudHMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgci5maXhlZDY0KHQuYnVja2V0Q291bnRzW25dKTtcbiAgICAgICAgICAgICAgci5sZGVsaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmV4cGxpY2l0Qm91bmRzICE9IG51bGwgJiYgdC5leHBsaWNpdEJvdW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci51aW50MzIoXG4gICAgICAgICAgICAgICAgLyogaWQgNywgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICA1OFxuICAgICAgICAgICAgICApLmZvcmsoKTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmV4cGxpY2l0Qm91bmRzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgIHIuZG91YmxlKHQuZXhwbGljaXRCb3VuZHNbbl0pO1xuICAgICAgICAgICAgICByLmxkZWxpbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuZXhlbXBsYXJzICE9IG51bGwgJiYgdC5leGVtcGxhcnMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQuZXhlbXBsYXJzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5lbmNvZGUodC5leGVtcGxhcnNbbl0sIHIudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgOCwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDY2XG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgaWYgKHQuYXR0cmlidXRlcyAhPSBudWxsICYmIHQuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZSh0LmF0dHJpYnV0ZXNbbl0sIHIudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgOSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDc0XG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIHQuZmxhZ3MgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImZsYWdzXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxMCwgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgODBcbiAgICAgICAgICAgICkudWludDMyKHQuZmxhZ3MpLCB0Lm1pbiAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwibWluXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxMSwgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgODlcbiAgICAgICAgICAgICkuZG91YmxlKHQubWluKSwgdC5tYXggIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcIm1heFwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMTIsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDk3XG4gICAgICAgICAgICApLmRvdWJsZSh0Lm1heCksIHI7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9ICRSZWFkZXIuY3JlYXRlKHQpKTtcbiAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50KCk7IHQucG9zIDwgbjsgKSB7XG4gICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChwID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSA5OiB7XG4gICAgICAgICAgICAgICAgICBsLmF0dHJpYnV0ZXMgJiYgbC5hdHRyaWJ1dGVzLmxlbmd0aCB8fCAobC5hdHRyaWJ1dGVzID0gW10pLCBsLmF0dHJpYnV0ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUodCwgdC51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgbC5zdGFydFRpbWVVbml4TmFubyA9IHQuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgbC50aW1lVW5peE5hbm8gPSB0LmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICAgICAgICAgIGwuY291bnQgPSB0LmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgIGwuc3VtID0gdC5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDY6IHtcbiAgICAgICAgICAgICAgICAgIGlmIChsLmJ1Y2tldENvdW50cyAmJiBsLmJ1Y2tldENvdW50cy5sZW5ndGggfHwgKGwuYnVja2V0Q291bnRzID0gW10pLCAocCAmIDcpID09PSAyKVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBzID0gdC51aW50MzIoKSArIHQucG9zOyB0LnBvcyA8IHM7IClcbiAgICAgICAgICAgICAgICAgICAgICBsLmJ1Y2tldENvdW50cy5wdXNoKHQuZml4ZWQ2NCgpKTtcbiAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgbC5idWNrZXRDb3VudHMucHVzaCh0LmZpeGVkNjQoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICBpZiAobC5leHBsaWNpdEJvdW5kcyAmJiBsLmV4cGxpY2l0Qm91bmRzLmxlbmd0aCB8fCAobC5leHBsaWNpdEJvdW5kcyA9IFtdKSwgKHAgJiA3KSA9PT0gMilcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcyA9IHQudWludDMyKCkgKyB0LnBvczsgdC5wb3MgPCBzOyApXG4gICAgICAgICAgICAgICAgICAgICAgbC5leHBsaWNpdEJvdW5kcy5wdXNoKHQuZG91YmxlKCkpO1xuICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBsLmV4cGxpY2l0Qm91bmRzLnB1c2godC5kb3VibGUoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA4OiB7XG4gICAgICAgICAgICAgICAgICBsLmV4ZW1wbGFycyAmJiBsLmV4ZW1wbGFycy5sZW5ndGggfHwgKGwuZXhlbXBsYXJzID0gW10pLCBsLmV4ZW1wbGFycy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5kZWNvZGUodCwgdC51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHtcbiAgICAgICAgICAgICAgICAgIGwuZmxhZ3MgPSB0LnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMTE6IHtcbiAgICAgICAgICAgICAgICAgIGwubWluID0gdC5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDEyOiB7XG4gICAgICAgICAgICAgICAgICBsLm1heCA9IHQuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuYXR0cmlidXRlcyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkodC5hdHRyaWJ1dGVzW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQuc3RhcnRUaW1lVW5peE5hbm8pICYmICEodC5zdGFydFRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIodC5zdGFydFRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwic3RhcnRUaW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQudGltZVVuaXhOYW5vICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQudGltZVVuaXhOYW5vKSAmJiAhKHQudGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcih0LnRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LnRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgIHJldHVybiBcInRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAodC5jb3VudCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJjb3VudFwiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQuY291bnQpICYmICEodC5jb3VudCAmJiAkdXRpbC5pc0ludGVnZXIodC5jb3VudC5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LmNvdW50LmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwiY291bnQ6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuc3VtICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSAmJiB0eXBlb2YgdC5zdW0gIT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgcmV0dXJuIFwic3VtOiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmICh0LmJ1Y2tldENvdW50cyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJidWNrZXRDb3VudHNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuYnVja2V0Q291bnRzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJidWNrZXRDb3VudHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgdC5idWNrZXRDb3VudHMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIodC5idWNrZXRDb3VudHNbcl0pICYmICEodC5idWNrZXRDb3VudHNbcl0gJiYgJHV0aWwuaXNJbnRlZ2VyKHQuYnVja2V0Q291bnRzW3JdLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKHQuYnVja2V0Q291bnRzW3JdLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImJ1Y2tldENvdW50czogaW50ZWdlcnxMb25nW10gZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmV4cGxpY2l0Qm91bmRzICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImV4cGxpY2l0Qm91bmRzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmV4cGxpY2l0Qm91bmRzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJleHBsaWNpdEJvdW5kczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB0LmV4cGxpY2l0Qm91bmRzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5leHBsaWNpdEJvdW5kc1tyXSAhPSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXhwbGljaXRCb3VuZHM6IG51bWJlcltdIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5leGVtcGxhcnMgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZXhlbXBsYXJzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmV4ZW1wbGFycykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZXhlbXBsYXJzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IHQuZXhlbXBsYXJzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIudmVyaWZ5KHQuZXhlbXBsYXJzW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImV4ZW1wbGFycy5cIiArIG47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0LmZsYWdzICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpICYmICEkdXRpbC5pc0ludGVnZXIodC5mbGFncykgPyBcImZsYWdzOiBpbnRlZ2VyIGV4cGVjdGVkXCIgOiB0Lm1pbiAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJtaW5cIikgJiYgdHlwZW9mIHQubWluICE9IFwibnVtYmVyXCIgPyBcIm1pbjogbnVtYmVyIGV4cGVjdGVkXCIgOiB0Lm1heCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJtYXhcIikgJiYgdHlwZW9mIHQubWF4ICE9IFwibnVtYmVyXCIgPyBcIm1heDogbnVtYmVyIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludClcbiAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICB2YXIgciA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50KCk7XG4gICAgICAgICAgICBpZiAodC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICByLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuYXR0cmlidXRlc1tuXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQuYXR0cmlidXRlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHIuYXR0cmlidXRlc1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmZyb21PYmplY3QodC5hdHRyaWJ1dGVzW25dKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/IChyLnN0YXJ0VGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC5zdGFydFRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgdC5zdGFydFRpbWVVbml4TmFubyA9PSBcInN0cmluZ1wiID8gci5zdGFydFRpbWVVbml4TmFubyA9IHBhcnNlSW50KHQuc3RhcnRUaW1lVW5peE5hbm8sIDEwKSA6IHR5cGVvZiB0LnN0YXJ0VGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyByLnN0YXJ0VGltZVVuaXhOYW5vID0gdC5zdGFydFRpbWVVbml4TmFubyA6IHR5cGVvZiB0LnN0YXJ0VGltZVVuaXhOYW5vID09IFwib2JqZWN0XCIgJiYgKHIuc3RhcnRUaW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHModC5zdGFydFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIHQuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCB0LnRpbWVVbml4TmFubyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIudGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC50aW1lVW5peE5hbm8pKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIHQudGltZVVuaXhOYW5vID09IFwic3RyaW5nXCIgPyByLnRpbWVVbml4TmFubyA9IHBhcnNlSW50KHQudGltZVVuaXhOYW5vLCAxMCkgOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHIudGltZVVuaXhOYW5vID0gdC50aW1lVW5peE5hbm8gOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJvYmplY3RcIiAmJiAoci50aW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHModC50aW1lVW5peE5hbm8ubG93ID4+PiAwLCB0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQuY291bnQgIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/IChyLmNvdW50ID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC5jb3VudCkpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgdC5jb3VudCA9PSBcInN0cmluZ1wiID8gci5jb3VudCA9IHBhcnNlSW50KHQuY291bnQsIDEwKSA6IHR5cGVvZiB0LmNvdW50ID09IFwibnVtYmVyXCIgPyByLmNvdW50ID0gdC5jb3VudCA6IHR5cGVvZiB0LmNvdW50ID09IFwib2JqZWN0XCIgJiYgKHIuY291bnQgPSBuZXcgJHV0aWwuTG9uZ0JpdHModC5jb3VudC5sb3cgPj4+IDAsIHQuY291bnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCB0LnN1bSAhPSBudWxsICYmIChyLnN1bSA9IE51bWJlcih0LnN1bSkpLCB0LmJ1Y2tldENvdW50cykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5idWNrZXRDb3VudHMpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmJ1Y2tldENvdW50czogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHIuYnVja2V0Q291bnRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5idWNrZXRDb3VudHMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgJHV0aWwuTG9uZyA/IChyLmJ1Y2tldENvdW50c1tuXSA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKHQuYnVja2V0Q291bnRzW25dKSkudW5zaWduZWQgPSAhMSA6IHR5cGVvZiB0LmJ1Y2tldENvdW50c1tuXSA9PSBcInN0cmluZ1wiID8gci5idWNrZXRDb3VudHNbbl0gPSBwYXJzZUludCh0LmJ1Y2tldENvdW50c1tuXSwgMTApIDogdHlwZW9mIHQuYnVja2V0Q291bnRzW25dID09IFwibnVtYmVyXCIgPyByLmJ1Y2tldENvdW50c1tuXSA9IHQuYnVja2V0Q291bnRzW25dIDogdHlwZW9mIHQuYnVja2V0Q291bnRzW25dID09IFwib2JqZWN0XCIgJiYgKHIuYnVja2V0Q291bnRzW25dID0gbmV3ICR1dGlsLkxvbmdCaXRzKHQuYnVja2V0Q291bnRzW25dLmxvdyA+Pj4gMCwgdC5idWNrZXRDb3VudHNbbl0uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5leHBsaWNpdEJvdW5kcykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5leHBsaWNpdEJvdW5kcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQuZXhwbGljaXRCb3VuZHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICByLmV4cGxpY2l0Qm91bmRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5leHBsaWNpdEJvdW5kcy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLmV4cGxpY2l0Qm91bmRzW25dID0gTnVtYmVyKHQuZXhwbGljaXRCb3VuZHNbbl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuZXhlbXBsYXJzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmV4ZW1wbGFycykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQuZXhlbXBsYXJzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgci5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmV4ZW1wbGFycy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5leGVtcGxhcnNbbl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmV4ZW1wbGFyczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHIuZXhlbXBsYXJzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmZyb21PYmplY3QodC5leGVtcGxhcnNbbl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdC5mbGFncyAhPSBudWxsICYmIChyLmZsYWdzID0gdC5mbGFncyA+Pj4gMCksIHQubWluICE9IG51bGwgJiYgKHIubWluID0gTnVtYmVyKHQubWluKSksIHQubWF4ICE9IG51bGwgJiYgKHIubWF4ID0gTnVtYmVyKHQubWF4KSksIHI7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgaWYgKChyLmFycmF5cyB8fCByLmRlZmF1bHRzKSAmJiAobi5idWNrZXRDb3VudHMgPSBbXSwgbi5leHBsaWNpdEJvdW5kcyA9IFtdLCBuLmV4ZW1wbGFycyA9IFtdLCBuLmF0dHJpYnV0ZXMgPSBbXSksIHIuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICBuLnN0YXJ0VGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gbC50b1N0cmluZygpIDogci5sb25ncyA9PT0gTnVtYmVyID8gbC50b051bWJlcigpIDogbDtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgbi5zdGFydFRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IGwudG9TdHJpbmcoKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IGwudG9OdW1iZXIoKSA6IGw7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgIHZhciBsID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgITEpO1xuICAgICAgICAgICAgICAgIG4uY291bnQgPSByLmxvbmdzID09PSBTdHJpbmcgPyBsLnRvU3RyaW5nKCkgOiByLmxvbmdzID09PSBOdW1iZXIgPyBsLnRvTnVtYmVyKCkgOiBsO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBuLmNvdW50ID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICBuLmZsYWdzID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmICh0eXBlb2YgdC5zdGFydFRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gbi5zdGFydFRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyh0LnN0YXJ0VGltZVVuaXhOYW5vKSA6IHQuc3RhcnRUaW1lVW5peE5hbm8gOiBuLnN0YXJ0VGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0LnN0YXJ0VGltZVVuaXhOYW5vKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyh0LnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgdC5zdGFydFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogdC5zdGFydFRpbWVVbml4TmFubyksIHQudGltZVVuaXhOYW5vICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSAmJiAodHlwZW9mIHQudGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyh0LnRpbWVVbml4TmFubykgOiB0LnRpbWVVbml4TmFubyA6IG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0LnRpbWVVbml4TmFubykgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC50aW1lVW5peE5hbm8ubG93ID4+PiAwLCB0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogdC50aW1lVW5peE5hbm8pLCB0LmNvdW50ICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImNvdW50XCIpICYmICh0eXBlb2YgdC5jb3VudCA9PSBcIm51bWJlclwiID8gbi5jb3VudCA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyh0LmNvdW50KSA6IHQuY291bnQgOiBuLmNvdW50ID0gci5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0LmNvdW50KSA6IHIubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyh0LmNvdW50LmxvdyA+Pj4gMCwgdC5jb3VudC5oaWdoID4+PiAwKS50b051bWJlcigpIDogdC5jb3VudCksIHQuc3VtICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSAmJiAobi5zdW0gPSByLmpzb24gJiYgIWlzRmluaXRlKHQuc3VtKSA/IFN0cmluZyh0LnN1bSkgOiB0LnN1bSwgci5vbmVvZnMgJiYgKG4uX3N1bSA9IFwic3VtXCIpKSwgdC5idWNrZXRDb3VudHMgJiYgdC5idWNrZXRDb3VudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIG4uYnVja2V0Q291bnRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgdC5idWNrZXRDb3VudHMubGVuZ3RoOyArK3ApXG4gICAgICAgICAgICAgICAgdHlwZW9mIHQuYnVja2V0Q291bnRzW3BdID09IFwibnVtYmVyXCIgPyBuLmJ1Y2tldENvdW50c1twXSA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyh0LmJ1Y2tldENvdW50c1twXSkgOiB0LmJ1Y2tldENvdW50c1twXSA6IG4uYnVja2V0Q291bnRzW3BdID0gci5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0LmJ1Y2tldENvdW50c1twXSkgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC5idWNrZXRDb3VudHNbcF0ubG93ID4+PiAwLCB0LmJ1Y2tldENvdW50c1twXS5oaWdoID4+PiAwKS50b051bWJlcigpIDogdC5idWNrZXRDb3VudHNbcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5leHBsaWNpdEJvdW5kcyAmJiB0LmV4cGxpY2l0Qm91bmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBuLmV4cGxpY2l0Qm91bmRzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgdC5leHBsaWNpdEJvdW5kcy5sZW5ndGg7ICsrcClcbiAgICAgICAgICAgICAgICBuLmV4cGxpY2l0Qm91bmRzW3BdID0gci5qc29uICYmICFpc0Zpbml0ZSh0LmV4cGxpY2l0Qm91bmRzW3BdKSA/IFN0cmluZyh0LmV4cGxpY2l0Qm91bmRzW3BdKSA6IHQuZXhwbGljaXRCb3VuZHNbcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5leGVtcGxhcnMgJiYgdC5leGVtcGxhcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIG4uZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgdC5leGVtcGxhcnMubGVuZ3RoOyArK3ApXG4gICAgICAgICAgICAgICAgbi5leGVtcGxhcnNbcF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIudG9PYmplY3QodC5leGVtcGxhcnNbcF0sIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuYXR0cmlidXRlcyAmJiB0LmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIG4uYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrcClcbiAgICAgICAgICAgICAgICBuLmF0dHJpYnV0ZXNbcF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdCh0LmF0dHJpYnV0ZXNbcF0sIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQuZmxhZ3MgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikgJiYgKG4uZmxhZ3MgPSB0LmZsYWdzKSwgdC5taW4gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwibWluXCIpICYmIChuLm1pbiA9IHIuanNvbiAmJiAhaXNGaW5pdGUodC5taW4pID8gU3RyaW5nKHQubWluKSA6IHQubWluLCByLm9uZW9mcyAmJiAobi5fbWluID0gXCJtaW5cIikpLCB0Lm1heCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJtYXhcIikgJiYgKG4ubWF4ID0gci5qc29uICYmICFpc0Zpbml0ZSh0Lm1heCkgPyBTdHJpbmcodC5tYXgpIDogdC5tYXgsIHIub25lb2ZzICYmIChuLl9tYXggPSBcIm1heFwiKSksIG47XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICByZXR1cm4gdCA9PT0gdm9pZCAwICYmICh0ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCB0ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFwiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZi5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkoZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcyA9IFtdLCB0aGlzLmV4ZW1wbGFycyA9IFtdLCBlKVxuICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gT2JqZWN0LmtleXMoZSksIHIgPSAwOyByIDwgdC5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICBlW3Rbcl1dICE9IG51bGwgJiYgKHRoaXNbdFtyXV0gPSBlW3Rbcl1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaS5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLnN0YXJ0VGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUudGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUuY291bnQgPSBudWxsLCBpLnByb3RvdHlwZS5zdW0gPSBudWxsLCBpLnByb3RvdHlwZS5zY2FsZSA9IG51bGwsIGkucHJvdG90eXBlLnplcm9Db3VudCA9IG51bGwsIGkucHJvdG90eXBlLnBvc2l0aXZlID0gbnVsbCwgaS5wcm90b3R5cGUubmVnYXRpdmUgPSBudWxsLCBpLnByb3RvdHlwZS5mbGFncyA9IG51bGwsIGkucHJvdG90eXBlLmV4ZW1wbGFycyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLm1pbiA9IG51bGwsIGkucHJvdG90eXBlLm1heCA9IG51bGwsIGkucHJvdG90eXBlLnplcm9UaHJlc2hvbGQgPSBudWxsO1xuICAgICAgICAgIHZhciBvO1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIFwiX3N1bVwiLCB7XG4gICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKG8gPSBbXCJzdW1cIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIFwiX21pblwiLCB7XG4gICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKG8gPSBbXCJtaW5cIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIFwiX21heFwiLCB7XG4gICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKG8gPSBbXCJtYXhcIl0pLFxuICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcihvKVxuICAgICAgICAgIH0pLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaSh0KTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgIGlmIChyIHx8IChyID0gJFdyaXRlci5jcmVhdGUoKSksIHQuYXR0cmlidXRlcyAhPSBudWxsICYmIHQuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZSh0LmF0dHJpYnV0ZXNbbl0sIHIudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgaWYgKHQuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAxN1xuICAgICAgICAgICAgKS5maXhlZDY0KHQuc3RhcnRUaW1lVW5peE5hbm8pLCB0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwidGltZVVuaXhOYW5vXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAyNVxuICAgICAgICAgICAgKS5maXhlZDY0KHQudGltZVVuaXhOYW5vKSwgdC5jb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiY291bnRcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDQsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDMzXG4gICAgICAgICAgICApLmZpeGVkNjQodC5jb3VudCksIHQuc3VtICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJzdW1cIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDUsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDQxXG4gICAgICAgICAgICApLmRvdWJsZSh0LnN1bSksIHQuc2NhbGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInNjYWxlXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA2LCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICA0OFxuICAgICAgICAgICAgKS5zaW50MzIodC5zY2FsZSksIHQuemVyb0NvdW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJ6ZXJvQ291bnRcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDcsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDU3XG4gICAgICAgICAgICApLmZpeGVkNjQodC56ZXJvQ291bnQpLCB0LnBvc2l0aXZlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJwb3NpdGl2ZVwiKSAmJiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cy5lbmNvZGUodC5wb3NpdGl2ZSwgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDgsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDY2XG4gICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCksIHQubmVnYXRpdmUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcIm5lZ2F0aXZlXCIpICYmICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLmVuY29kZSh0Lm5lZ2F0aXZlLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgOSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgNzRcbiAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKSwgdC5mbGFncyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiZmxhZ3NcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDEwLCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICA4MFxuICAgICAgICAgICAgKS51aW50MzIodC5mbGFncyksIHQuZXhlbXBsYXJzICE9IG51bGwgJiYgdC5leGVtcGxhcnMubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQuZXhlbXBsYXJzLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5lbmNvZGUodC5leGVtcGxhcnNbbl0sIHIudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMTEsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICA5MFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiB0Lm1pbiAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwibWluXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxMiwgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgOTdcbiAgICAgICAgICAgICkuZG91YmxlKHQubWluKSwgdC5tYXggIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcIm1heFwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMTMsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDEwNVxuICAgICAgICAgICAgKS5kb3VibGUodC5tYXgpLCB0Lnplcm9UaHJlc2hvbGQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInplcm9UaHJlc2hvbGRcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDE0LCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAxMTNcbiAgICAgICAgICAgICkuZG91YmxlKHQuemVyb1RocmVzaG9sZCksIHI7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUodCwgcikubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9ICRSZWFkZXIuY3JlYXRlKHQpKTtcbiAgICAgICAgICAgIGZvciAodmFyIG4gPSByID09PSB2b2lkIDAgPyB0LmxlbiA6IHQucG9zICsgciwgbCA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQoKTsgdC5wb3MgPCBuOyApIHtcbiAgICAgICAgICAgICAgdmFyIHAgPSB0LnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKHAgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIGwuYXR0cmlidXRlcyAmJiBsLmF0dHJpYnV0ZXMubGVuZ3RoIHx8IChsLmF0dHJpYnV0ZXMgPSBbXSksIGwuYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZSh0LCB0LnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBsLnN0YXJ0VGltZVVuaXhOYW5vID0gdC5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICBsLnRpbWVVbml4TmFubyA9IHQuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgbC5jb3VudCA9IHQuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNToge1xuICAgICAgICAgICAgICAgICAgbC5zdW0gPSB0LmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNjoge1xuICAgICAgICAgICAgICAgICAgbC5zY2FsZSA9IHQuc2ludDMyKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICBsLnplcm9Db3VudCA9IHQuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgODoge1xuICAgICAgICAgICAgICAgICAgbC5wb3NpdGl2ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDk6IHtcbiAgICAgICAgICAgICAgICAgIGwubmVnYXRpdmUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cy5kZWNvZGUodCwgdC51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAxMDoge1xuICAgICAgICAgICAgICAgICAgbC5mbGFncyA9IHQudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAxMToge1xuICAgICAgICAgICAgICAgICAgbC5leGVtcGxhcnMgJiYgbC5leGVtcGxhcnMubGVuZ3RoIHx8IChsLmV4ZW1wbGFycyA9IFtdKSwgbC5leGVtcGxhcnMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIuZGVjb2RlKHQsIHQudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDEyOiB7XG4gICAgICAgICAgICAgICAgICBsLm1pbiA9IHQuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAxMzoge1xuICAgICAgICAgICAgICAgICAgbC5tYXggPSB0LmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMTQ6IHtcbiAgICAgICAgICAgICAgICAgIGwuemVyb1RocmVzaG9sZCA9IHQuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuYXR0cmlidXRlcyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkodC5hdHRyaWJ1dGVzW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQuc3RhcnRUaW1lVW5peE5hbm8pICYmICEodC5zdGFydFRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIodC5zdGFydFRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwic3RhcnRUaW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQudGltZVVuaXhOYW5vICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQudGltZVVuaXhOYW5vKSAmJiAhKHQudGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcih0LnRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LnRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgIHJldHVybiBcInRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAodC5jb3VudCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJjb3VudFwiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHQuY291bnQpICYmICEodC5jb3VudCAmJiAkdXRpbC5pc0ludGVnZXIodC5jb3VudC5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LmNvdW50LmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwiY291bnQ6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKHQuc3VtICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSAmJiB0eXBlb2YgdC5zdW0gIT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgcmV0dXJuIFwic3VtOiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmICh0LnNjYWxlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInNjYWxlXCIpICYmICEkdXRpbC5pc0ludGVnZXIodC5zY2FsZSkpXG4gICAgICAgICAgICAgIHJldHVybiBcInNjYWxlOiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAodC56ZXJvQ291bnQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiemVyb0NvdW50XCIpICYmICEkdXRpbC5pc0ludGVnZXIodC56ZXJvQ291bnQpICYmICEodC56ZXJvQ291bnQgJiYgJHV0aWwuaXNJbnRlZ2VyKHQuemVyb0NvdW50LmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKHQuemVyb0NvdW50LmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwiemVyb0NvdW50OiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmICh0LnBvc2l0aXZlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInBvc2l0aXZlXCIpKSB7XG4gICAgICAgICAgICAgIHZhciBuID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMudmVyaWZ5KHQucG9zaXRpdmUpO1xuICAgICAgICAgICAgICBpZiAobilcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwb3NpdGl2ZS5cIiArIG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5uZWdhdGl2ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJuZWdhdGl2ZVwiKSkge1xuICAgICAgICAgICAgICB2YXIgbiA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLnZlcmlmeSh0Lm5lZ2F0aXZlKTtcbiAgICAgICAgICAgICAgaWYgKG4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibmVnYXRpdmUuXCIgKyBuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuZmxhZ3MgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikgJiYgISR1dGlsLmlzSW50ZWdlcih0LmZsYWdzKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwiZmxhZ3M6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmICh0LmV4ZW1wbGFycyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJleGVtcGxhcnNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuZXhlbXBsYXJzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJleGVtcGxhcnM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgdC5leGVtcGxhcnMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci52ZXJpZnkodC5leGVtcGxhcnNbcl0pO1xuICAgICAgICAgICAgICAgIGlmIChuKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXhlbXBsYXJzLlwiICsgbjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQubWluICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcIm1pblwiKSAmJiB0eXBlb2YgdC5taW4gIT0gXCJudW1iZXJcIiA/IFwibWluOiBudW1iZXIgZXhwZWN0ZWRcIiA6IHQubWF4ICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcIm1heFwiKSAmJiB0eXBlb2YgdC5tYXggIT0gXCJudW1iZXJcIiA/IFwibWF4OiBudW1iZXIgZXhwZWN0ZWRcIiA6IHQuemVyb1RocmVzaG9sZCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ6ZXJvVGhyZXNob2xkXCIpICYmIHR5cGVvZiB0Lnplcm9UaHJlc2hvbGQgIT0gXCJudW1iZXJcIiA/IFwiemVyb1RocmVzaG9sZDogbnVtYmVyIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50KVxuICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgIHZhciByID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCgpO1xuICAgICAgICAgICAgaWYgKHQuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodC5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICByLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuYXR0cmlidXRlc1tuXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgci5hdHRyaWJ1dGVzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdCh0LmF0dHJpYnV0ZXNbbl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIuc3RhcnRUaW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZSh0LnN0YXJ0VGltZVVuaXhOYW5vKSkudW5zaWduZWQgPSAhMSA6IHR5cGVvZiB0LnN0YXJ0VGltZVVuaXhOYW5vID09IFwic3RyaW5nXCIgPyByLnN0YXJ0VGltZVVuaXhOYW5vID0gcGFyc2VJbnQodC5zdGFydFRpbWVVbml4TmFubywgMTApIDogdHlwZW9mIHQuc3RhcnRUaW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHIuc3RhcnRUaW1lVW5peE5hbm8gPSB0LnN0YXJ0VGltZVVuaXhOYW5vIDogdHlwZW9mIHQuc3RhcnRUaW1lVW5peE5hbm8gPT0gXCJvYmplY3RcIiAmJiAoci5zdGFydFRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyh0LnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgdC5zdGFydFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQudGltZVVuaXhOYW5vICE9IG51bGwgJiYgKCR1dGlsLkxvbmcgPyAoci50aW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZSh0LnRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJzdHJpbmdcIiA/IHIudGltZVVuaXhOYW5vID0gcGFyc2VJbnQodC50aW1lVW5peE5hbm8sIDEwKSA6IHR5cGVvZiB0LnRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gci50aW1lVW5peE5hbm8gPSB0LnRpbWVVbml4TmFubyA6IHR5cGVvZiB0LnRpbWVVbml4TmFubyA9PSBcIm9iamVjdFwiICYmIChyLnRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyh0LnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIHQudGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkpKSwgdC5jb3VudCAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIuY291bnQgPSAkdXRpbC5Mb25nLmZyb21WYWx1ZSh0LmNvdW50KSkudW5zaWduZWQgPSAhMSA6IHR5cGVvZiB0LmNvdW50ID09IFwic3RyaW5nXCIgPyByLmNvdW50ID0gcGFyc2VJbnQodC5jb3VudCwgMTApIDogdHlwZW9mIHQuY291bnQgPT0gXCJudW1iZXJcIiA/IHIuY291bnQgPSB0LmNvdW50IDogdHlwZW9mIHQuY291bnQgPT0gXCJvYmplY3RcIiAmJiAoci5jb3VudCA9IG5ldyAkdXRpbC5Mb25nQml0cyh0LmNvdW50LmxvdyA+Pj4gMCwgdC5jb3VudC5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQuc3VtICE9IG51bGwgJiYgKHIuc3VtID0gTnVtYmVyKHQuc3VtKSksIHQuc2NhbGUgIT0gbnVsbCAmJiAoci5zY2FsZSA9IHQuc2NhbGUgfCAwKSwgdC56ZXJvQ291bnQgIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/IChyLnplcm9Db3VudCA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKHQuemVyb0NvdW50KSkudW5zaWduZWQgPSAhMSA6IHR5cGVvZiB0Lnplcm9Db3VudCA9PSBcInN0cmluZ1wiID8gci56ZXJvQ291bnQgPSBwYXJzZUludCh0Lnplcm9Db3VudCwgMTApIDogdHlwZW9mIHQuemVyb0NvdW50ID09IFwibnVtYmVyXCIgPyByLnplcm9Db3VudCA9IHQuemVyb0NvdW50IDogdHlwZW9mIHQuemVyb0NvdW50ID09IFwib2JqZWN0XCIgJiYgKHIuemVyb0NvdW50ID0gbmV3ICR1dGlsLkxvbmdCaXRzKHQuemVyb0NvdW50LmxvdyA+Pj4gMCwgdC56ZXJvQ291bnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCB0LnBvc2l0aXZlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0LnBvc2l0aXZlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wb3NpdGl2ZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICByLnBvc2l0aXZlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMuZnJvbU9iamVjdCh0LnBvc2l0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0Lm5lZ2F0aXZlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0Lm5lZ2F0aXZlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5uZWdhdGl2ZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICByLm5lZ2F0aXZlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMuZnJvbU9iamVjdCh0Lm5lZ2F0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmZsYWdzICE9IG51bGwgJiYgKHIuZmxhZ3MgPSB0LmZsYWdzID4+PiAwKSwgdC5leGVtcGxhcnMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuZXhlbXBsYXJzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmV4ZW1wbGFyczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHIuZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5leGVtcGxhcnMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuZXhlbXBsYXJzW25dICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmV4ZW1wbGFyczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHIuZXhlbXBsYXJzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmZyb21PYmplY3QodC5leGVtcGxhcnNbbl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdC5taW4gIT0gbnVsbCAmJiAoci5taW4gPSBOdW1iZXIodC5taW4pKSwgdC5tYXggIT0gbnVsbCAmJiAoci5tYXggPSBOdW1iZXIodC5tYXgpKSwgdC56ZXJvVGhyZXNob2xkICE9IG51bGwgJiYgKHIuemVyb1RocmVzaG9sZCA9IE51bWJlcih0Lnplcm9UaHJlc2hvbGQpKSwgcjtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgciB8fCAociA9IHt9KTtcbiAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICBpZiAoKHIuYXJyYXlzIHx8IHIuZGVmYXVsdHMpICYmIChuLmF0dHJpYnV0ZXMgPSBbXSwgbi5leGVtcGxhcnMgPSBbXSksIHIuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICBuLnN0YXJ0VGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gbC50b1N0cmluZygpIDogci5sb25ncyA9PT0gTnVtYmVyID8gbC50b051bWJlcigpIDogbDtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgbi5zdGFydFRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IGwudG9TdHJpbmcoKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IGwudG9OdW1iZXIoKSA6IGw7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgIHZhciBsID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgITEpO1xuICAgICAgICAgICAgICAgIG4uY291bnQgPSByLmxvbmdzID09PSBTdHJpbmcgPyBsLnRvU3RyaW5nKCkgOiByLmxvbmdzID09PSBOdW1iZXIgPyBsLnRvTnVtYmVyKCkgOiBsO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBuLmNvdW50ID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICBpZiAobi5zY2FsZSA9IDAsICR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICBuLnplcm9Db3VudCA9IHIubG9uZ3MgPT09IFN0cmluZyA/IGwudG9TdHJpbmcoKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IGwudG9OdW1iZXIoKSA6IGw7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIG4uemVyb0NvdW50ID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICBuLnBvc2l0aXZlID0gbnVsbCwgbi5uZWdhdGl2ZSA9IG51bGwsIG4uZmxhZ3MgPSAwLCBuLnplcm9UaHJlc2hvbGQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuYXR0cmlidXRlcyAmJiB0LmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIG4uYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHQuYXR0cmlidXRlcy5sZW5ndGg7ICsrcClcbiAgICAgICAgICAgICAgICBuLmF0dHJpYnV0ZXNbcF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdCh0LmF0dHJpYnV0ZXNbcF0sIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwic3RhcnRUaW1lVW5peE5hbm9cIikgJiYgKHR5cGVvZiB0LnN0YXJ0VGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyBuLnN0YXJ0VGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHQuc3RhcnRUaW1lVW5peE5hbm8pIDogdC5zdGFydFRpbWVVbml4TmFubyA6IG4uc3RhcnRUaW1lVW5peE5hbm8gPSByLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQuc3RhcnRUaW1lVW5peE5hbm8pIDogci5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKHQuc3RhcnRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCB0LnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiB0LnN0YXJ0VGltZVVuaXhOYW5vKSwgdC50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwidGltZVVuaXhOYW5vXCIpICYmICh0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHQudGltZVVuaXhOYW5vKSA6IHQudGltZVVuaXhOYW5vIDogbi50aW1lVW5peE5hbm8gPSByLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQudGltZVVuaXhOYW5vKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyh0LnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIHQudGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiB0LnRpbWVVbml4TmFubyksIHQuY291bnQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwiY291bnRcIikgJiYgKHR5cGVvZiB0LmNvdW50ID09IFwibnVtYmVyXCIgPyBuLmNvdW50ID0gci5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHQuY291bnQpIDogdC5jb3VudCA6IG4uY291bnQgPSByLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQuY291bnQpIDogci5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKHQuY291bnQubG93ID4+PiAwLCB0LmNvdW50LmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiB0LmNvdW50KSwgdC5zdW0gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwic3VtXCIpICYmIChuLnN1bSA9IHIuanNvbiAmJiAhaXNGaW5pdGUodC5zdW0pID8gU3RyaW5nKHQuc3VtKSA6IHQuc3VtLCByLm9uZW9mcyAmJiAobi5fc3VtID0gXCJzdW1cIikpLCB0LnNjYWxlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInNjYWxlXCIpICYmIChuLnNjYWxlID0gdC5zY2FsZSksIHQuemVyb0NvdW50ICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInplcm9Db3VudFwiKSAmJiAodHlwZW9mIHQuemVyb0NvdW50ID09IFwibnVtYmVyXCIgPyBuLnplcm9Db3VudCA9IHIubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyh0Lnplcm9Db3VudCkgOiB0Lnplcm9Db3VudCA6IG4uemVyb0NvdW50ID0gci5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0Lnplcm9Db3VudCkgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC56ZXJvQ291bnQubG93ID4+PiAwLCB0Lnplcm9Db3VudC5oaWdoID4+PiAwKS50b051bWJlcigpIDogdC56ZXJvQ291bnQpLCB0LnBvc2l0aXZlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInBvc2l0aXZlXCIpICYmIChuLnBvc2l0aXZlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMudG9PYmplY3QodC5wb3NpdGl2ZSwgcikpLCB0Lm5lZ2F0aXZlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcIm5lZ2F0aXZlXCIpICYmIChuLm5lZ2F0aXZlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMudG9PYmplY3QodC5uZWdhdGl2ZSwgcikpLCB0LmZsYWdzICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpICYmIChuLmZsYWdzID0gdC5mbGFncyksIHQuZXhlbXBsYXJzICYmIHQuZXhlbXBsYXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBuLmV4ZW1wbGFycyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHQuZXhlbXBsYXJzLmxlbmd0aDsgKytwKVxuICAgICAgICAgICAgICAgIG4uZXhlbXBsYXJzW3BdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLnRvT2JqZWN0KHQuZXhlbXBsYXJzW3BdLCByKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0Lm1pbiAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJtaW5cIikgJiYgKG4ubWluID0gci5qc29uICYmICFpc0Zpbml0ZSh0Lm1pbikgPyBTdHJpbmcodC5taW4pIDogdC5taW4sIHIub25lb2ZzICYmIChuLl9taW4gPSBcIm1pblwiKSksIHQubWF4ICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcIm1heFwiKSAmJiAobi5tYXggPSByLmpzb24gJiYgIWlzRmluaXRlKHQubWF4KSA/IFN0cmluZyh0Lm1heCkgOiB0Lm1heCwgci5vbmVvZnMgJiYgKG4uX21heCA9IFwibWF4XCIpKSwgdC56ZXJvVGhyZXNob2xkICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInplcm9UaHJlc2hvbGRcIikgJiYgKG4uemVyb1RocmVzaG9sZCA9IHIuanNvbiAmJiAhaXNGaW5pdGUodC56ZXJvVGhyZXNob2xkKSA/IFN0cmluZyh0Lnplcm9UaHJlc2hvbGQpIDogdC56ZXJvVGhyZXNob2xkKSwgbjtcbiAgICAgICAgICB9LCBpLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgIH0sIGkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIiksIHQgKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcIjtcbiAgICAgICAgICB9LCBpLkJ1Y2tldHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5idWNrZXRDb3VudHMgPSBbXSwgdClcbiAgICAgICAgICAgICAgICBmb3IgKHZhciByID0gT2JqZWN0LmtleXModCksIG4gPSAwOyBuIDwgci5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICAgIHRbcltuXV0gIT0gbnVsbCAmJiAodGhpc1tyW25dXSA9IHRbcltuXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUucHJvdG90eXBlLm9mZnNldCA9IG51bGwsIGUucHJvdG90eXBlLmJ1Y2tldENvdW50cyA9ICR1dGlsLmVtcHR5QXJyYXksIGUuY3JlYXRlID0gZnVuY3Rpb24ocikge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IGUocik7XG4gICAgICAgICAgICB9LCBlLmVuY29kZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICAgICAgICAgICAgaWYgKG4gfHwgKG4gPSAkV3JpdGVyLmNyZWF0ZSgpKSwgci5vZmZzZXQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChyLCBcIm9mZnNldFwiKSAmJiBuLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAxLCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICAgIDhcbiAgICAgICAgICAgICAgKS5zaW50MzIoci5vZmZzZXQpLCByLmJ1Y2tldENvdW50cyAhPSBudWxsICYmIHIuYnVja2V0Q291bnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG4udWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDE4XG4gICAgICAgICAgICAgICAgKS5mb3JrKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCByLmJ1Y2tldENvdW50cy5sZW5ndGg7ICsrbClcbiAgICAgICAgICAgICAgICAgIG4udWludDY0KHIuYnVja2V0Q291bnRzW2xdKTtcbiAgICAgICAgICAgICAgICBuLmxkZWxpbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgICAgfSwgZS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShyLCBuKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIH0sIGUuZGVjb2RlID0gZnVuY3Rpb24ociwgbikge1xuICAgICAgICAgICAgICByIGluc3RhbmNlb2YgJFJlYWRlciB8fCAociA9ICRSZWFkZXIuY3JlYXRlKHIpKTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IG4gPT09IHZvaWQgMCA/IHIubGVuIDogci5wb3MgKyBuLCBwID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzKCk7IHIucG9zIDwgbDsgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHMgPSByLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgIHAub2Zmc2V0ID0gci5zaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAuYnVja2V0Q291bnRzICYmIHAuYnVja2V0Q291bnRzLmxlbmd0aCB8fCAocC5idWNrZXRDb3VudHMgPSBbXSksIChzICYgNykgPT09IDIpXG4gICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IHIudWludDMyKCkgKyByLnBvczsgci5wb3MgPCB5OyApXG4gICAgICAgICAgICAgICAgICAgICAgICBwLmJ1Y2tldENvdW50cy5wdXNoKHIudWludDY0KCkpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgcC5idWNrZXRDb3VudHMucHVzaChyLnVpbnQ2NCgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByLnNraXBUeXBlKHMgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgfSwgZS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihyKSB7XG4gICAgICAgICAgICAgIHJldHVybiByIGluc3RhbmNlb2YgJFJlYWRlciB8fCAociA9IG5ldyAkUmVhZGVyKHIpKSwgdGhpcy5kZWNvZGUociwgci51aW50MzIoKSk7XG4gICAgICAgICAgICB9LCBlLnZlcmlmeSA9IGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9IFwib2JqZWN0XCIgfHwgciA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgaWYgKHIub2Zmc2V0ICE9IG51bGwgJiYgci5oYXNPd25Qcm9wZXJ0eShcIm9mZnNldFwiKSAmJiAhJHV0aWwuaXNJbnRlZ2VyKHIub2Zmc2V0KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJvZmZzZXQ6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgaWYgKHIuYnVja2V0Q291bnRzICE9IG51bGwgJiYgci5oYXNPd25Qcm9wZXJ0eShcImJ1Y2tldENvdW50c1wiKSkge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyLmJ1Y2tldENvdW50cykpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJidWNrZXRDb3VudHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCByLmJ1Y2tldENvdW50cy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKHIuYnVja2V0Q291bnRzW25dKSAmJiAhKHIuYnVja2V0Q291bnRzW25dICYmICR1dGlsLmlzSW50ZWdlcihyLmJ1Y2tldENvdW50c1tuXS5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihyLmJ1Y2tldENvdW50c1tuXS5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImJ1Y2tldENvdW50czogaW50ZWdlcnxMb25nW10gZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0sIGUuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cylcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgICAgdmFyIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMoKTtcbiAgICAgICAgICAgICAgaWYgKHIub2Zmc2V0ICE9IG51bGwgJiYgKG4ub2Zmc2V0ID0gci5vZmZzZXQgfCAwKSwgci5idWNrZXRDb3VudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoci5idWNrZXRDb3VudHMpKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLmJ1Y2tldENvdW50czogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgbi5idWNrZXRDb3VudHMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHIuYnVja2V0Q291bnRzLmxlbmd0aDsgKytsKVxuICAgICAgICAgICAgICAgICAgJHV0aWwuTG9uZyA/IChuLmJ1Y2tldENvdW50c1tsXSA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKHIuYnVja2V0Q291bnRzW2xdKSkudW5zaWduZWQgPSAhMCA6IHR5cGVvZiByLmJ1Y2tldENvdW50c1tsXSA9PSBcInN0cmluZ1wiID8gbi5idWNrZXRDb3VudHNbbF0gPSBwYXJzZUludChyLmJ1Y2tldENvdW50c1tsXSwgMTApIDogdHlwZW9mIHIuYnVja2V0Q291bnRzW2xdID09IFwibnVtYmVyXCIgPyBuLmJ1Y2tldENvdW50c1tsXSA9IHIuYnVja2V0Q291bnRzW2xdIDogdHlwZW9mIHIuYnVja2V0Q291bnRzW2xdID09IFwib2JqZWN0XCIgJiYgKG4uYnVja2V0Q291bnRzW2xdID0gbmV3ICR1dGlsLkxvbmdCaXRzKHIuYnVja2V0Q291bnRzW2xdLmxvdyA+Pj4gMCwgci5idWNrZXRDb3VudHNbbF0uaGlnaCA+Pj4gMCkudG9OdW1iZXIoITApKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICAgIH0sIGUudG9PYmplY3QgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgICAgICAgICAgIG4gfHwgKG4gPSB7fSk7XG4gICAgICAgICAgICAgIHZhciBsID0ge307XG4gICAgICAgICAgICAgIGlmICgobi5hcnJheXMgfHwgbi5kZWZhdWx0cykgJiYgKGwuYnVja2V0Q291bnRzID0gW10pLCBuLmRlZmF1bHRzICYmIChsLm9mZnNldCA9IDApLCByLm9mZnNldCAhPSBudWxsICYmIHIuaGFzT3duUHJvcGVydHkoXCJvZmZzZXRcIikgJiYgKGwub2Zmc2V0ID0gci5vZmZzZXQpLCByLmJ1Y2tldENvdW50cyAmJiByLmJ1Y2tldENvdW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsLmJ1Y2tldENvdW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgci5idWNrZXRDb3VudHMubGVuZ3RoOyArK3ApXG4gICAgICAgICAgICAgICAgICB0eXBlb2Ygci5idWNrZXRDb3VudHNbcF0gPT0gXCJudW1iZXJcIiA/IGwuYnVja2V0Q291bnRzW3BdID0gbi5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKHIuYnVja2V0Q291bnRzW3BdKSA6IHIuYnVja2V0Q291bnRzW3BdIDogbC5idWNrZXRDb3VudHNbcF0gPSBuLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIuYnVja2V0Q291bnRzW3BdKSA6IG4ubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhyLmJ1Y2tldENvdW50c1twXS5sb3cgPj4+IDAsIHIuYnVja2V0Q291bnRzW3BdLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCEwKSA6IHIuYnVja2V0Q291bnRzW3BdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgICAgfSwgZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgfSwgZS5nZXRUeXBlVXJsID0gZnVuY3Rpb24ocikge1xuICAgICAgICAgICAgICByZXR1cm4gciA9PT0gdm9pZCAwICYmIChyID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCByICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHNcIjtcbiAgICAgICAgICAgIH0sIGU7XG4gICAgICAgICAgfSgpLCBpO1xuICAgICAgICB9KCksIGYuU3VtbWFyeURhdGFQb2ludCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkobykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcyA9IFtdLCB0aGlzLnF1YW50aWxlVmFsdWVzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLnN0YXJ0VGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUudGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUuY291bnQgPSBudWxsLCBpLnByb3RvdHlwZS5zdW0gPSBudWxsLCBpLnByb3RvdHlwZS5xdWFudGlsZVZhbHVlcyA9ICR1dGlsLmVtcHR5QXJyYXksIGkucHJvdG90eXBlLmZsYWdzID0gbnVsbCwgaS5jcmVhdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkoZSk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBpZiAodCB8fCAodCA9ICRXcml0ZXIuY3JlYXRlKCkpLCBlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJzdGFydFRpbWVVbml4TmFub1wiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMiwgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgMTdcbiAgICAgICAgICAgICkuZml4ZWQ2NChlLnN0YXJ0VGltZVVuaXhOYW5vKSwgZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInRpbWVVbml4TmFub1wiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMywgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgMjVcbiAgICAgICAgICAgICkuZml4ZWQ2NChlLnRpbWVVbml4TmFubyksIGUuY291bnQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImNvdW50XCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA0LCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAzM1xuICAgICAgICAgICAgKS5maXhlZDY0KGUuY291bnQpLCBlLnN1bSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwic3VtXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA1LCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICA0MVxuICAgICAgICAgICAgKS5kb3VibGUoZS5zdW0pLCBlLnF1YW50aWxlVmFsdWVzICE9IG51bGwgJiYgZS5xdWFudGlsZVZhbHVlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5xdWFudGlsZVZhbHVlcy5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUuZW5jb2RlKGUucXVhbnRpbGVWYWx1ZXNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgNiwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDUwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgaWYgKGUuYXR0cmlidXRlcyAhPSBudWxsICYmIGUuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShlLmF0dHJpYnV0ZXNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgNywgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDU4XG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIGUuZmxhZ3MgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImZsYWdzXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA4LCB3aXJlVHlwZSAwID0qL1xuICAgICAgICAgICAgICA2NFxuICAgICAgICAgICAgKS51aW50MzIoZS5mbGFncyksIHQ7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoZSwgdCkubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9ICRSZWFkZXIuY3JlYXRlKGUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSB0ID09PSB2b2lkIDAgPyBlLmxlbiA6IGUucG9zICsgdCwgbiA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludCgpOyBlLnBvcyA8IHI7ICkge1xuICAgICAgICAgICAgICB2YXIgbCA9IGUudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAobCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgbi5hdHRyaWJ1dGVzICYmIG4uYXR0cmlidXRlcy5sZW5ndGggfHwgKG4uYXR0cmlidXRlcyA9IFtdKSwgbi5hdHRyaWJ1dGVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZGVjb2RlKGUsIGUudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgIG4uc3RhcnRUaW1lVW5peE5hbm8gPSBlLmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgIG4udGltZVVuaXhOYW5vID0gZS5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICBuLmNvdW50ID0gZS5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICBuLnN1bSA9IGUuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA2OiB7XG4gICAgICAgICAgICAgICAgICBuLnF1YW50aWxlVmFsdWVzICYmIG4ucXVhbnRpbGVWYWx1ZXMubGVuZ3RoIHx8IChuLnF1YW50aWxlVmFsdWVzID0gW10pLCBuLnF1YW50aWxlVmFsdWVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlLmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA4OiB7XG4gICAgICAgICAgICAgICAgICBuLmZsYWdzID0gZS51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImF0dHJpYnV0ZXNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShlLmF0dHJpYnV0ZXNbdF0pO1xuICAgICAgICAgICAgICAgIGlmIChyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlcy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5zdGFydFRpbWVVbml4TmFubykgJiYgIShlLnN0YXJ0VGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcihlLnN0YXJ0VGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKGUuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJzdGFydFRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwidGltZVVuaXhOYW5vXCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS50aW1lVW5peE5hbm8pICYmICEoZS50aW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKGUudGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKGUudGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwidGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLmNvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImNvdW50XCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5jb3VudCkgJiYgIShlLmNvdW50ICYmICR1dGlsLmlzSW50ZWdlcihlLmNvdW50LmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKGUuY291bnQuaGlnaCkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJjb3VudDogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5zdW0gIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwic3VtXCIpICYmIHR5cGVvZiBlLnN1bSAhPSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICByZXR1cm4gXCJzdW06IG51bWJlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUucXVhbnRpbGVWYWx1ZXMgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwicXVhbnRpbGVWYWx1ZXNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUucXVhbnRpbGVWYWx1ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInF1YW50aWxlVmFsdWVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IGUucXVhbnRpbGVWYWx1ZXMubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZS52ZXJpZnkoZS5xdWFudGlsZVZhbHVlc1t0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHIpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJxdWFudGlsZVZhbHVlcy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmZsYWdzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5mbGFncykgPyBcImZsYWdzOiBpbnRlZ2VyIGV4cGVjdGVkXCIgOiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQpXG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQoKTtcbiAgICAgICAgICAgIGlmIChlLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuYXR0cmlidXRlc1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LmF0dHJpYnV0ZXM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LmF0dHJpYnV0ZXNbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KGUuYXR0cmlidXRlc1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgKCR1dGlsLkxvbmcgPyAodC5zdGFydFRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKGUuc3RhcnRUaW1lVW5peE5hbm8pKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIGUuc3RhcnRUaW1lVW5peE5hbm8gPT0gXCJzdHJpbmdcIiA/IHQuc3RhcnRUaW1lVW5peE5hbm8gPSBwYXJzZUludChlLnN0YXJ0VGltZVVuaXhOYW5vLCAxMCkgOiB0eXBlb2YgZS5zdGFydFRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gdC5zdGFydFRpbWVVbml4TmFubyA9IGUuc3RhcnRUaW1lVW5peE5hbm8gOiB0eXBlb2YgZS5zdGFydFRpbWVVbml4TmFubyA9PSBcIm9iamVjdFwiICYmICh0LnN0YXJ0VGltZVVuaXhOYW5vID0gbmV3ICR1dGlsLkxvbmdCaXRzKGUuc3RhcnRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBlLnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkpKSwgZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/ICh0LnRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKGUudGltZVVuaXhOYW5vKSkudW5zaWduZWQgPSAhMSA6IHR5cGVvZiBlLnRpbWVVbml4TmFubyA9PSBcInN0cmluZ1wiID8gdC50aW1lVW5peE5hbm8gPSBwYXJzZUludChlLnRpbWVVbml4TmFubywgMTApIDogdHlwZW9mIGUudGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyB0LnRpbWVVbml4TmFubyA9IGUudGltZVVuaXhOYW5vIDogdHlwZW9mIGUudGltZVVuaXhOYW5vID09IFwib2JqZWN0XCIgJiYgKHQudGltZVVuaXhOYW5vID0gbmV3ICR1dGlsLkxvbmdCaXRzKGUudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgZS50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCBlLmNvdW50ICE9IG51bGwgJiYgKCR1dGlsLkxvbmcgPyAodC5jb3VudCA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKGUuY291bnQpKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIGUuY291bnQgPT0gXCJzdHJpbmdcIiA/IHQuY291bnQgPSBwYXJzZUludChlLmNvdW50LCAxMCkgOiB0eXBlb2YgZS5jb3VudCA9PSBcIm51bWJlclwiID8gdC5jb3VudCA9IGUuY291bnQgOiB0eXBlb2YgZS5jb3VudCA9PSBcIm9iamVjdFwiICYmICh0LmNvdW50ID0gbmV3ICR1dGlsLkxvbmdCaXRzKGUuY291bnQubG93ID4+PiAwLCBlLmNvdW50LmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkpKSwgZS5zdW0gIT0gbnVsbCAmJiAodC5zdW0gPSBOdW1iZXIoZS5zdW0pKSwgZS5xdWFudGlsZVZhbHVlcykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5xdWFudGlsZVZhbHVlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LnF1YW50aWxlVmFsdWVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5xdWFudGlsZVZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUucXVhbnRpbGVWYWx1ZXMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUucXVhbnRpbGVWYWx1ZXNbcl0gIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5xdWFudGlsZVZhbHVlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHQucXVhbnRpbGVWYWx1ZXNbcl0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUuZnJvbU9iamVjdChlLnF1YW50aWxlVmFsdWVzW3JdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuZmxhZ3MgIT0gbnVsbCAmJiAodC5mbGFncyA9IGUuZmxhZ3MgPj4+IDApLCB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIucXVhbnRpbGVWYWx1ZXMgPSBbXSwgci5hdHRyaWJ1dGVzID0gW10pLCB0LmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSBuZXcgJHV0aWwuTG9uZygwLCAwLCAhMSk7XG4gICAgICAgICAgICAgICAgci5zdGFydFRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/IG4udG9TdHJpbmcoKSA6IHQubG9uZ3MgPT09IE51bWJlciA/IG4udG9OdW1iZXIoKSA6IG47XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHIuc3RhcnRUaW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSBuZXcgJHV0aWwuTG9uZygwLCAwLCAhMSk7XG4gICAgICAgICAgICAgICAgci50aW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBuLnRvU3RyaW5nKCkgOiB0LmxvbmdzID09PSBOdW1iZXIgPyBuLnRvTnVtYmVyKCkgOiBuO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByLnRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICByLmNvdW50ID0gdC5sb25ncyA9PT0gU3RyaW5nID8gbi50b1N0cmluZygpIDogdC5sb25ncyA9PT0gTnVtYmVyID8gbi50b051bWJlcigpIDogbjtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgci5jb3VudCA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgci5zdW0gPSAwLCByLmZsYWdzID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpICYmICh0eXBlb2YgZS5zdGFydFRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gci5zdGFydFRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhlLnN0YXJ0VGltZVVuaXhOYW5vKSA6IGUuc3RhcnRUaW1lVW5peE5hbm8gOiByLnN0YXJ0VGltZVVuaXhOYW5vID0gdC5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLnN0YXJ0VGltZVVuaXhOYW5vKSA6IHQubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhlLnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgZS5zdGFydFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogZS5zdGFydFRpbWVVbml4TmFubyksIGUudGltZVVuaXhOYW5vICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSAmJiAodHlwZW9mIGUudGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyByLnRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhlLnRpbWVVbml4TmFubykgOiBlLnRpbWVVbml4TmFubyA6IHIudGltZVVuaXhOYW5vID0gdC5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLnRpbWVVbml4TmFubykgOiB0LmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMoZS50aW1lVW5peE5hbm8ubG93ID4+PiAwLCBlLnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogZS50aW1lVW5peE5hbm8pLCBlLmNvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImNvdW50XCIpICYmICh0eXBlb2YgZS5jb3VudCA9PSBcIm51bWJlclwiID8gci5jb3VudCA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhlLmNvdW50KSA6IGUuY291bnQgOiByLmNvdW50ID0gdC5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLmNvdW50KSA6IHQubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhlLmNvdW50LmxvdyA+Pj4gMCwgZS5jb3VudC5oaWdoID4+PiAwKS50b051bWJlcigpIDogZS5jb3VudCksIGUuc3VtICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSAmJiAoci5zdW0gPSB0Lmpzb24gJiYgIWlzRmluaXRlKGUuc3VtKSA/IFN0cmluZyhlLnN1bSkgOiBlLnN1bSksIGUucXVhbnRpbGVWYWx1ZXMgJiYgZS5xdWFudGlsZVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5xdWFudGlsZVZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGUucXVhbnRpbGVWYWx1ZXMubGVuZ3RoOyArK2wpXG4gICAgICAgICAgICAgICAgci5xdWFudGlsZVZhbHVlc1tsXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZS50b09iamVjdChlLnF1YW50aWxlVmFsdWVzW2xdLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmF0dHJpYnV0ZXMgJiYgZS5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2wpXG4gICAgICAgICAgICAgICAgci5hdHRyaWJ1dGVzW2xdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudG9PYmplY3QoZS5hdHRyaWJ1dGVzW2xdLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLmZsYWdzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpICYmIChyLmZsYWdzID0gZS5mbGFncyksIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnRcIjtcbiAgICAgICAgICB9LCBpLlZhbHVlQXRRdWFudGlsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gbyhlKSB7XG4gICAgICAgICAgICAgIGlmIChlKVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhlKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICAgZVt0W3JdXSAhPSBudWxsICYmICh0aGlzW3Rbcl1dID0gZVt0W3JdXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gby5wcm90b3R5cGUucXVhbnRpbGUgPSBudWxsLCBvLnByb3RvdHlwZS52YWx1ZSA9IG51bGwsIG8uY3JlYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IG8odCk7XG4gICAgICAgICAgICB9LCBvLmVuY29kZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHIgfHwgKHIgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgdC5xdWFudGlsZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwicXVhbnRpbGVcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgICA5XG4gICAgICAgICAgICAgICkuZG91YmxlKHQucXVhbnRpbGUpLCB0LnZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCwgXCJ2YWx1ZVwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAgIDE3XG4gICAgICAgICAgICAgICkuZG91YmxlKHQudmFsdWUpLCByO1xuICAgICAgICAgICAgfSwgby5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZSh0LCByKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICB0IGluc3RhbmNlb2YgJFJlYWRlciB8fCAodCA9ICRSZWFkZXIuY3JlYXRlKHQpKTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IHIgPT09IHZvaWQgMCA/IHQubGVuIDogdC5wb3MgKyByLCBsID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZSgpOyB0LnBvcyA8IG47ICkge1xuICAgICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICBsLnF1YW50aWxlID0gdC5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgbC52YWx1ZSA9IHQuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdC5za2lwVHlwZShwICYgNyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICAgIH0sIG8uZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICByZXR1cm4gdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSBuZXcgJFJlYWRlcih0KSksIHRoaXMuZGVjb2RlKHQsIHQudWludDMyKCkpO1xuICAgICAgICAgICAgfSwgby52ZXJpZnkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwgPyBcIm9iamVjdCBleHBlY3RlZFwiIDogdC5xdWFudGlsZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJxdWFudGlsZVwiKSAmJiB0eXBlb2YgdC5xdWFudGlsZSAhPSBcIm51bWJlclwiID8gXCJxdWFudGlsZTogbnVtYmVyIGV4cGVjdGVkXCIgOiB0LnZhbHVlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpICYmIHR5cGVvZiB0LnZhbHVlICE9IFwibnVtYmVyXCIgPyBcInZhbHVlOiBudW1iZXIgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgICB9LCBvLmZyb21PYmplY3QgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgICB2YXIgciA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHQucXVhbnRpbGUgIT0gbnVsbCAmJiAoci5xdWFudGlsZSA9IE51bWJlcih0LnF1YW50aWxlKSksIHQudmFsdWUgIT0gbnVsbCAmJiAoci52YWx1ZSA9IE51bWJlcih0LnZhbHVlKSksIHI7XG4gICAgICAgICAgICB9LCBvLnRvT2JqZWN0ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgICByIHx8IChyID0ge30pO1xuICAgICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgICByZXR1cm4gci5kZWZhdWx0cyAmJiAobi5xdWFudGlsZSA9IDAsIG4udmFsdWUgPSAwKSwgdC5xdWFudGlsZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJxdWFudGlsZVwiKSAmJiAobi5xdWFudGlsZSA9IHIuanNvbiAmJiAhaXNGaW5pdGUodC5xdWFudGlsZSkgPyBTdHJpbmcodC5xdWFudGlsZSkgOiB0LnF1YW50aWxlKSwgdC52YWx1ZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKSAmJiAobi52YWx1ZSA9IHIuanNvbiAmJiAhaXNGaW5pdGUodC52YWx1ZSkgPyBTdHJpbmcodC52YWx1ZSkgOiB0LnZhbHVlKSwgbjtcbiAgICAgICAgICAgIH0sIG8ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgIH0sIG8uZ2V0VHlwZVVybCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKSwgdCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZVwiO1xuICAgICAgICAgICAgfSwgbztcbiAgICAgICAgICB9KCksIGk7XG4gICAgICAgIH0oKSwgZi5FeGVtcGxhciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkoZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRBdHRyaWJ1dGVzID0gW10sIGUpXG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSBPYmplY3Qua2V5cyhlKSwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgIGVbdFtyXV0gIT0gbnVsbCAmJiAodGhpc1t0W3JdXSA9IGVbdFtyXV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpLnByb3RvdHlwZS5maWx0ZXJlZEF0dHJpYnV0ZXMgPSAkdXRpbC5lbXB0eUFycmF5LCBpLnByb3RvdHlwZS50aW1lVW5peE5hbm8gPSBudWxsLCBpLnByb3RvdHlwZS5hc0RvdWJsZSA9IG51bGwsIGkucHJvdG90eXBlLmFzSW50ID0gbnVsbCwgaS5wcm90b3R5cGUuc3BhbklkID0gbnVsbCwgaS5wcm90b3R5cGUudHJhY2VJZCA9IG51bGw7XG4gICAgICAgICAgdmFyIG87XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKG8gPSBbXCJhc0RvdWJsZVwiLCBcImFzSW50XCJdKSxcbiAgICAgICAgICAgIHNldDogJHV0aWwub25lT2ZTZXR0ZXIobylcbiAgICAgICAgICB9KSwgaS5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkodCk7XG4gICAgICAgICAgfSwgaS5lbmNvZGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICAgICAgICBpZiAociB8fCAociA9ICRXcml0ZXIuY3JlYXRlKCkpLCB0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwidGltZVVuaXhOYW5vXCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICAxN1xuICAgICAgICAgICAgKS5maXhlZDY0KHQudGltZVVuaXhOYW5vKSwgdC5hc0RvdWJsZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIFwiYXNEb3VibGVcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDMsIHdpcmVUeXBlIDEgPSovXG4gICAgICAgICAgICAgIDI1XG4gICAgICAgICAgICApLmRvdWJsZSh0LmFzRG91YmxlKSwgdC5zcGFuSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInNwYW5JZFwiKSAmJiByLnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgNCwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMzRcbiAgICAgICAgICAgICkuYnl0ZXModC5zcGFuSWQpLCB0LnRyYWNlSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcInRyYWNlSWRcIikgJiYgci51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDUsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDQyXG4gICAgICAgICAgICApLmJ5dGVzKHQudHJhY2VJZCksIHQuYXNJbnQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBcImFzSW50XCIpICYmIHIudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA2LCB3aXJlVHlwZSAxID0qL1xuICAgICAgICAgICAgICA0OVxuICAgICAgICAgICAgKS5zZml4ZWQ2NCh0LmFzSW50KSwgdC5maWx0ZXJlZEF0dHJpYnV0ZXMgIT0gbnVsbCAmJiB0LmZpbHRlcmVkQXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5maWx0ZXJlZEF0dHJpYnV0ZXMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZW5jb2RlKHQuZmlsdGVyZWRBdHRyaWJ1dGVzW25dLCByLnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDcsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICA1OFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHQsIHIpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgICAgICAgdCBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKHQgPSAkUmVhZGVyLmNyZWF0ZSh0KSk7XG4gICAgICAgICAgICBmb3IgKHZhciBuID0gciA9PT0gdm9pZCAwID8gdC5sZW4gOiB0LnBvcyArIHIsIGwgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyKCk7IHQucG9zIDwgbjsgKSB7XG4gICAgICAgICAgICAgIHZhciBwID0gdC51aW50MzIoKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChwID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICBsLmZpbHRlcmVkQXR0cmlidXRlcyAmJiBsLmZpbHRlcmVkQXR0cmlidXRlcy5sZW5ndGggfHwgKGwuZmlsdGVyZWRBdHRyaWJ1dGVzID0gW10pLCBsLmZpbHRlcmVkQXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZSh0LCB0LnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICBsLnRpbWVVbml4TmFubyA9IHQuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgbC5hc0RvdWJsZSA9IHQuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA2OiB7XG4gICAgICAgICAgICAgICAgICBsLmFzSW50ID0gdC5zZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgbC5zcGFuSWQgPSB0LmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICBsLnRyYWNlSWQgPSB0LmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHQuc2tpcFR5cGUocCAmIDcpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgIH0sIGkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgcmV0dXJuIHQgaW5zdGFuY2VvZiAkUmVhZGVyIHx8ICh0ID0gbmV3ICRSZWFkZXIodCkpLCB0aGlzLmRlY29kZSh0LCB0LnVpbnQzMigpKTtcbiAgICAgICAgICB9LCBpLnZlcmlmeSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8IHQgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICh0LmZpbHRlcmVkQXR0cmlidXRlcyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJmaWx0ZXJlZEF0dHJpYnV0ZXNcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuZmlsdGVyZWRBdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJmaWx0ZXJlZEF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5maWx0ZXJlZEF0dHJpYnV0ZXMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeSh0LmZpbHRlcmVkQXR0cmlidXRlc1tuXSk7XG4gICAgICAgICAgICAgICAgaWYgKGwpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJmaWx0ZXJlZEF0dHJpYnV0ZXMuXCIgKyBsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwidGltZVVuaXhOYW5vXCIpICYmICEkdXRpbC5pc0ludGVnZXIodC50aW1lVW5peE5hbm8pICYmICEodC50aW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKHQudGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKHQudGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFwidGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmICh0LmFzRG91YmxlICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImFzRG91YmxlXCIpICYmIChyLnZhbHVlID0gMSwgdHlwZW9mIHQuYXNEb3VibGUgIT0gXCJudW1iZXJcIikpXG4gICAgICAgICAgICAgIHJldHVybiBcImFzRG91YmxlOiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmICh0LmFzSW50ICE9IG51bGwgJiYgdC5oYXNPd25Qcm9wZXJ0eShcImFzSW50XCIpKSB7XG4gICAgICAgICAgICAgIGlmIChyLnZhbHVlID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgaWYgKHIudmFsdWUgPSAxLCAhJHV0aWwuaXNJbnRlZ2VyKHQuYXNJbnQpICYmICEodC5hc0ludCAmJiAkdXRpbC5pc0ludGVnZXIodC5hc0ludC5sb3cpICYmICR1dGlsLmlzSW50ZWdlcih0LmFzSW50LmhpZ2gpKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJhc0ludDogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdC5zcGFuSWQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwic3BhbklkXCIpICYmICEodC5zcGFuSWQgJiYgdHlwZW9mIHQuc3BhbklkLmxlbmd0aCA9PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKHQuc3BhbklkKSkgPyBcInNwYW5JZDogYnVmZmVyIGV4cGVjdGVkXCIgOiB0LnRyYWNlSWQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSAmJiAhKHQudHJhY2VJZCAmJiB0eXBlb2YgdC50cmFjZUlkLmxlbmd0aCA9PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKHQudHJhY2VJZCkpID8gXCJ0cmFjZUlkOiBidWZmZXIgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgfSwgaS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIpXG4gICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgdmFyIHIgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyKCk7XG4gICAgICAgICAgICBpZiAodC5maWx0ZXJlZEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHQuZmlsdGVyZWRBdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmZpbHRlcmVkQXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHIuZmlsdGVyZWRBdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgdC5maWx0ZXJlZEF0dHJpYnV0ZXMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuZmlsdGVyZWRBdHRyaWJ1dGVzW25dICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmZpbHRlcmVkQXR0cmlidXRlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHIuZmlsdGVyZWRBdHRyaWJ1dGVzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdCh0LmZpbHRlcmVkQXR0cmlidXRlc1tuXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0LnRpbWVVbml4TmFubyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHIudGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC50aW1lVW5peE5hbm8pKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIHQudGltZVVuaXhOYW5vID09IFwic3RyaW5nXCIgPyByLnRpbWVVbml4TmFubyA9IHBhcnNlSW50KHQudGltZVVuaXhOYW5vLCAxMCkgOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHIudGltZVVuaXhOYW5vID0gdC50aW1lVW5peE5hbm8gOiB0eXBlb2YgdC50aW1lVW5peE5hbm8gPT0gXCJvYmplY3RcIiAmJiAoci50aW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHModC50aW1lVW5peE5hbm8ubG93ID4+PiAwLCB0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpKSksIHQuYXNEb3VibGUgIT0gbnVsbCAmJiAoci5hc0RvdWJsZSA9IE51bWJlcih0LmFzRG91YmxlKSksIHQuYXNJbnQgIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/IChyLmFzSW50ID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUodC5hc0ludCkpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgdC5hc0ludCA9PSBcInN0cmluZ1wiID8gci5hc0ludCA9IHBhcnNlSW50KHQuYXNJbnQsIDEwKSA6IHR5cGVvZiB0LmFzSW50ID09IFwibnVtYmVyXCIgPyByLmFzSW50ID0gdC5hc0ludCA6IHR5cGVvZiB0LmFzSW50ID09IFwib2JqZWN0XCIgJiYgKHIuYXNJbnQgPSBuZXcgJHV0aWwuTG9uZ0JpdHModC5hc0ludC5sb3cgPj4+IDAsIHQuYXNJbnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCB0LnNwYW5JZCAhPSBudWxsICYmICh0eXBlb2YgdC5zcGFuSWQgPT0gXCJzdHJpbmdcIiA/ICR1dGlsLmJhc2U2NC5kZWNvZGUodC5zcGFuSWQsIHIuc3BhbklkID0gJHV0aWwubmV3QnVmZmVyKCR1dGlsLmJhc2U2NC5sZW5ndGgodC5zcGFuSWQpKSwgMCkgOiB0LnNwYW5JZC5sZW5ndGggPj0gMCAmJiAoci5zcGFuSWQgPSB0LnNwYW5JZCkpLCB0LnRyYWNlSWQgIT0gbnVsbCAmJiAodHlwZW9mIHQudHJhY2VJZCA9PSBcInN0cmluZ1wiID8gJHV0aWwuYmFzZTY0LmRlY29kZSh0LnRyYWNlSWQsIHIudHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKHQudHJhY2VJZCkpLCAwKSA6IHQudHJhY2VJZC5sZW5ndGggPj0gMCAmJiAoci50cmFjZUlkID0gdC50cmFjZUlkKSksIHI7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgICAgICAgIHIgfHwgKHIgPSB7fSk7XG4gICAgICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICAgICAgaWYgKChyLmFycmF5cyB8fCByLmRlZmF1bHRzKSAmJiAobi5maWx0ZXJlZEF0dHJpYnV0ZXMgPSBbXSksIHIuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/IGwudG9TdHJpbmcoKSA6IHIubG9uZ3MgPT09IE51bWJlciA/IGwudG9OdW1iZXIoKSA6IGw7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIG4udGltZVVuaXhOYW5vID0gci5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICByLmJ5dGVzID09PSBTdHJpbmcgPyBuLnNwYW5JZCA9IFwiXCIgOiAobi5zcGFuSWQgPSBbXSwgci5ieXRlcyAhPT0gQXJyYXkgJiYgKG4uc3BhbklkID0gJHV0aWwubmV3QnVmZmVyKG4uc3BhbklkKSkpLCByLmJ5dGVzID09PSBTdHJpbmcgPyBuLnRyYWNlSWQgPSBcIlwiIDogKG4udHJhY2VJZCA9IFtdLCByLmJ5dGVzICE9PSBBcnJheSAmJiAobi50cmFjZUlkID0gJHV0aWwubmV3QnVmZmVyKG4udHJhY2VJZCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LnRpbWVVbml4TmFubyAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikgJiYgKHR5cGVvZiB0LnRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gbi50aW1lVW5peE5hbm8gPSByLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcodC50aW1lVW5peE5hbm8pIDogdC50aW1lVW5peE5hbm8gOiBuLnRpbWVVbml4TmFubyA9IHIubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodC50aW1lVW5peE5hbm8pIDogci5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKHQudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgdC50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IHQudGltZVVuaXhOYW5vKSwgdC5hc0RvdWJsZSAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhc0RvdWJsZVwiKSAmJiAobi5hc0RvdWJsZSA9IHIuanNvbiAmJiAhaXNGaW5pdGUodC5hc0RvdWJsZSkgPyBTdHJpbmcodC5hc0RvdWJsZSkgOiB0LmFzRG91YmxlLCByLm9uZW9mcyAmJiAobi52YWx1ZSA9IFwiYXNEb3VibGVcIikpLCB0LnNwYW5JZCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJzcGFuSWRcIikgJiYgKG4uc3BhbklkID0gci5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZSh0LnNwYW5JZCwgMCwgdC5zcGFuSWQubGVuZ3RoKSA6IHIuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5zcGFuSWQpIDogdC5zcGFuSWQpLCB0LnRyYWNlSWQgIT0gbnVsbCAmJiB0Lmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSAmJiAobi50cmFjZUlkID0gci5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZSh0LnRyYWNlSWQsIDAsIHQudHJhY2VJZC5sZW5ndGgpIDogci5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LnRyYWNlSWQpIDogdC50cmFjZUlkKSwgdC5hc0ludCAhPSBudWxsICYmIHQuaGFzT3duUHJvcGVydHkoXCJhc0ludFwiKSAmJiAodHlwZW9mIHQuYXNJbnQgPT0gXCJudW1iZXJcIiA/IG4uYXNJbnQgPSByLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcodC5hc0ludCkgOiB0LmFzSW50IDogbi5hc0ludCA9IHIubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodC5hc0ludCkgOiByLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHModC5hc0ludC5sb3cgPj4+IDAsIHQuYXNJbnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IHQuYXNJbnQsIHIub25lb2ZzICYmIChuLnZhbHVlID0gXCJhc0ludFwiKSksIHQuZmlsdGVyZWRBdHRyaWJ1dGVzICYmIHQuZmlsdGVyZWRBdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBuLmZpbHRlcmVkQXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHQuZmlsdGVyZWRBdHRyaWJ1dGVzLmxlbmd0aDsgKytwKVxuICAgICAgICAgICAgICAgIG4uZmlsdGVyZWRBdHRyaWJ1dGVzW3BdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudG9PYmplY3QodC5maWx0ZXJlZEF0dHJpYnV0ZXNbcF0sIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICByZXR1cm4gdCA9PT0gdm9pZCAwICYmICh0ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCB0ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmO1xuICAgICAgfSgpLCBjO1xuICAgIH0oKSwgdS5sb2dzID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYyA9IHt9O1xuICAgICAgcmV0dXJuIGMudjEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGYgPSB7fTtcbiAgICAgICAgcmV0dXJuIGYuTG9nc0RhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jdGlvbiBpKG8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc291cmNlTG9ncyA9IFtdLCBvKVxuICAgICAgICAgICAgICBmb3IgKHZhciBlID0gT2JqZWN0LmtleXMobyksIHQgPSAwOyB0IDwgZS5sZW5ndGg7ICsrdClcbiAgICAgICAgICAgICAgICBvW2VbdF1dICE9IG51bGwgJiYgKHRoaXNbZVt0XV0gPSBvW2VbdF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkucHJvdG90eXBlLnJlc291cmNlTG9ncyA9ICR1dGlsLmVtcHR5QXJyYXksIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgaWYgKHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS5yZXNvdXJjZUxvZ3MgIT0gbnVsbCAmJiBlLnJlc291cmNlTG9ncy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5yZXNvdXJjZUxvZ3MubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy5lbmNvZGUoZS5yZXNvdXJjZUxvZ3Nbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgfSwgaS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUoZSwgdCkubGRlbGltKCk7XG4gICAgICAgICAgfSwgaS5kZWNvZGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9ICRSZWFkZXIuY3JlYXRlKGUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgPSB0ID09PSB2b2lkIDAgPyBlLmxlbiA6IGUucG9zICsgdCwgbiA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGEoKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4ucmVzb3VyY2VMb2dzICYmIG4ucmVzb3VyY2VMb2dzLmxlbmd0aCB8fCAobi5yZXNvdXJjZUxvZ3MgPSBbXSksIG4ucmVzb3VyY2VMb2dzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnJlc291cmNlTG9ncyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZUxvZ3NcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUucmVzb3VyY2VMb2dzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZUxvZ3M6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS5yZXNvdXJjZUxvZ3MubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MudmVyaWZ5KGUucmVzb3VyY2VMb2dzW3RdKTtcbiAgICAgICAgICAgICAgICBpZiAocilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlTG9ncy5cIiArIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0sIGkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YSgpO1xuICAgICAgICAgICAgaWYgKGUucmVzb3VyY2VMb2dzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLnJlc291cmNlTG9ncykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YS5yZXNvdXJjZUxvZ3M6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LnJlc291cmNlTG9ncyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUucmVzb3VyY2VMb2dzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnJlc291cmNlTG9nc1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YS5yZXNvdXJjZUxvZ3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LnJlc291cmNlTG9nc1tyXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MuZnJvbU9iamVjdChlLnJlc291cmNlTG9nc1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIucmVzb3VyY2VMb2dzID0gW10pLCBlLnJlc291cmNlTG9ncyAmJiBlLnJlc291cmNlTG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5yZXNvdXJjZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLnJlc291cmNlTG9ncy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLnJlc291cmNlTG9nc1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MudG9PYmplY3QoZS5yZXNvdXJjZUxvZ3Nbbl0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhXCI7XG4gICAgICAgICAgfSwgaTtcbiAgICAgICAgfSgpLCBmLlJlc291cmNlTG9ncyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmN0aW9uIGkobykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2NvcGVMb2dzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUucmVzb3VyY2UgPSBudWxsLCBpLnByb3RvdHlwZS5zY29wZUxvZ3MgPSAkdXRpbC5lbXB0eUFycmF5LCBpLnByb3RvdHlwZS5zY2hlbWFVcmwgPSBudWxsLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGlmICh0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUucmVzb3VyY2UgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInJlc291cmNlXCIpICYmICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UuZW5jb2RlKGUucmVzb3VyY2UsIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpLCBlLnNjb3BlTG9ncyAhPSBudWxsICYmIGUuc2NvcGVMb2dzLmxlbmd0aClcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLnNjb3BlTG9ncy5sZW5ndGg7ICsrcilcbiAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzLmVuY29kZShlLnNjb3BlTG9nc1tyXSwgdC51aW50MzIoXG4gICAgICAgICAgICAgICAgICAvKiBpZCAyLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAgICAgMThcbiAgICAgICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInNjaGVtYVVybFwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMywgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMjZcbiAgICAgICAgICAgICkuc3RyaW5nKGUuc2NoZW1hVXJsKSwgdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MoKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4ucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgIG4uc2NvcGVMb2dzICYmIG4uc2NvcGVMb2dzLmxlbmd0aCB8fCAobi5zY29wZUxvZ3MgPSBbXSksIG4uc2NvcGVMb2dzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9ncy5kZWNvZGUoZSwgZS51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgbi5zY2hlbWFVcmwgPSBlLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnJlc291cmNlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlXCIpKSB7XG4gICAgICAgICAgICAgIHZhciB0ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS52ZXJpZnkoZS5yZXNvdXJjZSk7XG4gICAgICAgICAgICAgIGlmICh0KVxuICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlLlwiICsgdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnNjb3BlTG9ncyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY29wZUxvZ3NcIikpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuc2NvcGVMb2dzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzY29wZUxvZ3M6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5zY29wZUxvZ3MubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICB2YXIgdCA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MudmVyaWZ5KGUuc2NvcGVMb2dzW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlTG9ncy5cIiArIHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikgJiYgISR1dGlsLmlzU3RyaW5nKGUuc2NoZW1hVXJsKSA/IFwic2NoZW1hVXJsOiBzdHJpbmcgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgfSwgaS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MoKTtcbiAgICAgICAgICAgIGlmIChlLnJlc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnJlc291cmNlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MucmVzb3VyY2U6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5yZXNvdXJjZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UuZnJvbU9iamVjdChlLnJlc291cmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnNjb3BlTG9ncykge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZS5zY29wZUxvZ3MpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLnNjb3BlTG9nczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQuc2NvcGVMb2dzID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5zY29wZUxvZ3MubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUuc2NvcGVMb2dzW3JdICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy5zY29wZUxvZ3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB0LnNjb3BlTG9nc1tyXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MuZnJvbU9iamVjdChlLnNjb3BlTG9nc1tyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmICh0LnNjaGVtYVVybCA9IFN0cmluZyhlLnNjaGVtYVVybCkpLCB0O1xuICAgICAgICAgIH0sIGkudG9PYmplY3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICB0IHx8ICh0ID0ge30pO1xuICAgICAgICAgICAgdmFyIHIgPSB7fTtcbiAgICAgICAgICAgIGlmICgodC5hcnJheXMgfHwgdC5kZWZhdWx0cykgJiYgKHIuc2NvcGVMb2dzID0gW10pLCB0LmRlZmF1bHRzICYmIChyLnJlc291cmNlID0gbnVsbCwgci5zY2hlbWFVcmwgPSBcIlwiKSwgZS5yZXNvdXJjZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZVwiKSAmJiAoci5yZXNvdXJjZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UudG9PYmplY3QoZS5yZXNvdXJjZSwgdCkpLCBlLnNjb3BlTG9ncyAmJiBlLnNjb3BlTG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgci5zY29wZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLnNjb3BlTG9ncy5sZW5ndGg7ICsrbilcbiAgICAgICAgICAgICAgICByLnNjb3BlTG9nc1tuXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MudG9PYmplY3QoZS5zY29wZUxvZ3Nbbl0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuc2NoZW1hVXJsICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSAmJiAoci5zY2hlbWFVcmwgPSBlLnNjaGVtYVVybCksIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc1wiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZi5TY29wZUxvZ3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jdGlvbiBpKG8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvZ1JlY29yZHMgPSBbXSwgbylcbiAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IE9iamVjdC5rZXlzKG8pLCB0ID0gMDsgdCA8IGUubGVuZ3RoOyArK3QpXG4gICAgICAgICAgICAgICAgb1tlW3RdXSAhPSBudWxsICYmICh0aGlzW2VbdF1dID0gb1tlW3RdXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnByb3RvdHlwZS5zY29wZSA9IG51bGwsIGkucHJvdG90eXBlLmxvZ1JlY29yZHMgPSAkdXRpbC5lbXB0eUFycmF5LCBpLnByb3RvdHlwZS5zY2hlbWFVcmwgPSBudWxsLCBpLmNyZWF0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICAgICAgICB9LCBpLmVuY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGlmICh0IHx8ICh0ID0gJFdyaXRlci5jcmVhdGUoKSksIGUuc2NvcGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInNjb3BlXCIpICYmICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmVuY29kZShlLnNjb3BlLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKSwgZS5sb2dSZWNvcmRzICE9IG51bGwgJiYgZS5sb2dSZWNvcmRzLmxlbmd0aClcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmxvZ1JlY29yZHMubGVuZ3RoOyArK3IpXG4gICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC5lbmNvZGUoZS5sb2dSZWNvcmRzW3JdLCB0LnVpbnQzMihcbiAgICAgICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgICAgICAxOFxuICAgICAgICAgICAgICAgICkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwic2NoZW1hVXJsXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAyNlxuICAgICAgICAgICAgKS5zdHJpbmcoZS5zY2hlbWFVcmwpLCB0O1xuICAgICAgICAgIH0sIGkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKGUsIHQpLmxkZWxpbSgpO1xuICAgICAgICAgIH0sIGkuZGVjb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSAkUmVhZGVyLmNyZWF0ZShlKSk7XG4gICAgICAgICAgICBmb3IgKHZhciByID0gdCA9PT0gdm9pZCAwID8gZS5sZW4gOiBlLnBvcyArIHQsIG4gPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9ncygpOyBlLnBvcyA8IHI7ICkge1xuICAgICAgICAgICAgICB2YXIgbCA9IGUudWludDMyKCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAobCA+Pj4gMykge1xuICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgbi5zY29wZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgIG4ubG9nUmVjb3JkcyAmJiBuLmxvZ1JlY29yZHMubGVuZ3RoIHx8IChuLmxvZ1JlY29yZHMgPSBbXSksIG4ubG9nUmVjb3Jkcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQuZGVjb2RlKGUsIGUudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgIG4uc2NoZW1hVXJsID0gZS5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgZS5za2lwVHlwZShsICYgNyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSwgaS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mICRSZWFkZXIgfHwgKGUgPSBuZXcgJFJlYWRlcihlKSksIHRoaXMuZGVjb2RlKGUsIGUudWludDMyKCkpO1xuICAgICAgICAgIH0sIGkudmVyaWZ5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZS5zY29wZSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY29wZVwiKSkge1xuICAgICAgICAgICAgICB2YXIgdCA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLnZlcmlmeShlLnNjb3BlKTtcbiAgICAgICAgICAgICAgaWYgKHQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2NvcGUuXCIgKyB0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUubG9nUmVjb3JkcyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJsb2dSZWNvcmRzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmxvZ1JlY29yZHMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImxvZ1JlY29yZHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5sb2dSZWNvcmRzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHQgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkLnZlcmlmeShlLmxvZ1JlY29yZHNbcl0pO1xuICAgICAgICAgICAgICAgIGlmICh0KVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibG9nUmVjb3Jkcy5cIiArIHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnNjaGVtYVVybCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikgJiYgISR1dGlsLmlzU3RyaW5nKGUuc2NoZW1hVXJsKSA/IFwic2NoZW1hVXJsOiBzdHJpbmcgZXhwZWN0ZWRcIiA6IG51bGw7XG4gICAgICAgICAgfSwgaS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzKVxuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MoKTtcbiAgICAgICAgICAgIGlmIChlLnNjb3BlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnNjb3BlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3Muc2NvcGU6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgdC5zY29wZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmZyb21PYmplY3QoZS5zY29wZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5sb2dSZWNvcmRzKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmxvZ1JlY29yZHMpKVxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzLmxvZ1JlY29yZHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICB0LmxvZ1JlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmxvZ1JlY29yZHMubGVuZ3RoOyArK3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUubG9nUmVjb3Jkc1tyXSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MubG9nUmVjb3Jkczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIHQubG9nUmVjb3Jkc1tyXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQuZnJvbU9iamVjdChlLmxvZ1JlY29yZHNbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiAodC5zY2hlbWFVcmwgPSBTdHJpbmcoZS5zY2hlbWFVcmwpKSwgdDtcbiAgICAgICAgICB9LCBpLnRvT2JqZWN0ID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgdCB8fCAodCA9IHt9KTtcbiAgICAgICAgICAgIHZhciByID0ge307XG4gICAgICAgICAgICBpZiAoKHQuYXJyYXlzIHx8IHQuZGVmYXVsdHMpICYmIChyLmxvZ1JlY29yZHMgPSBbXSksIHQuZGVmYXVsdHMgJiYgKHIuc2NvcGUgPSBudWxsLCByLnNjaGVtYVVybCA9IFwiXCIpLCBlLnNjb3BlICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlXCIpICYmIChyLnNjb3BlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUudG9PYmplY3QoZS5zY29wZSwgdCkpLCBlLmxvZ1JlY29yZHMgJiYgZS5sb2dSZWNvcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByLmxvZ1JlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLmxvZ1JlY29yZHMubGVuZ3RoOyArK24pXG4gICAgICAgICAgICAgICAgci5sb2dSZWNvcmRzW25dID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC50b09iamVjdChlLmxvZ1JlY29yZHNbbl0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuc2NoZW1hVXJsICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSAmJiAoci5zY2hlbWFVcmwgPSBlLnNjaGVtYVVybCksIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9nc1wiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZi5TZXZlcml0eU51bWJlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpID0ge30sIG8gPSBPYmplY3QuY3JlYXRlKGkpO1xuICAgICAgICAgIHJldHVybiBvW2lbMF0gPSBcIlNFVkVSSVRZX05VTUJFUl9VTlNQRUNJRklFRFwiXSA9IDAsIG9baVsxXSA9IFwiU0VWRVJJVFlfTlVNQkVSX1RSQUNFXCJdID0gMSwgb1tpWzJdID0gXCJTRVZFUklUWV9OVU1CRVJfVFJBQ0UyXCJdID0gMiwgb1tpWzNdID0gXCJTRVZFUklUWV9OVU1CRVJfVFJBQ0UzXCJdID0gMywgb1tpWzRdID0gXCJTRVZFUklUWV9OVU1CRVJfVFJBQ0U0XCJdID0gNCwgb1tpWzVdID0gXCJTRVZFUklUWV9OVU1CRVJfREVCVUdcIl0gPSA1LCBvW2lbNl0gPSBcIlNFVkVSSVRZX05VTUJFUl9ERUJVRzJcIl0gPSA2LCBvW2lbN10gPSBcIlNFVkVSSVRZX05VTUJFUl9ERUJVRzNcIl0gPSA3LCBvW2lbOF0gPSBcIlNFVkVSSVRZX05VTUJFUl9ERUJVRzRcIl0gPSA4LCBvW2lbOV0gPSBcIlNFVkVSSVRZX05VTUJFUl9JTkZPXCJdID0gOSwgb1tpWzEwXSA9IFwiU0VWRVJJVFlfTlVNQkVSX0lORk8yXCJdID0gMTAsIG9baVsxMV0gPSBcIlNFVkVSSVRZX05VTUJFUl9JTkZPM1wiXSA9IDExLCBvW2lbMTJdID0gXCJTRVZFUklUWV9OVU1CRVJfSU5GTzRcIl0gPSAxMiwgb1tpWzEzXSA9IFwiU0VWRVJJVFlfTlVNQkVSX1dBUk5cIl0gPSAxMywgb1tpWzE0XSA9IFwiU0VWRVJJVFlfTlVNQkVSX1dBUk4yXCJdID0gMTQsIG9baVsxNV0gPSBcIlNFVkVSSVRZX05VTUJFUl9XQVJOM1wiXSA9IDE1LCBvW2lbMTZdID0gXCJTRVZFUklUWV9OVU1CRVJfV0FSTjRcIl0gPSAxNiwgb1tpWzE3XSA9IFwiU0VWRVJJVFlfTlVNQkVSX0VSUk9SXCJdID0gMTcsIG9baVsxOF0gPSBcIlNFVkVSSVRZX05VTUJFUl9FUlJPUjJcIl0gPSAxOCwgb1tpWzE5XSA9IFwiU0VWRVJJVFlfTlVNQkVSX0VSUk9SM1wiXSA9IDE5LCBvW2lbMjBdID0gXCJTRVZFUklUWV9OVU1CRVJfRVJST1I0XCJdID0gMjAsIG9baVsyMV0gPSBcIlNFVkVSSVRZX05VTUJFUl9GQVRBTFwiXSA9IDIxLCBvW2lbMjJdID0gXCJTRVZFUklUWV9OVU1CRVJfRkFUQUwyXCJdID0gMjIsIG9baVsyM10gPSBcIlNFVkVSSVRZX05VTUJFUl9GQVRBTDNcIl0gPSAyMywgb1tpWzI0XSA9IFwiU0VWRVJJVFlfTlVNQkVSX0ZBVEFMNFwiXSA9IDI0LCBvO1xuICAgICAgICB9KCksIGYuTG9nUmVjb3JkRmxhZ3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgaSA9IHt9LCBvID0gT2JqZWN0LmNyZWF0ZShpKTtcbiAgICAgICAgICByZXR1cm4gb1tpWzBdID0gXCJMT0dfUkVDT1JEX0ZMQUdTX0RPX05PVF9VU0VcIl0gPSAwLCBvW2lbMjU1XSA9IFwiTE9HX1JFQ09SRF9GTEFHU19UUkFDRV9GTEFHU19NQVNLXCJdID0gMjU1LCBvO1xuICAgICAgICB9KCksIGYuTG9nUmVjb3JkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gaShvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVzID0gW10sIG8pXG4gICAgICAgICAgICAgIGZvciAodmFyIGUgPSBPYmplY3Qua2V5cyhvKSwgdCA9IDA7IHQgPCBlLmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgICAgIG9bZVt0XV0gIT0gbnVsbCAmJiAodGhpc1tlW3RdXSA9IG9bZVt0XV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUudGltZVVuaXhOYW5vID0gbnVsbCwgaS5wcm90b3R5cGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8gPSBudWxsLCBpLnByb3RvdHlwZS5zZXZlcml0eU51bWJlciA9IG51bGwsIGkucHJvdG90eXBlLnNldmVyaXR5VGV4dCA9IG51bGwsIGkucHJvdG90eXBlLmJvZHkgPSBudWxsLCBpLnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheSwgaS5wcm90b3R5cGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG51bGwsIGkucHJvdG90eXBlLmZsYWdzID0gbnVsbCwgaS5wcm90b3R5cGUudHJhY2VJZCA9IG51bGwsIGkucHJvdG90eXBlLnNwYW5JZCA9IG51bGwsIGkuY3JlYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBpKGUpO1xuICAgICAgICAgIH0sIGkuZW5jb2RlID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgaWYgKHQgfHwgKHQgPSAkV3JpdGVyLmNyZWF0ZSgpKSwgZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInRpbWVVbml4TmFub1wiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgMSwgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgOVxuICAgICAgICAgICAgKS5maXhlZDY0KGUudGltZVVuaXhOYW5vKSwgZS5zZXZlcml0eU51bWJlciAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwic2V2ZXJpdHlOdW1iZXJcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDIsIHdpcmVUeXBlIDAgPSovXG4gICAgICAgICAgICAgIDE2XG4gICAgICAgICAgICApLmludDMyKGUuc2V2ZXJpdHlOdW1iZXIpLCBlLnNldmVyaXR5VGV4dCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwic2V2ZXJpdHlUZXh0XCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAzLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICAyNlxuICAgICAgICAgICAgKS5zdHJpbmcoZS5zZXZlcml0eVRleHQpLCBlLmJvZHkgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImJvZHlcIikgJiYgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZW5jb2RlKGUuYm9keSwgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDUsIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDQyXG4gICAgICAgICAgICApLmZvcmsoKSkubGRlbGltKCksIGUuYXR0cmlidXRlcyAhPSBudWxsICYmIGUuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytyKVxuICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShlLmF0dHJpYnV0ZXNbcl0sIHQudWludDMyKFxuICAgICAgICAgICAgICAgICAgLyogaWQgNiwgd2lyZVR5cGUgMiA9Ki9cbiAgICAgICAgICAgICAgICAgIDUwXG4gICAgICAgICAgICAgICAgKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSAmJiB0LnVpbnQzMihcbiAgICAgICAgICAgICAgLyogaWQgNywgd2lyZVR5cGUgMCA9Ki9cbiAgICAgICAgICAgICAgNTZcbiAgICAgICAgICAgICkudWludDMyKGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCksIGUuZmxhZ3MgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImZsYWdzXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCA4LCB3aXJlVHlwZSA1ID0qL1xuICAgICAgICAgICAgICA2OVxuICAgICAgICAgICAgKS5maXhlZDMyKGUuZmxhZ3MpLCBlLnRyYWNlSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcInRyYWNlSWRcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDksIHdpcmVUeXBlIDIgPSovXG4gICAgICAgICAgICAgIDc0XG4gICAgICAgICAgICApLmJ5dGVzKGUudHJhY2VJZCksIGUuc3BhbklkICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJzcGFuSWRcIikgJiYgdC51aW50MzIoXG4gICAgICAgICAgICAgIC8qIGlkIDEwLCB3aXJlVHlwZSAyID0qL1xuICAgICAgICAgICAgICA4MlxuICAgICAgICAgICAgKS5ieXRlcyhlLnNwYW5JZCksIGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcIm9ic2VydmVkVGltZVVuaXhOYW5vXCIpICYmIHQudWludDMyKFxuICAgICAgICAgICAgICAvKiBpZCAxMSwgd2lyZVR5cGUgMSA9Ki9cbiAgICAgICAgICAgICAgODlcbiAgICAgICAgICAgICkuZml4ZWQ2NChlLm9ic2VydmVkVGltZVVuaXhOYW5vKSwgdDtcbiAgICAgICAgICB9LCBpLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShlLCB0KS5sZGVsaW0oKTtcbiAgICAgICAgICB9LCBpLmRlY29kZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiAkUmVhZGVyIHx8IChlID0gJFJlYWRlci5jcmVhdGUoZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgciA9IHQgPT09IHZvaWQgMCA/IGUubGVuIDogZS5wb3MgKyB0LCBuID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQoKTsgZS5wb3MgPCByOyApIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGwgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgIG4udGltZVVuaXhOYW5vID0gZS5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAxMToge1xuICAgICAgICAgICAgICAgICAgbi5vYnNlcnZlZFRpbWVVbml4TmFubyA9IGUuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgbi5zZXZlcml0eU51bWJlciA9IGUuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgIG4uc2V2ZXJpdHlUZXh0ID0gZS5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgIG4uYm9keSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLmRlY29kZShlLCBlLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDY6IHtcbiAgICAgICAgICAgICAgICAgIG4uYXR0cmlidXRlcyAmJiBuLmF0dHJpYnV0ZXMubGVuZ3RoIHx8IChuLmF0dHJpYnV0ZXMgPSBbXSksIG4uYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShlLCBlLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICBuLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBlLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgODoge1xuICAgICAgICAgICAgICAgICAgbi5mbGFncyA9IGUuZml4ZWQzMigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgOToge1xuICAgICAgICAgICAgICAgICAgbi50cmFjZUlkID0gZS5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHtcbiAgICAgICAgICAgICAgICAgIG4uc3BhbklkID0gZS5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBlLnNraXBUeXBlKGwgJiA3KTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9LCBpLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgJFJlYWRlciB8fCAoZSA9IG5ldyAkUmVhZGVyKGUpKSwgdGhpcy5kZWNvZGUoZSwgZS51aW50MzIoKSk7XG4gICAgICAgICAgfSwgaS52ZXJpZnkgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikgJiYgISR1dGlsLmlzSW50ZWdlcihlLnRpbWVVbml4TmFubykgJiYgIShlLnRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIoZS50aW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIoZS50aW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJ0aW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwib2JzZXJ2ZWRUaW1lVW5peE5hbm9cIikgJiYgISR1dGlsLmlzSW50ZWdlcihlLm9ic2VydmVkVGltZVVuaXhOYW5vKSAmJiAhKGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIoZS5vYnNlcnZlZFRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgIHJldHVybiBcIm9ic2VydmVkVGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChlLnNldmVyaXR5TnVtYmVyICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNldmVyaXR5TnVtYmVyXCIpKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGUuc2V2ZXJpdHlOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2V2ZXJpdHlOdW1iZXI6IGVudW0gdmFsdWUgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuc2V2ZXJpdHlUZXh0ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNldmVyaXR5VGV4dFwiKSAmJiAhJHV0aWwuaXNTdHJpbmcoZS5zZXZlcml0eVRleHQpKVxuICAgICAgICAgICAgICByZXR1cm4gXCJzZXZlcml0eVRleHQ6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGUuYm9keSAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJib2R5XCIpKSB7XG4gICAgICAgICAgICAgIHZhciB0ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUudmVyaWZ5KGUuYm9keSk7XG4gICAgICAgICAgICAgIGlmICh0KVxuICAgICAgICAgICAgICAgIHJldHVybiBcImJvZHkuXCIgKyB0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuYXR0cmlidXRlcyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlLmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHQgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkoZS5hdHRyaWJ1dGVzW3JdKTtcbiAgICAgICAgICAgICAgICBpZiAodClcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyB0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikgJiYgISR1dGlsLmlzSW50ZWdlcihlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpID8gXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50OiBpbnRlZ2VyIGV4cGVjdGVkXCIgOiBlLmZsYWdzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpICYmICEkdXRpbC5pc0ludGVnZXIoZS5mbGFncykgPyBcImZsYWdzOiBpbnRlZ2VyIGV4cGVjdGVkXCIgOiBlLnRyYWNlSWQgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSAmJiAhKGUudHJhY2VJZCAmJiB0eXBlb2YgZS50cmFjZUlkLmxlbmd0aCA9PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKGUudHJhY2VJZCkpID8gXCJ0cmFjZUlkOiBidWZmZXIgZXhwZWN0ZWRcIiA6IGUuc3BhbklkICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcInNwYW5JZFwiKSAmJiAhKGUuc3BhbklkICYmIHR5cGVvZiBlLnNwYW5JZC5sZW5ndGggPT0gXCJudW1iZXJcIiB8fCAkdXRpbC5pc1N0cmluZyhlLnNwYW5JZCkpID8gXCJzcGFuSWQ6IGJ1ZmZlciBleHBlY3RlZFwiIDogbnVsbDtcbiAgICAgICAgICB9LCBpLmZyb21PYmplY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQpXG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZCgpO1xuICAgICAgICAgICAgc3dpdGNoIChlLnRpbWVVbml4TmFubyAhPSBudWxsICYmICgkdXRpbC5Mb25nID8gKHQudGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUoZS50aW1lVW5peE5hbm8pKS51bnNpZ25lZCA9ICExIDogdHlwZW9mIGUudGltZVVuaXhOYW5vID09IFwic3RyaW5nXCIgPyB0LnRpbWVVbml4TmFubyA9IHBhcnNlSW50KGUudGltZVVuaXhOYW5vLCAxMCkgOiB0eXBlb2YgZS50aW1lVW5peE5hbm8gPT0gXCJudW1iZXJcIiA/IHQudGltZVVuaXhOYW5vID0gZS50aW1lVW5peE5hbm8gOiB0eXBlb2YgZS50aW1lVW5peE5hbm8gPT0gXCJvYmplY3RcIiAmJiAodC50aW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMoZS50aW1lVW5peE5hbm8ubG93ID4+PiAwLCBlLnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpKSksIGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiAoJHV0aWwuTG9uZyA/ICh0Lm9ic2VydmVkVGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUoZS5vYnNlcnZlZFRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gITEgOiB0eXBlb2YgZS5vYnNlcnZlZFRpbWVVbml4TmFubyA9PSBcInN0cmluZ1wiID8gdC5vYnNlcnZlZFRpbWVVbml4TmFubyA9IHBhcnNlSW50KGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8sIDEwKSA6IHR5cGVvZiBlLm9ic2VydmVkVGltZVVuaXhOYW5vID09IFwibnVtYmVyXCIgPyB0Lm9ic2VydmVkVGltZVVuaXhOYW5vID0gZS5vYnNlcnZlZFRpbWVVbml4TmFubyA6IHR5cGVvZiBlLm9ic2VydmVkVGltZVVuaXhOYW5vID09IFwib2JqZWN0XCIgJiYgKHQub2JzZXJ2ZWRUaW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMoZS5vYnNlcnZlZFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSkpLCBlLnNldmVyaXR5TnVtYmVyKSB7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnNldmVyaXR5TnVtYmVyID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgIHQuc2V2ZXJpdHlOdW1iZXIgPSBlLnNldmVyaXR5TnVtYmVyO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX1VOU1BFQ0lGSUVEXCI6XG4gICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9UUkFDRVwiOlxuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfVFJBQ0UyXCI6XG4gICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9UUkFDRTNcIjpcbiAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHQuc2V2ZXJpdHlOdW1iZXIgPSAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX1RSQUNFNFwiOlxuICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfREVCVUdcIjpcbiAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIHQuc2V2ZXJpdHlOdW1iZXIgPSA1O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0RFQlVHMlwiOlxuICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfREVCVUczXCI6XG4gICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gNztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9ERUJVRzRcIjpcbiAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgIHQuc2V2ZXJpdHlOdW1iZXIgPSA4O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0lORk9cIjpcbiAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgIHQuc2V2ZXJpdHlOdW1iZXIgPSA5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0lORk8yXCI6XG4gICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDEwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0lORk8zXCI6XG4gICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDExO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0lORk80XCI6XG4gICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDEyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX1dBUk5cIjpcbiAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMTM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfV0FSTjJcIjpcbiAgICAgICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMTQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfV0FSTjNcIjpcbiAgICAgICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfV0FSTjRcIjpcbiAgICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMTY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfRVJST1JcIjpcbiAgICAgICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMTc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfRVJST1IyXCI6XG4gICAgICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDE4O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0VSUk9SM1wiOlxuICAgICAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgICAgIHQuc2V2ZXJpdHlOdW1iZXIgPSAxOTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9FUlJPUjRcIjpcbiAgICAgICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMjA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfRkFUQUxcIjpcbiAgICAgICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMjE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfRkFUQUwyXCI6XG4gICAgICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICAgICAgdC5zZXZlcml0eU51bWJlciA9IDIyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0ZBVEFMM1wiOlxuICAgICAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgICAgIHQuc2V2ZXJpdHlOdW1iZXIgPSAyMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9GQVRBTDRcIjpcbiAgICAgICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgICAgICB0LnNldmVyaXR5TnVtYmVyID0gMjQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5zZXZlcml0eVRleHQgIT0gbnVsbCAmJiAodC5zZXZlcml0eVRleHQgPSBTdHJpbmcoZS5zZXZlcml0eVRleHQpKSwgZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLmJvZHkgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC5ib2R5OiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQuYm9keSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLmZyb21PYmplY3QoZS5ib2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGUuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQuYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgIHQuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGUuYXR0cmlidXRlcy5sZW5ndGg7ICsrcikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5hdHRyaWJ1dGVzW3JdICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgdC5hdHRyaWJ1dGVzW3JdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChlLmF0dHJpYnV0ZXNbcl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgKHQuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA+Pj4gMCksIGUuZmxhZ3MgIT0gbnVsbCAmJiAodC5mbGFncyA9IGUuZmxhZ3MgPj4+IDApLCBlLnRyYWNlSWQgIT0gbnVsbCAmJiAodHlwZW9mIGUudHJhY2VJZCA9PSBcInN0cmluZ1wiID8gJHV0aWwuYmFzZTY0LmRlY29kZShlLnRyYWNlSWQsIHQudHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKGUudHJhY2VJZCkpLCAwKSA6IGUudHJhY2VJZC5sZW5ndGggPj0gMCAmJiAodC50cmFjZUlkID0gZS50cmFjZUlkKSksIGUuc3BhbklkICE9IG51bGwgJiYgKHR5cGVvZiBlLnNwYW5JZCA9PSBcInN0cmluZ1wiID8gJHV0aWwuYmFzZTY0LmRlY29kZShlLnNwYW5JZCwgdC5zcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIoJHV0aWwuYmFzZTY0Lmxlbmd0aChlLnNwYW5JZCkpLCAwKSA6IGUuc3BhbklkLmxlbmd0aCA+PSAwICYmICh0LnNwYW5JZCA9IGUuc3BhbklkKSksIHQ7XG4gICAgICAgICAgfSwgaS50b09iamVjdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgIHQgfHwgKHQgPSB7fSk7XG4gICAgICAgICAgICB2YXIgciA9IHt9O1xuICAgICAgICAgICAgaWYgKCh0LmFycmF5cyB8fCB0LmRlZmF1bHRzKSAmJiAoci5hdHRyaWJ1dGVzID0gW10pLCB0LmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSBuZXcgJHV0aWwuTG9uZygwLCAwLCAhMSk7XG4gICAgICAgICAgICAgICAgci50aW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBuLnRvU3RyaW5nKCkgOiB0LmxvbmdzID09PSBOdW1iZXIgPyBuLnRvTnVtYmVyKCkgOiBuO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByLnRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgaWYgKHIuc2V2ZXJpdHlOdW1iZXIgPSB0LmVudW1zID09PSBTdHJpbmcgPyBcIlNFVkVSSVRZX05VTUJFUl9VTlNQRUNJRklFRFwiIDogMCwgci5zZXZlcml0eVRleHQgPSBcIlwiLCByLmJvZHkgPSBudWxsLCByLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSAwLCByLmZsYWdzID0gMCwgdC5ieXRlcyA9PT0gU3RyaW5nID8gci50cmFjZUlkID0gXCJcIiA6IChyLnRyYWNlSWQgPSBbXSwgdC5ieXRlcyAhPT0gQXJyYXkgJiYgKHIudHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcihyLnRyYWNlSWQpKSksIHQuYnl0ZXMgPT09IFN0cmluZyA/IHIuc3BhbklkID0gXCJcIiA6IChyLnNwYW5JZCA9IFtdLCB0LmJ5dGVzICE9PSBBcnJheSAmJiAoci5zcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIoci5zcGFuSWQpKSksICR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsICExKTtcbiAgICAgICAgICAgICAgICByLm9ic2VydmVkVGltZVVuaXhOYW5vID0gdC5sb25ncyA9PT0gU3RyaW5nID8gbi50b1N0cmluZygpIDogdC5sb25ncyA9PT0gTnVtYmVyID8gbi50b051bWJlcigpIDogbjtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgci5vYnNlcnZlZFRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikgJiYgKHR5cGVvZiBlLnRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gci50aW1lVW5peE5hbm8gPSB0LmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcoZS50aW1lVW5peE5hbm8pIDogZS50aW1lVW5peE5hbm8gOiByLnRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZS50aW1lVW5peE5hbm8pIDogdC5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKGUudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgZS50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IGUudGltZVVuaXhOYW5vKSwgZS5zZXZlcml0eU51bWJlciAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzZXZlcml0eU51bWJlclwiKSAmJiAoci5zZXZlcml0eU51bWJlciA9IHQuZW51bXMgPT09IFN0cmluZyA/ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TZXZlcml0eU51bWJlcltlLnNldmVyaXR5TnVtYmVyXSA9PT0gdm9pZCAwID8gZS5zZXZlcml0eU51bWJlciA6ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TZXZlcml0eU51bWJlcltlLnNldmVyaXR5TnVtYmVyXSA6IGUuc2V2ZXJpdHlOdW1iZXIpLCBlLnNldmVyaXR5VGV4dCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzZXZlcml0eVRleHRcIikgJiYgKHIuc2V2ZXJpdHlUZXh0ID0gZS5zZXZlcml0eVRleHQpLCBlLmJvZHkgIT0gbnVsbCAmJiBlLmhhc093blByb3BlcnR5KFwiYm9keVwiKSAmJiAoci5ib2R5ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUudG9PYmplY3QoZS5ib2R5LCB0KSksIGUuYXR0cmlidXRlcyAmJiBlLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHIuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGUuYXR0cmlidXRlcy5sZW5ndGg7ICsrbClcbiAgICAgICAgICAgICAgICByLmF0dHJpYnV0ZXNbbF0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdChlLmF0dHJpYnV0ZXNbbF0sIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpICYmIChyLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpLCBlLmZsYWdzICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpICYmIChyLmZsYWdzID0gZS5mbGFncyksIGUudHJhY2VJZCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJ0cmFjZUlkXCIpICYmIChyLnRyYWNlSWQgPSB0LmJ5dGVzID09PSBTdHJpbmcgPyAkdXRpbC5iYXNlNjQuZW5jb2RlKGUudHJhY2VJZCwgMCwgZS50cmFjZUlkLmxlbmd0aCkgOiB0LmJ5dGVzID09PSBBcnJheSA/IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUudHJhY2VJZCkgOiBlLnRyYWNlSWQpLCBlLnNwYW5JZCAhPSBudWxsICYmIGUuaGFzT3duUHJvcGVydHkoXCJzcGFuSWRcIikgJiYgKHIuc3BhbklkID0gdC5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZShlLnNwYW5JZCwgMCwgZS5zcGFuSWQubGVuZ3RoKSA6IHQuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5zcGFuSWQpIDogZS5zcGFuSWQpLCBlLm9ic2VydmVkVGltZVVuaXhOYW5vICE9IG51bGwgJiYgZS5oYXNPd25Qcm9wZXJ0eShcIm9ic2VydmVkVGltZVVuaXhOYW5vXCIpICYmICh0eXBlb2YgZS5vYnNlcnZlZFRpbWVVbml4TmFubyA9PSBcIm51bWJlclwiID8gci5vYnNlcnZlZFRpbWVVbml4TmFubyA9IHQubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhlLm9ic2VydmVkVGltZVVuaXhOYW5vKSA6IGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8gOiByLm9ic2VydmVkVGltZVVuaXhOYW5vID0gdC5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLm9ic2VydmVkVGltZVVuaXhOYW5vKSA6IHQubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhlLm9ic2VydmVkVGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgZS5vYnNlcnZlZFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogZS5vYnNlcnZlZFRpbWVVbml4TmFubyksIHI7XG4gICAgICAgICAgfSwgaS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICB9LCBpLmdldFR5cGVVcmwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpLCBlICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFwiO1xuICAgICAgICAgIH0sIGk7XG4gICAgICAgIH0oKSwgZjtcbiAgICAgIH0oKSwgYztcbiAgICB9KCksIHU7XG4gIH0oKSwgYTtcbn0oKTtcbnZhciByb290ID0gJHJvb3Q7XG5mdW5jdGlvbiBoclRpbWVUb05hbm9zKGEpIHtcbiAgdmFyIHUgPSBCaWdJbnQoMWU5KTtcbiAgcmV0dXJuIEJpZ0ludChhWzBdKSAqIHUgKyBCaWdJbnQoYVsxXSk7XG59XG5mdW5jdGlvbiB0b0xvbmdCaXRzKGEpIHtcbiAgdmFyIHUgPSBOdW1iZXIoQmlnSW50LmFzVWludE4oMzIsIGEpKSwgYyA9IE51bWJlcihCaWdJbnQuYXNVaW50TigzMiwgYSA+PiBCaWdJbnQoMzIpKSk7XG4gIHJldHVybiB7IGxvdzogdSwgaGlnaDogYyB9O1xufVxuZnVuY3Rpb24gZW5jb2RlQXNMb25nQml0cyhhKSB7XG4gIHZhciB1ID0gaHJUaW1lVG9OYW5vcyhhKTtcbiAgcmV0dXJuIHRvTG9uZ0JpdHModSk7XG59XG5mdW5jdGlvbiBvcHRpb25hbEhleFRvQmluYXJ5KGEpIHtcbiAgaWYgKGEgIT09IHZvaWQgMClcbiAgICByZXR1cm4gQShhKTtcbn1cbnZhciBERUZBVUxUX0VOQ09ERVIgPSB7XG4gIGVuY29kZUhyVGltZTogZW5jb2RlQXNMb25nQml0cyxcbiAgZW5jb2RlU3BhbkNvbnRleHQ6IEEsXG4gIGVuY29kZU9wdGlvbmFsU3BhbkNvbnRleHQ6IG9wdGlvbmFsSGV4VG9CaW5hcnlcbn07XG5mdW5jdGlvbiBnZXRPdGxwRW5jb2RlcihhKSB7XG4gIHJldHVybiBERUZBVUxUX0VOQ09ERVI7XG59XG52YXIgX19yZWFkJDMgPSBmdW5jdGlvbihhLCB1KSB7XG4gIHZhciBjID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgYVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWMpIHJldHVybiBhO1xuICB2YXIgZiA9IGMuY2FsbChhKSwgaSwgbyA9IFtdLCBlO1xuICB0cnkge1xuICAgIGZvciAoOyAodSA9PT0gdm9pZCAwIHx8IHUtLSA+IDApICYmICEoaSA9IGYubmV4dCgpKS5kb25lOyApIG8ucHVzaChpLnZhbHVlKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIGUgPSB7IGVycm9yOiB0IH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGkgJiYgIWkuZG9uZSAmJiAoYyA9IGYucmV0dXJuKSAmJiBjLmNhbGwoZik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbztcbn07XG5mdW5jdGlvbiBjcmVhdGVSZXNvdXJjZShhKSB7XG4gIHJldHVybiB7XG4gICAgYXR0cmlidXRlczogdG9BdHRyaWJ1dGVzKGEuYXR0cmlidXRlcyksXG4gICAgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogMFxuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlSW5zdHJ1bWVudGF0aW9uU2NvcGUoYSkge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGEubmFtZSxcbiAgICB2ZXJzaW9uOiBhLnZlcnNpb25cbiAgfTtcbn1cbmZ1bmN0aW9uIHRvQXR0cmlidXRlcyhhKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhhKS5tYXAoZnVuY3Rpb24odSkge1xuICAgIHJldHVybiB0b0tleVZhbHVlKHUsIGFbdV0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHRvS2V5VmFsdWUoYSwgdSkge1xuICByZXR1cm4ge1xuICAgIGtleTogYSxcbiAgICB2YWx1ZTogdG9BbnlWYWx1ZSh1KVxuICB9O1xufVxuZnVuY3Rpb24gdG9BbnlWYWx1ZShhKSB7XG4gIHZhciB1ID0gdHlwZW9mIGE7XG4gIHJldHVybiB1ID09PSBcInN0cmluZ1wiID8geyBzdHJpbmdWYWx1ZTogYSB9IDogdSA9PT0gXCJudW1iZXJcIiA/IE51bWJlci5pc0ludGVnZXIoYSkgPyB7IGludFZhbHVlOiBhIH0gOiB7IGRvdWJsZVZhbHVlOiBhIH0gOiB1ID09PSBcImJvb2xlYW5cIiA/IHsgYm9vbFZhbHVlOiBhIH0gOiBhIGluc3RhbmNlb2YgVWludDhBcnJheSA/IHsgYnl0ZXNWYWx1ZTogYSB9IDogQXJyYXkuaXNBcnJheShhKSA/IHsgYXJyYXlWYWx1ZTogeyB2YWx1ZXM6IGEubWFwKHRvQW55VmFsdWUpIH0gfSA6IHUgPT09IFwib2JqZWN0XCIgJiYgYSAhPSBudWxsID8ge1xuICAgIGt2bGlzdFZhbHVlOiB7XG4gICAgICB2YWx1ZXM6IE9iamVjdC5lbnRyaWVzKGEpLm1hcChmdW5jdGlvbihjKSB7XG4gICAgICAgIHZhciBmID0gX19yZWFkJDMoYywgMiksIGkgPSBmWzBdLCBvID0gZlsxXTtcbiAgICAgICAgcmV0dXJuIHRvS2V5VmFsdWUoaSwgbyk7XG4gICAgICB9KVxuICAgIH1cbiAgfSA6IHt9O1xufVxudmFyIF9fdmFsdWVzID0gZnVuY3Rpb24oYSkge1xuICB2YXIgdSA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgYyA9IHUgJiYgYVt1XSwgZiA9IDA7XG4gIGlmIChjKSByZXR1cm4gYy5jYWxsKGEpO1xuICBpZiAoYSAmJiB0eXBlb2YgYS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBhICYmIGYgPj0gYS5sZW5ndGggJiYgKGEgPSB2b2lkIDApLCB7IHZhbHVlOiBhICYmIGFbZisrXSwgZG9uZTogIWEgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodSA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn0sIF9fcmVhZCQyID0gZnVuY3Rpb24oYSwgdSkge1xuICB2YXIgYyA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGFbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFjKSByZXR1cm4gYTtcbiAgdmFyIGYgPSBjLmNhbGwoYSksIGksIG8gPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHUgPT09IHZvaWQgMCB8fCB1LS0gPiAwKSAmJiAhKGkgPSBmLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goaS52YWx1ZSk7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBlID0geyBlcnJvcjogdCB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpICYmICFpLmRvbmUgJiYgKGMgPSBmLnJldHVybikgJiYgYy5jYWxsKGYpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59O1xuZnVuY3Rpb24gc2RrU3BhblRvT3RscFNwYW4oYSwgdSkge1xuICB2YXIgYywgZiA9IGEuc3BhbkNvbnRleHQoKSwgaSA9IGEuc3RhdHVzO1xuICByZXR1cm4ge1xuICAgIHRyYWNlSWQ6IHUuZW5jb2RlU3BhbkNvbnRleHQoZi50cmFjZUlkKSxcbiAgICBzcGFuSWQ6IHUuZW5jb2RlU3BhbkNvbnRleHQoZi5zcGFuSWQpLFxuICAgIHBhcmVudFNwYW5JZDogdS5lbmNvZGVPcHRpb25hbFNwYW5Db250ZXh0KGEucGFyZW50U3BhbklkKSxcbiAgICB0cmFjZVN0YXRlOiAoYyA9IGYudHJhY2VTdGF0ZSkgPT09IG51bGwgfHwgYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYy5zZXJpYWxpemUoKSxcbiAgICBuYW1lOiBhLm5hbWUsXG4gICAgLy8gU3BhbiBraW5kIGlzIG9mZnNldCBieSAxIGJlY2F1c2UgdGhlIEFQSSBkb2VzIG5vdCBkZWZpbmUgYSB2YWx1ZSBmb3IgdW5zZXRcbiAgICBraW5kOiBhLmtpbmQgPT0gbnVsbCA/IDAgOiBhLmtpbmQgKyAxLFxuICAgIHN0YXJ0VGltZVVuaXhOYW5vOiB1LmVuY29kZUhyVGltZShhLnN0YXJ0VGltZSksXG4gICAgZW5kVGltZVVuaXhOYW5vOiB1LmVuY29kZUhyVGltZShhLmVuZFRpbWUpLFxuICAgIGF0dHJpYnV0ZXM6IHRvQXR0cmlidXRlcyhhLmF0dHJpYnV0ZXMpLFxuICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IGEuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCxcbiAgICBldmVudHM6IGEuZXZlbnRzLm1hcChmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gdG9PdGxwU3BhbkV2ZW50KG8sIHUpO1xuICAgIH0pLFxuICAgIGRyb3BwZWRFdmVudHNDb3VudDogYS5kcm9wcGVkRXZlbnRzQ291bnQsXG4gICAgc3RhdHVzOiB7XG4gICAgICAvLyBBUEkgYW5kIHByb3RvIGVudW1zIHNoYXJlIHRoZSBzYW1lIHZhbHVlc1xuICAgICAgY29kZTogaS5jb2RlLFxuICAgICAgbWVzc2FnZTogaS5tZXNzYWdlXG4gICAgfSxcbiAgICBsaW5rczogYS5saW5rcy5tYXAoZnVuY3Rpb24obykge1xuICAgICAgcmV0dXJuIHRvT3RscExpbmsobywgdSk7XG4gICAgfSksXG4gICAgZHJvcHBlZExpbmtzQ291bnQ6IGEuZHJvcHBlZExpbmtzQ291bnRcbiAgfTtcbn1cbmZ1bmN0aW9uIHRvT3RscExpbmsoYSwgdSkge1xuICB2YXIgYztcbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVzOiBhLmF0dHJpYnV0ZXMgPyB0b0F0dHJpYnV0ZXMoYS5hdHRyaWJ1dGVzKSA6IFtdLFxuICAgIHNwYW5JZDogdS5lbmNvZGVTcGFuQ29udGV4dChhLmNvbnRleHQuc3BhbklkKSxcbiAgICB0cmFjZUlkOiB1LmVuY29kZVNwYW5Db250ZXh0KGEuY29udGV4dC50cmFjZUlkKSxcbiAgICB0cmFjZVN0YXRlOiAoYyA9IGEuY29udGV4dC50cmFjZVN0YXRlKSA9PT0gbnVsbCB8fCBjID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjLnNlcmlhbGl6ZSgpLFxuICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IGEuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCB8fCAwXG4gIH07XG59XG5mdW5jdGlvbiB0b090bHBTcGFuRXZlbnQoYSwgdSkge1xuICByZXR1cm4ge1xuICAgIGF0dHJpYnV0ZXM6IGEuYXR0cmlidXRlcyA/IHRvQXR0cmlidXRlcyhhLmF0dHJpYnV0ZXMpIDogW10sXG4gICAgbmFtZTogYS5uYW1lLFxuICAgIHRpbWVVbml4TmFubzogdS5lbmNvZGVIclRpbWUoYS50aW1lKSxcbiAgICBkcm9wcGVkQXR0cmlidXRlc0NvdW50OiBhLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgfHwgMFxuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdChhLCB1KSB7XG4gIHZhciBjID0gZ2V0T3RscEVuY29kZXIoKTtcbiAgcmV0dXJuIHtcbiAgICByZXNvdXJjZVNwYW5zOiBzcGFuUmVjb3Jkc1RvUmVzb3VyY2VTcGFucyhhLCBjKVxuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlUmVzb3VyY2VNYXAoYSkge1xuICB2YXIgdSwgYywgZiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIHRyeSB7XG4gICAgZm9yICh2YXIgaSA9IF9fdmFsdWVzKGEpLCBvID0gaS5uZXh0KCk7ICFvLmRvbmU7IG8gPSBpLm5leHQoKSkge1xuICAgICAgdmFyIGUgPSBvLnZhbHVlLCB0ID0gZi5nZXQoZS5yZXNvdXJjZSk7XG4gICAgICB0IHx8ICh0ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgZi5zZXQoZS5yZXNvdXJjZSwgdCkpO1xuICAgICAgdmFyIHIgPSBlLmluc3RydW1lbnRhdGlvbkxpYnJhcnkubmFtZSArIFwiQFwiICsgKGUuaW5zdHJ1bWVudGF0aW9uTGlicmFyeS52ZXJzaW9uIHx8IFwiXCIpICsgXCI6XCIgKyAoZS5pbnN0cnVtZW50YXRpb25MaWJyYXJ5LnNjaGVtYVVybCB8fCBcIlwiKSwgbiA9IHQuZ2V0KHIpO1xuICAgICAgbiB8fCAobiA9IFtdLCB0LnNldChyLCBuKSksIG4ucHVzaChlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGwpIHtcbiAgICB1ID0geyBlcnJvcjogbCB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKGMgPSBpLnJldHVybikgJiYgYy5jYWxsKGkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAodSkgdGhyb3cgdS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5mdW5jdGlvbiBzcGFuUmVjb3Jkc1RvUmVzb3VyY2VTcGFucyhhLCB1KSB7XG4gIGZvciAodmFyIGMgPSBjcmVhdGVSZXNvdXJjZU1hcChhKSwgZiA9IFtdLCBpID0gYy5lbnRyaWVzKCksIG8gPSBpLm5leHQoKTsgIW8uZG9uZTsgKSB7XG4gICAgZm9yICh2YXIgZSA9IF9fcmVhZCQyKG8udmFsdWUsIDIpLCB0ID0gZVswXSwgciA9IGVbMV0sIG4gPSBbXSwgbCA9IHIudmFsdWVzKCksIHAgPSBsLm5leHQoKTsgIXAuZG9uZTsgKSB7XG4gICAgICB2YXIgcyA9IHAudmFsdWU7XG4gICAgICBpZiAocy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciB5ID0gcy5tYXAoZnVuY3Rpb24oaCkge1xuICAgICAgICAgIHJldHVybiBzZGtTcGFuVG9PdGxwU3BhbihoLCB1KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG4ucHVzaCh7XG4gICAgICAgICAgc2NvcGU6IGNyZWF0ZUluc3RydW1lbnRhdGlvblNjb3BlKHNbMF0uaW5zdHJ1bWVudGF0aW9uTGlicmFyeSksXG4gICAgICAgICAgc3BhbnM6IHksXG4gICAgICAgICAgc2NoZW1hVXJsOiBzWzBdLmluc3RydW1lbnRhdGlvbkxpYnJhcnkuc2NoZW1hVXJsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcCA9IGwubmV4dCgpO1xuICAgIH1cbiAgICB2YXIgZCA9IHtcbiAgICAgIHJlc291cmNlOiBjcmVhdGVSZXNvdXJjZSh0KSxcbiAgICAgIHNjb3BlU3BhbnM6IG4sXG4gICAgICBzY2hlbWFVcmw6IHZvaWQgMFxuICAgIH07XG4gICAgZi5wdXNoKGQpLCBvID0gaS5uZXh0KCk7XG4gIH1cbiAgcmV0dXJuIGY7XG59XG52YXIgdHJhY2VSZXNwb25zZVR5cGUgPSByb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLCB0cmFjZVJlcXVlc3RUeXBlID0gcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LCBQcm90b2J1ZlRyYWNlU2VyaWFsaXplciA9IHtcbiAgc2VyaWFsaXplUmVxdWVzdDogZnVuY3Rpb24oYSkge1xuICAgIHZhciB1ID0gY3JlYXRlRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdChhKTtcbiAgICByZXR1cm4gdHJhY2VSZXF1ZXN0VHlwZS5lbmNvZGUodSkuZmluaXNoKCk7XG4gIH0sXG4gIGRlc2VyaWFsaXplUmVzcG9uc2U6IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gdHJhY2VSZXNwb25zZVR5cGUuZGVjb2RlKGEpO1xuICB9XG59LCBfX2F3YWl0ZXIgPSBmdW5jdGlvbihhLCB1LCBjLCBmKSB7XG4gIGZ1bmN0aW9uIGkobykge1xuICAgIHJldHVybiBvIGluc3RhbmNlb2YgYyA/IG8gOiBuZXcgYyhmdW5jdGlvbihlKSB7XG4gICAgICBlKG8pO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKGMgfHwgKGMgPSBQcm9taXNlKSkoZnVuY3Rpb24obywgZSkge1xuICAgIGZ1bmN0aW9uIHQobCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbihmLm5leHQobCkpO1xuICAgICAgfSBjYXRjaCAocCkge1xuICAgICAgICBlKHApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByKGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG4oZi50aHJvdyhsKSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIGUocCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG4obCkge1xuICAgICAgbC5kb25lID8gbyhsLnZhbHVlKSA6IGkobC52YWx1ZSkudGhlbih0LCByKTtcbiAgICB9XG4gICAgbigoZiA9IGYuYXBwbHkoYSwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn0sIF9fZ2VuZXJhdG9yID0gZnVuY3Rpb24oYSwgdSkge1xuICB2YXIgYyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChvWzBdICYgMSkgdGhyb3cgb1sxXTtcbiAgICByZXR1cm4gb1sxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgaSwgbywgZTtcbiAgcmV0dXJuIGUgPSB7IG5leHQ6IHQoMCksIHRocm93OiB0KDEpLCByZXR1cm46IHQoMikgfSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZTtcbiAgZnVuY3Rpb24gdChuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGwpIHtcbiAgICAgIHJldHVybiByKFtuLCBsXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiByKG4pIHtcbiAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IGM7ICkgdHJ5IHtcbiAgICAgIGlmIChmID0gMSwgaSAmJiAobyA9IG5bMF0gJiAyID8gaS5yZXR1cm4gOiBuWzBdID8gaS50aHJvdyB8fCAoKG8gPSBpLnJldHVybikgJiYgby5jYWxsKGkpLCAwKSA6IGkubmV4dCkgJiYgIShvID0gby5jYWxsKGksIG5bMV0pKS5kb25lKSByZXR1cm4gbztcbiAgICAgIHN3aXRjaCAoaSA9IDAsIG8gJiYgKG4gPSBbblswXSAmIDIsIG8udmFsdWVdKSwgblswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBvID0gbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBjLmxhYmVsKyssIHsgdmFsdWU6IG5bMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBjLmxhYmVsKyssIGkgPSBuWzFdLCBuID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbiA9IGMub3BzLnBvcCgpLCBjLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKG8gPSBjLnRyeXMsICEobyA9IG8ubGVuZ3RoID4gMCAmJiBvW28ubGVuZ3RoIC0gMV0pICYmIChuWzBdID09PSA2IHx8IG5bMF0gPT09IDIpKSB7XG4gICAgICAgICAgICBjID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoblswXSA9PT0gMyAmJiAoIW8gfHwgblsxXSA+IG9bMF0gJiYgblsxXSA8IG9bM10pKSB7XG4gICAgICAgICAgICBjLmxhYmVsID0gblsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoblswXSA9PT0gNiAmJiBjLmxhYmVsIDwgb1sxXSkge1xuICAgICAgICAgICAgYy5sYWJlbCA9IG9bMV0sIG8gPSBuO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvICYmIGMubGFiZWwgPCBvWzJdKSB7XG4gICAgICAgICAgICBjLmxhYmVsID0gb1syXSwgYy5vcHMucHVzaChuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvWzJdICYmIGMub3BzLnBvcCgpLCBjLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBuID0gdS5jYWxsKGEsIGMpO1xuICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgIG4gPSBbNiwgbF0sIGkgPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBmID0gbyA9IDA7XG4gICAgfVxuICAgIGlmIChuWzBdICYgNSkgdGhyb3cgblsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogblswXSA/IG5bMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn0sIE1BWF9BVFRFTVBUUyA9IDUsIElOSVRJQUxfQkFDS09GRiA9IDFlMywgTUFYX0JBQ0tPRkYgPSA1ZTMsIEJBQ0tPRkZfTVVMVElQTElFUiA9IDEuNSwgSklUVEVSID0gMC4yO1xuZnVuY3Rpb24gZ2V0Sml0dGVyKCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKSAqICgyICogSklUVEVSKSAtIEpJVFRFUjtcbn1cbnZhciBSZXRyeWluZ1RyYW5zcG9ydCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBhKHUpIHtcbiAgICAgIHRoaXMuX3RyYW5zcG9ydCA9IHU7XG4gICAgfVxuICAgIHJldHVybiBhLnByb3RvdHlwZS5yZXRyeSA9IGZ1bmN0aW9uKHUsIGMsIGYpIHtcbiAgICAgIHZhciBpID0gdGhpcztcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvLCBlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaS5fdHJhbnNwb3J0LnNlbmQodSwgYykudGhlbihvLCBlKTtcbiAgICAgICAgfSwgZik7XG4gICAgICB9KTtcbiAgICB9LCBhLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24odSwgYykge1xuICAgICAgdmFyIGY7XG4gICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGksIG8sIGUsIHQsIHIsIG4sIGw7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbihwKSB7XG4gICAgICAgICAgc3dpdGNoIChwLmxhYmVsKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHJldHVybiBpID0gRGF0ZS5ub3coKSArIGMsIFs0LCB0aGlzLl90cmFuc3BvcnQuc2VuZCh1LCBjKV07XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIG8gPSBwLnNlbnQoKSwgZSA9IE1BWF9BVFRFTVBUUywgdCA9IElOSVRJQUxfQkFDS09GRiwgcC5sYWJlbCA9IDI7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIHJldHVybiBvLnN0YXR1cyA9PT0gXCJyZXRyeWFibGVcIiAmJiBlID4gMCA/IChlLS0sIHIgPSBNYXRoLm1heChNYXRoLm1pbih0LCBNQVhfQkFDS09GRikgKyBnZXRKaXR0ZXIoKSwgMCksIHQgPSB0ICogQkFDS09GRl9NVUxUSVBMSUVSLCBuID0gKGYgPSBvLnJldHJ5SW5NaWxsaXMpICE9PSBudWxsICYmIGYgIT09IHZvaWQgMCA/IGYgOiByLCBsID0gaSAtIERhdGUubm93KCksIG4gPiBsID8gWzIsIG9dIDogWzQsIHRoaXMucmV0cnkodSwgbCwgbildKSA6IFszLCA0XTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIG8gPSBwLnNlbnQoKSwgWzMsIDJdO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gWzIsIG9dO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCBhLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5zaHV0ZG93bigpO1xuICAgIH0sIGE7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIGNyZWF0ZVJldHJ5aW5nVHJhbnNwb3J0KGEpIHtcbiAgcmV0dXJuIG5ldyBSZXRyeWluZ1RyYW5zcG9ydChhLnRyYW5zcG9ydCk7XG59XG5mdW5jdGlvbiBpc0V4cG9ydFJldHJ5YWJsZShhKSB7XG4gIHZhciB1ID0gWzQyOSwgNTAyLCA1MDMsIDUwNF07XG4gIHJldHVybiB1LmluY2x1ZGVzKGEpO1xufVxuZnVuY3Rpb24gcGFyc2VSZXRyeUFmdGVyVG9NaWxscyhhKSB7XG4gIGlmIChhICE9IG51bGwpIHtcbiAgICB2YXIgdSA9IE51bWJlci5wYXJzZUludChhLCAxMCk7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIodSkpXG4gICAgICByZXR1cm4gdSA+IDAgPyB1ICogMWUzIDogLTE7XG4gICAgdmFyIGMgPSBuZXcgRGF0ZShhKS5nZXRUaW1lKCkgLSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBjID49IDAgPyBjIDogMDtcbiAgfVxufVxudmFyIF9fcmVhZCQxID0gZnVuY3Rpb24oYSwgdSkge1xuICB2YXIgYyA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGFbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFjKSByZXR1cm4gYTtcbiAgdmFyIGYgPSBjLmNhbGwoYSksIGksIG8gPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHUgPT09IHZvaWQgMCB8fCB1LS0gPiAwKSAmJiAhKGkgPSBmLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goaS52YWx1ZSk7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBlID0geyBlcnJvcjogdCB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpICYmICFpLmRvbmUgJiYgKGMgPSBmLnJldHVybikgJiYgYy5jYWxsKGYpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59LCBYaHJUcmFuc3BvcnQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gYSh1KSB7XG4gICAgICB0aGlzLl9wYXJhbWV0ZXJzID0gdTtcbiAgICB9XG4gICAgcmV0dXJuIGEucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbih1LCBjKSB7XG4gICAgICB2YXIgZiA9IHRoaXM7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaSkge1xuICAgICAgICB2YXIgbyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICBvLnRpbWVvdXQgPSBjLCBvLm9wZW4oXCJQT1NUXCIsIGYuX3BhcmFtZXRlcnMudXJsKTtcbiAgICAgICAgdmFyIGUgPSBmLl9wYXJhbWV0ZXJzLmhlYWRlcnMoKTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KSB7XG4gICAgICAgICAgdmFyIHIgPSBfX3JlYWQkMSh0LCAyKSwgbiA9IHJbMF0sIGwgPSByWzFdO1xuICAgICAgICAgIG8uc2V0UmVxdWVzdEhlYWRlcihuLCBsKTtcbiAgICAgICAgfSksIG8ub250aW1lb3V0ID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgIGkoe1xuICAgICAgICAgICAgc3RhdHVzOiBcImZhaWx1cmVcIixcbiAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJYSFIgcmVxdWVzdCB0aW1lZCBvdXRcIilcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgby5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBvLnN0YXR1cyA+PSAyMDAgJiYgby5zdGF0dXMgPD0gMjk5ID8gKHIuZGVidWcoXCJYSFIgc3VjY2Vzc1wiKSwgaSh7XG4gICAgICAgICAgICBzdGF0dXM6IFwic3VjY2Vzc1wiXG4gICAgICAgICAgfSkpIDogby5zdGF0dXMgJiYgaXNFeHBvcnRSZXRyeWFibGUoby5zdGF0dXMpID8gaSh7XG4gICAgICAgICAgICBzdGF0dXM6IFwicmV0cnlhYmxlXCIsXG4gICAgICAgICAgICByZXRyeUluTWlsbGlzOiBwYXJzZVJldHJ5QWZ0ZXJUb01pbGxzKG8uZ2V0UmVzcG9uc2VIZWFkZXIoXCJSZXRyeS1BZnRlclwiKSlcbiAgICAgICAgICB9KSA6IG8uc3RhdHVzICE9PSAwICYmIGkoe1xuICAgICAgICAgICAgc3RhdHVzOiBcImZhaWx1cmVcIixcbiAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJYSFIgcmVxdWVzdCBmYWlsZWQgd2l0aCBub24tcmV0cnlhYmxlIHN0YXR1c1wiKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBvLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpKHtcbiAgICAgICAgICAgIHN0YXR1czogXCJmYWlsdXJlXCIsXG4gICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiWEhSIHJlcXVlc3QgYWJvcnRlZFwiKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBvLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpKHtcbiAgICAgICAgICAgIHN0YXR1czogXCJmYWlsdXJlXCIsXG4gICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiWEhSIHJlcXVlc3QgZXJyb3JlZFwiKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBvLnNlbmQodSk7XG4gICAgICB9KTtcbiAgICB9LCBhLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgIH0sIGE7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIGNyZWF0ZVhoclRyYW5zcG9ydChhKSB7XG4gIHJldHVybiBuZXcgWGhyVHJhbnNwb3J0KGEpO1xufVxudmFyIFNlbmRCZWFjb25UcmFuc3BvcnQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gYSh1KSB7XG4gICAgICB0aGlzLl9wYXJhbXMgPSB1O1xuICAgIH1cbiAgICByZXR1cm4gYS5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHZhciBjID0gdGhpcztcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihmKSB7XG4gICAgICAgIG5hdmlnYXRvci5zZW5kQmVhY29uKGMuX3BhcmFtcy51cmwsIG5ldyBCbG9iKFt1XSwgeyB0eXBlOiBjLl9wYXJhbXMuYmxvYlR5cGUgfSkpID8gKHIuZGVidWcoXCJTZW5kQmVhY29uIHN1Y2Nlc3NcIiksIGYoe1xuICAgICAgICAgIHN0YXR1czogXCJzdWNjZXNzXCJcbiAgICAgICAgfSkpIDogZih7XG4gICAgICAgICAgc3RhdHVzOiBcImZhaWx1cmVcIixcbiAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiU2VuZEJlYWNvbiBmYWlsZWRcIilcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCBhLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgIH0sIGE7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIGNyZWF0ZVNlbmRCZWFjb25UcmFuc3BvcnQoYSkge1xuICByZXR1cm4gbmV3IFNlbmRCZWFjb25UcmFuc3BvcnQoYSk7XG59XG5mdW5jdGlvbiBjcmVhdGVPdGxwWGhyRXhwb3J0RGVsZWdhdGUoYSwgdSkge1xuICByZXR1cm4gY3JlYXRlT3RscE5ldHdvcmtFeHBvcnREZWxlZ2F0ZShhLCB1LCBjcmVhdGVSZXRyeWluZ1RyYW5zcG9ydCh7XG4gICAgdHJhbnNwb3J0OiBjcmVhdGVYaHJUcmFuc3BvcnQoYSlcbiAgfSkpO1xufVxuZnVuY3Rpb24gY3JlYXRlT3RscFNlbmRCZWFjb25FeHBvcnREZWxlZ2F0ZShhLCB1KSB7XG4gIHJldHVybiBjcmVhdGVPdGxwTmV0d29ya0V4cG9ydERlbGVnYXRlKGEsIHUsIGNyZWF0ZVJldHJ5aW5nVHJhbnNwb3J0KHtcbiAgICB0cmFuc3BvcnQ6IGNyZWF0ZVNlbmRCZWFjb25UcmFuc3BvcnQoe1xuICAgICAgdXJsOiBhLnVybCxcbiAgICAgIGJsb2JUeXBlOiBhLmhlYWRlcnMoKVtcIkNvbnRlbnQtVHlwZVwiXVxuICAgIH0pXG4gIH0pKTtcbn1cbnZhciBfX3JlYWQgPSBmdW5jdGlvbihhLCB1KSB7XG4gIHZhciBjID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgYVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWMpIHJldHVybiBhO1xuICB2YXIgZiA9IGMuY2FsbChhKSwgaSwgbyA9IFtdLCBlO1xuICB0cnkge1xuICAgIGZvciAoOyAodSA9PT0gdm9pZCAwIHx8IHUtLSA+IDApICYmICEoaSA9IGYubmV4dCgpKS5kb25lOyApIG8ucHVzaChpLnZhbHVlKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIGUgPSB7IGVycm9yOiB0IH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGkgJiYgIWkuZG9uZSAmJiAoYyA9IGYucmV0dXJuKSAmJiBjLmNhbGwoZik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbztcbn07XG5mdW5jdGlvbiB2YWxpZGF0ZUFuZE5vcm1hbGl6ZUhlYWRlcnMoYSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHUsIGMgPSB7fTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoKHUgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhKCkpICE9PSBudWxsICYmIHUgIT09IHZvaWQgMCA/IHUgOiB7fSkuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICB2YXIgaSA9IF9fcmVhZChmLCAyKSwgbyA9IGlbMF0sIGUgPSBpWzFdO1xuICAgICAgdHlwZW9mIGUgPCBcInVcIiA/IGNbb10gPSBTdHJpbmcoZSkgOiByLndhcm4oJ0hlYWRlciBcIicgKyBvICsgJ1wiIGhhcyBpbnZhbGlkIHZhbHVlICgnICsgZSArIFwiKSBhbmQgd2lsbCBiZSBpZ25vcmVkXCIpO1xuICAgIH0pLCBjO1xuICB9O1xufVxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24oYSkge1xuICAgIGZvciAodmFyIHUsIGMgPSAxLCBmID0gYXJndW1lbnRzLmxlbmd0aDsgYyA8IGY7IGMrKykge1xuICAgICAgdSA9IGFyZ3VtZW50c1tjXTtcbiAgICAgIGZvciAodmFyIGkgaW4gdSkgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHUsIGkpICYmIChhW2ldID0gdVtpXSk7XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9LCBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbmZ1bmN0aW9uIG1lcmdlSGVhZGVycyhhLCB1LCBjKSB7XG4gIHZhciBmID0gX19hc3NpZ24oe30sIGMoKSksIGkgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB1ICE9IG51bGwgJiYgT2JqZWN0LmFzc2lnbihpLCB1KCkpLCBhICE9IG51bGwgJiYgT2JqZWN0LmFzc2lnbihpLCBhKCkpLCBPYmplY3QuYXNzaWduKGksIGYpO1xuICB9O1xufVxuZnVuY3Rpb24gdmFsaWRhdGVVc2VyUHJvdmlkZWRVcmwoYSkge1xuICBpZiAoYSAhPSBudWxsKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFVSTChhKSwgYTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbmZpZ3VyYXRpb246IENvdWxkIG5vdCBwYXJzZSB1c2VyLXByb3ZpZGVkIGV4cG9ydCBVUkw6ICdcIiArIGEgKyBcIidcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gbWVyZ2VPdGxwSHR0cENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMoYSwgdSwgYykge1xuICB2YXIgZiwgaSwgbywgZTtcbiAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBtZXJnZU90bHBTaGFyZWRDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzKGEsIHUsIGMpKSwgeyBoZWFkZXJzOiBtZXJnZUhlYWRlcnModmFsaWRhdGVBbmROb3JtYWxpemVIZWFkZXJzKGEuaGVhZGVycyksIHUuaGVhZGVycywgYy5oZWFkZXJzKSwgdXJsOiAoaSA9IChmID0gdmFsaWRhdGVVc2VyUHJvdmlkZWRVcmwoYS51cmwpKSAhPT0gbnVsbCAmJiBmICE9PSB2b2lkIDAgPyBmIDogdS51cmwpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBjLnVybCwgYWdlbnRPcHRpb25zOiAoZSA9IChvID0gYS5hZ2VudE9wdGlvbnMpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiB1LmFnZW50T3B0aW9ucykgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IGMuYWdlbnRPcHRpb25zIH0pO1xufVxuZnVuY3Rpb24gZ2V0SHR0cENvbmZpZ3VyYXRpb25EZWZhdWx0cyhhLCB1KSB7XG4gIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkRlZmF1bHRzKCkpLCB7IGhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhO1xuICB9LCB1cmw6IFwiaHR0cDovL2xvY2FsaG9zdDo0MzE4L1wiICsgdSwgYWdlbnRPcHRpb25zOiB7IGtlZXBBbGl2ZTogITAgfSB9KTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRMZWdhY3lCcm93c2VySHR0cE9wdGlvbnMoYSwgdSwgYykge1xuICByZXR1cm4gbWVyZ2VPdGxwSHR0cENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMoXG4gICAge1xuICAgICAgdXJsOiBhLnVybCxcbiAgICAgIHRpbWVvdXRNaWxsaXM6IGEudGltZW91dE1pbGxpcyxcbiAgICAgIGhlYWRlcnM6IHdyYXBTdGF0aWNIZWFkZXJzSW5GdW5jdGlvbihhLmhlYWRlcnMpLFxuICAgICAgY29uY3VycmVuY3lMaW1pdDogYS5jb25jdXJyZW5jeUxpbWl0XG4gICAgfSxcbiAgICB7fSxcbiAgICAvLyBubyBmYWxsYmFjayBmb3IgYnJvd3NlciBjYXNlXG4gICAgZ2V0SHR0cENvbmZpZ3VyYXRpb25EZWZhdWx0cyhjLCB1KVxuICApO1xufVxuZnVuY3Rpb24gY3JlYXRlTGVnYWN5T3RscEJyb3dzZXJFeHBvcnREZWxlZ2F0ZShhLCB1LCBjLCBmKSB7XG4gIHZhciBpID0gISFhLmhlYWRlcnMgfHwgdHlwZW9mIG5hdmlnYXRvci5zZW5kQmVhY29uICE9IFwiZnVuY3Rpb25cIiwgbyA9IGNvbnZlcnRMZWdhY3lCcm93c2VySHR0cE9wdGlvbnMoYSwgYywgZik7XG4gIHJldHVybiBpID8gY3JlYXRlT3RscFhockV4cG9ydERlbGVnYXRlKG8sIHUpIDogY3JlYXRlT3RscFNlbmRCZWFjb25FeHBvcnREZWxlZ2F0ZShvLCB1KTtcbn1cbnZhciBfX2V4dGVuZHMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gIHZhciBhID0gZnVuY3Rpb24odSwgYykge1xuICAgIHJldHVybiBhID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oZiwgaSkge1xuICAgICAgZi5fX3Byb3RvX18gPSBpO1xuICAgIH0gfHwgZnVuY3Rpb24oZiwgaSkge1xuICAgICAgZm9yICh2YXIgbyBpbiBpKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSwgbykgJiYgKGZbb10gPSBpW29dKTtcbiAgICB9LCBhKHUsIGMpO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24odSwgYykge1xuICAgIGlmICh0eXBlb2YgYyAhPSBcImZ1bmN0aW9uXCIgJiYgYyAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGMpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBhKHUsIGMpO1xuICAgIGZ1bmN0aW9uIGYoKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gdTtcbiAgICB9XG4gICAgdS5wcm90b3R5cGUgPSBjID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShjKSA6IChmLnByb3RvdHlwZSA9IGMucHJvdG90eXBlLCBuZXcgZigpKTtcbiAgfTtcbn0oKSwgREVGQVVMVF9DT0xMRUNUT1JfUkVTT1VSQ0VfUEFUSCA9IFwidjEvdHJhY2VzXCIsIE9UTFBUcmFjZUV4cG9ydGVyID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKGEpIHtcbiAgICBfX2V4dGVuZHModSwgYSk7XG4gICAgZnVuY3Rpb24gdShjKSB7XG4gICAgICByZXR1cm4gYyA9PT0gdm9pZCAwICYmIChjID0ge30pLCBhLmNhbGwodGhpcywgY3JlYXRlTGVnYWN5T3RscEJyb3dzZXJFeHBvcnREZWxlZ2F0ZShjLCBQcm90b2J1ZlRyYWNlU2VyaWFsaXplciwgREVGQVVMVF9DT0xMRUNUT1JfUkVTT1VSQ0VfUEFUSCwgeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL3gtcHJvdG9idWZcIiB9KSkgfHwgdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIHU7XG4gIH0oT1RMUEV4cG9ydGVyQmFzZSlcbik7XG5cbmV4cG9ydCB7IE9UTFBUcmFjZUV4cG9ydGVyIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxTQUFTO0FBQ2xCLFNBQVMsR0FBRyxTQUFTO0FBQ3JCLFNBQVMsU0FB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R0FBR0MsRUFBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUdDLEVBQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHQyxFQUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBR0MsRUFBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUdDLEVBQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHQyxFQUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFBQSxJQUM3STtBQUNBLGFBQVNILEVBQUVFLEdBQUdFLEdBQUdELEdBQUc7QUFDbEIsUUFBRSxDQUFDLElBQUlELEdBQUdFLEVBQUVELENBQUMsSUFBSSxFQUFFLENBQUMsR0FBR0MsRUFBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUdDLEVBQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHQyxFQUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBR0MsRUFBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUdDLEVBQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHQyxFQUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBR0MsRUFBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQUEsSUFDN0k7QUFDQSxJQUFBTCxFQUFFLGdCQUFnQkMsSUFBSSxJQUFJQyxHQUFHRixFQUFFLGdCQUFnQkMsSUFBSUMsSUFBSTtBQUN2RCxhQUFTLEVBQUVFLEdBQUdFLEdBQUc7QUFDZixhQUFPLEVBQUUsQ0FBQyxJQUFJRixFQUFFRSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUlGLEVBQUVFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJRixFQUFFRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSUYsRUFBRUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUlGLEVBQUVFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJRixFQUFFRSxJQUFJ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QUFFLGtCQUFrQixTQUFTLENBQUMsRUFBRSxTQUFTLEtBQUtBLEVBQUUsZ0JBQWdCLFNBQVMsTUFBTSxRQUFRQyxFQUFFLGVBQWUsTUFBTSxLQUFLLFVBQVVELEVBQUUsWUFBWSxHQUFHLFdBQVcsS0FBSyxPQUFPQSxFQUFFLGdCQUFnQixXQUFXQyxFQUFFLGVBQWUsU0FBU0QsRUFBRSxjQUFjLEVBQUUsSUFBSSxPQUFPQSxFQUFFLGdCQUFnQixXQUFXQyxFQUFFLGVBQWVELEVBQUUsZUFBZSxPQUFPQSxFQUFFLGdCQUFnQixhQUFhQyxFQUFFLGVBQWUsSUFBSSxNQUFNLFNBQVNELEVBQUUsYUFBYSxRQUFRLEdBQUdBLEVBQUUsYUFBYSxTQUFTLENBQUMsRUFBRSxTQUFTLEtBQUtBLEVBQUUsU0FBUyxTQUFTLE1BQU0sUUFBUUMsRUFBRSxRQUFRLE1BQU0sS0FBSyxVQUFVRCxFQUFFLEtBQUssR0FBRyxXQUFXLEtBQUssT0FBT0EsRUFBRSxTQUFTLFdBQVdDLEVBQUUsUUFBUSxTQUFTRCxFQUFFLE9BQU8sRUFBRSxJQUFJLE9BQU9BLEVBQUUsU0FBUyxXQUFXQyxFQUFFLFFBQVFELEVBQUUsUUFBUSxPQUFPQSxFQUFFLFNBQVMsYUFBYUMsRUFBRSxRQUFRLElBQUksTUFBTSxTQUFTRCxFQUFFLE1BQU0sUUFBUSxHQUFHQSxFQUFFLE1BQU0sU0FBUyxDQUFDLEVBQUUsU0FBUyxLQUFLQSxFQUFFLE9BQU8sU0FBU0MsRUFBRSxNQUFNLE9BQU9ELEVBQUUsR0FBRyxJQUFJQSxFQUFFLFNBQVMsU0FBU0MsRUFBRSxRQUFRRCxFQUFFLFFBQVEsSUFBSUEsRUFBRSxhQUFhLFNBQVMsTUFBTSxRQUFRQyxFQUFFLFlBQVksTUFBTSxLQUFLLFVBQVVELEVBQUUsU0FBUyxHQUFHLFdBQVcsS0FBSyxPQUFPQSxFQUFFLGFBQWEsV0FBV0MsRUFBRSxZQUFZLFNBQVNELEVBQUUsV0FBVyxFQUFFLElBQUksT0FBT0EsRUFBRSxhQUFhLFdBQVdDLEVBQUUsWUFBWUQsRUFBRSxZQUFZLE9BQU9BLEVBQUUsYUFBYSxhQUFh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QVMsS0FBS0QsRUFBRSxZQUFZLElBQUlDLEVBQUUsVUFBVSxTQUFTLElBQUksTUFBTSxTQUFTRCxFQUFFLGFBQWEsUUFBUSxHQUFHQSxFQUFFLGFBQWEsU0FBUyxDQUFDLEVBQUUsU0FBUyxJQUFJQSxFQUFFLGVBQWVBLEVBQUUsU0FBUyxRQUFRQSxFQUFFLGVBQWUsT0FBTyxNQUFNLE9BQU9BLEVBQUUsU0FBUyxXQUFXLEVBQUUsUUFBUUMsRUFBRSxVQUFVLFNBQVMsT0FBT0QsRUFBRSxLQUFLLElBQUlBLEVBQUUsUUFBUSxFQUFFLFFBQVFDLEVBQUUsVUFBVSxTQUFTLE1BQU0sS0FBSyxVQUFVLFNBQVMsS0FBS0QsRUFBRSxLQUFLLElBQUlDLEVBQUUsVUFBVSxTQUFTLElBQUksTUFBTSxTQUFTRCxFQUFFLE1BQU0sUUFBUSxHQUFHQSxFQUFFLE1BQU0sU0FBUyxDQUFDLEVBQUUsU0FBUyxJQUFJQSxFQUFFLFFBQVFBLEVBQUUsT0FBTyxRQUFRQSxFQUFFLGVBQWUsS0FBSyxNQUFNLEVBQUUsTUFBTUMsRUFBRSxRQUFRLENBQUMsU0FBU0QsRUFBRSxHQUFHLElBQUksT0FBT0EsRUFBRSxHQUFHLElBQUlBLEVBQUUsS0FBS0MsRUFBRSxXQUFXLEVBQUUsT0FBTyxTQUFTRCxFQUFFLFNBQVMsUUFBUUEsRUFBRSxlQUFlLE9BQU8sTUFBTSxFQUFFLFFBQVFBLEVBQUUsUUFBUUEsRUFBRSxhQUFhLFFBQVFBLEVBQUUsZUFBZSxXQUFXLE1BQU0sT0FBT0EsRUFBRSxhQUFhLFdBQVcsRUFBRSxZQUFZQyxFQUFFLFVBQVUsU0FBUyxPQUFPRCxFQUFFLFNBQVMsSUFBSUEsRUFBRSxZQUFZLEVBQUUsWUFBWUMsRUFBRSxVQUFVLFNBQVMsTUFBTSxLQUFLLFVBQVUsU0FBUyxLQUFLRCxFQUFFLFNBQVMsSUFBSUMsRUFBRSxVQUFVLFNBQVMsSUFBSSxNQUFNLFNBQVNELEVBQUUsVUFBVSxRQUFRLEdBQUdBLEVBQUUsVUFBVSxTQUFTLENBQUMsRUFBRSxTQUFTLElBQUlBLEVBQUUsWUFBWUEsRUFBRSxZQUFZLFFB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UyxNQUFNLEtBQUssVUFBVSxTQUFTLEtBQUtELEVBQUUsWUFBWSxJQUFJQyxFQUFFLFVBQVUsU0FBUyxJQUFJLE1BQU0sU0FBU0QsRUFBRSxhQUFhLFFBQVEsR0FBR0EsRUFBRSxhQUFhLFNBQVMsQ0FBQyxFQUFFLFNBQVMsSUFBSUEsRUFBRSxlQUFlQSxFQUFFLFlBQVksUUFBUUEsRUFBRSxlQUFlLFVBQVUsTUFBTSxFQUFFLFdBQVdDLEVBQUUsUUFBUSxDQUFDLFNBQVNELEVBQUUsUUFBUSxJQUFJLE9BQU9BLEVBQUUsUUFBUSxJQUFJQSxFQUFFLFVBQVVDLEVBQUUsV0FBVyxFQUFFLFFBQVEsY0FBY0QsRUFBRSxVQUFVLFFBQVFBLEVBQUUsZUFBZSxRQUFRLE1BQU0sRUFBRSxTQUFTQyxFQUFFLFVBQVUsU0FBUyxNQUFNLE9BQU8sT0FBT0QsRUFBRSxRQUFRLEdBQUdBLEVBQUUsT0FBTyxNQUFNLElBQUlDLEVBQUUsVUFBVSxRQUFRLE1BQU0sVUFBVSxNQUFNLEtBQUtELEVBQUUsTUFBTSxJQUFJQSxFQUFFLFNBQVNBLEVBQUUsV0FBVyxRQUFRQSxFQUFFLGVBQWUsU0FBUyxNQUFNLEVBQUUsVUFBVUMsRUFBRSxVQUFVLFNBQVMsTUFBTSxPQUFPLE9BQU9ELEVBQUUsU0FBUyxHQUFHQSxFQUFFLFFBQVEsTUFBTSxJQUFJQyxFQUFFLFVBQVUsUUFBUSxNQUFNLFVBQVUsTUFBTSxLQUFLRCxFQUFFLE9BQU8sSUFBSUEsRUFBRSxVQUFVQSxFQUFFLFNBQVMsUUFBUUEsRUFBRSxlQUFlLE9BQU8sTUFBTSxPQUFPQSxFQUFFLFNBQVMsV0FBVyxFQUFFLFFBQVFDLEVBQUUsVUFBVSxTQUFTLE9BQU9ELEVBQUUsS0FBSyxJQUFJQSxFQUFFLFFBQVEsRUFBRSxRQUFRQyxFQUFFLFVBQVUsU0FBUyxNQUFNLEtBQUssVUFBVSxTQUFTLEtBQUtELEVBQUUsS0FBSyxJQUFJQyxFQUFFLFVBQVUsU0FBUyxJQUFJLE1BQU0sU0FBU0QsRUFBRSxNQUFNLFFBQVEsR0FBR0EsRUFBRSxNQUFNLFNBQVMsQ0FBQyxFQUFF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QUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLGNBQ0YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILGdCQUFBQSxFQUFFLGlCQUFpQjtBQUNuQjtBQUFBLFlBQ0o7QUFDQSxnQkFBSVksRUFBRSxnQkFBZ0IsU0FBU1osRUFBRSxlQUFlLE9BQU9ZLEVBQUUsWUFBWSxJQUFJQSxFQUFFLFFBQVEsTUFBTTtBQUN2RixrQkFBSSxPQUFPQSxFQUFFLFFBQVE7QUFDbkIsc0JBQU0sVUFBVSw4REFBOEQ7QUFDaEYsY0FBQVosRUFBRSxPQUFPLE1BQU0sY0FBYyxNQUFNLE9BQU8sR0FBRyxTQUFTLFdBQVdZLEVBQUUsSUFBSTtBQUFBLFlBQ3pFO0FBQ0EsZ0JBQUlBLEVBQUUsWUFBWTtBQUNoQixrQkFBSSxDQUFDLE1BQU0sUUFBUUEsRUFBRSxVQUFVO0FBQzdCLHNCQUFNLFVBQVUsbUVBQW1FO0FBQ3JGLGNBQUFaLEVBQUUsYUFBYSxDQUFDO0FBQ2hCLHVCQUFTQyxJQUFJLEdBQUdBLElBQUlXLEVBQUUsV0FBVyxRQUFRLEVBQUVYLEdBQUc7QUFDNUMsb0JBQUksT0FBT1csRUFBRSxXQUFXWCxDQUFDLEtBQUs7QUFDNUIsd0JBQU0sVUFBVSxvRUFBb0U7QUFDdEYsZ0JBQUFELEVBQUUsV0FBV0MsQ0FBQyxJQUFJLE1BQU0sY0FBYyxNQUFNLE9BQU8sR0FBRyxTQUFTLFdBQVdXLEVBQUUsV0FBV1gsQ0FBQyxDQUFDO0FBQUEsY0FDM0Y7QUFBQSxZQUNGO0FBQ0EsbUJBQU9XLEVBQUUsMEJBQTBCLFNBQVNaLEVBQUUseUJBQXlCWSxFQUFFLDJCQUEyQixJQUFJQSxFQUFFLFNBQVMsU0FBU1osRUFBRSxRQUFRWSxFQUFFLFVBQVUsSUFBSUEsRUFBRSxXQUFXLFNBQVMsT0FBT0EsRUFBRSxXQUFXLFdBQVcsTUFBTSxPQUFPLE9BQU9BLEVBQUUsU0FBU1osRUFBRSxVQUFVLE1BQU0sVUFBVSxNQUFNLE9BQU8sT0FBT1ksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUlBLEVBQUUsUUFBUSxVQUFVLE1BQU1aLEVBQUUsVUFBVVksRUFBRSxXQUFXQSxFQUFFLFVBQVUsU0FBUyxPQUFPQSxFQUFFLFVBQVUsV0FBVyxNQUFNLE9BQU8sT0FBT0EsRUFBRSxRQUFRWixFQUFFLFNBQVMsTUFBTSxVQUFVLE1BQU0sT0FBTyxPQUFPWSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSUEsRUFBRSxPQUFPLFVBQVUsTUFBTVosRUFBRSxTQUFTWSxFQUFFLFVBQVVaO0FBQUEsVUFDbGlCLEdBQUcsRUFBRSxXQUFXLFNBQVNZLEdBQUdaLEdBQUc7QUFDN0IsWUFBQUEsTUFBTUEsSUFBSSxDQUFDO0FBQ1gsZ0JBQUlDLElBQUksQ0FBQztBQUNULGlCQUFLRCxFQUFFLFVBQVVBLEVBQUUsY0FBY0MsRUFBRSxhQUFhLENBQUMsSUFBSUQsRUFBRSxVQUFVO0FBQy9ELGtCQUFJLE1BQU0sTUFBTTtBQUNkLG9CQUFJLElBQUksSUFBSSxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUU7QUFDL0IsZ0JBQUFDLEVBQUUsZUFBZUQsRUFBRSxVQUFVLFNBQVMsRUFBRSxTQUFTLElBQUlBLEVBQUUsVUFBVSxTQUFTLEVBQUUsU0FBUyxJQUFJO0FBQUEsY0FDM0Y7QUFDRSxnQkFBQUMsRUFBRSxlQUFlRCxFQUFFLFVBQVUsU0FBUyxNQUFNO0FBQzlDLGtCQUFJQyxFQUFFLGlCQUFpQkQsRUFBRSxVQUFVLFNBQVMsZ0NBQWdDLEdBQUdDLEVBQUUsZUFBZSxJQUFJQSxFQUFFLE9BQU8sTUFBTUEsRUFBRSx5QkFBeUIsR0FBR0EsRUFBRSxRQUFRLEdBQUdELEVBQUUsVUFBVSxTQUFTQyxFQUFFLFVBQVUsTUFBTUEsRUFBRSxVQUFVLENBQUMsR0FBR0QsRUFBRSxVQUFVLFVBQVVDLEVBQUUsVUFBVSxNQUFNLFVBQVVBLEVBQUUsT0FBTyxLQUFLRCxFQUFFLFVBQVUsU0FBU0MsRUFBRSxTQUFTLE1BQU1BLEVBQUUsU0FBUyxDQUFDLEdBQUdELEVBQUUsVUFBVSxVQUFVQyxFQUFFLFNBQVMsTUFBTSxVQUFVQSxFQUFFLE1BQU0sS0FBSyxNQUFNLE1BQU07QUFDbFosb0JBQUksSUFBSSxJQUFJLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRTtBQUMvQixnQkFBQUEsRUFBRSx1QkFBdUJELEVBQUUsVUFBVSxTQUFTLEVBQUUsU0FBUyxJQUFJQSxFQUFFLFVBQVUsU0FBUyxFQUFFLFNBQVMsSUFBSTtBQUFBLGNBQ25HO0FBQ0UsZ0JBQUFDLEVBQUUsdUJBQXVCRCxFQUFFLFVBQVUsU0FBUyxNQUFNO0FBQUEsWUFDeEQ7QUFDQSxnQkFBSVksRUFBRSxnQkFBZ0IsUUFBUUEsRUFBRSxlQUFlLGNBQWMsTUFBTSxPQUFPQSxFQUFFLGdCQUFnQixXQUFXWCxFQUFFLGVBQWVELEVBQUUsVUFBVSxTQUFTLE9BQU9ZLEVBQUUsWUFBWSxJQUFJQSxFQUFFLGVBQWVYLEVBQUUsZUFBZUQsRUFBRSxVQUFVLFNBQVMsTUFBTSxLQUFLLFVBQVUsU0FBUyxLQUFLWSxFQUFFLFlBQVksSUFBSVosRUFBRSxVQUFVLFNBQVMsSUFBSSxNQUFNLFNBQVNZLEVBQUUsYUFBYSxRQUFRLEdBQUdBLEVBQUUsYUFBYSxTQUFTLENBQUMsRUFBRSxTQUFTLElBQUlBLEVBQUUsZUFBZUEsRUFBRSxrQkFBa0IsUUFBUUEsRUFBRSxlQUFlLGdCQUFnQixNQUFNWCxFQUFFLGlCQUFpQkQsRUFBRSxVQUFVLFNBQVMsTUFBTSxjQUFjLE1BQU0sS0FBSyxHQUFHLGVBQWVZLEVBQUUsY0FBYyxNQUFNLFNBQVNBLEVBQUUsaUJBQWlCLE1BQU0sY0FBYyxNQUFNLEtBQUssR0FBRyxlQUFlQSxFQUFFLGNBQWMsSUFBSUEsRUFBRSxpQkFBaUJBLEVBQUUsZ0JBQWdCLFFBQVFBLEVBQUUsZUFBZSxjQUFjLE1BQU1YLEVBQUUsZUFBZVcsRUFBRSxlQUFlQSxFQUFFLFFBQVEsUUFBUUEsRUFBRSxlQUFlLE1BQU0sTUFBTVgsRUFBRSxPQUFPLE1BQU0sY0FBYyxNQUFNLE9BQU8sR0FBRyxTQUFTLFNBQVNXLEVBQUUsTUFBTVosQ0FBQyxJQUFJWSxFQUFFLGNBQWNBLEVBQUUsV0FBVyxRQUFRO0FBQ2w3QixjQUFBWCxFQUFFLGFBQWEsQ0FBQztBQUNoQix1QkFBU0MsSUFBSSxHQUFHQSxJQUFJVSxFQUFFLFdBQVcsUUFBUSxFQUFFVjtBQUN6QyxnQkFBQUQsRUFBRSxXQUFXQyxDQUFDLElBQUksTUFBTSxjQUFjLE1BQU0sT0FBTyxHQUFHLFNBQVMsU0FBU1UsRUFBRSxXQUFXVixDQUFDLEdBQUdGLENBQUM7QUFBQSxZQUM5RjtBQUNBLG1CQUFPWSxFQUFFLDBCQUEwQixRQUFRQSxFQUFFLGVBQWUsd0JBQXdCLE1BQU1YLEVBQUUseUJBQXlCVyxFQUFFLHlCQUF5QkEsRUFBRSxTQUFTLFFBQVFBLEVBQUUsZUFBZSxPQUFPLE1BQU1YLEVBQUUsUUFBUVcsRUFBRSxRQUFRQSxFQUFFLFdBQVcsUUFBUUEsRUFBRSxlQUFlLFNBQVMsTUFBTVgsRUFBRSxVQUFVRCxFQUFFLFVBQVUsU0FBUyxNQUFNLE9BQU8sT0FBT1ksRUFBRSxTQUFTLEdBQUdBLEVBQUUsUUFBUSxNQUFNLElBQUlaLEVBQUUsVUFBVSxRQUFRLE1BQU0sVUFBVSxNQUFNLEtBQUtZLEVBQUUsT0FBTyxJQUFJQSxFQUFFLFVBQVVBLEVBQUUsVUFBVSxRQUFRQSxFQUFFLGVBQWUsUUFBUSxNQUFNWCxFQUFFLFNBQVNELEVBQUUsVUFBVSxTQUFTLE1BQU0sT0FBTyxPQUFPWSxFQUFFLFFBQVEsR0FBR0EsRUFBRSxPQUFPLE1BQU0sSUFBSVosRUFBRSxVQUFVLFFBQVEsTUFBTSxVQUFVLE1BQU0sS0FBS1ksRUFBRSxNQUFNLElBQUlBLEVBQUUsU0FBU0EsRUFBRSx3QkFBd0IsUUFBUUEsRUFBRSxlQUFlLHNCQUFzQixNQUFNLE9BQU9BLEVBQUUsd0JBQXdCLFdBQVdYLEVBQUUsdUJBQXVCRCxFQUFFLFVBQVUsU0FBUyxPQUFPWSxFQUFFLG9CQUFvQixJQUFJQSxFQUFFLHVCQUF1QlgsRUFBRSx1QkFBdUJELEVBQUUsVUFBVSxTQUFTLE1BQU0sS0FBSyxVQUFVLFNBQVMsS0FBS1ksRUFBRSxvQkFBb0IsSUFBSVosRUFBRSxVQUFVLFNBQVMsSUFBSSxNQUFNLFNBQVNZLEVBQUUscUJBQXFCLFFBQVEsR0FBR0EsRUFBRSxxQkFBcUIsU0FBUyxDQUFDLEVBQUUsU0FBUyxJQUFJQSxFQUFFLHVCQUF1Qlg7QUFBQSxVQUN6bEMsR0FBRyxFQUFFLFVBQVUsU0FBUyxXQUFXO0FBQ2pDLG1CQUFPLEtBQUssWUFBWSxTQUFTLE1BQU0sVUFBVSxLQUFLLGFBQWE7QUFBQSxVQUNyRSxHQUFHLEVBQUUsYUFBYSxTQUFTVyxHQUFHO0FBQzVCLG1CQUFPQSxNQUFNLFdBQVdBLElBQUksd0JBQXdCQSxJQUFJO0FBQUEsVUFDMUQsR0FBRztBQUFBLFFBQ0wsRUFBRSxHQUFHZDtBQUFBLE1BQ1AsRUFBRSxHQUFHO0FBQUEsSUFDUCxFQUFFLEdBQUc7QUFBQSxFQUNQLEVBQUUsR0FBR0Q7QUFDUCxFQUFFO0FBQ0YsSUFBSSxPQUFPO0FBQ1gsU0FBUyxjQUFjQSxHQUFHO0FBQ3hCLE1BQUksSUFBSSxPQUFPLEdBQUc7QUFDbEIsU0FBTyxPQUFPQSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksT0FBT0EsRUFBRSxDQUFDLENBQUM7QUFDdkM7QUFDQSxTQUFTLFdBQVdBLEdBQUc7QUFDckIsTUFBSSxJQUFJLE9BQU8sT0FBTyxRQUFRLElBQUlBLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxPQUFPLFFBQVEsSUFBSUEsS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3JGLFNBQU8sRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFO0FBQzNCO0FBQ0EsU0FBUyxpQkFBaUJBLEdBQUc7QUFDM0IsTUFBSSxJQUFJLGNBQWNBLENBQUM7QUFDdkIsU0FBTyxXQUFXLENBQUM7QUFDckI7QUFDQSxTQUFTLG9CQUFvQkEsR0FBRztBQUM5QixNQUFJQSxNQUFNO0FBQ1IsV0FBTyxFQUFFQSxDQUFDO0FBQ2Q7QUFDQSxJQUFJLGtCQUFrQjtBQUFBLEVBQ3BCLGNBQWM7QUFBQSxFQUNkLG1CQUFtQjtBQUFBLEVBQ25CLDJCQUEyQjtBQUM3QjtBQUNBLFNBQVMsZUFBZUEsR0FBRztBQUN6QixTQUFPO0FBQ1Q7QUFDQSxJQUFJLFdBQVcsU0FBU0EsR0FBRyxHQUFHO0FBQzVCLE1BQUksSUFBSSxPQUFPLFVBQVUsY0FBY0EsRUFBRSxPQUFPLFFBQVE7QUFDeEQsTUFBSSxDQUFDLEVBQUcsUUFBT0E7QUFDZixNQUFJQyxJQUFJLEVBQUUsS0FBS0QsQ0FBQyxHQUFHLEdBQUdFLElBQUksQ0FBQyxHQUFHO0FBQzlCLE1BQUk7QUFDRixZQUFRLE1BQU0sVUFBVSxNQUFNLE1BQU0sRUFBRSxJQUFJRCxFQUFFLEtBQUssR0FBRyxPQUFRLENBQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUs7QUFBQSxFQUM1RSxTQUFTQyxHQUFHO0FBQ1YsUUFBSSxFQUFFLE9BQU9BLEVBQUU7QUFBQSxFQUNqQixVQUFFO0FBQ0EsUUFBSTtBQUNGLFdBQUssQ0FBQyxFQUFFLFNBQVMsSUFBSUYsRUFBRSxXQUFXLEVBQUUsS0FBS0EsQ0FBQztBQUFBLElBQzVDLFVBQUU7QUFDQSxVQUFJLEVBQUcsT0FBTSxFQUFFO0FBQUEsSUFDakI7QUFBQSxFQUNGO0FBQ0EsU0FBT0M7QUFDVDtBQUNBLFNBQVMsZUFBZUYsR0FBRztBQUN6QixTQUFPO0FBQUEsSUFDTCxZQUFZLGFBQWFBLEVBQUUsVUFBVTtBQUFBLElBQ3JDLHdCQUF3QjtBQUFBLEVBQzFCO0FBQ0Y7QUFDQSxTQUFTLDJCQUEyQkEsR0FBRztBQUNyQyxTQUFPO0FBQUEsSUFDTCxNQUFNQSxFQUFFO0FBQUEsSUFDUixTQUFTQSxFQUFFO0FBQUEsRUFDYjtBQUNGO0FBQ0EsU0FBUyxhQUFhQSxHQUFHO0FBQ3ZCLFNBQU8sT0FBTyxLQUFLQSxDQUFDLEVBQUUsSUFBSSxTQUFTLEdBQUc7QUFDcEMsV0FBTyxXQUFXLEdBQUdBLEVBQUUsQ0FBQyxDQUFDO0FBQUEsRUFDM0IsQ0FBQztBQUNIO0FBQ0EsU0FBUyxXQUFXQSxHQUFHLEdBQUc7QUFDeEIsU0FBTztBQUFBLElBQ0wsS0FBS0E7QUFBQSxJQUNMLE9BQU8sV0FBVyxDQUFDO0FBQUEsRUFDckI7QUFDRjtBQUNBLFNBQVMsV0FBV0EsR0FBRztBQUNyQixNQUFJLElBQUksT0FBT0E7QUFDZixTQUFPLE1BQU0sV0FBVyxFQUFFLGFBQWFBLEVBQUUsSUFBSSxNQUFNLFdBQVcsT0FBTyxVQUFVQSxDQUFDLElBQUksRUFBRSxVQUFVQSxFQUFFLElBQUksRUFBRSxhQUFhQSxFQUFFLElBQUksTUFBTSxZQUFZLEVBQUUsV0FBV0EsRUFBRSxJQUFJQSxhQUFhLGFBQWEsRUFBRSxZQUFZQSxFQUFFLElBQUksTUFBTSxRQUFRQSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUUEsRUFBRSxJQUFJLFVBQVUsRUFBRSxFQUFFLElBQUksTUFBTSxZQUFZQSxLQUFLLE9BQU87QUFBQSxJQUM3UyxhQUFhO0FBQUEsTUFDWCxRQUFRLE9BQU8sUUFBUUEsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHO0FBQ3hDLFlBQUlDLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJQSxFQUFFLENBQUMsR0FBR0MsSUFBSUQsRUFBRSxDQUFDO0FBQ3pDLGVBQU8sV0FBVyxHQUFHQyxDQUFDO0FBQUEsTUFDeEIsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGLElBQUksQ0FBQztBQUNQO0FBQ0EsSUFBSSxXQUFXLFNBQVNGLEdBQUc7QUFDekIsTUFBSSxJQUFJLE9BQU8sVUFBVSxjQUFjLE9BQU8sVUFBVSxJQUFJLEtBQUtBLEVBQUUsQ0FBQyxHQUFHQyxJQUFJO0FBQzNFLE1BQUksRUFBRyxRQUFPLEVBQUUsS0FBS0QsQ0FBQztBQUN0QixNQUFJQSxLQUFLLE9BQU9BLEVBQUUsVUFBVSxTQUFVLFFBQU87QUFBQSxJQUMzQyxNQUFNLFdBQVc7QUFDZixhQUFPQSxLQUFLQyxLQUFLRCxFQUFFLFdBQVdBLElBQUksU0FBUyxFQUFFLE9BQU9BLEtBQUtBLEVBQUVDLEdBQUcsR0FBRyxNQUFNLENBQUNELEVBQUU7QUFBQSxJQUM1RTtBQUFBLEVBQ0Y7QUFDQSxRQUFNLElBQUksVUFBVSxJQUFJLDRCQUE0QixpQ0FBaUM7QUFDdkYsR0FBRyxXQUFXLFNBQVNBLEdBQUcsR0FBRztBQUMzQixNQUFJLElBQUksT0FBTyxVQUFVLGNBQWNBLEVBQUUsT0FBTyxRQUFRO0FBQ3hELE1BQUksQ0FBQyxFQUFHLFFBQU9BO0FBQ2YsTUFBSUMsSUFBSSxFQUFFLEtBQUtELENBQUMsR0FBRyxHQUFHRSxJQUFJLENBQUMsR0FBRztBQUM5QixNQUFJO0FBQ0YsWUFBUSxNQUFNLFVBQVUsTUFBTSxNQUFNLEVBQUUsSUFBSUQsRUFBRSxLQUFLLEdBQUcsT0FBUSxDQUFBQyxFQUFFLEtBQUssRUFBRSxLQUFLO0FBQUEsRUFDNUUsU0FBU0MsR0FBRztBQUNWLFFBQUksRUFBRSxPQUFPQSxFQUFFO0FBQUEsRUFDakIsVUFBRTtBQUNBLFFBQUk7QUFDRixXQUFLLENBQUMsRUFBRSxTQUFTLElBQUlGLEVBQUUsV0FBVyxFQUFFLEtBQUtBLENBQUM7QUFBQSxJQUM1QyxVQUFFO0FBQ0EsVUFBSSxFQUFHLE9BQU0sRUFBRTtBQUFBLElBQ2pCO0FBQUEsRUFDRjtBQUNBLFNBQU9DO0FBQ1Q7QUFDQSxTQUFTLGtCQUFrQkYsR0FBRyxHQUFHO0FBQy9CLE1BQUksR0FBR0MsSUFBSUQsRUFBRSxZQUFZLEdBQUcsSUFBSUEsRUFBRTtBQUNsQyxTQUFPO0FBQUEsSUFDTCxTQUFTLEVBQUUsa0JBQWtCQyxFQUFFLE9BQU87QUFBQSxJQUN0QyxRQUFRLEVBQUUsa0JBQWtCQSxFQUFFLE1BQU07QUFBQSxJQUNwQyxjQUFjLEVBQUUsMEJBQTBCRCxFQUFFLFlBQVk7QUFBQSxJQUN4RCxhQUFhLElBQUlDLEVBQUUsZ0JBQWdCLFFBQVEsTUFBTSxTQUFTLFNBQVMsRUFBRSxVQUFVO0FBQUEsSUFDL0UsTUFBTUQsRUFBRTtBQUFBO0FBQUEsSUFFUixNQUFNQSxFQUFFLFFBQVEsT0FBTyxJQUFJQSxFQUFFLE9BQU87QUFBQSxJQUNwQyxtQkFBbUIsRUFBRSxhQUFhQSxFQUFFLFNBQVM7QUFBQSxJQUM3QyxpQkFBaUIsRUFBRSxhQUFhQSxFQUFFLE9BQU87QUFBQSxJQUN6QyxZQUFZLGFBQWFBLEVBQUUsVUFBVTtBQUFBLElBQ3JDLHdCQUF3QkEsRUFBRTtBQUFBLElBQzFCLFFBQVFBLEVBQUUsT0FBTyxJQUFJLFNBQVNFLEdBQUc7QUFDL0IsYUFBTyxnQkFBZ0JBLEdBQUcsQ0FBQztBQUFBLElBQzdCLENBQUM7QUFBQSxJQUNELG9CQUFvQkYsRUFBRTtBQUFBLElBQ3RCLFFBQVE7QUFBQTtBQUFBLE1BRU4sTUFBTSxFQUFFO0FBQUEsTUFDUixTQUFTLEVBQUU7QUFBQSxJQUNiO0FBQUEsSUFDQSxPQUFPQSxFQUFFLE1BQU0sSUFBSSxTQUFTRSxHQUFHO0FBQzdCLGFBQU8sV0FBV0EsR0FBRyxDQUFDO0FBQUEsSUFDeEIsQ0FBQztBQUFBLElBQ0QsbUJBQW1CRixFQUFFO0FBQUEsRUFDdkI7QUFDRjtBQUNBLFNBQVMsV0FBV0EsR0FBRyxHQUFHO0FBQ3hCLE1BQUk7QUFDSixTQUFPO0FBQUEsSUFDTCxZQUFZQSxFQUFFLGFBQWEsYUFBYUEsRUFBRSxVQUFVLElBQUksQ0FBQztBQUFBLElBQ3pELFFBQVEsRUFBRSxrQkFBa0JBLEVBQUUsUUFBUSxNQUFNO0FBQUEsSUFDNUMsU0FBUyxFQUFFLGtCQUFrQkEsRUFBRSxRQUFRLE9BQU87QUFBQSxJQUM5QyxhQUFhLElBQUlBLEVBQUUsUUFBUSxnQkFBZ0IsUUFBUSxNQUFNLFNBQVMsU0FBUyxFQUFFLFVBQVU7QUFBQSxJQUN2Rix3QkFBd0JBLEVBQUUsMEJBQTBCO0FBQUEsRUFDdEQ7QUFDRjtBQUNBLFNBQVMsZ0JBQWdCQSxHQUFHLEdBQUc7QUFDN0IsU0FBTztBQUFBLElBQ0wsWUFBWUEsRUFBRSxhQUFhLGFBQWFBLEVBQUUsVUFBVSxJQUFJLENBQUM7QUFBQSxJQUN6RCxNQUFNQSxFQUFFO0FBQUEsSUFDUixjQUFjLEVBQUUsYUFBYUEsRUFBRSxJQUFJO0FBQUEsSUFDbkMsd0JBQXdCQSxFQUFFLDBCQUEwQjtBQUFBLEVBQ3REO0FBQ0Y7QUFDQSxTQUFTLGdDQUFnQ0EsR0FBRyxHQUFHO0FBQzdDLE1BQUksSUFBSSxlQUFlO0FBQ3ZCLFNBQU87QUFBQSxJQUNMLGVBQWUsMkJBQTJCQSxHQUFHLENBQUM7QUFBQSxFQUNoRDtBQUNGO0FBQ0EsU0FBUyxrQkFBa0JBLEdBQUc7QUFDNUIsTUFBSSxHQUFHLEdBQUdDLElBQW9CLG9CQUFJLElBQUk7QUFDdEMsTUFBSTtBQUNGLGFBQVMsSUFBSSxTQUFTRCxDQUFDLEdBQUdFLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQ0EsRUFBRSxNQUFNQSxJQUFJLEVBQUUsS0FBSyxHQUFHO0FBQzdELFVBQUksSUFBSUEsRUFBRSxPQUFPQyxJQUFJRixFQUFFLElBQUksRUFBRSxRQUFRO0FBQ3JDLE1BQUFFLE1BQU1BLElBQW9CLG9CQUFJLElBQUksR0FBR0YsRUFBRSxJQUFJLEVBQUUsVUFBVUUsQ0FBQztBQUN4RCxVQUFJQyxJQUFJLEVBQUUsdUJBQXVCLE9BQU8sT0FBTyxFQUFFLHVCQUF1QixXQUFXLE1BQU0sT0FBTyxFQUFFLHVCQUF1QixhQUFhLEtBQUtFLElBQUlILEVBQUUsSUFBSUMsQ0FBQztBQUN0SixNQUFBRSxNQUFNQSxJQUFJLENBQUMsR0FBR0gsRUFBRSxJQUFJQyxHQUFHRSxDQUFDLElBQUlBLEVBQUUsS0FBSyxDQUFDO0FBQUEsSUFDdEM7QUFBQSxFQUNGLFNBQVNELEdBQUc7QUFDVixRQUFJLEVBQUUsT0FBT0EsRUFBRTtBQUFBLEVBQ2pCLFVBQUU7QUFDQSxRQUFJO0FBQ0YsTUFBQUgsS0FBSyxDQUFDQSxFQUFFLFNBQVMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUM7QUFBQSxJQUM1QyxVQUFFO0FBQ0EsVUFBSSxFQUFHLE9BQU0sRUFBRTtBQUFBLElBQ2pCO0FBQUEsRUFDRjtBQUNBLFNBQU9EO0FBQ1Q7QUFDQSxTQUFTLDJCQUEyQkQsR0FBRyxHQUFHO0FBQ3hDLFdBQVMsSUFBSSxrQkFBa0JBLENBQUMsR0FBR0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLFFBQVEsR0FBR0MsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDQSxFQUFFLFFBQVE7QUFDbkYsYUFBUyxJQUFJLFNBQVNBLEVBQUUsT0FBTyxDQUFDLEdBQUdDLElBQUksRUFBRSxDQUFDLEdBQUdDLElBQUksRUFBRSxDQUFDLEdBQUdFLElBQUksQ0FBQyxHQUFHRCxJQUFJRCxFQUFFLE9BQU8sR0FBR0csSUFBSUYsRUFBRSxLQUFLLEdBQUcsQ0FBQ0UsRUFBRSxRQUFRO0FBQ3RHLFVBQUlFLElBQUlGLEVBQUU7QUFDVixVQUFJRSxFQUFFLFNBQVMsR0FBRztBQUNoQixZQUFJUSxJQUFJUixFQUFFLElBQUksU0FBUyxHQUFHO0FBQ3hCLGlCQUFPLGtCQUFrQixHQUFHLENBQUM7QUFBQSxRQUMvQixDQUFDO0FBQ0QsUUFBQUgsRUFBRSxLQUFLO0FBQUEsVUFDTCxPQUFPLDJCQUEyQkcsRUFBRSxDQUFDLEVBQUUsc0JBQXNCO0FBQUEsVUFDN0QsT0FBT1E7QUFBQSxVQUNQLFdBQVdSLEVBQUUsQ0FBQyxFQUFFLHVCQUF1QjtBQUFBLFFBQ3pDLENBQUM7QUFBQSxNQUNIO0FBQ0EsTUFBQUYsSUFBSUYsRUFBRSxLQUFLO0FBQUEsSUFDYjtBQUNBLFFBQUlLLElBQUk7QUFBQSxNQUNOLFVBQVUsZUFBZVAsQ0FBQztBQUFBLE1BQzFCLFlBQVlHO0FBQUEsTUFDWixXQUFXO0FBQUEsSUFDYjtBQUNBLElBQUFMLEVBQUUsS0FBS1MsQ0FBQyxHQUFHUixJQUFJLEVBQUUsS0FBSztBQUFBLEVBQ3hCO0FBQ0EsU0FBT0Q7QUFDVDtBQUNBLElBQUksb0JBQW9CLEtBQUssY0FBYyxNQUFNLFVBQVUsTUFBTSxHQUFHLDRCQUE0QixtQkFBbUIsS0FBSyxjQUFjLE1BQU0sVUFBVSxNQUFNLEdBQUcsMkJBQTJCLDBCQUEwQjtBQUFBLEVBQ2xOLGtCQUFrQixTQUFTRCxHQUFHO0FBQzVCLFFBQUksSUFBSSxnQ0FBZ0NBLENBQUM7QUFDekMsV0FBTyxpQkFBaUIsT0FBTyxDQUFDLEVBQUUsT0FBTztBQUFBLEVBQzNDO0FBQUEsRUFDQSxxQkFBcUIsU0FBU0EsR0FBRztBQUMvQixXQUFPLGtCQUFrQixPQUFPQSxDQUFDO0FBQUEsRUFDbkM7QUFDRixHQUFHLFlBQVksU0FBU0EsR0FBRyxHQUFHLEdBQUdDLEdBQUc7QUFDbEMsV0FBUyxFQUFFQyxHQUFHO0FBQ1osV0FBT0EsYUFBYSxJQUFJQSxJQUFJLElBQUksRUFBRSxTQUFTLEdBQUc7QUFDNUMsUUFBRUEsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBQ0g7QUFDQSxTQUFPLEtBQUssTUFBTSxJQUFJLFVBQVUsU0FBU0EsR0FBRyxHQUFHO0FBQzdDLGFBQVNDLEVBQUVFLEdBQUc7QUFDWixVQUFJO0FBQ0YsUUFBQUMsRUFBRUwsRUFBRSxLQUFLSSxDQUFDLENBQUM7QUFBQSxNQUNiLFNBQVNFLEdBQUc7QUFDVixVQUFFQSxDQUFDO0FBQUEsTUFDTDtBQUFBLElBQ0Y7QUFDQSxhQUFTSCxFQUFFQyxHQUFHO0FBQ1osVUFBSTtBQUNGLFFBQUFDLEVBQUVMLEVBQUUsTUFBTUksQ0FBQyxDQUFDO0FBQUEsTUFDZCxTQUFTRSxHQUFHO0FBQ1YsVUFBRUEsQ0FBQztBQUFBLE1BQ0w7QUFBQSxJQUNGO0FBQ0EsYUFBU0QsRUFBRUQsR0FBRztBQUNaLE1BQUFBLEVBQUUsT0FBT0gsRUFBRUcsRUFBRSxLQUFLLElBQUksRUFBRUEsRUFBRSxLQUFLLEVBQUUsS0FBS0YsR0FBR0MsQ0FBQztBQUFBLElBQzVDO0FBQ0EsSUFBQUUsR0FBR0wsSUFBSUEsRUFBRSxNQUFNRCxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUFBLEVBQy9CLENBQUM7QUFDSCxHQUFHLGNBQWMsU0FBU0EsR0FBRyxHQUFHO0FBQzlCLE1BQUksSUFBSSxFQUFFLE9BQU8sR0FBRyxNQUFNLFdBQVc7QUFDbkMsUUFBSUUsRUFBRSxDQUFDLElBQUksRUFBRyxPQUFNQSxFQUFFLENBQUM7QUFDdkIsV0FBT0EsRUFBRSxDQUFDO0FBQUEsRUFDWixHQUFHLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUdELEdBQUcsR0FBR0MsR0FBRztBQUNqQyxTQUFPLElBQUksRUFBRSxNQUFNQyxFQUFFLENBQUMsR0FBRyxPQUFPQSxFQUFFLENBQUMsR0FBRyxRQUFRQSxFQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sVUFBVSxlQUFlLEVBQUUsT0FBTyxRQUFRLElBQUksV0FBVztBQUNwSCxXQUFPO0FBQUEsRUFDVCxJQUFJO0FBQ0osV0FBU0EsRUFBRUcsR0FBRztBQUNaLFdBQU8sU0FBU0QsR0FBRztBQUNqQixhQUFPRCxFQUFFLENBQUNFLEdBQUdELENBQUMsQ0FBQztBQUFBLElBQ2pCO0FBQUEsRUFDRjtBQUNBLFdBQVNELEVBQUVFLEdBQUc7QUFDWixRQUFJTCxFQUFHLE9BQU0sSUFBSSxVQUFVLGlDQUFpQztBQUM1RCxXQUFPLElBQUssS0FBSTtBQUNkLFVBQUlBLElBQUksR0FBRyxNQUFNQyxJQUFJSSxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsU0FBU0EsRUFBRSxDQUFDLElBQUksRUFBRSxXQUFXSixJQUFJLEVBQUUsV0FBV0EsRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLEVBQUUsU0FBUyxFQUFFQSxJQUFJQSxFQUFFLEtBQUssR0FBR0ksRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFNLFFBQU9KO0FBQy9JLGNBQVEsSUFBSSxHQUFHQSxNQUFNSSxJQUFJLENBQUNBLEVBQUUsQ0FBQyxJQUFJLEdBQUdKLEVBQUUsS0FBSyxJQUFJSSxFQUFFLENBQUMsR0FBRztBQUFBLFFBQ25ELEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxVQUFBSixJQUFJSTtBQUNKO0FBQUEsUUFDRixLQUFLO0FBQ0gsaUJBQU8sRUFBRSxTQUFTLEVBQUUsT0FBT0EsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHO0FBQUEsUUFDNUMsS0FBSztBQUNILFlBQUUsU0FBUyxJQUFJQSxFQUFFLENBQUMsR0FBR0EsSUFBSSxDQUFDLENBQUM7QUFDM0I7QUFBQSxRQUNGLEtBQUs7QUFDSCxVQUFBQSxJQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUk7QUFDNUI7QUFBQSxRQUNGO0FBQ0UsY0FBSUosSUFBSSxFQUFFLE1BQU0sRUFBRUEsSUFBSUEsRUFBRSxTQUFTLEtBQUtBLEVBQUVBLEVBQUUsU0FBUyxDQUFDLE9BQU9JLEVBQUUsQ0FBQyxNQUFNLEtBQUtBLEVBQUUsQ0FBQyxNQUFNLElBQUk7QUFDcEYsZ0JBQUk7QUFDSjtBQUFBLFVBQ0Y7QUFDQSxjQUFJQSxFQUFFLENBQUMsTUFBTSxNQUFNLENBQUNKLEtBQUtJLEVBQUUsQ0FBQyxJQUFJSixFQUFFLENBQUMsS0FBS0ksRUFBRSxDQUFDLElBQUlKLEVBQUUsQ0FBQyxJQUFJO0FBQ3BELGNBQUUsUUFBUUksRUFBRSxDQUFDO0FBQ2I7QUFBQSxVQUNGO0FBQ0EsY0FBSUEsRUFBRSxDQUFDLE1BQU0sS0FBSyxFQUFFLFFBQVFKLEVBQUUsQ0FBQyxHQUFHO0FBQ2hDLGNBQUUsUUFBUUEsRUFBRSxDQUFDLEdBQUdBLElBQUlJO0FBQ3BCO0FBQUEsVUFDRjtBQUNBLGNBQUlKLEtBQUssRUFBRSxRQUFRQSxFQUFFLENBQUMsR0FBRztBQUN2QixjQUFFLFFBQVFBLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxLQUFLSSxDQUFDO0FBQzVCO0FBQUEsVUFDRjtBQUNBLFVBQUFKLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUk7QUFDaEM7QUFBQSxNQUNKO0FBQ0EsTUFBQUksSUFBSSxFQUFFLEtBQUtOLEdBQUcsQ0FBQztBQUFBLElBQ2pCLFNBQVNLLEdBQUc7QUFDVixNQUFBQyxJQUFJLENBQUMsR0FBR0QsQ0FBQyxHQUFHLElBQUk7QUFBQSxJQUNsQixVQUFFO0FBQ0EsTUFBQUosSUFBSUMsSUFBSTtBQUFBLElBQ1Y7QUFDQSxRQUFJSSxFQUFFLENBQUMsSUFBSSxFQUFHLE9BQU1BLEVBQUUsQ0FBQztBQUN2QixXQUFPLEVBQUUsT0FBT0EsRUFBRSxDQUFDLElBQUlBLEVBQUUsQ0FBQyxJQUFJLFFBQVEsTUFBTSxHQUFHO0FBQUEsRUFDakQ7QUFDRixHQUFHLGVBQWUsR0FBRyxrQkFBa0IsS0FBSyxjQUFjLEtBQUsscUJBQXFCLEtBQUssU0FBUztBQUNsRyxTQUFTLFlBQVk7QUFDbkIsU0FBTyxLQUFLLE9BQU8sS0FBSyxJQUFJLFVBQVU7QUFDeEM7QUFDQSxJQUFJO0FBQUE7QUFBQSxFQUVGLFdBQVc7QUFDVCxhQUFTTixFQUFFLEdBQUc7QUFDWixXQUFLLGFBQWE7QUFBQSxJQUNwQjtBQUNBLFdBQU9BLEVBQUUsVUFBVSxRQUFRLFNBQVMsR0FBRyxHQUFHQyxHQUFHO0FBQzNDLFVBQUksSUFBSTtBQUNSLGFBQU8sSUFBSSxRQUFRLFNBQVNDLEdBQUcsR0FBRztBQUNoQyxtQkFBVyxXQUFXO0FBQ3BCLFlBQUUsV0FBVyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUtBLEdBQUcsQ0FBQztBQUFBLFFBQ25DLEdBQUdELENBQUM7QUFBQSxNQUNOLENBQUM7QUFBQSxJQUNILEdBQUdELEVBQUUsVUFBVSxPQUFPLFNBQVMsR0FBRyxHQUFHO0FBQ25DLFVBQUlDO0FBQ0osYUFBTyxVQUFVLE1BQU0sUUFBUSxRQUFRLFdBQVc7QUFDaEQsWUFBSSxHQUFHQyxHQUFHLEdBQUdDLEdBQUdDLEdBQUdFLEdBQUdEO0FBQ3RCLGVBQU8sWUFBWSxNQUFNLFNBQVNFLEdBQUc7QUFDbkMsa0JBQVFBLEVBQUUsT0FBTztBQUFBLFlBQ2YsS0FBSztBQUNILHFCQUFPLElBQUksS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxXQUFXLEtBQUssR0FBRyxDQUFDLENBQUM7QUFBQSxZQUMzRCxLQUFLO0FBQ0gsY0FBQUwsSUFBSUssRUFBRSxLQUFLLEdBQUcsSUFBSSxjQUFjSixJQUFJLGlCQUFpQkksRUFBRSxRQUFRO0FBQUEsWUFDakUsS0FBSztBQUNILHFCQUFPTCxFQUFFLFdBQVcsZUFBZSxJQUFJLEtBQUssS0FBS0UsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJRCxHQUFHLFdBQVcsSUFBSSxVQUFVLEdBQUcsQ0FBQyxHQUFHQSxJQUFJQSxJQUFJLG9CQUFvQkcsS0FBS0wsSUFBSUMsRUFBRSxtQkFBbUIsUUFBUUQsTUFBTSxTQUFTQSxJQUFJRyxHQUFHQyxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUdDLElBQUlELElBQUksQ0FBQyxHQUFHSCxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssTUFBTSxHQUFHRyxHQUFHQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUFBLFlBQzFRLEtBQUs7QUFDSCxxQkFBT0osSUFBSUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFBQSxZQUM1QixLQUFLO0FBQ0gscUJBQU8sQ0FBQyxHQUFHTCxDQUFDO0FBQUEsVUFDaEI7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNILEdBQUdGLEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFDbkMsYUFBTyxLQUFLLFdBQVcsU0FBUztBQUFBLElBQ2xDLEdBQUdBO0FBQUEsRUFDTCxFQUFFO0FBQUE7QUFFSixTQUFTLHdCQUF3QkEsR0FBRztBQUNsQyxTQUFPLElBQUksa0JBQWtCQSxFQUFFLFNBQVM7QUFDMUM7QUFDQSxTQUFTLGtCQUFrQkEsR0FBRztBQUM1QixNQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHO0FBQzNCLFNBQU8sRUFBRSxTQUFTQSxDQUFDO0FBQ3JCO0FBQ0EsU0FBUyx1QkFBdUJBLEdBQUc7QUFDakMsTUFBSUEsS0FBSyxNQUFNO0FBQ2IsUUFBSSxJQUFJLE9BQU8sU0FBU0EsR0FBRyxFQUFFO0FBQzdCLFFBQUksT0FBTyxVQUFVLENBQUM7QUFDcEIsYUFBTyxJQUFJLElBQUksSUFBSSxNQUFNO0FBQzNCLFFBQUksSUFBSSxJQUFJLEtBQUtBLENBQUMsRUFBRSxRQUFRLElBQUksS0FBSyxJQUFJO0FBQ3pDLFdBQU8sS0FBSyxJQUFJLElBQUk7QUFBQSxFQUN0QjtBQUNGO0FBQ0EsSUFBSSxXQUFXLFNBQVNBLEdBQUcsR0FBRztBQUM1QixNQUFJLElBQUksT0FBTyxVQUFVLGNBQWNBLEVBQUUsT0FBTyxRQUFRO0FBQ3hELE1BQUksQ0FBQyxFQUFHLFFBQU9BO0FBQ2YsTUFBSUMsSUFBSSxFQUFFLEtBQUtELENBQUMsR0FBRyxHQUFHRSxJQUFJLENBQUMsR0FBRztBQUM5QixNQUFJO0FBQ0YsWUFBUSxNQUFNLFVBQVUsTUFBTSxNQUFNLEVBQUUsSUFBSUQsRUFBRSxLQUFLLEdBQUcsT0FBUSxDQUFBQyxFQUFFLEtBQUssRUFBRSxLQUFLO0FBQUEsRUFDNUUsU0FBU0MsR0FBRztBQUNWLFFBQUksRUFBRSxPQUFPQSxFQUFFO0FBQUEsRUFDakIsVUFBRTtBQUNBLFFBQUk7QUFDRixXQUFLLENBQUMsRUFBRSxTQUFTLElBQUlGLEVBQUUsV0FBVyxFQUFFLEtBQUtBLENBQUM7QUFBQSxJQUM1QyxVQUFFO0FBQ0EsVUFBSSxFQUFHLE9BQU0sRUFBRTtBQUFBLElBQ2pCO0FBQUEsRUFDRjtBQUNBLFNBQU9DO0FBQ1QsR0FBRztBQUFBO0FBQUEsRUFFRCxXQUFXO0FBQ1QsYUFBU0YsRUFBRSxHQUFHO0FBQ1osV0FBSyxjQUFjO0FBQUEsSUFDckI7QUFDQSxXQUFPQSxFQUFFLFVBQVUsT0FBTyxTQUFTLEdBQUcsR0FBRztBQUN2QyxVQUFJQyxJQUFJO0FBQ1IsYUFBTyxJQUFJLFFBQVEsU0FBUyxHQUFHO0FBQzdCLFlBQUlDLElBQUksSUFBSSxlQUFlO0FBQzNCLFFBQUFBLEVBQUUsVUFBVSxHQUFHQSxFQUFFLEtBQUssUUFBUUQsRUFBRSxZQUFZLEdBQUc7QUFDL0MsWUFBSSxJQUFJQSxFQUFFLFlBQVksUUFBUTtBQUM5QixlQUFPLFFBQVEsQ0FBQyxFQUFFLFFBQVEsU0FBU0UsR0FBRztBQUNwQyxjQUFJQyxJQUFJLFNBQVNELEdBQUcsQ0FBQyxHQUFHRyxJQUFJRixFQUFFLENBQUMsR0FBR0MsSUFBSUQsRUFBRSxDQUFDO0FBQ3pDLFVBQUFGLEVBQUUsaUJBQWlCSSxHQUFHRCxDQUFDO0FBQUEsUUFDekIsQ0FBQyxHQUFHSCxFQUFFLFlBQVksU0FBU0MsR0FBRztBQUM1QixZQUFFO0FBQUEsWUFDQSxRQUFRO0FBQUEsWUFDUixPQUFPLElBQUksTUFBTSx1QkFBdUI7QUFBQSxVQUMxQyxDQUFDO0FBQUEsUUFDSCxHQUFHRCxFQUFFLHFCQUFxQixXQUFXO0FBQ25DLFVBQUFBLEVBQUUsVUFBVSxPQUFPQSxFQUFFLFVBQVUsT0FBTyxFQUFFLE1BQU0sYUFBYSxHQUFHLEVBQUU7QUFBQSxZQUM5RCxRQUFRO0FBQUEsVUFDVixDQUFDLEtBQUtBLEVBQUUsVUFBVSxrQkFBa0JBLEVBQUUsTUFBTSxJQUFJLEVBQUU7QUFBQSxZQUNoRCxRQUFRO0FBQUEsWUFDUixlQUFlLHVCQUF1QkEsRUFBRSxrQkFBa0IsYUFBYSxDQUFDO0FBQUEsVUFDMUUsQ0FBQyxJQUFJQSxFQUFFLFdBQVcsS0FBSyxFQUFFO0FBQUEsWUFDdkIsUUFBUTtBQUFBLFlBQ1IsT0FBTyxJQUFJLE1BQU0sOENBQThDO0FBQUEsVUFDakUsQ0FBQztBQUFBLFFBQ0gsR0FBR0EsRUFBRSxVQUFVLFdBQVc7QUFDeEIsWUFBRTtBQUFBLFlBQ0EsUUFBUTtBQUFBLFlBQ1IsT0FBTyxJQUFJLE1BQU0scUJBQXFCO0FBQUEsVUFDeEMsQ0FBQztBQUFBLFFBQ0gsR0FBR0EsRUFBRSxVQUFVLFdBQVc7QUFDeEIsWUFBRTtBQUFBLFlBQ0EsUUFBUTtBQUFBLFlBQ1IsT0FBTyxJQUFJLE1BQU0scUJBQXFCO0FBQUEsVUFDeEMsQ0FBQztBQUFBLFFBQ0gsR0FBR0EsRUFBRSxLQUFLLENBQUM7QUFBQSxNQUNiLENBQUM7QUFBQSxJQUNILEdBQUdGLEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFBQSxJQUNyQyxHQUFHQTtBQUFBLEVBQ0wsRUFBRTtBQUFBO0FBRUosU0FBUyxtQkFBbUJBLEdBQUc7QUFDN0IsU0FBTyxJQUFJLGFBQWFBLENBQUM7QUFDM0I7QUFDQSxJQUFJO0FBQUE7QUFBQSxFQUVGLFdBQVc7QUFDVCxhQUFTQSxFQUFFLEdBQUc7QUFDWixXQUFLLFVBQVU7QUFBQSxJQUNqQjtBQUNBLFdBQU9BLEVBQUUsVUFBVSxPQUFPLFNBQVMsR0FBRztBQUNwQyxVQUFJLElBQUk7QUFDUixhQUFPLElBQUksUUFBUSxTQUFTQyxHQUFHO0FBQzdCLGtCQUFVLFdBQVcsRUFBRSxRQUFRLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLEdBQUdBLEVBQUU7QUFBQSxVQUNuSCxRQUFRO0FBQUEsUUFDVixDQUFDLEtBQUtBLEVBQUU7QUFBQSxVQUNOLFFBQVE7QUFBQSxVQUNSLE9BQU8sSUFBSSxNQUFNLG1CQUFtQjtBQUFBLFFBQ3RDLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNILEdBQUdELEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFBQSxJQUNyQyxHQUFHQTtBQUFBLEVBQ0wsRUFBRTtBQUFBO0FBRUosU0FBUywwQkFBMEJBLEdBQUc7QUFDcEMsU0FBTyxJQUFJLG9CQUFvQkEsQ0FBQztBQUNsQztBQUNBLFNBQVMsNEJBQTRCQSxHQUFHLEdBQUc7QUFDekMsU0FBTyxnQ0FBZ0NBLEdBQUcsR0FBRyx3QkFBd0I7QUFBQSxJQUNuRSxXQUFXLG1CQUFtQkEsQ0FBQztBQUFBLEVBQ2pDLENBQUMsQ0FBQztBQUNKO0FBQ0EsU0FBUyxtQ0FBbUNBLEdBQUcsR0FBRztBQUNoRCxTQUFPLGdDQUFnQ0EsR0FBRyxHQUFHLHdCQUF3QjtBQUFBLElBQ25FLFdBQVcsMEJBQTBCO0FBQUEsTUFDbkMsS0FBS0EsRUFBRTtBQUFBLE1BQ1AsVUFBVUEsRUFBRSxRQUFRLEVBQUUsY0FBYztBQUFBLElBQ3RDLENBQUM7QUFBQSxFQUNILENBQUMsQ0FBQztBQUNKO0FBQ0EsSUFBSSxTQUFTLFNBQVNBLEdBQUcsR0FBRztBQUMxQixNQUFJLElBQUksT0FBTyxVQUFVLGNBQWNBLEVBQUUsT0FBTyxRQUFRO0FBQ3hELE1BQUksQ0FBQyxFQUFHLFFBQU9BO0FBQ2YsTUFBSUMsSUFBSSxFQUFFLEtBQUtELENBQUMsR0FBRyxHQUFHRSxJQUFJLENBQUMsR0FBRztBQUM5QixNQUFJO0FBQ0YsWUFBUSxNQUFNLFVBQVUsTUFBTSxNQUFNLEVBQUUsSUFBSUQsRUFBRSxLQUFLLEdBQUcsT0FBUSxDQUFBQyxFQUFFLEtBQUssRUFBRSxLQUFLO0FBQUEsRUFDNUUsU0FBU0MsR0FBRztBQUNWLFFBQUksRUFBRSxPQUFPQSxFQUFFO0FBQUEsRUFDakIsVUFBRTtBQUNBLFFBQUk7QUFDRixXQUFLLENBQUMsRUFBRSxTQUFTLElBQUlGLEVBQUUsV0FBVyxFQUFFLEtBQUtBLENBQUM7QUFBQSxJQUM1QyxVQUFFO0FBQ0EsVUFBSSxFQUFHLE9BQU0sRUFBRTtBQUFBLElBQ2pCO0FBQUEsRUFDRjtBQUNBLFNBQU9DO0FBQ1Q7QUFDQSxTQUFTLDRCQUE0QkYsR0FBRztBQUN0QyxTQUFPLFdBQVc7QUFDaEIsUUFBSSxHQUFHLElBQUksQ0FBQztBQUNaLFdBQU8sT0FBTyxTQUFTLElBQUlBLEtBQUssT0FBTyxTQUFTQSxFQUFFLE9BQU8sUUFBUSxNQUFNLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLFNBQVNDLEdBQUc7QUFDMUcsVUFBSSxJQUFJLE9BQU9BLEdBQUcsQ0FBQyxHQUFHQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO0FBQ3ZDLGFBQU8sSUFBSSxNQUFNLEVBQUVBLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssYUFBYUEsSUFBSSwwQkFBMEIsSUFBSSx1QkFBdUI7QUFBQSxJQUNuSCxDQUFDLEdBQUc7QUFBQSxFQUNOO0FBQ0Y7QUFDQSxJQUFJLFdBQVcsV0FBVztBQUN4QixTQUFPLFdBQVcsT0FBTyxVQUFVLFNBQVNGLEdBQUc7QUFDN0MsYUFBUyxHQUFHLElBQUksR0FBR0MsSUFBSSxVQUFVLFFBQVEsSUFBSUEsR0FBRyxLQUFLO0FBQ25ELFVBQUksVUFBVSxDQUFDO0FBQ2YsZUFBUyxLQUFLLEVBQUcsUUFBTyxVQUFVLGVBQWUsS0FBSyxHQUFHLENBQUMsTUFBTUQsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQUEsSUFDNUU7QUFDQSxXQUFPQTtBQUFBLEVBQ1QsR0FBRyxTQUFTLE1BQU0sTUFBTSxTQUFTO0FBQ25DO0FBQ0EsU0FBUyxhQUFhQSxHQUFHLEdBQUcsR0FBRztBQUM3QixNQUFJQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQyxTQUFPLFdBQVc7QUFDaEIsV0FBTyxLQUFLLFFBQVEsT0FBTyxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUdELEtBQUssUUFBUSxPQUFPLE9BQU8sR0FBR0EsRUFBRSxDQUFDLEdBQUcsT0FBTyxPQUFPLEdBQUdDLENBQUM7QUFBQSxFQUNuRztBQUNGO0FBQ0EsU0FBUyx3QkFBd0JELEdBQUc7QUFDbEMsTUFBSUEsS0FBSztBQUNQLFFBQUk7QUFDRixhQUFPLElBQUksSUFBSUEsQ0FBQyxHQUFHQTtBQUFBLElBQ3JCLFFBQVE7QUFDTixZQUFNLElBQUksTUFBTSwrREFBK0RBLElBQUksR0FBRztBQUFBLElBQ3hGO0FBQ0o7QUFDQSxTQUFTLHVDQUF1Q0EsR0FBRyxHQUFHLEdBQUc7QUFDdkQsTUFBSUMsR0FBRyxHQUFHQyxHQUFHO0FBQ2IsU0FBTyxTQUFTLFNBQVMsQ0FBQyxHQUFHLHlDQUF5Q0YsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxhQUFhLDRCQUE0QkEsRUFBRSxPQUFPLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxHQUFHLE1BQU0sS0FBS0MsSUFBSSx3QkFBd0JELEVBQUUsR0FBRyxPQUFPLFFBQVFDLE1BQU0sU0FBU0EsSUFBSSxFQUFFLFNBQVMsUUFBUSxNQUFNLFNBQVMsSUFBSSxFQUFFLEtBQUssZUFBZSxLQUFLQyxJQUFJRixFQUFFLGtCQUFrQixRQUFRRSxNQUFNLFNBQVNBLElBQUksRUFBRSxrQkFBa0IsUUFBUSxNQUFNLFNBQVMsSUFBSSxFQUFFLGFBQWEsQ0FBQztBQUMzYTtBQUNBLFNBQVMsNkJBQTZCRixHQUFHLEdBQUc7QUFDMUMsU0FBTyxTQUFTLFNBQVMsQ0FBQyxHQUFHLCtCQUErQixDQUFDLEdBQUcsRUFBRSxTQUFTLFdBQVc7QUFDcEYsV0FBT0E7QUFBQSxFQUNULEdBQUcsS0FBSywyQkFBMkIsR0FBRyxjQUFjLEVBQUUsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUN6RTtBQUNBLFNBQVMsZ0NBQWdDQSxHQUFHLEdBQUcsR0FBRztBQUNoRCxTQUFPO0FBQUEsSUFDTDtBQUFBLE1BQ0UsS0FBS0EsRUFBRTtBQUFBLE1BQ1AsZUFBZUEsRUFBRTtBQUFBLE1BQ2pCLFNBQVMsNEJBQTRCQSxFQUFFLE9BQU87QUFBQSxNQUM5QyxrQkFBa0JBLEVBQUU7QUFBQSxJQUN0QjtBQUFBLElBQ0EsQ0FBQztBQUFBO0FBQUEsSUFFRCw2QkFBNkIsR0FBRyxDQUFDO0FBQUEsRUFDbkM7QUFDRjtBQUNBLFNBQVMsc0NBQXNDQSxHQUFHLEdBQUcsR0FBR0MsR0FBRztBQUN6RCxNQUFJLElBQUksQ0FBQyxDQUFDRCxFQUFFLFdBQVcsT0FBTyxVQUFVLGNBQWMsWUFBWUUsSUFBSSxnQ0FBZ0NGLEdBQUcsR0FBR0MsQ0FBQztBQUM3RyxTQUFPLElBQUksNEJBQTRCQyxHQUFHLENBQUMsSUFBSSxtQ0FBbUNBLEdBQUcsQ0FBQztBQUN4RjtBQUNBLElBQUksWUFBNEIsMkJBQVc7QUFDekMsTUFBSUYsSUFBSSxTQUFTLEdBQUcsR0FBRztBQUNyQixXQUFPQSxJQUFJLE9BQU8sa0JBQWtCLEVBQUUsV0FBVyxDQUFDLEVBQUUsYUFBYSxTQUFTLFNBQVNDLEdBQUcsR0FBRztBQUN2RixNQUFBQSxFQUFFLFlBQVk7QUFBQSxJQUNoQixLQUFLLFNBQVNBLEdBQUcsR0FBRztBQUNsQixlQUFTQyxLQUFLLEVBQUcsUUFBTyxVQUFVLGVBQWUsS0FBSyxHQUFHQSxDQUFDLE1BQU1ELEVBQUVDLENBQUMsSUFBSSxFQUFFQSxDQUFDO0FBQUEsSUFDNUUsR0FBR0YsRUFBRSxHQUFHLENBQUM7QUFBQSxFQUNYO0FBQ0EsU0FBTyxTQUFTLEdBQUcsR0FBRztBQUNwQixRQUFJLE9BQU8sS0FBSyxjQUFjLE1BQU07QUFDbEMsWUFBTSxJQUFJLFVBQVUseUJBQXlCLE9BQU8sQ0FBQyxJQUFJLCtCQUErQjtBQUMxRixJQUFBQSxFQUFFLEdBQUcsQ0FBQztBQUNOLGFBQVNDLElBQUk7QUFDWCxXQUFLLGNBQWM7QUFBQSxJQUNyQjtBQUNBLE1BQUUsWUFBWSxNQUFNLE9BQU8sT0FBTyxPQUFPLENBQUMsS0FBS0EsRUFBRSxZQUFZLEVBQUUsV0FBVyxJQUFJQSxFQUFFO0FBQUEsRUFDbEY7QUFDRixFQUFFLEdBQUcsa0NBQWtDLGFBQWE7QUFBQTtBQUFBLEVBRWxELFNBQVNELEdBQUc7QUFDVixjQUFVLEdBQUdBLENBQUM7QUFDZCxhQUFTLEVBQUUsR0FBRztBQUNaLGFBQU8sTUFBTSxXQUFXLElBQUksQ0FBQyxJQUFJQSxFQUFFLEtBQUssTUFBTSxzQ0FBc0MsR0FBRyx5QkFBeUIsaUNBQWlDLEVBQUUsZ0JBQWdCLHlCQUF5QixDQUFDLENBQUMsS0FBSztBQUFBLElBQ3JNO0FBQ0EsV0FBTztBQUFBLEVBQ1QsRUFBRSxnQkFBZ0I7QUFBQTsiLAogICJuYW1lcyI6IFsiYSIsICJmIiwgIm8iLCAidCIsICJyIiwgImwiLCAibiIsICJwIiwgImEkMSIsICJzIiwgImQiLCAiaCIsICJ1IiwgImMiLCAiaSIsICJlIiwgImYkMSIsICJ5Il0KfQo=