Skip to contentLy8gPGJsb2NrOmdlbmVyYXRlOjI+CmZ1bmN0aW9uIGdlbmVyYXRlRGF0YSgpIHsKICBjb25zdCBhZGFwdGVyID0gbmV3IGhlbHBlcnMuX2FkYXB0ZXJzLl9kYXRlKCk7CiAgY29uc3QgZGF0YSA9IFtdOwogIGNvbnN0IGVuZCA9IGFkYXB0ZXIuc3RhcnRPZihuZXcgRGF0ZSgpLCAnaXNvV2VlaycsIDEpOwogIGNvbnN0IHN0YXJ0WSA9IGFkYXB0ZXIuc3RhcnRPZihhZGFwdGVyLmFkZChlbmQsIC0xMCwgJ3llYXInKSwgJ3llYXInKTsKICBjb25zdCBmb3VydGggPSBhZGFwdGVyLmFkZChzdGFydFksIDMsICdkYXknKTsKICBjb25zdCBzdGFydCA9IGFkYXB0ZXIuc3RhcnRPZihmb3VydGgsICdpc29XZWVrJywgMSk7CiAgZm9yIChsZXQgZHQgPSBzdGFydDsgZHQgPCBlbmQ7IGR0ID0gYWRhcHRlci5hZGQoZHQsIDEsICd3ZWVrJykpIHsKICAgIGNvbnN0IGlzb1llYXIgPSBhZGFwdGVyLmZvcm1hdChkdCwgJ1JSUlInKTsKICAgIGNvbnN0IGlzbyA9IGFkYXB0ZXIuZm9ybWF0KGR0LCAnUlJSUi1NTS1kZCcpOwogICAgY29uc3Qgd2Vla01vbnRocyA9IFtdOwogICAgY29uc3QgbW9uZGF5ID0gYWRhcHRlci5zdGFydE9mKGR0LCAnaXNvV2VlaycsIDEpOwogICAgY29uc3Qgc3VuZGF5ID0gYWRhcHRlci5hZGQoZHQsIDcsICdkYXknKTsKICAgIGNvbnN0IGlzb1dlZWsgPSArYWRhcHRlci5mb3JtYXQoZHQsICdJJyk7CiAgICBjb25zdCBtb250aEluZGV4ID0gaXNvV2VlayA9PT0gMSA/IDAgOiBtb25kYXkuZ2V0TW9udGgoKTsKICAgIGNvbnN0IHN0YXJ0V2Vla09mTW9udGggPSArYWRhcHRlci5mb3JtYXQoYWRhcHRlci5zdGFydE9mKGR0LCAnbW9udGgnKSwgJ0knKTsKICAgIGNvbnN0IHdlZWtPZk1vbnRoID0gc3RhcnRXZWVrT2ZNb250aCA+IGlzb1dlZWsgPyBpc29XZWVrIDogaXNvV2VlayAtIHN0YXJ0V2Vla09mTW9udGggKyAxOwogICAgY29uc3QgeCA9IG1vbnRoSW5kZXggKiA2ICsgd2Vla09mTW9udGg7CiAgICBkYXRhLnB1c2goewogICAgICB4LAogICAgICB5OiBpc29ZZWFyLAogICAgICBkOiBpc28sCiAgICAgIHc6IGFkYXB0ZXIuZm9ybWF0KG1vbmRheSwgJ3l5eXktTU0tZGQnKSArICcgLSAnICsgYWRhcHRlci5mb3JtYXQoc3VuZGF5LCAneXl5eS1NTS1kZCcpLAogICAgICB2OiBNYXRoLnJhbmRvbSgpICogNTAsCiAgICAgIGl3OiBpc29XZWVrLAogICAgfSk7CiAgfQogIHdpbmRvdy5kYXRhID0gZGF0YTsKICByZXR1cm4gZGF0YTsKfQovLyA8L2Jsb2NrOmdlbmVyYXRlPgoKLy8gPGJsb2NrOmRhdGE6MT4KY29uc3QgZGF0YSA9IHsKICBkYXRhc2V0czogW3sKICAgIGRhdGE6IGdlbmVyYXRlRGF0YSgpCiAgfV0KfTsKLy8gPC9ibG9jazpkYXRhPgoKLy8gPGJsb2NrOmNvbmZpZzowPgpjb25zdCBtb250aHMgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ107CmNvbnN0IGNvbmZpZyA9IHsKICB0eXBlOiAnbWF0cml4JywKICBkYXRhOiBkYXRhLAogIG9wdGlvbnM6IHsKICAgIGJhY2tncm91bmRDb2xvcih7cmF3fSkgewogICAgICBjb25zdCBhbHBoYSA9ICgxMCArIHJhdy52KSAvIDYwOwogICAgICByZXR1cm4gaGVscGVycy5jb2xvcignZ3JlZW4nKS5hbHBoYShhbHBoYSkucmdiU3RyaW5nKCk7CiAgICB9LAogICAgYm9yZGVyQ29sb3Ioe3Jhd30pIHsKICAgICAgY29uc3QgYWxwaGEgPSAoMTAgKyByYXcudikgLyA2MDsKICAgICAgcmV0dXJuIGhlbHBlcnMuY29sb3IoJ2dyZWVuJykuYWxwaGEoYWxwaGEpLmRhcmtlbigwLjMpLnJnYlN0cmluZygpOwogICAgfSwKICAgIGJvcmRlcldpZHRoOiAxLAogICAgaG92ZXJCYWNrZ3JvdW5kQ29sb3I6ICd5ZWxsb3cnLAogICAgaG92ZXJCb3JkZXJDb2xvcjogJ3llbGxvd2dyZWVuJywKICAgIHdpZHRoOiAxMCwKICAgIGhlaWdodDogKHtjaGFydH0pID0+KGNoYXJ0LmNoYXJ0QXJlYSB8fCB7fSkuaGVpZ2h0IC8gY2hhcnQuc2NhbGVzLnkudGlja3MubGVuZ3RoIC0gMywKICAgIHBsdWdpbnM6IHsKICAgICAgbGVnZW5kOiBmYWxzZSwKICAgICAgdG9vbHRpcDogewogICAgICAgIGRpc3BsYXlDb2xvcnM6IGZhbHNlLAogICAgICAgIGNhbGxiYWNrczogewogICAgICAgICAgdGl0bGUoKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICAgIH0sCiAgICAgICAgICBsYWJlbCh7cmF3fSkgewogICAgICAgICAgICByZXR1cm4gWyd3OiAnICsgcmF3LncsICdpc29XZWVrOiAnICsgcmF3Lml3LCAndjogJyArIHJhdy52LnRvRml4ZWQoMildOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgIH0sCiAgICBzY2FsZXM6IHsKICAgICAgeTogewogICAgICAgIHR5cGU6ICd0aW1lJywKICAgICAgICBsZWZ0OiAnbGVmdCcsCiAgICAgICAgb2Zmc2V0OiB0cnVlLAogICAgICAgIHRpbWU6IHsKICAgICAgICAgIHVuaXQ6ICd5ZWFyJywKICAgICAgICAgIHJvdW5kOiAneWVhcicsCiAgICAgICAgICBkaXNwbGF5Rm9ybWF0czogewogICAgICAgICAgICBwYXJzaW5nOiAneXl5eScsCiAgICAgICAgICAgIHllYXI6ICdSJyAvLyBJU08gd2Vlay1udW1iZXJpbmcgeWVhcgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdGlja3M6IHsKICAgICAgICAgIG1heFJvdGF0aW9uOiAwLAogICAgICAgICAgYXV0b1NraXA6IGZhbHNlLAogICAgICAgICAgcGFkZGluZzogMQogICAgICAgIH0sCiAgICAgICAgZ3JpZDogewogICAgICAgICAgZGlzcGxheTogZmFsc2UsCiAgICAgICAgICBkcmF3Qm9yZGVyOiBmYWxzZSwKICAgICAgICAgIHRpY2tMZW5ndGg6IDAsCiAgICAgICAgfSwKICAgICAgICB0aXRsZTogewogICAgICAgICAgZGlzcGxheTogdHJ1ZSwKICAgICAgICAgIGZvbnQ6IHtzaXplOiAxNSwgd2VpZ3RoOiAnYm9sZCd9LAogICAgICAgICAgdGV4dDogJ1llYXInLAogICAgICAgICAgcGFkZGluZzogMAogICAgICAgIH0KICAgICAgfSwKICAgICAgeDogewogICAgICAgIHR5cGU6ICdsaW5lYXInLAogICAgICAgIHBvc2l0aW9uOiAndG9wJywKICAgICAgICBvZmZzZXQ6IHRydWUsCiAgICAgICAgbWluOiAxLAogICAgICAgIG1heDogNzIsCiAgICAgICAgcmV2ZXJzZTogZmFsc2UsCiAgICAgICAgdGlja3M6IHsKICAgICAgICAgIGF1dG9Ta2lwOiBmYWxzZSwKICAgICAgICAgIGNhbGxiYWNrOiAodmFsLCBpbmRleCkgPT4gdmFsICUgNiA9PT0gMyA/IG1vbnRoc1sodmFsIC0gMykgLyA2XSA6ICcnLAogICAgICAgICAgbWF4VGlja3NMaW1pdDogMTAwLAogICAgICAgICAgc3RlcFNpemU6IDEsCiAgICAgICAgICBwYWRkaW5nOiAwLAogICAgICAgICAgbWF4Um90YXRpb246IDAsCiAgICAgICAgfSwKICAgICAgICBncmlkOiB7CiAgICAgICAgICBkaXNwbGF5OiBmYWxzZSwKICAgICAgICAgIGRyYXdCb3JkZXI6IGZhbHNlLAogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGxheW91dDogewogICAgICBwYWRkaW5nOiB7CiAgICAgICAgdG9wOiAxMCwKICAgICAgfQogICAgfQogIH0KfTsKLy8gPC9ibG9jazpjb25maWc+Cgpjb25zdCBhY3Rpb25zID0gW107Cgptb2R1bGUuZXhwb3J0cyA9IHsKICBhY3Rpb25zLAogIGNvbmZpZywKfTs=