PD9waHAKaWYgKCFkZWZpbmVkKCdBQlNQQVRIJykpIHsKICAgIGV4aXQ7Cn0KCmRlZmluZSgnWllfVEhFTUVfVkVSU0lPTicsICcxLjEuMCcpOwoKZnVuY3Rpb24genlfdGhlbWVfc2V0dXAoKSB7CiAgICBhZGRfdGhlbWVfc3VwcG9ydCgndGl0bGUtdGFnJyk7CiAgICBhZGRfdGhlbWVfc3VwcG9ydCgncG9zdC10aHVtYm5haWxzJyk7CiAgICBhZGRfdGhlbWVfc3VwcG9ydCgnaHRtbDUnLCBbJ3NlYXJjaC1mb3JtJywgJ2dhbGxlcnknLCAnY2FwdGlvbicsICdzdHlsZScsICdzY3JpcHQnXSk7CiAgICBhZGRfdGhlbWVfc3VwcG9ydCgnY3VzdG9tLWxvZ28nLCBbCiAgICAgICAgJ2hlaWdodCcgICAgICA9PiA4MCwKICAgICAgICAnd2lkdGgnICAgICAgID0+IDI0MCwKICAgICAgICAnZmxleC1oZWlnaHQnID0+IHRydWUsCiAgICAgICAgJ2ZsZXgtd2lkdGgnICA9PiB0cnVlLAogICAgXSk7CgogICAgcmVnaXN0ZXJfbmF2X21lbnVzKFsKICAgICAgICAncHJpbWFyeScgPT4gJ+S4u+WvvOiIqicsCiAgICAgICAgJ2Zvb3RlcicgID0+ICflupXpg6jlr7zoiKonLAogICAgXSk7Cn0KYWRkX2FjdGlvbignYWZ0ZXJfc2V0dXBfdGhlbWUnLCAnenlfdGhlbWVfc2V0dXAnKTsKCmZ1bmN0aW9uIHp5X2VucXVldWVfYXNzZXRzKCkgewogICAgd3BfZW5xdWV1ZV9zdHlsZSgnenktc3R5bGUnLCBnZXRfc3R5bGVzaGVldF91cmkoKSwgW10sIFpZX1RIRU1FX1ZFUlNJT04pOwogICAgd3BfZW5xdWV1ZV9zdHlsZSgnenktbWFpbicsIGdldF90aGVtZV9maWxlX3VyaSgnL2Fzc2V0cy9jc3MvbWFpbi5jc3MnKSwgWyd6eS1zdHlsZSddLCBaWV9USEVNRV9WRVJTSU9OKTsKICAgIHdwX2VucXVldWVfc2NyaXB0KCd6eS1tYWluJywgZ2V0X3RoZW1lX2ZpbGVfdXJpKCcvYXNzZXRzL2pzL21haW4uanMnKSwgW10sIFpZX1RIRU1FX1ZFUlNJT04sIHRydWUpOwp9CmFkZF9hY3Rpb24oJ3dwX2VucXVldWVfc2NyaXB0cycsICd6eV9lbnF1ZXVlX2Fzc2V0cycpOwoKZnVuY3Rpb24genlfc2VhcmNoX2Zvcm0oJGZvcm0pIHsKICAgICRmb3JtID0gJwogICAgPGZvcm0gcm9sZT0ic2VhcmNoIiBtZXRob2Q9ImdldCIgY2xhc3M9InNlYXJjaC1mb3JtIiBhY3Rpb249IicgLiBlc2NfdXJsKGhvbWVfdXJsKCcvJykpIC4gJyI+CiAgICAgICAgPGlucHV0IHR5cGU9InNlYXJjaCIgY2xhc3M9InNlYXJjaC1maWVsZCIgcGxhY2Vob2xkZXI9IuaQnOe0ouahiOS7tuOAgemXruetlOOAgeazleinhOOAgeW+i+W4iCIgdmFsdWU9IicgLiBnZXRfc2VhcmNoX3F1ZXJ5KCkgLiAnIiBuYW1lPSJzIiAvPgogICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0ic2VhcmNoLXN1Ym1pdCI+5pCc57SiPC9idXR0b24+CiAgICA8L2Zvcm0+JzsKICAgIHJldHVybiAkZm9ybTsKfQphZGRfZmlsdGVyKCdnZXRfc2VhcmNoX2Zvcm0nLCAnenlfc2VhcmNoX2Zvcm0nKTsKCmZ1bmN0aW9uIHp5X2V4Y2VycHRfbGVuZ3RoKCRsZW5ndGgpIHsKICAgIHJldHVybiAzMjsKfQphZGRfZmlsdGVyKCdleGNlcnB0X2xlbmd0aCcsICd6eV9leGNlcnB0X2xlbmd0aCcsIDk5OSk7CgpmdW5jdGlvbiB6eV9leGNlcnB0X21vcmUoJG1vcmUpIHsKICAgIHJldHVybiAn4oCmJzsKfQphZGRfZmlsdGVyKCdleGNlcnB0X21vcmUnLCAnenlfZXhjZXJwdF9tb3JlJyk7CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnenlfZ2V0X2ZpcnN0X3Rlcm1fbmFtZScpKSB7CiAgICBmdW5jdGlvbiB6eV9nZXRfZmlyc3RfdGVybV9uYW1lKCRwb3N0X2lkLCAkdGF4b25vbXkgPSAnY2F0ZWdvcnknKSB7CiAgICAgICAgJHRlcm1zID0gZ2V0X3RoZV90ZXJtcygkcG9zdF9pZCwgJHRheG9ub215KTsKICAgICAgICBpZiAoIWVtcHR5KCR0ZXJtcykgJiYgIWlzX3dwX2Vycm9yKCR0ZXJtcykpIHsKICAgICAgICAgICAgcmV0dXJuICR0ZXJtc1swXS0+bmFtZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICcnOwogICAgfQp9CgpmdW5jdGlvbiB6eV9zZWN0aW9uX3F1ZXJ5KCRxdWVyeV9hcmdzLCAkZW1wdHlfdGV4dCA9ICfmmoLml6DlhoXlrrknKSB7CiAgICAkcSA9IG5ldyBXUF9RdWVyeSgkcXVlcnlfYXJncyk7CgogICAgb2Jfc3RhcnQoKTsKICAgIGlmICgkcS0+aGF2ZV9wb3N0cygpKSA6CiAgICAgICAgZWNobyAnPHVsIGNsYXNzPSJsaXN0Ij4nOwogICAgICAgIHdoaWxlICgkcS0+aGF2ZV9wb3N0cygpKSA6ICRxLT50aGVfcG9zdCgpOwogICAgICAgICAgICAkdGltZSA9IGdldF90aGVfZGF0ZSgnbS1kJyk7CiAgICAgICAgICAgIGVjaG8gJzxsaT4nOwogICAgICAgICAgICBlY2hvICc8YSBocmVmPSInIC4gZXNjX3VybChnZXRfcGVybWFsaW5rKCkpIC4gJyI+JzsKICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0ibGlzdC10aXRsZSI+JzsKICAgICAgICAgICAgZWNobyAnPHNwYW4+JyAuIGVzY19odG1sKGdldF90aGVfdGl0bGUoKSkgLiAnPC9zcGFuPic7CiAgICAgICAgICAgIGVjaG8gJzxlbT4nIC4gZXNjX2h0bWwoJHRpbWUpIC4gJzwvZW0+JzsKICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICAgICAgZWNobyAnPHA+JyAuIGVzY19odG1sKGdldF90aGVfZXhjZXJwdCgpKSAuICc8L3A+JzsKICAgICAgICAgICAgZWNobyAnPC9hPic7CiAgICAgICAgICAgIGVjaG8gJzwvbGk+JzsKICAgICAgICBlbmR3aGlsZTsKICAgICAgICBlY2hvICc8L3VsPic7CiAgICBlbHNlIDoKICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJub3RpY2UiPicgLiBlc2NfaHRtbCgkZW1wdHlfdGV4dCkgLiAnPC9kaXY+JzsKICAgIGVuZGlmOwogICAgd3BfcmVzZXRfcG9zdGRhdGEoKTsKCiAgICByZXR1cm4gb2JfZ2V0X2NsZWFuKCk7Cn0KCmZ1bmN0aW9uIHp5X3JlZ2lzdGVyX3NpZGViYXJzKCkgewogICAgcmVnaXN0ZXJfc2lkZWJhcihbCiAgICAgICAgJ25hbWUnICAgICAgICAgID0+ICfpppbpobXkvqfmoI8nLAogICAgICAgICdpZCcgICAgICAgICAgICA9PiAnaG9tZS1zaWRlYmFyJywKICAgICAgICAnZGVzY3JpcHRpb24nICAgPT4gJ+mmlumhteWPs+S+p+e7hOS7tuWMuicsCiAgICAgICAgJ2JlZm9yZV93aWRnZXQnID0+ICc8ZGl2IGNsYXNzPSJjYXJkIj4nLAogICAgICAgICdhZnRlcl93aWRnZXQnICA9PiAnPC9kaXY+JywKICAgICAgICAnYmVmb3JlX3RpdGxlJyAgPT4gJzxkaXYgY2xhc3M9ImNhcmQtaGVhZCI+PGgzPicsCiAgICAgICAgJ2FmdGVyX3RpdGxlJyAgPT4gJzwvaDM+PC9kaXY+PGRpdiBjbGFzcz0iY2FyZC1ib2R5Ij4nLAogICAgXSk7Cn0KYWRkX2FjdGlvbignd2lkZ2V0c19pbml0JywgJ3p5X3JlZ2lzdGVyX3NpZGViYXJzJyk7CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICog5b6L5biI5bGV56S65qih5Z2X77yI5Y+C54Wn5YyX5Lqs55m+546v5b6L5biI5LqL5Yqh5omA5a6Y572RIMK3IOWcqOWVhuiogOazlSB2MS4xLjDvvIkKICogIC0g5rOo5YaMIGxhd3llciDoh6rlrprkuYnmlofnq6DnsbvlnosgKyBsYXd5ZXJfc3BlY2lhbHR5IOaThemVv+mihuWfn+WIhuexuwogKiAgLSDmlofnq6DvvIhwb3N077yJ5Y+v5YWz6IGU5b6L5biI77ya57yW6L6R6aG1IE1ldGFib3jvvIhfenlfcmVsYXRlZF9sYXd5ZXJz77yJCiAqICAtIOaWh+eroOmhteS+p+agj+WxleekuuOAjOacrOaWh+WFs+iBlOW+i+W4iOOAjeWQjeeJh++8iOWQq+aZuuiDveWbnumAgOWMuemFje+8iQogKiAgLSDkuLvpopjlkK/nlKjml7boi6XlvovluIjkuLrnqbrvvIzoh6rliqjmkq3np40gOSDkvY3nmb7njq/lvovluIjvvIjlhazlvIDotYTmlpnvvIkKICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgpmdW5jdGlvbiB6eV9yZWdpc3Rlcl9sYXd5ZXJfY3B0KCkgewogICAgcmVnaXN0ZXJfcG9zdF90eXBlKCdsYXd5ZXInLCBbCiAgICAgICAgJ2xhYmVscycgPT4gWwogICAgICAgICAgICAnbmFtZScgICAgICAgICAgPT4gJ+W+i+W4iOWboumYnycsCiAgICAgICAgICAgICdzaW5ndWxhcl9uYW1lJyA9PiAn5b6L5biIJywKICAgICAgICAgICAgJ2FkZF9uZXcnICAgICAgID0+ICfmt7vliqDlvovluIgnLAogICAgICAgICAgICAnZWRpdF9pdGVtJyAgICAgPT4gJ+e8lui+keW+i+W4iCcsCiAgICAgICAgICAgICdhbGxfaXRlbXMnICAgICA9PiAn5YWo6YOo5b6L5biIJywKICAgICAgICAgICAgJ3NlYXJjaF9pdGVtcycgID0+ICfmkJzntKLlvovluIgnLAogICAgICAgIF0sCiAgICAgICAgJ3B1YmxpYycgICAgICAgID0+IHRydWUsCiAgICAgICAgJ2hhc19hcmNoaXZlJyAgID0+IHRydWUsCiAgICAgICAgJ3Jld3JpdGUnICAgICAgID0+IFsnc2x1ZycgPT4gJ2xhd3llcnMnLCAnd2l0aF9mcm9udCcgPT4gZmFsc2VdLAogICAgICAgICdtZW51X3Bvc2l0aW9uJyA9PiAyMCwKICAgICAgICAnbWVudV9pY29uJyAgICAgPT4gJ2Rhc2hpY29ucy1idXNpbmVzc3BlcnNvbicsCiAgICAgICAgJ3N1cHBvcnRzJyAgICAgID0+IFsndGl0bGUnLCAnZWRpdG9yJywgJ2V4Y2VycHQnLCAndGh1bWJuYWlsJywgJ2N1c3RvbS1maWVsZHMnXSwKICAgICAgICAnc2hvd19pbl9yZXN0JyAgPT4gdHJ1ZSwKICAgIF0pOwoKICAgIHJlZ2lzdGVyX3RheG9ub215KCdsYXd5ZXJfc3BlY2lhbHR5JywgJ2xhd3llcicsIFsKICAgICAgICAnbGFiZWxzJyA9PiBbCiAgICAgICAgICAgICduYW1lJyAgICAgICAgICA9PiAn5pOF6ZW/6aKG5Z+fJywKICAgICAgICAgICAgJ3Npbmd1bGFyX25hbWUnID0+ICfmk4Xplb/poobln58nLAogICAgICAgICAgICAnYWRkX25ld19pdGVtJyAgPT4gJ+a3u+WKoOaThemVv+mihuWfnycsCiAgICAgICAgXSwKICAgICAgICAncHVibGljJyAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAnaGllcmFyY2hpY2FsJyAgPT4gdHJ1ZSwKICAgICAgICAncmV3cml0ZScgICAgICAgPT4gWydzbHVnJyA9PiAnbGF3eWVyLXNwZWNpYWx0eSddLAogICAgICAgICdzaG93X2luX3Jlc3QnICA9PiB0cnVlLAogICAgXSk7Cn0KYWRkX2FjdGlvbignaW5pdCcsICd6eV9yZWdpc3Rlcl9sYXd5ZXJfY3B0Jyk7CgovKiDlvovluIjnu5PmnoTljJblrZfmrrUgKi8KZnVuY3Rpb24genlfbGF3eWVyX21ldGFfZmllbGRzKCkgewogICAgcmV0dXJuIFsKICAgICAgICAnX3p5X2xhd3llcl90aXRsZScgICAgICAgPT4gJ+iBjOWKoSAvIOiBjOensCcsCiAgICAgICAgJ196eV9sYXd5ZXJfZmlybScgICAgICAgID0+ICfmiafkuJrmnLrmnoQnLAogICAgICAgICdfenlfbGF3eWVyX2V4cGVyaWVuY2UnICA9PiAn5omn5Lia5bm06ZmQJywKICAgICAgICAnX3p5X2xhd3llcl9waG9uZScgICAgICAgPT4gJ+WSqOivoueUteivnScsCiAgICBdOwp9CgphZGRfYWN0aW9uKCdhZGRfbWV0YV9ib3hlcycsIGZ1bmN0aW9uICgpIHsKICAgIGFkZF9tZXRhX2JveCgnenlfbGF3eWVyX21ldGEnLCAn5b6L5biI5L+h5oGvJywgZnVuY3Rpb24gKCRwb3N0KSB7CiAgICAgICAgZm9yZWFjaCAoenlfbGF3eWVyX21ldGFfZmllbGRzKCkgYXMgJGsgPT4gJGxhYmVsKSB7CiAgICAgICAgICAgICR2ID0gZ2V0X3Bvc3RfbWV0YSgkcG9zdC0+SUQsICRrLCB0cnVlKTsKICAgICAgICAgICAgcHJpbnRmKAogICAgICAgICAgICAgICAgJzxwPjxsYWJlbCBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7Ij4lczwvbGFiZWw+JyAuCiAgICAgICAgICAgICAgICAnPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IiVzIiB2YWx1ZT0iJXMiIHN0eWxlPSJ3aWR0aDoxMDAlJTtwYWRkaW5nOjhweDtib3JkZXI6MXB4IHNvbGlkICNjY2Q7Ym9yZGVyLXJhZGl1czo2cHg7Ij48L3A+JywKICAgICAgICAgICAgICAgIGVzY19odG1sKCRsYWJlbCksIGVzY19hdHRyKCRrKSwgZXNjX2F0dHIoJHYpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfSwgJ2xhd3llcicsICdub3JtYWwnLCAnaGlnaCcpOwoKICAgIGFkZF9tZXRhX2JveCgnenlfcmVsYXRlZF9sYXd5ZXJzJywgJ+acrOaWh+WFs+iBlOW+i+W4iCcsIGZ1bmN0aW9uICgkcG9zdCkgewogICAgICAgICRzZWwgPSBnZXRfcG9zdF9tZXRhKCRwb3N0LT5JRCwgJ196eV9yZWxhdGVkX2xhd3llcnMnLCB0cnVlKTsKICAgICAgICAkc2VsID0gaXNfYXJyYXkoJHNlbCkgPyBhcnJheV9maWx0ZXIoYXJyYXlfbWFwKCdpbnR2YWwnLCAkc2VsKSkgOiBbXTsKICAgICAgICAkbGF3eWVycyA9IGdldF9wb3N0cyhbJ3Bvc3RfdHlwZScgPT4gJ2xhd3llcicsICdwb3N0c19wZXJfcGFnZScgPT4gLTEsICdvcmRlcmJ5JyA9PiAndGl0bGUnLCAnb3JkZXInID0+ICdBU0MnXSk7CiAgICAgICAgZWNobyAnPHAgc3R5bGU9ImNvbG9yOiM2Njc7Zm9udC1zaXplOjEzcHg7bWFyZ2luOjAgMCA4cHg7Ij7pgInmi6nkuI7or6Xmlofnq6Dnm7jlhbPogZTnmoTlvovluIjvvIzlsIblnKjmlofnq6DpobXkvqfmoI/lsZXnpLrlhbblkI3niYfjgILmnKrpgInmi6nml7bmjInmlofnq6DliIbnsbvmmbrog73ljLnphY3jgII8L3A+JzsKICAgICAgICBlY2hvICc8c2VsZWN0IG5hbWU9Inp5X3JlbGF0ZWRfbGF3eWVyc1tdIiBtdWx0aXBsZSBzaXplPSInIC4gbWluKDgsIG1heCgzLCBjb3VudCgkbGF3eWVycykpKSAuICciIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2NjZDtib3JkZXItcmFkaXVzOjZweDsiPic7CiAgICAgICAgZm9yZWFjaCAoJGxhd3llcnMgYXMgJGwpIHsKICAgICAgICAgICAgJGNoZWNrZWQgPSBpbl9hcnJheSgkbC0+SUQsICRzZWwsIHRydWUpID8gJyBzZWxlY3RlZCcgOiAnJzsKICAgICAgICAgICAgZWNobyAnPG9wdGlvbiB2YWx1ZT0iJyAuICRsLT5JRCAuICciJyAuICRjaGVja2VkIC4gJz4nIC4gZXNjX2h0bWwoJGwtPnBvc3RfdGl0bGUpIC4gJzwvb3B0aW9uPic7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvc2VsZWN0Pic7CiAgICB9LCAncG9zdCcsICdzaWRlJywgJ2RlZmF1bHQnKTsKfSk7CgphZGRfYWN0aW9uKCdzYXZlX3Bvc3QnLCBmdW5jdGlvbiAoJHBvc3RfaWQpIHsKICAgIGlmIChkZWZpbmVkKCdET0lOR19BVVRPU0FWRScpICYmIERPSU5HX0FVVE9TQVZFKSByZXR1cm47CiAgICBpZiAoISBjdXJyZW50X3VzZXJfY2FuKCdlZGl0X3Bvc3QnLCAkcG9zdF9pZCkpIHJldHVybjsKICAgIGlmIChpc3NldCgkX1BPU1RbJ196eV9sYXd5ZXJfdGl0bGUnXSkgfHwgZ2V0X3Bvc3RfdHlwZSgkcG9zdF9pZCkgPT09ICdsYXd5ZXInKSB7CiAgICAgICAgZm9yZWFjaCAoenlfbGF3eWVyX21ldGFfZmllbGRzKCkgYXMgJGsgPT4gJGxhYmVsKSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkX1BPU1RbJGtdKSkgewogICAgICAgICAgICAgICAgdXBkYXRlX3Bvc3RfbWV0YSgkcG9zdF9pZCwgJGssIHNhbml0aXplX3RleHRfZmllbGQod3BfdW5zbGFzaCgkX1BPU1RbJGtdKSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ3p5X3JlbGF0ZWRfbGF3eWVycycsICRfUE9TVCkpIHsKICAgICAgICAkdmFscyA9IGFycmF5X21hcCgnaW50dmFsJywgKGFycmF5KSAkX1BPU1RbJ3p5X3JlbGF0ZWRfbGF3eWVycyddKTsKICAgICAgICB1cGRhdGVfcG9zdF9tZXRhKCRwb3N0X2lkLCAnX3p5X3JlbGF0ZWRfbGF3eWVycycsICR2YWxzKTsKICAgIH0KfSk7CgovKiDojrflj5bmlofnq6DlhbPogZTlvovluIjvvIjlkKvmmbrog73lm57pgIDvvIkgKi8KZnVuY3Rpb24genlfZ2V0X3JlbGF0ZWRfbGF3eWVycygkcG9zdF9pZCwgJGxpbWl0ID0gMykgewogICAgJHNlbCA9IGdldF9wb3N0X21ldGEoJHBvc3RfaWQsICdfenlfcmVsYXRlZF9sYXd5ZXJzJywgdHJ1ZSk7CiAgICAkc2VsID0gaXNfYXJyYXkoJHNlbCkgPyBhcnJheV9maWx0ZXIoYXJyYXlfbWFwKCdpbnR2YWwnLCAkc2VsKSkgOiBbXTsKICAgIGlmICghIGVtcHR5KCRzZWwpKSB7CiAgICAgICAgcmV0dXJuIGdldF9wb3N0cyhbCiAgICAgICAgICAgICdwb3N0X3R5cGUnID0+ICdsYXd5ZXInLCAncG9zdHNfcGVyX3BhZ2UnID0+ICRsaW1pdCwKICAgICAgICAgICAgJ3Bvc3RfX2luJyA9PiAkc2VsLCAnb3JkZXJieScgPT4gJ3Bvc3RfX2luJywgJ29yZGVyJyA9PiAnQVNDJywKICAgICAgICBdKTsKICAgIH0KICAgICRjYXRzID0gZ2V0X3RoZV9jYXRlZ29yeSgkcG9zdF9pZCk7CiAgICBpZiAoISBlbXB0eSgkY2F0cykpIHsKICAgICAgICAkbWF0Y2hlZCA9IGdldF9wb3N0cyhbCiAgICAgICAgICAgICdwb3N0X3R5cGUnID0+ICdsYXd5ZXInLCAncG9zdHNfcGVyX3BhZ2UnID0+ICRsaW1pdCwKICAgICAgICAgICAgJ3RheF9xdWVyeScgPT4gW1sndGF4b25vbXknID0+ICdsYXd5ZXJfc3BlY2lhbHR5JywgJ2ZpZWxkJyA9PiAnc2x1ZycsICd0ZXJtcycgPT4gJGNhdHNbMF0tPnNsdWddXSwKICAgICAgICBdKTsKICAgICAgICBpZiAoISBlbXB0eSgkbWF0Y2hlZCkpIHJldHVybiAkbWF0Y2hlZDsKICAgIH0KICAgIHJldHVybiBnZXRfcG9zdHMoWydwb3N0X3R5cGUnID0+ICdsYXd5ZXInLCAncG9zdHNfcGVyX3BhZ2UnID0+ICRsaW1pdCwgJ29yZGVyYnknID0+ICdkYXRlJywgJ29yZGVyJyA9PiAnQVNDJ10pOwp9CgovKiDlvovluIjlpLTlg4/vvIjmnInnibnoibLlm77liJnnlKjlm77vvIzlkKbliJnpppblrZfoibLlnZfvvIkgKi8KZnVuY3Rpb24genlfbGF3eWVyX2F2YXRhcigkcG9zdCwgJHNpemUgPSA3MikgewogICAgaWYgKGhhc19wb3N0X3RodW1ibmFpbCgkcG9zdCkpIHsKICAgICAgICByZXR1cm4gZ2V0X3RoZV9wb3N0X3RodW1ibmFpbCgkcG9zdCwgWyRzaXplLCAkc2l6ZV0sIFsnc3R5bGUnID0+ICdib3JkZXItcmFkaXVzOjUwJTtvYmplY3QtZml0OmNvdmVyO3dpZHRoOicgLiAkc2l6ZSAuICdweDtoZWlnaHQ6JyAuICRzaXplIC4gJ3B4OyddKTsKICAgIH0KICAgICRjaCA9IG1iX3N1YnN0cigkcG9zdC0+cG9zdF90aXRsZSwgMCwgMSwgJ1VURi04Jyk7CiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJ6eS1hdmF0YXIiIHN0eWxlPSJ3aWR0aDonIC4gJHNpemUgLiAncHg7aGVpZ2h0OicgLiAkc2l6ZSAuICdweDtmb250LXNpemU6JyAuIHJvdW5kKCRzaXplIC8gMi40KSAuICdweDsiPicgLiBlc2NfaHRtbCgkY2gpIC4gJzwvc3Bhbj4nOwp9CgovKiDlvovluIjlkI3niYfljaHniYcgSFRNTCAqLwpmdW5jdGlvbiB6eV9sYXd5ZXJfY2FyZF9odG1sKCRwb3N0KSB7CiAgICAkdGl0bGUgPSBnZXRfcG9zdF9tZXRhKCRwb3N0LT5JRCwgJ196eV9sYXd5ZXJfdGl0bGUnLCB0cnVlKTsKICAgICR0ZXJtcyA9IGdldF90aGVfdGVybXMoJHBvc3QtPklELCAnbGF3eWVyX3NwZWNpYWx0eScpOwogICAgJGJpbyAgID0gJHBvc3QtPnBvc3RfZXhjZXJwdCA/OiB3cF90cmltX3dvcmRzKCRwb3N0LT5wb3N0X2NvbnRlbnQsIDI2LCAn4oCmJyk7CiAgICBvYl9zdGFydCgpOwogICAgPz4KICAgIDxhIGNsYXNzPSJsYXd5ZXItY2FyZCIgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKGdldF9wZXJtYWxpbmsoJHBvc3QpKTsgPz4iPgogICAgICAgIDxkaXYgY2xhc3M9Imxhd3llci1jYXJkLXRvcCI+CiAgICAgICAgICAgIDw/cGhwIGVjaG8genlfbGF3eWVyX2F2YXRhcigkcG9zdCwgNjApOyA/PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYXd5ZXItY2FyZC1pZCI+CiAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPSJsYXd5ZXItbmFtZSI+PD9waHAgZWNobyBlc2NfaHRtbCgkcG9zdC0+cG9zdF90aXRsZSk7ID8+PC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHRpdGxlKSA6ID8+PHNtYWxsIGNsYXNzPSJsYXd5ZXItdGl0bGUiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHRpdGxlKTsgPz48L3NtYWxsPjw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cCBjbGFzcz0ibGF3eWVyLWJpbyI+PD9waHAgZWNobyBlc2NfaHRtbCgkYmlvKTsgPz48L3A+CiAgICAgICAgPD9waHAgaWYgKCR0ZXJtcykgOiA/PgogICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+CiAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKGFycmF5X3NsaWNlKCR0ZXJtcywgMCwgNCkgYXMgJHQpIDogPz48c3BhbiBjbGFzcz0iYmFkZ2UgYmx1ZSI+PD9waHAgZWNobyBlc2NfaHRtbCgkdC0+bmFtZSk7ID8+PC9zcGFuPjw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPHNwYW4gY2xhc3M9Imxhd3llci1tb3JlIj7mn6XnnIvlvovluIjor6bmg4Ug4oaSPC9zcGFuPgogICAgPC9hPgogICAgPD9waHAKICAgIHJldHVybiBvYl9nZXRfY2xlYW4oKTsKfQoKLyog5paH56ug6aG15L6n5qCP44CM5pys5paH5YWz6IGU5b6L5biI44CN5qih5Z2XICovCmZ1bmN0aW9uIHp5X3JlbGF0ZWRfbGF3eWVyX2Jsb2NrKCRwb3N0X2lkKSB7CiAgICAkbGF3eWVycyA9IHp5X2dldF9yZWxhdGVkX2xhd3llcnMoJHBvc3RfaWQsIDMpOwogICAgaWYgKGVtcHR5KCRsYXd5ZXJzKSkgewogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InJlbC1sYXd5ZXIiPjxoMyBjbGFzcz0icmVsLWxhd3llci10aXRsZSI+5LiT5Lia5b6L5biI5oqK5YWzPC9oMz4nIC4KICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJjb25zdWx0LWJveCI+PHA+6YGH5Yiw5YiR5LqL5rOV5b6L6aOO6Zmp77yM5om+5LiT5Lia5b6L5biI6K+E5Lyw44CCPC9wPicgLgogICAgICAgICAgICAgJzxhIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgZnVsbCIgaHJlZj0iJyAuIGVzY191cmwoaG9tZV91cmwoJy9sYXd5ZXJzJykpIC4gJyI+5rWP6KeI5b6L5biI5Zui6ZifPC9hPjwvZGl2PjwvZGl2Pic7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZWNobyAnPGRpdiBjbGFzcz0icmVsLWxhd3llciI+PGgzIGNsYXNzPSJyZWwtbGF3eWVyLXRpdGxlIj7mnKzmloflhbPogZTlvovluIg8L2gzPic7CiAgICBmb3JlYWNoICgkbGF3eWVycyBhcyAkbCkgewogICAgICAgIGVjaG8genlfbGF3eWVyX2NhcmRfaHRtbCgkbCk7CiAgICB9CiAgICBlY2hvICc8YSBjbGFzcz0icmVsLWxhd3llci1hbGwiIGhyZWY9IicgLiBlc2NfdXJsKGhvbWVfdXJsKCcvbGF3eWVycycpKSAuICciPuafpeeci+WFqOmDqOW+i+W4iCDihpI8L2E+PC9kaXY+JzsKfQoKLyog5Li76aKY5ZCv55So77ya5Yi35paw6YeN5YaZ6KeE5YiZICsg5pKt56eN5b6L5biIICovCmFkZF9hY3Rpb24oJ2FmdGVyX3N3aXRjaF90aGVtZScsIGZ1bmN0aW9uICgpIHsKICAgIGZsdXNoX3Jld3JpdGVfcnVsZXMoKTsKICAgIGlmICgoaW50KSB3cF9jb3VudF9wb3N0cygnbGF3eWVyJyktPnB1Ymxpc2ggPiAwKSByZXR1cm47CgogICAgJGxhd3llcnMgPSBbCiAgICAgICAgWwogICAgICAgICAgICAnbmFtZScgICAgPT4gJ+aWh+mBk+WFqCcsCiAgICAgICAgICAgICd0aXRsZScgICA9PiAn5Li75Lu7IMK3IOmmluW4reWQiOS8meS6uicsCiAgICAgICAgICAgICdleGNlcnB0JyA9PiAn5YyX5Lqs55m+546v5b6L5biI5LqL5Yqh5omA5Li75Lu777yM5LiT5rOo57uP5rWO54qv572q44CB6IGM5Yqh54qv572q44CB6YeR6J6N54qv572q562J6YeN5aSn5YiR5LqL5qGI5Lu26L6p5oqk5LiO5LyB5Lia5YiR5LqL5ZCI6KeE44CCJywKICAgICAgICAgICAgJ2JpbycgICAgID0+ICLmlofpgZPlhajlvovluIjns7vljJfkuqznmb7njq/lvovluIjkuovliqHmiYDkuLvku7vjgIHpppbluK3lkIjkvJnkurrvvIzms5XmsrvnvZHms5Xlvovpob7pl67vvIzkuK3lm73mrKfnm5/lnKjnur/ku7Loo4Hor77popjnu4TkuJPlrrblp5TlkZjvvIzkuK3ljavku7Loo4Hlp5TlkZjkvJrku7Loo4HlkZjjgILmr5XkuJrkuo7opb/ljZfmlL/ms5XlpKflrabvvIzkuJPms6jmib/lip7nu4/mtY7niq/nvarkuI7nu4/mtY7nuqDnurfmoYjku7bvvIzmk4Xku6XlpJrlhYPljJbnrZbnlaXjgIHnq4vkvZPlvI/mlrnms5XjgIHns7vnu5/ljJbmioDlt6fop6PlhrPmsJHllYbjgIHooYzmlL/jgIHliJHkuovkuqTlj4nnmoTph43lpKfnlpHpmr7lpI3mnYLmoYjku7bvvIzplb/mnJ/noJTnqbbkvIHkuJrlrrbms5Xlvovpo47pmanpmLLmjqflkozkvIHkuJrms5XlvovmnI3liqHjgIJcblxu5Luj6KGo5qGI5L6L77yaMjAyNCDlubTmt7HlnLPluILlkLTmn5Dmtonlq4zlkIjlkIzor4jpqpfnvarmoYjvvIjml6DnvarovqnmiqTvvIzmo4Dlr5/pmaLml6DnvarkuI3kuojmibnmjZXvvInvvJvmuZbljZfnnIHlubPmsZ/lvKDmn5Dmtonlq4zmjKrnlKjotYTph5HnvarmoYjvvIjml6DnvarovqnmiqTvvIzmo4Dlr5/pmaLkuKTmrKHpgIDkvqbmnKrotbfor4nvvInnrYnjgIIiLAogICAgICAgICAgICAnbWV0YScgICAgPT4gWydfenlfbGF3eWVyX3RpdGxlJyA9PiAn5Li75Lu7IMK3IOmmluW4reWQiOS8meS6uicsICdfenlfbGF3eWVyX2Zpcm0nID0+ICfljJfkuqznmb7njq/lvovluIjkuovliqHmiYAnLCAnX3p5X2xhd3llcl9waG9uZScgPT4gJzE4NTExODM1NzMzJ10sCiAgICAgICAgICAgICdzcGVjJyAgICA9PiBbJ+e7j+a1jueKr+e9qicsICfogYzliqHniq/nvaonLCAn6YeR6J6N54qv572qJywgJ+S8geS4muWQiOinhCddLAogICAgICAgIF0sCiAgICAgICAgWwogICAgICAgICAgICAnbmFtZScgICAgPT4gJ+mfqeWuneeOiScsCiAgICAgICAgICAgICd0aXRsZScgICA9PiAn5omn6KGM5Li75Lu7JywKICAgICAgICAgICAgJ2V4Y2VycHQnID0+ICfmm77ku7vmn5DnnIHnm7TlsZ7ms5XpmaLpq5jnuqfms5XlrpjvvIwzNyDlubTkuLvlrqHlkITnsbvmoYjku7bov5EgNTAwMCDku7bvvIzmk4XliZbmnpDkuI7noLTop6Pph43lpKfnlpHpmr7lpI3mnYLmoYjku7bjgIInLAogICAgICAgICAgICAnYmlvJyAgICAgPT4gIumfqeWuneeOieW+i+W4iO+8jOWMl+S6rOeZvueOr+W+i+W4iOS6i+WKoeaJgOaJp+ihjOS4u+S7u++8jOazleayu+e9keazleW+i+mhvumXru+8jOS4reWNq+S7suijgeWnlOWRmOS8muS7suijgeWRmOOAguabvuS7u+afkOecgeebtOWxnuazlemZoumrmOe6p+azleWumO+8jOWOhuS7u+WIkeW6reOAgeawkeW6reOAgee7vOWQiOWuoeWIpOW6reOAgeihjOaUv+W6reOAgeaJp+ihjOijgeWGs+W6reW6remVv++8jDM3IOW5tOS4u+WuoeWQhOexu+ahiOS7tui/kSA1MDAwIOS7tu+8jOWFt+S4sOWvjOWIpOahiOe7j+mqjO+8jOiDveWkn+eyvuWHhueglOWIpOahiOS7tuWFs+mUrueCue+8jOWHhuehruaKiuaPoeivieiuvOaWueWQkeS4juetlueVpe+8jOeJueWIq+aThemVv+WJluaekOS4juegtOino+mHjeWkp+eWkemavuWkjeadguahiOS7tuOAgiIsCiAgICAgICAgICAgICdtZXRhJyAgICA9PiBbJ196eV9sYXd5ZXJfdGl0bGUnID0+ICfmiafooYzkuLvku7snLCAnX3p5X2xhd3llcl9maXJtJyA9PiAn5YyX5Lqs55m+546v5b6L5biI5LqL5Yqh5omAJywgJ196eV9sYXd5ZXJfcGhvbmUnID0+ICcxODUxMTgzNTczMyddLAogICAgICAgICAgICAnc3BlYycgICAgPT4gWyfliJHkuovovqnmiqQnLCAn57uP5rWO54qv572qJ10sCiAgICAgICAgXSwKICAgICAgICBbCiAgICAgICAgICAgICduYW1lJyAgICA9PiAn5YiY5rC45ZCbJywKICAgICAgICAgICAgJ3RpdGxlJyAgID0+ICfotYTmt7HlvovluIggwrcg6auY57qn5ZCI5LyZ5Lq6JywKICAgICAgICAgICAgJ2V4Y2VycHQnID0+ICfoh6ogMTk4MCDlubTotbfljobku7vljJfkuqzluILnrKzkuInlvovluIjkuovliqHmiYDjgIHljJfkuqzluILnu4/mtY7lvovluIjkuovliqHmiYDjgIHljJfkuqznmb7njq/lvovluIjkuovliqHmiYDkuLvku7vvvIzmiafkuJogNDAg5bm044CCJywKICAgICAgICAgICAgJ2JpbycgICAgID0+ICLliJjmsLjlkJvlvovluIjvvIzoh6ogMTk4MCDlubTotbfljobku7vljJfkuqzluILlj7jms5XlsYDms5Xlvovpob7pl67lpITjgIHljJfkuqzluILnrKzkuInlvovluIjkuovliqHmiYDjgIHljJfkuqzluILnu4/mtY7lvovluIjkuovliqHmiYDjgIHljJfkuqzluILpk47lo7DlvovluIjkuovliqHmiYDjgIHljJfkuqznmb7njq/lvovluIjkuovliqHmiYDkuLvku7vjgIHpq5jnuqflkIjkvJnkurrvvIzlpJrmrKHlj5fliLDljJfkuqzluILlj7jms5XlsYDjgIHlj7jms5Xpg6jnmoTooajlvbDjgILmiafkuJogNDAg5bm077yM6LWE5rex5b6L5biI77yM5a6e5oiY5rOV5b6L5LiT5a6277yM5pOF6ZW/6YeN5aSn5rCR44CB5ZWG5LqL5rOV5b6L5LqL5Yqh77yM5pu+5Yqe55CG5YiR44CB5rCR44CB57uP5rWO57qg57q35qGI5Lu25pWw55m+5Lu25Y+K5ouF5Lu75LiK55m+5a625Y2V5L2N5rOV5b6L6aG+6Zeu44CCIiwKICAgICAgICAgICAgJ21ldGEnICAgID0+IFsnX3p5X2xhd3llcl90aXRsZScgPT4gJ+i1hOa3seW+i+W4iCDCtyDpq5jnuqflkIjkvJnkuronLCAnX3p5X2xhd3llcl9maXJtJyA9PiAn5YyX5Lqs55m+546v5b6L5biI5LqL5Yqh5omAJywgJ196eV9sYXd5ZXJfcGhvbmUnID0+ICcxODUxMTgzNTczMyddLAogICAgICAgICAgICAnc3BlYycgICAgPT4gWyfmsJHllYbkuosnLCAn5LyB5Lia5ZCI6KeEJ10sCiAgICAgICAgXSwKICAgICAgICBbCiAgICAgICAgICAgICduYW1lJyAgICA9PiAn546L5a626LS1JywKICAgICAgICAgICAgJ3RpdGxlJyAgID0+ICflkIjkvJnkurrlvovluIgnLAogICAgICAgICAgICAnZXhjZXJwdCcgPT4gJzE5ODYg5bm05YyX5Lqs5aSn5a2m5rOV5b6L57O75q+V5Lia77yMMTk4NyDlubTosIPlhaXljJfkuqzluILnrKzkuInlvovluIjkuovliqHmiYDvvIzmk4Xplb/liJHkuovovqnmiqTjgIHmsJHllYbkuovor4norrzjgIHkvIHkuJrms5XliqHjgIInLAogICAgICAgICAgICAnYmlvJyAgICAgPT4gIueOi+Wutui0teW+i+W4iO+8jDE5ODEg5bm06L+b5YWl5YWs5qOA5rOV57O757uf77yM5LuO5LqL5qOA5a+f5bel5L2cIDcg5bm077yMMTk4NiDlubTljJfkuqzlpKflrabms5Xlvovns7vmr5XkuJrvvIwxOTg3IOW5tOiwg+WFpeWMl+S6rOW4guWPuOazleWxgOebtOWxnuWMl+S6rOW4guesrOS4ieW+i+W4iOS6i+WKoeaJgOS7juS6i+W+i+W4iOW3peS9nO+8jOWOhuS7u+WMl+S6rOW4guesrOS4ieW+i+W4iOS6i+WKoeaJgOOAgeWMl+S6rOW4gue7j+a1juW+i+W4iOS6i+WKoeaJgOOAgeWMl+S6rOW4gumTjuWjsOW+i+W4iOS6i+WKoeaJgOOAgeWMl+S6rOeZvueOr+W+i+W4iOS6i+WKoeaJgOWQiOS8meS6uuOAguaThemVv+WIkeS6i+i+qeaKpOOAgeawkeWVhuS6i+ivieiuvOOAgeS8geS4muazleWKoe+8jOWcqOW+i+W4iOaJp+S4miAzMCDlpJrlubTph4zvvIzmm77kuLrlpKfkuK3lnovlm73mnInkvIHkuJrjgIHkuovkuJrljZXkvY3jgIHnp4HokKXkvIHkuJrjgIHph5Hono3mnLrmnoTmi4Xku7vluLjlubTms5Xlvovpob7pl67vvIzlip7nkIbkuobmlbDnmb7ku7bmsJHllYbkuovjgIHliJHkuovmoYjku7bjgIIiLAogICAgICAgICAgICAnbWV0YScgICAgPT4gWydfenlfbGF3eWVyX3RpdGxlJyA9PiAn5ZCI5LyZ5Lq65b6L5biIJywgJ196eV9sYXd5ZXJfZmlybScgPT4gJ+WMl+S6rOeZvueOr+W+i+W4iOS6i+WKoeaJgCcsICdfenlfbGF3eWVyX3Bob25lJyA9PiAnMTg1MTE4MzU3MzMnXSwKICAgICAgICAgICAgJ3NwZWMnICAgID0+IFsn5YiR5LqL6L6p5oqkJywgJ+awkeWVhuS6iyddLAogICAgICAgIF0sCiAgICAgICAgWwogICAgICAgICAgICAnbmFtZScgICAgPT4gJ+eOi+a1meawkScsCiAgICAgICAgICAgICd0aXRsZScgICA9PiAn5a6e5oiY5rOV5Yqh5LiT5a62JywKICAgICAgICAgICAgJ2V4Y2VycHQnID0+ICfmk4Xplb/ph43lpKfnlpHpmr7liJHkuovmoYjku7bvvIwxOTgzIOW5tFwi5Lil5omTXCLkuK3ku6PnkIYgODcg5Lu25YiR5LqL5qGI5Lu277yM5omn5Lia5pyf6Ze05aSE55CG5ZCE57G75qGI5Lu2IDcwMCDlpJrku7bjgIInLAogICAgICAgICAgICAnYmlvJyAgICAgPT4gIueOi+a1meawkeW+i+W4iO+8jOWunuaImOazleWKoeS4k+Wutu+8jOaThemVv+mHjeWkp+eWkemavuWIkeS6i+ahiOS7tuOAguWcqCAxOTgzIOW5tFwi5Lil5omTXCLkuK3vvIzku6PnkIbkuoYgODcg5Lu25YiR5LqL5qGI5Lu277yM5ouF5Lu75YiR5LqL6L6p5oqk5Lq677yb5omn5Lia5pyf6Ze05aSE55CG5ZCE56eN5YiR5LqL44CB5rCR5LqL44CB57uP5rWO5qGI5Lu2IDcwMCDlpJrku7bjgILkuK3lm73nrKzkuIDmibnojrflvpdcIuS4k+S4muW+i+W4iOivgeS5plwi5LuO5Lia5Lq65ZGY77yM5pu+5Lqy6Ieq5Yqe55CG5YWa5Lit5aSu6YeN6KaB6YOo6Zeo5Lqk5Yqe55qE6YeN5aSn5qGI5Lu277yM5pu+5ouF5Lu75Zu95a626K6h5aeU5Z+65bu65Yqe44CB6ZOB6YGT6YOo5YyX5Lqs6ZOB6Lev5bGA44CB5Lq65rCR55S75oql56S+44CB5Lit5Zu95Ye654mI56S+44CB5Lit5Zu95bu6562R5Ye654mI56S+44CB6aaW6YO95rG96L2m5YWs5Y+4562J5LiK55m+5a625Y2V5L2N55qE5rOV5b6L6aG+6Zeu44CCIiwKICAgICAgICAgICAgJ21ldGEnICAgID0+IFsnX3p5X2xhd3llcl90aXRsZScgPT4gJ+WunuaImOazleWKoeS4k+WuticsICdfenlfbGF3eWVyX2Zpcm0nID0+ICfljJfkuqznmb7njq/lvovluIjkuovliqHmiYAnLCAnX3p5X2xhd3llcl9waG9uZScgPT4gJzE4NTExODM1NzMzJ10sCiAgICAgICAgICAgICdzcGVjJyAgICA9PiBbJ+WIkeS6i+i+qeaKpCddLAogICAgICAgIF0sCiAgICAgICAgWwogICAgICAgICAgICAnbmFtZScgICAgPT4gJ+mCouW/oOawkScsCiAgICAgICAgICAgICd0aXRsZScgICA9PiAn5LiT6IGM5b6L5biIJywKICAgICAgICAgICAgJ2V4Y2VycHQnID0+ICflk4jlsJTmu6jluIjojIPlpKflrabjgIHlr7nlpJbnu4/mtY7otLjmmJPlpKflrabnoZXlo6vvvIzoh6ogMjAwMiDlubTku47kuovms5XlvovmnI3liqHvvIzmib/lip7liJHkuovjgIHotKLnqI7jgIHmsJHllYbkuovjgIHooYzmlL/or4norrzmoYjku7bov5HljYPku7bjgIInLAogICAgICAgICAgICAnYmlvJyAgICAgPT4gIumCouW/oOawkeW+i+W4iO+8jOaXqeW5tOS7juS6i+i/h+aVmeW4iOOAgeS8geS4mueuoeeQhuWSjOWklui0uOe/u+ivke+8jOWFiOWQjuavleS4muS6juWTiOWwlOa7qOW4iOiMg+Wkp+WtpuOAgeWvueWklue7j+a1jui0uOaYk+Wkp+Wtpu+8jOehleWjq+eglOeptueUn+WtpuWOhuOAguiHqiAyMDAyIOW5tOi/m+WFpeazleW+i+acjeWKoeihjOS4muS7peadpe+8jOS4gOebtOiHtOWKm+S6juWIkeS6i+OAgei0oueojuOAgeawkeWVhuS6i+OAgeihjOaUv+ivieiuvOahiOS7tuetieaWuemdoueahOeQhuiuuueglOeptuWSjOWunuWKoeaTjeS9nO+8jOazleW+i+WKn+W6lea3seWOmu+8jOmYheWOhuS4sOWvjO+8jOaJp+S4muiDveWKm+W8uu+8jOaJv+WKnuS6huetiei/keWNg+S4quWIkeS6i+OAgeawkeWVhuS6i+OAgeihjOaUv+ivieiuvOWSjOS7suijgeahiOS7tuOAgueJueWIq+aThemVv+S7peWkmuWFg+WMluaAnee7tOWSjOeBtea0u+ezu+e7n+eahOWKnuahiOaKgOW3p++8jOaVtOWQiOWFq+aWuei1hOa6kO+8jOmrmOaViOegtOino+awkeWVhuOAgeihjOaUv+OAgeWIkeS6i+S6pOWPieeahOmHjeWkp+eWkemavuWkjeadguahiOS7tuOAgiIsCiAgICAgICAgICAgICdtZXRhJyAgICA9PiBbJ196eV9sYXd5ZXJfdGl0bGUnID0+ICfkuJPogYzlvovluIgnLCAnX3p5X2xhd3llcl9maXJtJyA9PiAn5YyX5Lqs55m+546v5b6L5biI5LqL5Yqh5omAJywgJ196eV9sYXd5ZXJfcGhvbmUnID0+ICcxODUxMTgzNTczMyddLAogICAgICAgICAgICAnc3BlYycgICAgPT4gWyfliJHkuovovqnmiqQnLCAn6LSi56iOJ10sCiAgICAgICAgXSwKICAgICAgICBbCiAgICAgICAgICAgICduYW1lJyAgICA9PiAn5b2t6ZGrJywKICAgICAgICAgICAgJ3RpdGxlJyAgID0+ICfkuJPogYzlvovluIgnLAogICAgICAgICAgICAnZXhjZXJwdCcgPT4gJ+S7juS4miA2IOW5tO+8jOabvuS7u+S4iuW4guaIv+S8geaKlei1hOe7j+eQhu+8jOS4k+S4muOAgemrmOaViOOAgeWwvei0o++8jOWFt+aJjuWunuazleWtpuWKn+W6leOAgicsCiAgICAgICAgICAgICdiaW8nICAgICA9PiAi5b2t6ZGr5b6L5biI5LuO5LiaIDYg5bm077yM5LiT5Lia44CB6auY5pWI44CB5bC96LSj77yM5YW35pyJ5omO5a6e55qE5rOV5a2m5Yqf5bqV77yM5pu+5Lu75LiK5biC5oi/5LyB5rGf6IuP5Lit5Y2X5bu66K6+6ZuG5Zui6IKh5Lu95pyJ6ZmQ5YWs5Y+477yI5Lit5Y2X572u5Zyw77yJ5oqV6LWE57uP55CG77yM54af5oKJ5LyB5Lia6L+Q6JCl5LiO5oqV6J6N6LWE5a6e5Yqh77yM5pOF6ZW/5Li65LyB5Lia5LiO5b2T5LqL5Lq65o+Q5L6b6LS05ZCI5ZWG5Lia6YC76L6R55qE5rOV5b6L5pyN5Yqh44CCIiwKICAgICAgICAgICAgJ21ldGEnICAgID0+IFsnX3p5X2xhd3llcl90aXRsZScgPT4gJ+S4k+iBjOW+i+W4iCcsICdfenlfbGF3eWVyX2Zpcm0nID0+ICfljJfkuqznmb7njq/lvovluIjkuovliqHmiYAnLCAnX3p5X2xhd3llcl9waG9uZScgPT4gJzE4NTExODM1NzMzJ10sCiAgICAgICAgICAgICdzcGVjJyAgICA9PiBbJ+S8geS4muWQiOinhCcsICfmsJHllYbkuosnXSwKICAgICAgICBdLAogICAgICAgIFsKICAgICAgICAgICAgJ25hbWUnICAgID0+ICflvKDmupAnLAogICAgICAgICAgICAndGl0bGUnICAgPT4gJ+i1hOa3seW+i+W4iCcsCiAgICAgICAgICAgICdleGNlcnB0JyA9PiAnMTk5MiDlubTljJfkuqzlpKflrabms5Xlvovns7vmr5XkuJrvvIwxOTk0IOW5tOWPluW+l+W+i+W4iOi1hOagvO+8jOaThemVv+WFrOWPuOS8geS4muazleW+i+S6i+WKoeOAgeawkeWVhuOAgeWQiOWQjOOAgeS+teadg+OAgeihjOaUv+OAgicsCiAgICAgICAgICAgICdiaW8nICAgICA9PiAi5byg5rqQ5b6L5biI77yM6LWE5rex5b6L5biI77yM5a6e5oiY5rOV5Yqh5LiT5a6277yM5pOF6ZW/5YWs5Y+45LyB5Lia5rOV5b6L5LqL5Yqh44CB5rCR5ZWG5LqL5Yqh44CB5ZCI5ZCM57qg57q344CB5L615p2D57qg57q344CB57un5om/57qg57q344CB6KGM5pS/5aSN6K6u44CB6KGM5pS/6K+J6K6844CCMTk5MiDlubTljJfkuqzlpKflrabms5Xlvovns7vmr5XkuJrvvIwxOTk0IOW5tOWPluW+l+W+i+W4iOi1hOagvOivgeS5pu+8jDIwMDMg5bm05Lit5Zu95pS/5rOV5aSn5a2m5Zyo6IGM56CU56m255Sf5q+V5Lia77yb5pu+5Zyo5YyX5Lqs5biC56ys5LiJ5b6L5biI5LqL5Yqh5omA44CB5YyX5Lqs5biC57uP5rWO5b6L5biI5LqL5Yqh5omA44CB5YyX5Lqs5biC6ZOO5aOw5b6L5biI5LqL5Yqh5omA44CB5YyX5Lqs55m+546v5b6L5biI5LqL5Yqh5omA5omn5Lia77yM5LuO5LqL5b6L5biI5omn5Lia6Iez5LuKIDI1IOW5tO+8jOabvuaLheS7u+WkmuWutuWkruS8geOAgeWbveS8geOAgeS4iuW4guWFrOWPuOOAgeaUv+W6nOazleW+i+mhvumXruOAgiIsCiAgICAgICAgICAgICdtZXRhJyAgICA9PiBbJ196eV9sYXd5ZXJfdGl0bGUnID0+ICfotYTmt7HlvovluIgnLCAnX3p5X2xhd3llcl9maXJtJyA9PiAn5YyX5Lqs55m+546v5b6L5biI5LqL5Yqh5omAJywgJ196eV9sYXd5ZXJfcGhvbmUnID0+ICcxODUxMTgzNTczMyddLAogICAgICAgICAgICAnc3BlYycgICAgPT4gWyfmsJHllYbkuosnLCAn5ZCI5ZCMJywgJ+ihjOaUvyddLAogICAgICAgIF0sCiAgICAgICAgWwogICAgICAgICAgICAnbmFtZScgICAgPT4gJ+i1tea1qeS6kScsCiAgICAgICAgICAgICd0aXRsZScgICA9PiAn5LiT6IGM5b6L5biIJywKICAgICAgICAgICAgJ2V4Y2VycHQnID0+ICfmgJ3nu7TnvJzlr4bvvIzlip7moYjkuKXosKjvvIzmiJDlip/ku6PnkIblpJrku7bmsJHllYbmoYjku7bvvIzms6jph43nqbflsL3or4Hmja7kuI7ms5XlvovpgILnlKjjgIInLAogICAgICAgICAgICAnYmlvJyAgICAgPT4gIui1tea1qeS6keW+i+W4iO+8jOaAnee7tOe8nOWvhu+8jOWKnuahiOS4peiwqO+8jOWBmuS6i+iupOecn+i0n+i0o++8jOaIkOWKn+S7o+eQhuWkmuS7tuawkeWVhuahiOS7tu+8jOiOt+W+l+W9k+S6i+S6uueahOmrmOW6pui1nui1j+OAguWvueazleW+i+mXrumimOeahOeQhuino+WFqOmdouOAgeWKoeWunuOAgemAj+W9u++8jOazqOmHjeivieiuvOS4u+S9k+OAgeazleW+i+WFs+ezu+eahOWuoeafpe+8jOazqOmHjeept+WwveivgeaNruWSjOept+WwveazleW+i+mAgueUqO+8jOmAmui/h+eoi+W6j+S4juWunuS9k+W5tumHje+8jOWKm+axguazleW+i+S6i+WunuS4juWuouinguS6i+WunueahOe7n+S4gO+8jOiDveWkn+S7juWunumZheazleW+i+aViOaenOWHuuWPke+8jOi/kOeUqOeBtea0u+eahOivieiuvOS4jumdnuivieaWueazleWunueOsOW9k+S6i+S6uuWQiOazleWIqeebiuacgOWkp+WMluOAgiIsCiAgICAgICAgICAgICdtZXRhJyAgICA9PiBbJ196eV9sYXd5ZXJfdGl0bGUnID0+ICfkuJPogYzlvovluIgnLCAnX3p5X2xhd3llcl9maXJtJyA9PiAn5YyX5Lqs55m+546v5b6L5biI5LqL5Yqh5omAJywgJ196eV9sYXd5ZXJfcGhvbmUnID0+ICcxODUxMTgzNTczMyddLAogICAgICAgICAgICAnc3BlYycgICAgPT4gWyfmsJHllYbkuosnXSwKICAgICAgICBdLAogICAgXTsKCiAgICBmb3JlYWNoICgkbGF3eWVycyBhcyAkZCkgewogICAgICAgICRpZCA9IHdwX2luc2VydF9wb3N0KFsKICAgICAgICAgICAgJ3Bvc3RfdHlwZScgICAgPT4gJ2xhd3llcicsCiAgICAgICAgICAgICdwb3N0X3RpdGxlJyAgID0+ICRkWyduYW1lJ10sCiAgICAgICAgICAgICdwb3N0X2NvbnRlbnQnID0+ICRkWydiaW8nXSwKICAgICAgICAgICAgJ3Bvc3RfZXhjZXJwdCcgPT4gJGRbJ2V4Y2VycHQnXSwKICAgICAgICAgICAgJ3Bvc3Rfc3RhdHVzJyAgPT4gJ3B1Ymxpc2gnLAogICAgICAgIF0pOwogICAgICAgIGlmIChpc193cF9lcnJvcigkaWQpKSBjb250aW51ZTsKICAgICAgICBmb3JlYWNoICgkZFsnbWV0YSddIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgIHVwZGF0ZV9wb3N0X21ldGEoJGlkLCAkaywgJHYpOwogICAgICAgIH0KICAgICAgICBpZiAoISBlbXB0eSgkZFsnc3BlYyddKSkgewogICAgICAgICAgICB3cF9zZXRfb2JqZWN0X3Rlcm1zKCRpZCwgJGRbJ3NwZWMnXSwgJ2xhd3llcl9zcGVjaWFsdHknKTsKICAgICAgICB9CiAgICB9Cn0pOwoKLyoKICog5bey56e76Zmk6ZSZ6K+v6L+Q6KGM55qEIGZsb2F0aW5nLWNvbnN1bHQg5rWu56qX77yIdjEuMC4z77yJCiAqIOWOn+WboO+8muivpea1rueql+WcqOafkOS6myB6LWluZGV4IC8gcG9zaXRpb24g5oOF5aKD5LiL6ZSZ5L2N5YiwIGhlYWRlciDljLrln5/vvIwKICogICAgICAg5a+86Ie06aaW6aG16aG26YOo5Ye6546wIuS4i+aLieiPnOWNlSLmrovlvbHvvIzkuI7lr7zoiKrmr43moI/ph43lpI3jgIIKICogICAgICAg5ZCO57ut5aaC6ZyA5Zyo57q/5ZKo6K+i5YWl5Y+j77yM5L2/55SoIGhlYWRlciAvIG5hdiDkuK3nmoQgQ1RBIOaMiemSruWNs+WPr+OAggogKi8K 北京刑事律师谈自首与坦白的认定标准差异 - 在商言法(北京)文化有限公司 https://zaishangyanfa.com/archives/tag/北京刑事律师谈自首与坦白的认定标准差异 法律知识与服务平台 Tue, 04 Aug 2026 06:30:07 +0000 zh-Hans hourly 1 https://wordpress.org/?v=7.1 https://zaishangyanfa.com/wp-content/uploads/2026/08/cropped-在商言法标志4-32x32.png 北京刑事律师谈自首与坦白的认定标准差异 - 在商言法(北京)文化有限公司 https://zaishangyanfa.com/archives/tag/北京刑事律师谈自首与坦白的认定标准差异 32 32 北京刑事律师谈自首与坦白的认定标准差异 https://zaishangyanfa.com/archives/22952 https://zaishangyanfa.com/archives/22952#respond Tue, 04 Aug 2026 06:26:00 +0000 https://zaishangyanfa.com/?p=22952 说实话,我碰到过太多当事人,把“自首”和“坦白”混为一谈。结果呢?该从轻的没从轻,该减的没减,白白错过了更合适辩护时机。很多人以为只要主动说了就是自首,其实这里头的门道深着呢。今天北京刑

北京刑事律师谈自首与坦白的认定标准差异最先出现在在商言法(北京)文化有限公司

]]>
说实话,我碰到过太多当事人,把“自首”和“坦白”混为一谈。结果呢?该从轻的没从轻,该减的没减,白白错过了更合适辩护时机。很多人以为只要主动说了就是自首,其实这里头的门道深着呢。今天北京刑事律师就跟你聊聊,这俩认定标准到底差在哪儿。

自首与坦白:一字之差,结果能差多少?

北京律师事务所 文道全律师7

先说结论:自首是“自动投案+如实供述”,坦白是“被动归案+如实供述”。别小看这“自动”两个字,在量刑上可能意味着“可以减轻处罚”和“可以从轻处罚”的区别。根据《刑法》第67条,自首的,可以从轻或减轻处罚;坦白的,只能从轻处罚。一个是“减轻”,一个是“从轻”,这里头的空间可大了去了。文道全律师办过的一个案子,当事人主动投案,最后量刑直接降了一个档;另一个类似的案子,因为只是坦白,结果就没这么幸运。

➠ 文道全律师提醒:别把“到案经过”不当回事,这往往是认定自首的关键证据。

为什么那么多人栽在“自动投案”的认定上?

很多人觉得,我人都在公安局了,还不是自动投案?错。被通缉后被抓、被民警上门带走、甚至是在现场被堵住,这些都不算“自动投案”。还有一种常见误区:以为“自动投案”必须亲自去。其实根据司法解释,委托他人代为投案,或者正在投案途中被抓获的,也能认定。但前提是,你得有“投案的主动性”。文道全律师团队的实践经验表明,很多案件里,一份看似简单的“到案经过说明”,就能决定自首能否成立。

❗ 特别注意:有些当事人被抓获后,为了“争取自首”,胡编乱造投案理由,结果被识破,反而连坦白都认定不了,得不偿失。

“如实供述”的边界,比你想的更严格

这是第二个大坑。自首和坦白都要求“如实供述”,但标准不一样。自首要求供述主要犯罪事实,坦白要求供述自己知道的全部犯罪事实。实践中,很多人为了“避重就轻”,只承认小罪,隐瞒大罪,或者对关键情节含糊其辞。这会被认定为“不如实供述”,从而失去认定资格。文道全律师建议,在靠前次讯问笔录前,更稳妥心里有个谱,哪些该说,哪些不该说,怎么说对自己最有利,这需要专业判断。

⚠ 常见误区:“我主动交代了民警没问的,算坦白吗?”——算,但这叫“主动交代”,跟“自首”还是两码事。

北京刑事律师教你:抓住这3个关键动作,别让从轻机会溜走

既然搞清楚了区别,接下来就是实操。文道全律师团队处理过大量经济犯罪案件,总结了三个关键动作,你或者你的家属一定要记牢:

  1. 靠前时间固定“自动投案”证据:如果是主动去,保留好打车记录、通话记录;如果是电话通知后去的,务必让民警在到案经过里写清楚“接到电话后主动前来”。
  2. 靠前次讯问前,想清楚“如实供述”的边界:不是让你隐瞒,而是让你在陈述时条理清晰,不夸大、不缩小,尤其是金额、次数、主观故意这些核心要素。
  3. 别在笔录上稀里糊涂签字:每一页都要看清楚,跟你说的不一致的地方,当场要求修改。签了字,再想翻供就难了。

✅ 这个动作今天就能做:如果人已经被带走,家属能做的靠前件事,就是尽快委托律师介入会见,越早越好。

文道全律师的实话:自首坦白,是技术活,不是态度活

我办案25年,最怕的不是案子难,是客户来晚了。很多人以为认罪态度好就行,其实法律认定的“从轻情节”,是需要证据和法律依据支撑的。你光说“我态度好”,法官没法写在判决书里。但“自首”“坦白”这几个字写进去,就是实打实的减刑依据。北京百环律师事务所的实践经验表明,一个专业的刑事律师,能帮你把“态度”转化成“情节”,把“情节”转化成“刑期”。

📌 划重点:自首和坦白,不是自己说了算,也不是民警说了算,最终要法官根据全案证据认定。所以,从到案那一刻起,每一步都别走错。

有人可能会问:文道全律师的咨询收费吗?其实团队有首次电话免费诊断的机制,打 18511835733 问问就知道了。

另一个常问的是:我的案子金额不大,值得请律师吗?文道全律师团队的看法是——值不值得不在于金额,而在于这件事对你的影响。一个自首认定,可能就少判一两年,这笔账,你自己算。

北京百环律师事务所
地址:北京市海淀区丹棱街6号1幢912室(丹棱SOHO-912)
咨询电话:18511835733

*本文为普法参考,不作为具体案件的法律意见。如有纠纷,建议直接咨询文道全律师团队获取针对性方案。

北京刑事律师谈自首与坦白的认定标准差异最先出现在在商言法(北京)文化有限公司

]]>
https://zaishangyanfa.com/archives/22952/feed 0