{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\thread-loader\\dist\\cjs.js!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\quill\\blots\\scroll.js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\quill\\blots\\scroll.js","mtime":1787309795727},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\babel.config.js","mtime":1787567871334},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\thread-loader\\dist\\cjs.js","mtime":1787309791954},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js","mtime":1787309793142}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90eXBlb2YgZnJvbSAiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyI7CmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tICJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyI7CmltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSAiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIjsKaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tICJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiOwppbXBvcnQgX2NhbGxTdXBlciBmcm9tICJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2FsbFN1cGVyLmpzIjsKaW1wb3J0IF9zdXBlclByb3BHZXQgZnJvbSAiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3N1cGVyUHJvcEdldC5qcyI7CmltcG9ydCBfaW5oZXJpdHMgZnJvbSAiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIjsKaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmVudHJpZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5lbmRzLXdpdGguanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc3BsaXQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZmlsdGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZpbmQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IucmVkdWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7CmltcG9ydCB7IENvbnRhaW5lckJsb3QsIExlYWZCbG90LCBTY29wZSwgU2Nyb2xsQmxvdCB9IGZyb20gJ3BhcmNobWVudCc7CmltcG9ydCBEZWx0YSwgeyBBdHRyaWJ1dGVNYXAsIE9wIH0gZnJvbSAncXVpbGwtZGVsdGEnOwppbXBvcnQgRW1pdHRlciBmcm9tICcuLi9jb3JlL2VtaXR0ZXIuanMnOwppbXBvcnQgQmxvY2ssIHsgQmxvY2tFbWJlZCwgYnViYmxlRm9ybWF0cyB9IGZyb20gJy4vYmxvY2suanMnOwppbXBvcnQgQnJlYWsgZnJvbSAnLi9icmVhay5qcyc7CmltcG9ydCBDb250YWluZXIgZnJvbSAnLi9jb250YWluZXIuanMnOwpmdW5jdGlvbiBpc0xpbmUoYmxvdCkgewogIHJldHVybiBibG90IGluc3RhbmNlb2YgQmxvY2sgfHwgYmxvdCBpbnN0YW5jZW9mIEJsb2NrRW1iZWQ7Cn0KZnVuY3Rpb24gaXNVcGRhdGFibGUoYmxvdCkgewogIHJldHVybiB0eXBlb2YgYmxvdC51cGRhdGVDb250ZW50ID09PSAnZnVuY3Rpb24nOwp9CnZhciBTY3JvbGwgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TY3JvbGxCbG90KSB7CiAgZnVuY3Rpb24gU2Nyb2xsKHJlZ2lzdHJ5LCBkb21Ob2RlLCBfcmVmKSB7CiAgICB2YXIgX3RoaXM7CiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2Nyb2xsKTsKICAgIHZhciBlbWl0dGVyID0gX3JlZi5lbWl0dGVyOwogICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIFNjcm9sbCwgW3JlZ2lzdHJ5LCBkb21Ob2RlXSk7CiAgICBfdGhpcy5lbWl0dGVyID0gZW1pdHRlcjsKICAgIF90aGlzLmJhdGNoID0gZmFsc2U7CiAgICBfdGhpcy5vcHRpbWl6ZSgpOwogICAgX3RoaXMuZW5hYmxlKCk7CiAgICBfdGhpcy5kb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVEcmFnU3RhcnQoZSk7CiAgICB9KTsKICAgIHJldHVybiBfdGhpczsKICB9CiAgX2luaGVyaXRzKFNjcm9sbCwgX1Njcm9sbEJsb3QpOwogIHJldHVybiBfY3JlYXRlQ2xhc3MoU2Nyb2xsLCBbewogICAga2V5OiAiYmF0Y2hTdGFydCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gYmF0Y2hTdGFydCgpIHsKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuYmF0Y2gpKSB7CiAgICAgICAgdGhpcy5iYXRjaCA9IFtdOwogICAgICB9CiAgICB9CiAgfSwgewogICAga2V5OiAiYmF0Y2hFbmQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGJhdGNoRW5kKCkgewogICAgICBpZiAoIXRoaXMuYmF0Y2gpIHJldHVybjsKICAgICAgdmFyIG11dGF0aW9ucyA9IHRoaXMuYmF0Y2g7CiAgICAgIHRoaXMuYmF0Y2ggPSBmYWxzZTsKICAgICAgdGhpcy51cGRhdGUobXV0YXRpb25zKTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJlbWl0TW91bnQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGVtaXRNb3VudChibG90KSB7CiAgICAgIHRoaXMuZW1pdHRlci5lbWl0KEVtaXR0ZXIuZXZlbnRzLlNDUk9MTF9CTE9UX01PVU5ULCBibG90KTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJlbWl0VW5tb3VudCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZW1pdFVubW91bnQoYmxvdCkgewogICAgICB0aGlzLmVtaXR0ZXIuZW1pdChFbWl0dGVyLmV2ZW50cy5TQ1JPTExfQkxPVF9VTk1PVU5ULCBibG90KTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJlbWl0RW1iZWRVcGRhdGUiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGVtaXRFbWJlZFVwZGF0ZShibG90LCBjaGFuZ2UpIHsKICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoRW1pdHRlci5ldmVudHMuU0NST0xMX0VNQkVEX1VQREFURSwgYmxvdCwgY2hhbmdlKTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJkZWxldGVBdCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZGVsZXRlQXQoaW5kZXgsIGxlbmd0aCkgewogICAgICB2YXIgX3RoaXMkbGluZSA9IHRoaXMubGluZShpbmRleCksCiAgICAgICAgX3RoaXMkbGluZTIgPSBfc2xpY2VkVG9BcnJheShfdGhpcyRsaW5lLCAyKSwKICAgICAgICBmaXJzdCA9IF90aGlzJGxpbmUyWzBdLAogICAgICAgIG9mZnNldCA9IF90aGlzJGxpbmUyWzFdOwogICAgICB2YXIgX3RoaXMkbGluZTMgPSB0aGlzLmxpbmUoaW5kZXggKyBsZW5ndGgpLAogICAgICAgIF90aGlzJGxpbmU0ID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkbGluZTMsIDEpLAogICAgICAgIGxhc3QgPSBfdGhpcyRsaW5lNFswXTsKICAgICAgX3N1cGVyUHJvcEdldChTY3JvbGwsICJkZWxldGVBdCIsIHRoaXMsIDMpKFtpbmRleCwgbGVuZ3RoXSk7CiAgICAgIGlmIChsYXN0ICE9IG51bGwgJiYgZmlyc3QgIT09IGxhc3QgJiYgb2Zmc2V0ID4gMCkgewogICAgICAgIGlmIChmaXJzdCBpbnN0YW5jZW9mIEJsb2NrRW1iZWQgfHwgbGFzdCBpbnN0YW5jZW9mIEJsb2NrRW1iZWQpIHsKICAgICAgICAgIHRoaXMub3B0aW1pemUoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdmFyIHJlZiA9IGxhc3QuY2hpbGRyZW4uaGVhZCBpbnN0YW5jZW9mIEJyZWFrID8gbnVsbCA6IGxhc3QuY2hpbGRyZW4uaGVhZDsKICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yCiAgICAgICAgZmlyc3QubW92ZUNoaWxkcmVuKGxhc3QsIHJlZik7CiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcgogICAgICAgIGZpcnN0LnJlbW92ZSgpOwogICAgICB9CiAgICAgIHRoaXMub3B0aW1pemUoKTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJlbmFibGUiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGVuYWJsZSgpIHsKICAgICAgdmFyIGVuYWJsZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRydWU7CiAgICAgIHRoaXMuZG9tTm9kZS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIGVuYWJsZWQgPyAndHJ1ZScgOiAnZmFsc2UnKTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJmb3JtYXRBdCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZm9ybWF0QXQoaW5kZXgsIGxlbmd0aCwgZm9ybWF0LCB2YWx1ZSkgewogICAgICBfc3VwZXJQcm9wR2V0KFNjcm9sbCwgImZvcm1hdEF0IiwgdGhpcywgMykoW2luZGV4LCBsZW5ndGgsIGZvcm1hdCwgdmFsdWVdKTsKICAgICAgdGhpcy5vcHRpbWl6ZSgpOwogICAgfQogIH0sIHsKICAgIGtleTogImluc2VydEF0IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBpbnNlcnRBdChpbmRleCwgdmFsdWUsIGRlZikgewogICAgICBpZiAoaW5kZXggPj0gdGhpcy5sZW5ndGgoKSkgewogICAgICAgIGlmIChkZWYgPT0gbnVsbCB8fCB0aGlzLnNjcm9sbC5xdWVyeSh2YWx1ZSwgU2NvcGUuQkxPQ0spID09IG51bGwpIHsKICAgICAgICAgIHZhciBibG90ID0gdGhpcy5zY3JvbGwuY3JlYXRlKHRoaXMuc3RhdGljcy5kZWZhdWx0Q2hpbGQuYmxvdE5hbWUpOwogICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChibG90KTsKICAgICAgICAgIGlmIChkZWYgPT0gbnVsbCAmJiB2YWx1ZS5lbmRzV2l0aCgnXG4nKSkgewogICAgICAgICAgICBibG90Lmluc2VydEF0KDAsIHZhbHVlLnNsaWNlKDAsIC0xKSwgZGVmKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJsb3QuaW5zZXJ0QXQoMCwgdmFsdWUsIGRlZik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciBlbWJlZCA9IHRoaXMuc2Nyb2xsLmNyZWF0ZSh2YWx1ZSwgZGVmKTsKICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoZW1iZWQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfc3VwZXJQcm9wR2V0KFNjcm9sbCwgImluc2VydEF0IiwgdGhpcywgMykoW2luZGV4LCB2YWx1ZSwgZGVmXSk7CiAgICAgIH0KICAgICAgdGhpcy5vcHRpbWl6ZSgpOwogICAgfQogIH0sIHsKICAgIGtleTogImluc2VydEJlZm9yZSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKGJsb3QsIHJlZikgewogICAgICBpZiAoYmxvdC5zdGF0aWNzLnNjb3BlID09PSBTY29wZS5JTkxJTkVfQkxPVCkgewogICAgICAgIHZhciB3cmFwcGVyID0gdGhpcy5zY3JvbGwuY3JlYXRlKHRoaXMuc3RhdGljcy5kZWZhdWx0Q2hpbGQuYmxvdE5hbWUpOwogICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoYmxvdCk7CiAgICAgICAgX3N1cGVyUHJvcEdldChTY3JvbGwsICJpbnNlcnRCZWZvcmUiLCB0aGlzLCAzKShbd3JhcHBlciwgcmVmXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3N1cGVyUHJvcEdldChTY3JvbGwsICJpbnNlcnRCZWZvcmUiLCB0aGlzLCAzKShbYmxvdCwgcmVmXSk7CiAgICAgIH0KICAgIH0KICB9LCB7CiAgICBrZXk6ICJpbnNlcnRDb250ZW50cyIsCiAgICB2YWx1ZTogZnVuY3Rpb24gaW5zZXJ0Q29udGVudHMoaW5kZXgsIGRlbHRhKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICB2YXIgcmVuZGVyQmxvY2tzID0gdGhpcy5kZWx0YVRvUmVuZGVyQmxvY2tzKGRlbHRhLmNvbmNhdChuZXcgRGVsdGEoKS5pbnNlcnQoJ1xuJykpKTsKICAgICAgdmFyIGxhc3QgPSByZW5kZXJCbG9ja3MucG9wKCk7CiAgICAgIGlmIChsYXN0ID09IG51bGwpIHJldHVybjsKICAgICAgdGhpcy5iYXRjaFN0YXJ0KCk7CiAgICAgIHZhciBmaXJzdCA9IHJlbmRlckJsb2Nrcy5zaGlmdCgpOwogICAgICBpZiAoZmlyc3QpIHsKICAgICAgICB2YXIgc2hvdWxkSW5zZXJ0TmV3bGluZUNoYXIgPSBmaXJzdC50eXBlID09PSAnYmxvY2snICYmIChmaXJzdC5kZWx0YS5sZW5ndGgoKSA9PT0gMCB8fCAhdGhpcy5kZXNjZW5kYW50KEJsb2NrRW1iZWQsIGluZGV4KVswXSAmJiBpbmRleCA8IHRoaXMubGVuZ3RoKCkpOwogICAgICAgIHZhciBfZGVsdGEgPSBmaXJzdC50eXBlID09PSAnYmxvY2snID8gZmlyc3QuZGVsdGEgOiBuZXcgRGVsdGEoKS5pbnNlcnQoX2RlZmluZVByb3BlcnR5KHt9LCBmaXJzdC5rZXksIGZpcnN0LnZhbHVlKSk7CiAgICAgICAgaW5zZXJ0SW5saW5lQ29udGVudHModGhpcywgaW5kZXgsIF9kZWx0YSk7CiAgICAgICAgdmFyIG5ld2xpbmVDaGFyTGVuZ3RoID0gZmlyc3QudHlwZSA9PT0gJ2Jsb2NrJyA/IDEgOiAwOwogICAgICAgIHZhciBsaW5lRW5kSW5kZXggPSBpbmRleCArIF9kZWx0YS5sZW5ndGgoKSArIG5ld2xpbmVDaGFyTGVuZ3RoOwogICAgICAgIGlmIChzaG91bGRJbnNlcnROZXdsaW5lQ2hhcikgewogICAgICAgICAgdGhpcy5pbnNlcnRBdChsaW5lRW5kSW5kZXggLSAxLCAnXG4nKTsKICAgICAgICB9CiAgICAgICAgdmFyIGZvcm1hdHMgPSBidWJibGVGb3JtYXRzKHRoaXMubGluZShpbmRleClbMF0pOwogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gQXR0cmlidXRlTWFwLmRpZmYoZm9ybWF0cywgZmlyc3QuYXR0cmlidXRlcykgfHwge307CiAgICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkgewogICAgICAgICAgX3RoaXMyLmZvcm1hdEF0KGxpbmVFbmRJbmRleCAtIDEsIDEsIG5hbWUsIGF0dHJpYnV0ZXNbbmFtZV0pOwogICAgICAgIH0pOwogICAgICAgIGluZGV4ID0gbGluZUVuZEluZGV4OwogICAgICB9CiAgICAgIHZhciBfdGhpcyRjaGlsZHJlbiRmaW5kID0gdGhpcy5jaGlsZHJlbi5maW5kKGluZGV4KSwKICAgICAgICBfdGhpcyRjaGlsZHJlbiRmaW5kMiA9IF9zbGljZWRUb0FycmF5KF90aGlzJGNoaWxkcmVuJGZpbmQsIDIpLAogICAgICAgIHJlZkJsb3QgPSBfdGhpcyRjaGlsZHJlbiRmaW5kMlswXSwKICAgICAgICByZWZCbG90T2Zmc2V0ID0gX3RoaXMkY2hpbGRyZW4kZmluZDJbMV07CiAgICAgIGlmIChyZW5kZXJCbG9ja3MubGVuZ3RoKSB7CiAgICAgICAgaWYgKHJlZkJsb3QpIHsKICAgICAgICAgIHJlZkJsb3QgPSByZWZCbG90LnNwbGl0KHJlZkJsb3RPZmZzZXQpOwogICAgICAgICAgcmVmQmxvdE9mZnNldCA9IDA7CiAgICAgICAgfQogICAgICAgIHJlbmRlckJsb2Nrcy5mb3JFYWNoKGZ1bmN0aW9uIChyZW5kZXJCbG9jaykgewogICAgICAgICAgaWYgKHJlbmRlckJsb2NrLnR5cGUgPT09ICdibG9jaycpIHsKICAgICAgICAgICAgdmFyIGJsb2NrID0gX3RoaXMyLmNyZWF0ZUJsb2NrKHJlbmRlckJsb2NrLmF0dHJpYnV0ZXMsIHJlZkJsb3QgfHwgdW5kZWZpbmVkKTsKICAgICAgICAgICAgaW5zZXJ0SW5saW5lQ29udGVudHMoYmxvY2ssIDAsIHJlbmRlckJsb2NrLmRlbHRhKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBibG9ja0VtYmVkID0gX3RoaXMyLmNyZWF0ZShyZW5kZXJCbG9jay5rZXksIHJlbmRlckJsb2NrLnZhbHVlKTsKICAgICAgICAgICAgX3RoaXMyLmluc2VydEJlZm9yZShibG9ja0VtYmVkLCByZWZCbG90IHx8IHVuZGVmaW5lZCk7CiAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlbmRlckJsb2NrLmF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICAgICAgICBibG9ja0VtYmVkLmZvcm1hdChuYW1lLCByZW5kZXJCbG9jay5hdHRyaWJ1dGVzW25hbWVdKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKGxhc3QudHlwZSA9PT0gJ2Jsb2NrJyAmJiBsYXN0LmRlbHRhLmxlbmd0aCgpKSB7CiAgICAgICAgdmFyIG9mZnNldCA9IHJlZkJsb3QgPyByZWZCbG90Lm9mZnNldChyZWZCbG90LnNjcm9sbCkgKyByZWZCbG90T2Zmc2V0IDogdGhpcy5sZW5ndGgoKTsKICAgICAgICBpbnNlcnRJbmxpbmVDb250ZW50cyh0aGlzLCBvZmZzZXQsIGxhc3QuZGVsdGEpOwogICAgICB9CiAgICAgIHRoaXMuYmF0Y2hFbmQoKTsKICAgICAgdGhpcy5vcHRpbWl6ZSgpOwogICAgfQogIH0sIHsKICAgIGtleTogImlzRW5hYmxlZCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gaXNFbmFibGVkKCkgewogICAgICByZXR1cm4gdGhpcy5kb21Ob2RlLmdldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJykgPT09ICd0cnVlJzsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJsZWFmIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBsZWFmKGluZGV4KSB7CiAgICAgIHZhciBsYXN0ID0gdGhpcy5wYXRoKGluZGV4KS5wb3AoKTsKICAgICAgaWYgKCFsYXN0KSB7CiAgICAgICAgcmV0dXJuIFtudWxsLCAtMV07CiAgICAgIH0KICAgICAgdmFyIF9sYXN0ID0gX3NsaWNlZFRvQXJyYXkobGFzdCwgMiksCiAgICAgICAgYmxvdCA9IF9sYXN0WzBdLAogICAgICAgIG9mZnNldCA9IF9sYXN0WzFdOwogICAgICByZXR1cm4gYmxvdCBpbnN0YW5jZW9mIExlYWZCbG90ID8gW2Jsb3QsIG9mZnNldF0gOiBbbnVsbCwgLTFdOwogICAgfQogIH0sIHsKICAgIGtleTogImxpbmUiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGxpbmUoaW5kZXgpIHsKICAgICAgaWYgKGluZGV4ID09PSB0aGlzLmxlbmd0aCgpKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubGluZShpbmRleCAtIDEpOwogICAgICB9CiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogbWFrZSBkZXNjZW5kYW50KCkgZ2VuZXJpYwogICAgICByZXR1cm4gdGhpcy5kZXNjZW5kYW50KGlzTGluZSwgaW5kZXgpOwogICAgfQogIH0sIHsKICAgIGtleTogImxpbmVzIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBsaW5lcygpIHsKICAgICAgdmFyIGluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAwOwogICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBOdW1iZXIuTUFYX1ZBTFVFOwogICAgICB2YXIgX2dldExpbmVzID0gZnVuY3Rpb24gZ2V0TGluZXMoYmxvdCwgYmxvdEluZGV4LCBibG90TGVuZ3RoKSB7CiAgICAgICAgdmFyIGxpbmVzID0gW107CiAgICAgICAgdmFyIGxlbmd0aExlZnQgPSBibG90TGVuZ3RoOwogICAgICAgIGJsb3QuY2hpbGRyZW4uZm9yRWFjaEF0KGJsb3RJbmRleCwgYmxvdExlbmd0aCwgZnVuY3Rpb24gKGNoaWxkLCBjaGlsZEluZGV4LCBjaGlsZExlbmd0aCkgewogICAgICAgICAgaWYgKGlzTGluZShjaGlsZCkpIHsKICAgICAgICAgICAgbGluZXMucHVzaChjaGlsZCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgQ29udGFpbmVyQmxvdCkgewogICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChfZ2V0TGluZXMoY2hpbGQsIGNoaWxkSW5kZXgsIGxlbmd0aExlZnQpKTsKICAgICAgICAgIH0KICAgICAgICAgIGxlbmd0aExlZnQgLT0gY2hpbGRMZW5ndGg7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGxpbmVzOwogICAgICB9OwogICAgICByZXR1cm4gX2dldExpbmVzKHRoaXMsIGluZGV4LCBsZW5ndGgpOwogICAgfQogIH0sIHsKICAgIGtleTogIm9wdGltaXplIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBvcHRpbWl6ZSgpIHsKICAgICAgdmFyIG11dGF0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107CiAgICAgIHZhciBjb250ZXh0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgICAgaWYgKHRoaXMuYmF0Y2gpIHJldHVybjsKICAgICAgX3N1cGVyUHJvcEdldChTY3JvbGwsICJvcHRpbWl6ZSIsIHRoaXMsIDMpKFttdXRhdGlvbnMsIGNvbnRleHRdKTsKICAgICAgaWYgKG11dGF0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoRW1pdHRlci5ldmVudHMuU0NST0xMX09QVElNSVpFLCBtdXRhdGlvbnMsIGNvbnRleHQpOwogICAgICB9CiAgICB9CiAgfSwgewogICAga2V5OiAicGF0aCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gcGF0aChpbmRleCkgewogICAgICByZXR1cm4gX3N1cGVyUHJvcEdldChTY3JvbGwsICJwYXRoIiwgdGhpcywgMykoW2luZGV4XSkuc2xpY2UoMSk7IC8vIEV4Y2x1ZGUgc2VsZgogICAgfQogIH0sIHsKICAgIGtleTogInJlbW92ZSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlKCkgewogICAgICAvLyBOZXZlciByZW1vdmUgc2VsZgogICAgfQogIH0sIHsKICAgIGtleTogInVwZGF0ZSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlKG11dGF0aW9ucykgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgaWYgKHRoaXMuYmF0Y2gpIHsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtdXRhdGlvbnMpKSB7CiAgICAgICAgICB0aGlzLmJhdGNoID0gdGhpcy5iYXRjaC5jb25jYXQobXV0YXRpb25zKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciBzb3VyY2UgPSBFbWl0dGVyLnNvdXJjZXMuVVNFUjsKICAgICAgaWYgKHR5cGVvZiBtdXRhdGlvbnMgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgc291cmNlID0gbXV0YXRpb25zOwogICAgICB9CiAgICAgIGlmICghQXJyYXkuaXNBcnJheShtdXRhdGlvbnMpKSB7CiAgICAgICAgbXV0YXRpb25zID0gdGhpcy5vYnNlcnZlci50YWtlUmVjb3JkcygpOwogICAgICB9CiAgICAgIG11dGF0aW9ucyA9IG11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKF9yZWYyKSB7CiAgICAgICAgdmFyIHRhcmdldCA9IF9yZWYyLnRhcmdldDsKICAgICAgICB2YXIgYmxvdCA9IF90aGlzMy5maW5kKHRhcmdldCwgdHJ1ZSk7CiAgICAgICAgcmV0dXJuIGJsb3QgJiYgIWlzVXBkYXRhYmxlKGJsb3QpOwogICAgICB9KTsKICAgICAgaWYgKG11dGF0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoRW1pdHRlci5ldmVudHMuU0NST0xMX0JFRk9SRV9VUERBVEUsIHNvdXJjZSwgbXV0YXRpb25zKTsKICAgICAgfQogICAgICBfc3VwZXJQcm9wR2V0KFNjcm9sbCwgInVwZGF0ZSIsIHRoaXMsIDMpKFttdXRhdGlvbnMuY29uY2F0KFtdKV0pOyAvLyBwYXNzIGNvcHkKICAgICAgaWYgKG11dGF0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoRW1pdHRlci5ldmVudHMuU0NST0xMX1VQREFURSwgc291cmNlLCBtdXRhdGlvbnMpOwogICAgICB9CiAgICB9CiAgfSwgewogICAga2V5OiAidXBkYXRlRW1iZWRBdCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlRW1iZWRBdChpbmRleCwga2V5LCBjaGFuZ2UpIHsKICAgICAgLy8gQ3VycmVudGx5IGl0IG9ubHkgc3VwcG9ydHMgdG9wLWxldmVsIGVtYmVkcyAoQmxvY2tFbWJlZCkuCiAgICAgIC8vIFdlIGNhbiB1cGRhdGUgYFBhcmVudEJsb3RgIGluIHBhcmNobWVudCB0byBzdXBwb3J0IGlubGluZSBlbWJlZHMuCiAgICAgIHZhciBfdGhpcyRkZXNjZW5kYW50ID0gdGhpcy5kZXNjZW5kYW50KGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICByZXR1cm4gYiBpbnN0YW5jZW9mIEJsb2NrRW1iZWQ7CiAgICAgICAgfSwgaW5kZXgpLAogICAgICAgIF90aGlzJGRlc2NlbmRhbnQyID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkZGVzY2VuZGFudCwgMSksCiAgICAgICAgYmxvdCA9IF90aGlzJGRlc2NlbmRhbnQyWzBdOwogICAgICBpZiAoYmxvdCAmJiBibG90LnN0YXRpY3MuYmxvdE5hbWUgPT09IGtleSAmJiBpc1VwZGF0YWJsZShibG90KSkgewogICAgICAgIGJsb3QudXBkYXRlQ29udGVudChjaGFuZ2UpOwogICAgICB9CiAgICB9CiAgfSwgewogICAga2V5OiAiaGFuZGxlRHJhZ1N0YXJ0IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVEcmFnU3RhcnQoZXZlbnQpIHsKICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJkZWx0YVRvUmVuZGVyQmxvY2tzIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBkZWx0YVRvUmVuZGVyQmxvY2tzKGRlbHRhKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICB2YXIgcmVuZGVyQmxvY2tzID0gW107CiAgICAgIHZhciBjdXJyZW50QmxvY2tEZWx0YSA9IG5ldyBEZWx0YSgpOwogICAgICBkZWx0YS5mb3JFYWNoKGZ1bmN0aW9uIChvcCkgewogICAgICAgIHZhciBpbnNlcnQgPSBvcCA9PT0gbnVsbCB8fCBvcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3AuaW5zZXJ0OwogICAgICAgIGlmICghaW5zZXJ0KSByZXR1cm47CiAgICAgICAgaWYgKHR5cGVvZiBpbnNlcnQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICB2YXIgc3BsaXR0ZWQgPSBpbnNlcnQuc3BsaXQoJ1xuJyk7CiAgICAgICAgICBzcGxpdHRlZC5zbGljZSgwLCAtMSkuZm9yRWFjaChmdW5jdGlvbiAodGV4dCkgewogICAgICAgICAgICB2YXIgX29wJGF0dHJpYnV0ZXM7CiAgICAgICAgICAgIGN1cnJlbnRCbG9ja0RlbHRhLmluc2VydCh0ZXh0LCBvcC5hdHRyaWJ1dGVzKTsKICAgICAgICAgICAgcmVuZGVyQmxvY2tzLnB1c2goewogICAgICAgICAgICAgIHR5cGU6ICdibG9jaycsCiAgICAgICAgICAgICAgZGVsdGE6IGN1cnJlbnRCbG9ja0RlbHRhLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IChfb3AkYXR0cmlidXRlcyA9IG9wLmF0dHJpYnV0ZXMpICE9PSBudWxsICYmIF9vcCRhdHRyaWJ1dGVzICE9PSB2b2lkIDAgPyBfb3AkYXR0cmlidXRlcyA6IHt9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjdXJyZW50QmxvY2tEZWx0YSA9IG5ldyBEZWx0YSgpOwogICAgICAgICAgfSk7CiAgICAgICAgICB2YXIgbGFzdCA9IHNwbGl0dGVkW3NwbGl0dGVkLmxlbmd0aCAtIDFdOwogICAgICAgICAgaWYgKGxhc3QpIHsKICAgICAgICAgICAgY3VycmVudEJsb2NrRGVsdGEuaW5zZXJ0KGxhc3QsIG9wLmF0dHJpYnV0ZXMpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIga2V5ID0gT2JqZWN0LmtleXMoaW5zZXJ0KVswXTsKICAgICAgICAgIGlmICgha2V5KSByZXR1cm47CiAgICAgICAgICBpZiAoX3RoaXM0LnF1ZXJ5KGtleSwgU2NvcGUuSU5MSU5FKSkgewogICAgICAgICAgICBjdXJyZW50QmxvY2tEZWx0YS5wdXNoKG9wKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBfb3AkYXR0cmlidXRlczI7CiAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tEZWx0YS5sZW5ndGgoKSkgewogICAgICAgICAgICAgIHJlbmRlckJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICAgIHR5cGU6ICdibG9jaycsCiAgICAgICAgICAgICAgICBkZWx0YTogY3VycmVudEJsb2NrRGVsdGEsCiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7fQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGN1cnJlbnRCbG9ja0RlbHRhID0gbmV3IERlbHRhKCk7CiAgICAgICAgICAgIHJlbmRlckJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICB0eXBlOiAnYmxvY2tFbWJlZCcsCiAgICAgICAgICAgICAga2V5OiBrZXksCiAgICAgICAgICAgICAgdmFsdWU6IGluc2VydFtrZXldLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IChfb3AkYXR0cmlidXRlczIgPSBvcC5hdHRyaWJ1dGVzKSAhPT0gbnVsbCAmJiBfb3AkYXR0cmlidXRlczIgIT09IHZvaWQgMCA/IF9vcCRhdHRyaWJ1dGVzMiA6IHt9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmIChjdXJyZW50QmxvY2tEZWx0YS5sZW5ndGgoKSkgewogICAgICAgIHJlbmRlckJsb2Nrcy5wdXNoKHsKICAgICAgICAgIHR5cGU6ICdibG9jaycsCiAgICAgICAgICBkZWx0YTogY3VycmVudEJsb2NrRGVsdGEsCiAgICAgICAgICBhdHRyaWJ1dGVzOiB7fQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiByZW5kZXJCbG9ja3M7CiAgICB9CiAgfSwgewogICAga2V5OiAiY3JlYXRlQmxvY2siLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZUJsb2NrKGF0dHJpYnV0ZXMsIHJlZkJsb3QpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIHZhciBibG90TmFtZTsKICAgICAgdmFyIGZvcm1hdHMgPSB7fTsKICAgICAgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjMpIHsKICAgICAgICB2YXIgX3JlZjUgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksCiAgICAgICAgICBrZXkgPSBfcmVmNVswXSwKICAgICAgICAgIHZhbHVlID0gX3JlZjVbMV07CiAgICAgICAgdmFyIGlzQmxvY2tCbG90ID0gX3RoaXM1LnF1ZXJ5KGtleSwgU2NvcGUuQkxPQ0sgJiBTY29wZS5CTE9UKSAhPSBudWxsOwogICAgICAgIGlmIChpc0Jsb2NrQmxvdCkgewogICAgICAgICAgYmxvdE5hbWUgPSBrZXk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvcm1hdHNba2V5XSA9IHZhbHVlOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHZhciBibG9jayA9IHRoaXMuY3JlYXRlKGJsb3ROYW1lIHx8IHRoaXMuc3RhdGljcy5kZWZhdWx0Q2hpbGQuYmxvdE5hbWUsIGJsb3ROYW1lID8gYXR0cmlidXRlc1tibG90TmFtZV0gOiB1bmRlZmluZWQpOwogICAgICB0aGlzLmluc2VydEJlZm9yZShibG9jaywgcmVmQmxvdCB8fCB1bmRlZmluZWQpOwogICAgICB2YXIgbGVuZ3RoID0gYmxvY2subGVuZ3RoKCk7CiAgICAgIE9iamVjdC5lbnRyaWVzKGZvcm1hdHMpLmZvckVhY2goZnVuY3Rpb24gKF9yZWY0KSB7CiAgICAgICAgdmFyIF9yZWY2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjQsIDIpLAogICAgICAgICAga2V5ID0gX3JlZjZbMF0sCiAgICAgICAgICB2YWx1ZSA9IF9yZWY2WzFdOwogICAgICAgIGJsb2NrLmZvcm1hdEF0KDAsIGxlbmd0aCwga2V5LCB2YWx1ZSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gYmxvY2s7CiAgICB9CiAgfV0pOwp9KFNjcm9sbEJsb3QpOwpfZGVmaW5lUHJvcGVydHkoU2Nyb2xsLCAiYmxvdE5hbWUiLCAnc2Nyb2xsJyk7Cl9kZWZpbmVQcm9wZXJ0eShTY3JvbGwsICJjbGFzc05hbWUiLCAncWwtZWRpdG9yJyk7Cl9kZWZpbmVQcm9wZXJ0eShTY3JvbGwsICJ0YWdOYW1lIiwgJ0RJVicpOwpfZGVmaW5lUHJvcGVydHkoU2Nyb2xsLCAiZGVmYXVsdENoaWxkIiwgQmxvY2spOwpfZGVmaW5lUHJvcGVydHkoU2Nyb2xsLCAiYWxsb3dlZENoaWxkcmVuIiwgW0Jsb2NrLCBCbG9ja0VtYmVkLCBDb250YWluZXJdKTsKZnVuY3Rpb24gaW5zZXJ0SW5saW5lQ29udGVudHMocGFyZW50LCBpbmRleCwgaW5saW5lQ29udGVudHMpIHsKICBpbmxpbmVDb250ZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGluZGV4LCBvcCkgewogICAgdmFyIGxlbmd0aCA9IE9wLmxlbmd0aChvcCk7CiAgICB2YXIgYXR0cmlidXRlcyA9IG9wLmF0dHJpYnV0ZXMgfHwge307CiAgICBpZiAob3AuaW5zZXJ0ICE9IG51bGwpIHsKICAgICAgaWYgKHR5cGVvZiBvcC5pbnNlcnQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgdmFyIHRleHQgPSBvcC5pbnNlcnQ7CiAgICAgICAgcGFyZW50Lmluc2VydEF0KGluZGV4LCB0ZXh0KTsKICAgICAgICB2YXIgX3BhcmVudCRkZXNjZW5kYW50ID0gcGFyZW50LmRlc2NlbmRhbnQoTGVhZkJsb3QsIGluZGV4KSwKICAgICAgICAgIF9wYXJlbnQkZGVzY2VuZGFudDIgPSBfc2xpY2VkVG9BcnJheShfcGFyZW50JGRlc2NlbmRhbnQsIDEpLAogICAgICAgICAgbGVhZiA9IF9wYXJlbnQkZGVzY2VuZGFudDJbMF07CiAgICAgICAgdmFyIGZvcm1hdHMgPSBidWJibGVGb3JtYXRzKGxlYWYpOwogICAgICAgIGF0dHJpYnV0ZXMgPSBBdHRyaWJ1dGVNYXAuZGlmZihmb3JtYXRzLCBhdHRyaWJ1dGVzKSB8fCB7fTsKICAgICAgfSBlbHNlIGlmIChfdHlwZW9mKG9wLmluc2VydCkgPT09ICdvYmplY3QnKSB7CiAgICAgICAgdmFyIGtleSA9IE9iamVjdC5rZXlzKG9wLmluc2VydClbMF07IC8vIFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBrZXkKICAgICAgICBpZiAoa2V5ID09IG51bGwpIHJldHVybiBpbmRleDsKICAgICAgICBwYXJlbnQuaW5zZXJ0QXQoaW5kZXgsIGtleSwgb3AuaW5zZXJ0W2tleV0pOwogICAgICAgIHZhciBpc0lubGluZUVtYmVkID0gcGFyZW50LnNjcm9sbC5xdWVyeShrZXksIFNjb3BlLklOTElORSkgIT0gbnVsbDsKICAgICAgICBpZiAoaXNJbmxpbmVFbWJlZCkgewogICAgICAgICAgdmFyIF9wYXJlbnQkZGVzY2VuZGFudDMgPSBwYXJlbnQuZGVzY2VuZGFudChMZWFmQmxvdCwgaW5kZXgpLAogICAgICAgICAgICBfcGFyZW50JGRlc2NlbmRhbnQ0ID0gX3NsaWNlZFRvQXJyYXkoX3BhcmVudCRkZXNjZW5kYW50MywgMSksCiAgICAgICAgICAgIF9sZWFmID0gX3BhcmVudCRkZXNjZW5kYW50NFswXTsKICAgICAgICAgIHZhciBfZm9ybWF0cyA9IGJ1YmJsZUZvcm1hdHMoX2xlYWYpOwogICAgICAgICAgYXR0cmlidXRlcyA9IEF0dHJpYnV0ZU1hcC5kaWZmKF9mb3JtYXRzLCBhdHRyaWJ1dGVzKSB8fCB7fTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICBwYXJlbnQuZm9ybWF0QXQoaW5kZXgsIGxlbmd0aCwga2V5LCBhdHRyaWJ1dGVzW2tleV0pOwogICAgfSk7CiAgICByZXR1cm4gaW5kZXggKyBsZW5ndGg7CiAgfSwgaW5kZXgpOwp9CmV4cG9ydCBkZWZhdWx0IFNjcm9sbDs="},null]}