{"created_by":"Tampermonkey","version":"1","scripts":[{"name":"学起Plus、弘成教育挂课自动连续播放(天津理工大学2022级内部专用请勿传播)","options":{"check_for_updates":true,"user_modified":1757924218125,"comment":null,"compatopts_for_requires":true,"compat_wrappedjsobject":false,"compat_metadata":false,"compat_foreach":false,"compat_powerful_this":null,"sandbox":null,"noframes":null,"unwrap":null,"run_at":null,"run_in":null,"tags":[],"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["*://*.chinaedu.net/*","*://*.sccchina.net/*","*://*.edu.cn/*","*://*.bnude.cn/*"],"orig_noframes":null,"orig_run_at":"document-end","orig_run_in":[],"orig_tags":[],"use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]}},"storage":{"ts":1757924218721,"data":{"current":"s第01讲","last_current":"s第01讲","last_pos":"n0","lessions":"o[{\"title\": \"第01讲\",\"className\": \"api20221120-0\"},{\"title\": \"第02讲\",\"className\": \"api20221120-1\"},{\"title\": \"第03讲\",\"className\": \"api20221120-2\"},{\"title\": \"第04讲\",\"className\": \"api20221120-3\"},{\"title\": \"第05讲\",\"className\": \"api20221120-4\"},{\"title\": \"第06讲\",\"className\": \"api20221120-5\"},{\"title\": \"第07讲\",\"className\": \"api20221120-6\"},{\"title\": \"第08讲\",\"className\": \"api20221120-7\"},{\"title\": \"第09讲\",\"className\": \"api20221120-8\"},{\"title\": \"第10讲\",\"className\": \"api20221120-9\"},{\"title\": \"第11讲\",\"className\": \"api20221120-10\"},{\"title\": \"第12讲\",\"className\": \"api20221120-11\"},{\"title\": \"第13讲\",\"className\": \"api20221120-12\"},{\"title\": \"第14讲\",\"className\": \"api20221120-13\"},{\"title\": \"第15讲\",\"className\": \"api20221120-14\"},{\"title\": \"第16讲\",\"className\": \"api20221120-15\"},{\"title\": \"第17讲\",\"className\": \"api20221120-16\"},{\"title\": \"第18讲\",\"className\": \"api20221120-17\"},{\"title\": \"第19讲\",\"className\": \"api20221120-18\"},{\"title\": \"第20讲\",\"className\": \"api20221120-19\"},{\"title\": \"第21讲\",\"className\": \"api20221120-20\"},{\"title\": \"第22讲\",\"className\": \"api20221120-21\"},{\"title\": \"第23讲\",\"className\": \"api20221120-22\"},{\"title\": \"第24讲\",\"className\": \"api20221120-23\"},{\"title\": \"第25讲\",\"className\": \"api20221120-24\"},{\"title\": \"第26讲\",\"className\": \"api20221120-25\"},{\"title\": \"第27讲\",\"className\": \"api20221120-26\"},{\"title\": \"第28讲\",\"className\": \"api20221120-27\"},{\"title\": \"第29讲\",\"className\": \"api20221120-28\"},{\"title\": \"第30讲\",\"className\": \"api20221120-29\"},{\"title\": \"第31讲\",\"className\": \"api20221120-30\"},{\"title\": \"第32讲\",\"className\": \"api20221120-31\"},{\"title\": \"第33讲\",\"className\": \"api20221120-32\"},{\"title\": \"第34讲\",\"className\": \"api20221120-33\"},{\"title\": \"第35讲\",\"className\": \"api20221120-34\"},{\"title\": \"第36讲\",\"className\": \"api20221120-35\"},{\"title\": \"第37讲\",\"className\": \"api20221120-36\"},{\"title\": \"第38讲\",\"className\": \"api20221120-37\"},{\"title\": \"第39讲\",\"className\": \"api20221120-38\"},{\"title\": \"第40讲\",\"className\": \"api20221120-39\"}]","step":"n1","video":"shttps://rspcourse.chinaedu.net/00856/474871_20210622_4/3F56DFCA56C14E1D8A591C995DE95A28/play.html?courseCode=00856&orgCode=010372&userId=BB54B0923B2379B5739A4AAA63930B8A&cid=f24c96bde4108b1d26936e882df2889c69767919&pos=528.8871&sourceType=2&termId=&courseStructure=null&cardBackGround=null&courseBackImageUrl=https://rspcourse.chinaedu.net/template/images/bg/&teachingVersion=1743393245742759946¢erId=2f5dc19bb4154f49ace7b3990a07b47c&learnSessionId=2f5dc19bb4154f49ace7b3990a07b47c&shardDataTableType=1&coursewareLogo=https://rsppicture.chinaedu.net//20220308/218969f4-23fa-4f32-ac4b-3d6931770d05.png&orgName=%E5%A4%A9%E6%B4%A5%E7%90%86%E5%B7%A5%E5%A4%A7%E5%AD%A6&useOrg=%E5%A4%A9%E6%B4%A5%E7%90%86%E5%B7%A5%E5%A4%A7%E5%AD%A6&makeOrg=%E4%B8%87%E6%96%B9&showStatement=true&colorMode=null&colorScheme=null&showFlag=0&showContent=%E8%AF%BE%E7%A8%8B%E7%89%88%E6%9C%ACV.2021-06-22%2000:00:00","video_speed":"n3"}},"enabled":true,"position":1,"uuid":"bdc65c66-481e-466a-b90a-7d56c26edb01","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICDlrabotbdQbHVz44CB5byY5oiQ5pWZ6IKy5oyC6K++6Ieq5Yqo6L+e57ut5pKt5pS+KOWkqea0peeQhuW3peWkp+WtpjIwMjLnuqflhoXpg6jkuJPnlKjor7fli7/kvKDmkq0pCi8vIEBuYW1lc3BhY2UgICAgaHR0cDovL3RhbXBlcm1vbmtleS5uZXQvCi8vIEB2ZXJzaW9uICAgICAgMS41LjAKLy8gQGRlc2NyaXB0aW9uICDoh6rliqjmjILmnLrmkq3mlL7or77nqIvvvIzmlK/mjIHnirbmgIHpnaLmnb/mi5bliqgv5pS26LW377yM5pSv5oyB5L+u5pS55YCN6YCfKDF+NXgpCi8vIEBhdXRob3IgICAgICAgcmFuZG9tICsg5L+u5pS5Ci8vIEBtYXRjaCAgICAgICAgKjovLyouY2hpbmFlZHUubmV0LyoKLy8gQG1hdGNoICAgICAgICAqOi8vKi5zY2NjaGluYS5uZXQvKgovLyBAbWF0Y2ggICAgICAgICo6Ly8qLmVkdS5jbi8qCi8vIEBtYXRjaCAgICAgICAgKjovLyouYm51ZGUuY24vKgovLyBAZ3JhbnQgICAgICAgIEdNX3NldFZhbHVlCi8vIEBncmFudCAgICAgICAgR01fZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICBHTV9kZWxldGVWYWx1ZQovLyBAcnVuLWF0ICAgICAgIGRvY3VtZW50LWVuZAovLyA9PS9Vc2VyU2NyaXB0PT0KCi8qKioqKioqKioqIOaXpeW/l+WKn+iDvSAqKioqKioqKioqLwpmdW5jdGlvbiBsb2dUb1BhbmVsKG1zZywgY29sb3IgPSAnd2hpdGUnKSB7CiAgY29uc3QgdGltZSA9IG5ldyBEYXRlKCkudG9Mb2NhbGVUaW1lU3RyaW5nKCk7CiAgaWYgKHdpbmRvdy50b3AgPT09IHdpbmRvdykgewogICAgY29uc3QgbG9nRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RtLWxvZycpOwogICAgaWYgKGxvZ0RpdikgewogICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICBzcGFuLnN0eWxlLmNvbG9yID0gY29sb3I7CiAgICAgIHNwYW4uaW5uZXJIVE1MID0gYFske3RpbWV9XSAke21zZ308YnI+YDsKICAgICAgbG9nRGl2LmFwcGVuZENoaWxkKHNwYW4pOwogICAgICBsb2dEaXYuc2Nyb2xsVG9wID0gbG9nRGl2LnNjcm9sbEhlaWdodDsKICAgIH0KICB9IGVsc2UgewogICAgd2luZG93LnRvcC5wb3N0TWVzc2FnZSh7IHR5cGU6ICdUTV9MT0cnLCBtc2csIGNvbG9yIH0sICcqJyk7CiAgfQogIGNvbnNvbGUubG9nKGBb6ISa5pys5pel5b+XXSAke21zZ31gKTsKfQoKaWYgKHdpbmRvdy50b3AgPT09IHdpbmRvdykgewogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGUpIHsKICAgIGlmIChlLmRhdGE/LnR5cGUgPT09ICdUTV9MT0cnKSBsb2dUb1BhbmVsKGUuZGF0YS5tc2csIGUuZGF0YS5jb2xvcik7CiAgfSk7Cn0KCi8qKioqKioqKioqIOeKtuaAgemdouadvyAqKioqKioqKioqLwppZiAod2luZG93LnRvcCA9PT0gd2luZG93KSB7CiAgZnVuY3Rpb24gY3JlYXRlU3RhdHVzUGFuZWwoKSB7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhbXBlcm1vbmtleS1zdGF0dXMtcGFuZWwnKSkgcmV0dXJuOwogICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIHBhbmVsLmlkID0gJ3RhbXBlcm1vbmtleS1zdGF0dXMtcGFuZWwnOwogICAgcGFuZWwuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnOwogICAgcGFuZWwuc3R5bGUucmlnaHQgPSAnMTBweCc7CiAgICBwYW5lbC5zdHlsZS50b3AgPSAnMTBweCc7CiAgICBwYW5lbC5zdHlsZS53aWR0aCA9ICczMDBweCc7CiAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSAnNDAwcHgnOwogICAgcGFuZWwuc3R5bGUub3ZlcmZsb3dZID0gJ2F1dG8nOwogICAgcGFuZWwuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JnYmEoMCwwLDAsMC43KSc7CiAgICBwYW5lbC5zdHlsZS5jb2xvciA9ICcjZmZmJzsKICAgIHBhbmVsLnN0eWxlLmZvbnRTaXplID0gJzEycHgnOwogICAgcGFuZWwuc3R5bGUucGFkZGluZyA9ICc1cHgnOwogICAgcGFuZWwuc3R5bGUuekluZGV4ID0gOTk5OTk7CiAgICBwYW5lbC5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnOHB4JzsKICAgIHBhbmVsLnN0eWxlLmZvbnRGYW1pbHkgPSAnbW9ub3NwYWNlJzsKICAgIHBhbmVsLnN0eWxlLmN1cnNvciA9ICdtb3ZlJzsKCiAgICBwYW5lbC5pbm5lckhUTUwgPSBgCiAgICAgIDxkaXYgaWQ9InRtLXBhbmVsLWhlYWRlciIgc3R5bGU9ImN1cnNvcjptb3ZlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7Ij4KICAgICAgICA8c3Ryb25nPuaMguacuuiEmuacrOeKtuaAgTwvc3Ryb25nPgogICAgICAgIDxidXR0b24gaWQ9InRtLXRvZ2dsZS1idG4iIHN0eWxlPSJiYWNrZ3JvdW5kOiM0NDQ7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtwYWRkaW5nOjJweCA1cHg7Ym9yZGVyLXJhZGl1czozcHg7Y3Vyc29yOnBvaW50ZXI7Ij7mlLbotbc8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9InRtLXBhbmVsLWJvZHkiPgogICAgICAgIDxkaXY+PHN0cm9uZz7ohJrmnKznirbmgIE6PC9zdHJvbmc+IDxzcGFuIGlkPSJ0bS1zY3JpcHQtc3RhdHVzIj7liJ3lp4vljJY8L3NwYW4+PC9kaXY+CiAgICAgICAgPGRpdj48c3Ryb25nPuW9k+WJjeivvueoizo8L3N0cm9uZz4gPHNwYW4gaWQ9InRtLWN1cnJlbnQtbGVzc29uIj4tPC9zcGFuPjwvZGl2PgogICAgICAgIDxkaXY+PHN0cm9uZz7op4bpopHlgI3pgJ86PC9zdHJvbmc+IDxzcGFuIGlkPSJ0bS12aWRlby1zcGVlZCI+LTwvc3Bhbj4KICAgICAgICAgIDxzZWxlY3QgaWQ9InRtLXNwZWVkLXNlbGVjdCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjVweDsiPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj4xeDwvb3B0aW9uPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyIj4yeDwvb3B0aW9uPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIzIiBzZWxlY3RlZD4zeDwvb3B0aW9uPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI0Ij40eDwvb3B0aW9uPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI1Ij41eDwvb3B0aW9uPgogICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGhyIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICM2NjYiLz4KICAgICAgICA8ZGl2PjxzdHJvbmc+5a6e5pe25pel5b+XOjwvc3Ryb25nPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InRtLWxvZyIgc3R5bGU9Im1heC1oZWlnaHQ6MjAwcHg7b3ZlcmZsb3cteTphdXRvOyI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocGFuZWwpOwoKICAgIC8qKioqKiDmi5bliqjlip/og70gKioqKiovCiAgICBsZXQgb2Zmc2V0WCwgb2Zmc2V0WSwgaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgY29uc3QgaGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RtLXBhbmVsLWhlYWRlcicpOwogICAgaGVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChlKSA9PiB7CiAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlOwogICAgICBvZmZzZXRYID0gZS5jbGllbnRYIC0gcGFuZWwub2Zmc2V0TGVmdDsKICAgICAgb2Zmc2V0WSA9IGUuY2xpZW50WSAtIHBhbmVsLm9mZnNldFRvcDsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW92ZVBhbmVsKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHN0b3BEcmFnKTsKICAgIH0pOwogICAgZnVuY3Rpb24gbW92ZVBhbmVsKGUpIHsKICAgICAgaWYgKCFpc0RyYWdnaW5nKSByZXR1cm47CiAgICAgIHBhbmVsLnN0eWxlLmxlZnQgPSBlLmNsaWVudFggLSBvZmZzZXRYICsgJ3B4JzsKICAgICAgcGFuZWwuc3R5bGUudG9wID0gZS5jbGllbnRZIC0gb2Zmc2V0WSArICdweCc7CiAgICAgIHBhbmVsLnN0eWxlLnJpZ2h0ID0gJ2F1dG8nOwogICAgfQogICAgZnVuY3Rpb24gc3RvcERyYWcoKSB7CiAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW92ZVBhbmVsKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHN0b3BEcmFnKTsKICAgIH0KCiAgICAvKioqKiog5pS26LW3L+WxleW8gOWKn+iDvSAqKioqKi8KICAgIGNvbnN0IHRvZ2dsZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0bS10b2dnbGUtYnRuJyk7CiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RtLXBhbmVsLWJvZHknKTsKICAgIHRvZ2dsZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgICAgaWYgKGJvZHkuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7CiAgICAgICAgYm9keS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICB0b2dnbGVCdG4uaW5uZXJUZXh0ID0gJ+aUtui1tyc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYm9keS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgIHRvZ2dsZUJ0bi5pbm5lclRleHQgPSAn5bGV5byAJzsKICAgICAgfQogICAgfSk7CgogICAgLyoqKioqIOWAjemAn+S/ruaUueWKn+iDvSAqKioqKi8KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0bS1zcGVlZC1zZWxlY3QnKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4gewogICAgICBjb25zdCBuZXdTcGVlZCA9IHBhcnNlRmxvYXQoZS50YXJnZXQudmFsdWUpOwogICAgICBHTV9zZXRWYWx1ZSgndmlkZW9fc3BlZWQnLCBuZXdTcGVlZCk7CiAgICAgIGNvbnN0IHZpZGVvID0gZmluZFZpZGVvUmVjdXJzaXZlKGRvY3VtZW50KTsKICAgICAgaWYgKHZpZGVvKSB7CiAgICAgICAgdmlkZW8ucGxheWJhY2tSYXRlID0gbmV3U3BlZWQ7CiAgICAgICAgbG9nVG9QYW5lbChg5YCN6YCf5bey5L+u5pS55Li6ICR7bmV3U3BlZWR9eGAsICdvcmFuZ2UnKTsKICAgICAgfQogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG0tdmlkZW8tc3BlZWQnKS5pbm5lclRleHQgPSBuZXdTcGVlZCArICd4JzsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gdXBkYXRlU3RhdHVzKHsgc3RhdHVzLCBsZXNzb24sIHNwZWVkIH0pIHsKICAgIGlmIChzdGF0dXMpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0bS1zY3JpcHQtc3RhdHVzJykuaW5uZXJUZXh0ID0gc3RhdHVzOwogICAgaWYgKGxlc3NvbikgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RtLWN1cnJlbnQtbGVzc29uJykuaW5uZXJUZXh0ID0gbGVzc29uOwogICAgaWYgKHNwZWVkICE9PSB1bmRlZmluZWQpCiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0bS12aWRlby1zcGVlZCcpLmlubmVyVGV4dCA9IHNwZWVkICsgJ3gnOwogIH0KfQoKLyoqKioqKioqKiog6KeG6aKR6YCS5b2S5p+l5om+ICoqKioqKioqKiovCmZ1bmN0aW9uIGZpbmRWaWRlb1JlY3Vyc2l2ZShkb2MgPSBkb2N1bWVudCkgewogIGxldCB2aWRlbyA9IGRvYy5xdWVyeVNlbGVjdG9yKCd2aWRlbycpOwogIGlmICh2aWRlbykgewogICAgaWYgKEdNX2dldFZhbHVlKCd2aWRlb19zcGVlZCcpKSB7CiAgICAgIHZpZGVvLnBsYXliYWNrUmF0ZSA9IEdNX2dldFZhbHVlKCd2aWRlb19zcGVlZCcpOwogICAgfQogICAgcmV0dXJuIHZpZGVvOwogIH0KICBjb25zdCBpZnJhbWVzID0gZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lmcmFtZScpOwogIGZvciAobGV0IGYgb2YgaWZyYW1lcykgewogICAgdHJ5IHsKICAgICAgY29uc3QgdiA9IGZpbmRWaWRlb1JlY3Vyc2l2ZShmLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpOwogICAgICBpZiAodikgcmV0dXJuIHY7CiAgICB9IGNhdGNoIChlKSB7fQogIH0KICByZXR1cm4gbnVsbDsKfQoKLyoqKioqKioqKiog6K++56iL6KeE5YiZICoqKioqKioqKiovCmNvbnN0IGxlc3Npb25SdWxlcyA9IHsKICAncGxheS5odG1sJzogeyBzZWxlY3RvcjogWycucGFnZS1zaWRlYmFyIGxpPmE+c3BhbltjbGFzc149InRpdGxlIl0nXSB9LAogICdzdHVkeS5kbyc6IHsKICAgIGJlZm9yZUZ1bjogKCkgPT4gewogICAgICBsb2dUb1BhbmVsKCdb5rWB56iLXSBzdHVkeS5kbyDpobXpnaLmo4DmtYvvvJrlsJ3or5XlsZXlvIDor77nqIvnm67lvZUnLCAnZ3JlZW4nKTsKICAgICAgY29uc3QgY2F0YWxvZ0RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXRhbG9nRGl2Jyk7CiAgICAgIGlmIChjYXRhbG9nRGl2LmNoaWxkRWxlbWVudENvdW50ID09PSAwKSB7CiAgICAgICAgY29uc3QgY2F0YWxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXRhbG9nQScpOwogICAgICAgIGNhdGFsb2cgJiYgY2F0YWxvZy5jbGFzc05hbWUuaW5kZXhPZignQ3VyJykgPT09IC0xICYmIGNhdGFsb2cuY2xpY2soKTsKICAgICAgfQogICAgfSwKICAgIHNlbGVjdG9yOiBbCiAgICAgICcjY2F0YWxvZ0RpdiBzcGFuW29uY2xpY2tdJywKICAgICAgIiNjYXRhbG9nRGl2IHNwYW5bY2xhc3NePSd0aXQnXSIsCiAgICAgICcjY2F0YWxvZ0RpdiBsaSBoM1tvbmNsaWNrXScsCiAgICBdLAogIH0sCiAgJ21wNF92aWRlb19pbmRleC5odG1sJzogeyBzZWxlY3RvcjogWycudWktZm9sZGVyIC51aS1sZWFmIHNwYW4nXSB9LAogICdpbmRleC5odG1sJzogeyBzZWxlY3RvcjogWyIuY3djT3V0bGluZSBzcGFuW2lkJD0nX3NwYW4nXSJdIH0sCn07Cgpjb25zdCBjdXJyZW50UnVsZXMgPSB7CiAgJ3ZpZGVvbGVhcm5pbmcuaHRtbCc6IHsgc2VsZWN0b3I6IFsnLnBhZ2Utc2lkZWJhciBsaS5hY3RpdmU+YT5zcGFuJ10gfSwKICAncGxheS5odG1sJzogeyBzZWxlY3RvcjogWycucGFnZS1zaWRlYmFyIGxpLmFjdGl2ZT5hPnNwYW4nXSB9LAogICdtcDRfdmlkZW9faW5kZXguaHRtbCc6IHsKICAgIHNlbGVjdG9yOiBbJy51aS1mb2xkZXIgLnVpLWxlYWYudWktc2VsZWN0ZWQgc3BhbiddLAogIH0sCiAgJ3N0dWR5LmRvJzogewogICAgc2VsZWN0b3I6IFsKICAgICAgJyNjYXRhbG9nRGl2IC5jdXIgc3BhbicsCiAgICAgICIuc3R1ZHktdmlkZW8tdGl0bGUgc3BhbltjbGFzcyQ9J3RpdGxlJ10iLAogICAgICAnI2NhdGFsb2dEaXYgbGkuY3VyIGgzW29uY2xpY2tdJywKICAgIF0sCiAgfSwKICAnaW5kZXguaHRtbCc6IHsKICAgIHNlbGVjdG9yOiBbIi5jd2NPdXRsaW5lIC5jdXJTZWxlY3RlZE5vZGUgc3BhbltpZCQ9J19zcGFuJ10iXSwKICB9LAp9OwoKY29uc3Qgbm9OZWVkQXV0b1BsYXlSdWxlcyA9IFsnbXA0X3ZpZGVvX2luZGV4J107CgpmdW5jdGlvbiBpc0luTm9OZWVkQXV0b1BsYXkoKSB7CiAgcmV0dXJuIG5vTmVlZEF1dG9QbGF5UnVsZXMuZmluZCgoZSkgPT4gZG9jdW1lbnQuVVJMLmluZGV4T2YoZSkgPiAwKTsKfQoKZnVuY3Rpb24gdXJsSW4ocnVsZXMpIHsKICBmb3IgKGxldCBrZXkgaW4gcnVsZXMpIGlmIChkb2N1bWVudC5VUkwuaW5kZXhPZihrZXkpID4gMCkgcmV0dXJuIHRydWU7CiAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBnZXREYXRhRm9yUnVsZXMocnVsZXMpIHsKICBmb3IgKGxldCBrZXkgaW4gcnVsZXMpIHsKICAgIGlmIChkb2N1bWVudC5VUkwuaW5kZXhPZihrZXkpID4gMCkgewogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJ1bGVzW2tleV0uc2VsZWN0b3IubGVuZ3RoOyBpKyspIHsKICAgICAgICBydWxlc1trZXldLmJlZm9yZUZ1biAmJiBydWxlc1trZXldLmJlZm9yZUZ1bihydWxlc1trZXldLnNlbGVjdG9yW2ldKTsKICAgICAgICBjb25zdCByZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHJ1bGVzW2tleV0uc2VsZWN0b3JbaV0pOwogICAgICAgIHJ1bGVzW2tleV0uYWZ0ZXJGdW4gJiYgcnVsZXNba2V5XS5hZnRlckZ1bihydWxlc1trZXldLnNlbGVjdG9yW2ldLCByZXMpOwogICAgICAgIGlmIChyZXMubGVuZ3RoID4gMCkgcmV0dXJuIHJlczsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gbnVsbDsKfQoKLyoqKioqKioqKiog6I635Y+W6K++56iL5L+h5oGvICoqKioqKioqKiovCmZ1bmN0aW9uIGdldEN1cnJlbnRMZXNzaW9uKCkgewogIGNvbnN0IGxhc3RMaSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wYWdlLWJyZWFkY3J1bWIuYnJlYWRjcnVtYi5jbGVhcmZpeCcpPy5sYXN0RWxlbWVudENoaWxkOwogIGNvbnN0IGxlc3Npb25zID0gR01fZ2V0VmFsdWUoJ2xlc3Npb25zJyk7CiAgaWYgKGxhc3RMaSAmJiBsZXNzaW9ucykgewogICAgY29uc3QgY3VycmVudExlc3Npb24gPSBsYXN0TGkudGl0bGU7CiAgICBHTV9zZXRWYWx1ZSgnY3VycmVudCcsIGN1cnJlbnRMZXNzaW9uKTsKICAgIEdNX3NldFZhbHVlKCdsYXN0X2N1cnJlbnQnLCBjdXJyZW50TGVzc2lvbik7CiAgICBsb2dUb1BhbmVsKGDlvZPliY3or77nqIvvvJoke2N1cnJlbnRMZXNzaW9ufWAsICdncmVlbicpOwogICAgY29uc3QgaW5kZXggPSBsZXNzaW9ucy5maW5kSW5kZXgoKGUpID0+IGUudGl0bGUgPT09IGN1cnJlbnRMZXNzaW9uKTsKICAgIGlmIChpbmRleCA9PT0gLTEgfHwgaW5kZXggPT09IGxlc3Npb25zLmxlbmd0aCAtIDEpCiAgICAgIGxvZ1RvUGFuZWwoJ+W9k+WJjeivvueoi+W3sue7k+adnycsICdncmVlbicpOwogICAgZWxzZSBsb2dUb1BhbmVsKGDkuIvkuIDoioLor77nqIvvvJoke2xlc3Npb25zW2luZGV4ICsgMV0udGl0bGV9YCwgJ2dyZWVuJyk7CiAgfQp9CgpmdW5jdGlvbiBnZXRMZXNzaW9uc0luZm8oKSB7CiAgY29uc3QgYXJyID0gZ2V0RGF0YUZvclJ1bGVzKGxlc3Npb25SdWxlcyk7CiAgaWYgKGFycikgewogICAgY29uc3QgbGVzc2lvbnMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IGNsYXNzTmFtZSA9ICdhcGkyMDIyMTEyMC0nICsgaTsKICAgICAgaWYgKGFycltpXS5jbGFzc05hbWUuaW5kZXhPZihjbGFzc05hbWUpID09PSAtMSkKICAgICAgICBhcnJbaV0uY2xhc3NOYW1lICs9ICcgJyArIGNsYXNzTmFtZTsKICAgICAgbGVzc2lvbnMucHVzaCh7IHRpdGxlOiBhcnJbaV0uaW5uZXJUZXh0LCBjbGFzc05hbWUgfSk7CiAgICB9CiAgICBHTV9zZXRWYWx1ZSgnbGVzc2lvbnMnLCBsZXNzaW9ucyk7CiAgICBsb2dUb1BhbmVsKGDlhbHmo4DmtYvliLDor77nqIvmlbDvvJoke2xlc3Npb25zLmxlbmd0aH1gLCAnZ3JlZW4nKTsKICB9Cn0KCi8qKioqKioqKioqIOinhumikeaSreaUviAqKioqKioqKioqLwpsZXQgZmluZFZpZGVvQ291bnQgPSAwOwpjb25zdCBmaW5kVmlkZW9NYXhDb3VudCA9IDM7CgpmdW5jdGlvbiBnZXRWaWRlbygpIHsKICBjb25zdCBzdGF0dXMgPSBHTV9nZXRWYWx1ZSgncGxheV9lbmQnKTsKICBpZiAoR01fZ2V0VmFsdWUoJ3ZpZGVvJykgfHwgc3RhdHVzKSByZXR1cm47CiAgaWYgKGZpbmRWaWRlb0NvdW50ID49IGZpbmRWaWRlb01heENvdW50KSB7CiAgICBpZiAoc3RhdHVzICE9PSAnbm90IGZvdW5kJykgewogICAgICBHTV9zZXRWYWx1ZSgncGxheV9lbmQnLCAnbm90IGZvdW5kJyk7CiAgICAgIGxvZ1RvUGFuZWwoJ+inhumikeacquaJvuWIsO+8jOe7k+adn+afpeaJvicsICdncmVlbicpOwogICAgICBmaW5kVmlkZW9Db3VudCA9IDA7CiAgICB9CiAgICByZXR1cm47CiAgfQogIGNvbnN0IHZpZGVvID0gZmluZFZpZGVvUmVjdXJzaXZlKCk7CiAgaWYgKHZpZGVvKSB7CiAgICBHTV9zZXRWYWx1ZSgndmlkZW8nLCBkb2N1bWVudC5VUkwpOwogICAgbG9nVG9QYW5lbCgn5qOA5rWL5Yiw6KeG6aKR5YWD57Sg77yM5YeG5aSH5pKt5pS+5qOA5rWLJywgJ2dyZWVuJyk7CiAgICBzZXRUaW1lb3V0KHBsYXlDaGVjaywgNTAwMCk7CiAgfSBlbHNlIHsKICAgIGxvZ1RvUGFuZWwoJ+acquaJvuWIsOinhumikeWFg+e0oO+8jOmHjeivleS4rS4uLicsICdyZWQnKTsKICAgIGZpbmRWaWRlb0NvdW50Kys7CiAgfQp9CgpmdW5jdGlvbiBwbGF5Q2hlY2soKSB7CiAgaWYgKEdNX2dldFZhbHVlKCdwbGF5X2VuZCcpKSB7CiAgICBsb2dUb1BhbmVsKCfmkq3mlL7mtYHnqIvlt7Lnu5PmnZ/vvIzpgIDlh7rmo4DmtYsnLCAnZ3JlZW4nKTsKICAgIHJldHVybjsKICB9CiAgY29uc3QgdmlkZW8gPSBmaW5kVmlkZW9SZWN1cnNpdmUoKTsKICBpZiAodmlkZW8pIHsKICAgIHZpZGVvLm11dGVkID0gdHJ1ZTsKICAgIHZpZGVvLnBsYXliYWNrUmF0ZSA9IEdNX2dldFZhbHVlKCd2aWRlb19zcGVlZCcpIHx8IDM7CiAgICBjb25zdCBjdXJyZW50VGltZSA9IHZpZGVvLmN1cnJlbnRUaW1lLnRvRml4ZWQoMSk7CiAgICBjb25zdCB0b3RhbFRpbWUgPSB2aWRlby5kdXJhdGlvbi50b0ZpeGVkKDEpOwogICAgbG9nVG9QYW5lbCgKICAgICAgYOaSreaUvui/m+W6pu+8miR7Y3VycmVudFRpbWV9LyR7dG90YWxUaW1lfSAoJHsoKGN1cnJlbnRUaW1lIC8gdG90YWxUaW1lKSAqIDEwMCkudG9GaXhlZCgxKX0lKWAKICAgICk7CiAgICBpZiAodmlkZW8uZW5kZWQgfHwgdG90YWxUaW1lIC0gY3VycmVudFRpbWUgPCAyMCAqIHZpZGVvLnBsYXliYWNrUmF0ZSkgewogICAgICBsb2dUb1BhbmVsKCfop4bpopHljbPlsIbnu5PmnZ/vvIzmoIforrDlrozmiJAnLCAnZ3JlZW4nKTsKICAgICAgdmlkZW8ub25wYXVzZSA9IG51bGw7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIEdNX3NldFZhbHVlKCdwbGF5X2VuZCcsICdvdmVyJyk7CiAgICAgIH0sIDUwMDApOwogICAgfSBlbHNlIHsKICAgICAgaWYgKHZpZGVvLnBhdXNlZCkgewogICAgICAgIGxvZ1RvUGFuZWwoJ+inhumikeiiq+aaguWBnO+8jOW8uuWItue7p+e7reaSreaUvicsICdyZWQnKTsKICAgICAgICB2aWRlby5wbGF5KCk7CiAgICAgICAgdmlkZW8ub25wYXVzZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGZpbmRWaWRlb1JlY3Vyc2l2ZSgpPy5wbGF5KCk7CiAgICAgICAgfTsKICAgICAgfQogICAgICBzZXRUaW1lb3V0KHBsYXlDaGVjaywgNTAwMCk7CiAgICB9CiAgfSBlbHNlIGxvZ1RvUGFuZWwoJ+acquaJvuWIsOinhumikeWFg+e0oCcsICdyZWQnKTsKfQoKLyoqKioqKioqKiog5by556qX5YWz6ZetICoqKioqKioqKiovCmZ1bmN0aW9uIHBvcHVwQ2xvc2UoKSB7CiAgY29uc3QgdGlwcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy53aW4tY29udGVudCcpOwogIGlmICh0aXBzICYmIHRpcHMuaW5uZXJUZXh0LmluZGV4T2YoJ+e7p+e7reWtpuS5oCcpID4gMCkgewogICAgbG9nVG9QYW5lbCgn5qOA5rWL5Yiw57un57ut5a2m5Lmg5o+Q56S677yM6Ieq5Yqo5YWz6ZetJywgJ29yYW5nZScpOwogICAgY29uc3QgYnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLndpbi1jb250ZW50IC5jbG9zZS13aW4tYnQnKTsKICAgIGJ0biAmJiBidG4uY2xpY2soKTsKICB9CiAgY29uc3QgcG9wID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3BvcCcpOwogIGlmIChwb3ApIHsKICAgIGlmIChwb3Auc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSByZXR1cm47CiAgICBsb2dUb1BhbmVsKCflhbPpl63lhbblroPlvLnnqpcnLCAnb3JhbmdlJyk7CiAgICBwb3AucXVlcnlTZWxlY3RvcignLnBvcF9jbG9zZScpPy5jbGljaygpOwogIH0KfQoKLyoqKioqKioqKiog6ISa5pys5Yid5aeL5YyWICoqKioqKioqKiovCmZ1bmN0aW9uIGluaXQoKSB7CiAgbG9nVG9QYW5lbCgn5riF55CG57yT5a2Y5pWw5o2uJywgJ3B1cnBsZScpOwogIEdNX2RlbGV0ZVZhbHVlKCdwbGF5X2VuZCcpOwogIEdNX2RlbGV0ZVZhbHVlKCd2aWRlbycpOwogIEdNX2RlbGV0ZVZhbHVlKCdjdXJyZW50Jyk7CiAgR01fZGVsZXRlVmFsdWUoJ2xhc3RfY3VycmVudCcpOwogIEdNX2RlbGV0ZVZhbHVlKCdsZXNzaW9ucycpOwp9CgpmdW5jdGlvbiBpbml0TGVzc2lvbnMoKSB7CiAgbG9nVG9QYW5lbCgn5Yid5aeL5YyW6K++56iL5L+h5oGvJywgJ3B1cnBsZScpOwogIEdNX3NldFZhbHVlKCdzdGVwJywgMSk7CiAgR01fc2V0VmFsdWUoJ2xhc3RfcG9zJywgMCk7CiAgcmV0dXJuIHRydWU7Cn0KCi8qKioqKioqKioqIOiHquWKqOaSreaUvuS4i+S4gOiKgiAqKioqKioqKioqLwpmdW5jdGlvbiBuZXh0Q2hlY2soKSB7CiAgY29uc3Qgc3RhdHVzID0gR01fZ2V0VmFsdWUoJ3BsYXlfZW5kJyk7CiAgY29uc3QgbGVzc2lvbnMgPSBHTV9nZXRWYWx1ZSgnbGVzc2lvbnMnKTsKICBpZiAoc3RhdHVzICYmIGxlc3Npb25zICYmIGxlc3Npb25zLmxlbmd0aCkgewogICAgbGV0IGN1cnJlbnRUZXh0ID0gR01fZ2V0VmFsdWUoJ2N1cnJlbnQnKTsKICAgIGNvbnN0IGxhc3RDdXJyZW50ID0gR01fZ2V0VmFsdWUoJ2xhc3RfY3VycmVudCcpOwogICAgaWYgKCFsYXN0Q3VycmVudCB8fCAoY3VycmVudFRleHQgJiYgbGFzdEN1cnJlbnQgIT09IGN1cnJlbnRUZXh0KSkgewogICAgICBHTV9zZXRWYWx1ZSgnbGFzdF9jdXJyZW50JywgY3VycmVudFRleHQpOwogICAgfSBlbHNlIGN1cnJlbnRUZXh0ID0gbGFzdEN1cnJlbnQ7CgogICAgbGV0IGluZGV4ID0gR01fZ2V0VmFsdWUoJ2xhc3RfcG9zJykgPz8gMDsKICAgIGNvbnN0IG5ld0luZGV4ID0gbGVzc2lvbnMuZmluZEluZGV4KChlKSA9PiBlLnRpdGxlID09PSBjdXJyZW50VGV4dCk7CiAgICBpZiAobmV3SW5kZXggIT09IC0xICYmIG5ld0luZGV4ID4gaW5kZXgpIGluZGV4ID0gbmV3SW5kZXg7CiAgICBpZiAoc3RhdHVzID09PSAnbm90IGZvdW5kJyAmJiAhY3VycmVudFRleHQpIGluZGV4ID0gMDsKICAgIGVsc2UgaWYgKGlzSW5Ob05lZWRBdXRvUGxheSgpKSByZXR1cm47CiAgICBlbHNlIGluZGV4ICs9IDE7CgogICAgR01fc2V0VmFsdWUoJ2xhc3RfcG9zJywgaW5kZXgpOwoKICAgIGlmIChpbmRleCA8IGxlc3Npb25zLmxlbmd0aCkgewogICAgICBjb25zdCBuZXh0TGVzc2lvbiA9IGxlc3Npb25zW2luZGV4XS50aXRsZTsKICAgICAgbG9nVG9QYW5lbChg5b2T5YmN6K++56iL77yaJHtjdXJyZW50VGV4dH1gLCAnZ3JlZW4nKTsKICAgICAgbG9nVG9QYW5lbChg5LiL5LiA6IqC6K++56iL77yaJHtuZXh0TGVzc2lvbn1gLCAnZ3JlZW4nKTsKICAgICAgR01fZGVsZXRlVmFsdWUoJ3BsYXlfZW5kJyk7CiAgICAgIEdNX2RlbGV0ZVZhbHVlKCd2aWRlbycpOwogICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuJyArIGxlc3Npb25zW2luZGV4XS5jbGFzc05hbWUpPy5jbGljaygpOwogICAgfSBlbHNlIHsKICAgICAgbG9nVG9QYW5lbCgn5omA5pyJ6K++56iL5pKt5pS+5a6M5oiQJywgJ2dyZWVuJyk7CiAgICAgIGFsZXJ0KCfor77nqIvmkq3mlL7nu5PmnZ8nKTsKICAgICAgcmV0dXJuOwogICAgfQogIH0KICBzZXRUaW1lb3V0KG5leHRDaGVjaywgNTAwMCk7Cn0KCi8qKioqKioqKioqIOi1hOa6kOiOt+WPliAqKioqKioqKioqLwpmdW5jdGlvbiBnZXRSZXNvdXJjZSgpIHsKICBnZXRDdXJyZW50TGVzc2lvbigpOwogIGdldExlc3Npb25zSW5mbygpOwp9CgovKioqKioqKioqKiDlkK/liqjohJrmnKwgKioqKioqKioqKi8KZnVuY3Rpb24gd29yaygpIHsKICBsb2dUb1BhbmVsKCfmjILmnLrohJrmnKzlvIDlp4vov5DooYwnLCAncHVycGxlJyk7CiAgaW5pdCgpOwogIGlmICh3aW5kb3cudG9wID09PSB3aW5kb3cpIHsKICAgIGNyZWF0ZVN0YXR1c1BhbmVsKCk7CiAgICB1cGRhdGVTdGF0dXMoeyBzdGF0dXM6ICfov5DooYzkuK0nIH0pOwogIH0KCiAgc2V0VGltZW91dCgoKSA9PiB7CiAgICBpZiAodXJsSW4obGVzc2lvblJ1bGVzKSkgewogICAgICBsb2dUb1BhbmVsKCfov5vlhaXor77nqIvpobXpnaLvvIzlvIDlp4vmo4DmtYvor77nqIvnm67lvZUnLCAnZ3JlZW4nKTsKICAgICAgaW5pdExlc3Npb25zKCk7CiAgICAgIG5leHRDaGVjaygpOwogICAgfQogIH0sIDUwMDApOwoKICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICB1cmxJbihsZXNzaW9uUnVsZXMpICYmIGdldFZpZGVvKCk7CiAgfSwgMTAwMDApOwogIHNldEludGVydmFsKCgpID0+IHsKICAgIGdldFJlc291cmNlKCk7CiAgICBwb3B1cENsb3NlKCk7CiAgfSwgMzAwMCk7CgogIHNldEludGVydmFsKAogICAgKCkgPT4gewogICAgICBpZiAoZG9jdW1lbnQuVVJMLmluZGV4T2YoJ3NjY2NoaW5hLm5ldC9zdHVkZW50LycpID49IDApIHsKICAgICAgICBsb2dUb1BhbmVsKCflrprml7bliLfmlrDpobXpnaLvvIzpmLLmraLmjonnur8nLCAncHVycGxlJyk7CiAgICAgICAgc2V0VGltZW91dCgKICAgICAgICAgICgpID0+IHsKICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICB9LAogICAgICAgICAgKG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpICsgMTAwKSAqIDEyMzQsCiAgICAgICAgKTsKICAgICAgfQogICAgfSwKICAgIDYwICogMTUgKiAxMDAwLAogICk7CgogIC8vIOeKtuaAgemdouadv+abtOaWsAogIGlmICh3aW5kb3cudG9wID09PSB3aW5kb3cpIHsKICAgIHNldEludGVydmFsKCgpID0+IHsKICAgICAgY29uc3QgY3VycmVudCA9IEdNX2dldFZhbHVlKCdjdXJyZW50JykgfHwgJy0nOwogICAgICBjb25zdCBzcGVlZCA9IEdNX2dldFZhbHVlKCd2aWRlb19zcGVlZCcpIHx8IDM7CiAgICAgIHVwZGF0ZVN0YXR1cyh7IGxlc3NvbjogY3VycmVudCwgc3BlZWQgfSk7CiAgICB9LCAyMDAwKTsKICB9Cn0KCihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwogIHdvcmsoKTsKfSkoKTsK"}]}