# Name: cnk_versioning v0.1.6 # Type: Admin/Client side plugin # Autoload Templates # Author: Christian Nowak # URL: http://www.cnowak.de # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTQ6ImNua192ZXJzaW9uaW5nIjtzOjY6ImF1dGhvciI7czox NToiQ2hyaXN0aWFuIE5vd2FrIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIwOiJodHRwOi8vd3d3 LmNub3dhay5kZSI7czo3OiJ2ZXJzaW9uIjtzOjU6IjAuMS42IjtzOjExOiJkZXNjcmlwdGlv biI7czoxODoiQXV0b2xvYWQgVGVtcGxhdGVzIjtzOjQ6ImNvZGUiO3M6MTIzNTE6Imdsb2Jh bCAkQ05LX1ZFUl9PVVRQVVRfUEFUSCwgJENOS19WRVJfRVhULCAkQ05LX1ZFUl9FWFRfQ1NT Ow0KDQokQ05LX1ZFUl9PVVRQVVRfUEFUSCA9ICcnOyAvL2UuZy4gJ3RleHRwYXR0ZXJuL190 ZW1wbGF0ZXMvdmVyc2lvbmluZy8nDQokQ05LX1ZFUl9FWFQgPSAndHhwJzsNCiRDTktfVkVS X0VYVF9DU1MgPSAnY3NzJzsNCg0KLyoNCglETyBOT1QgRURJVCBCRUxPVyBUSElTIExJTkUh DQoqLw0KDQokQ05LX1ZFUl9PVVRQVVRfUEFUSCA9IHRyaW0oJENOS19WRVJfT1VUUFVUX1BB VEgsICcvJykuKCRDTktfVkVSX09VVFBVVF9QQVRIPycvJzonJyk7DQoNCmlmKEB0eHBpbnRl cmZhY2UgPT0gJ2FkbWluJykgDQp7DQoJYWRkX3ByaXZzKCdjbmtfdmVyc2lvbmluZycsJzEs MicpOw0KCXJlZ2lzdGVyX3RhYigncHJlc2VudGF0aW9uJywgJ2Nua192ZXJzaW9uaW5nJywg IlZlcnNpb25pbmciKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnY25rX3Zlcl9oYW5kbGVyJywg J2Nua192ZXJzaW9uaW5nJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ2Nua192ZXJfZGlzYWJs ZV9vbmxpbmVfZWRpdGluZycsICdwYWdlJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ2Nua192 ZXJfZGlzYWJsZV9vbmxpbmVfZWRpdGluZycsICdmb3JtJyk7DQoJcmVnaXN0ZXJfY2FsbGJh Y2soJ2Nua192ZXJfZGlzYWJsZV9vbmxpbmVfZWRpdGluZycsICdjc3MnKTsNCn0NCmVsc2Ug aWYgKEB0eHBpbnRlcmZhY2UgPT0gJ3B1YmxpYycpDQp7DQoJcmVnaXN0ZXJfY2FsbGJhY2so J2Nua192ZXJfdGV4dHBhdHRlcm4nLCAndGV4dHBhdHRlcm4nKTsNCn0NCg0KZnVuY3Rpb24g Y25rX3Zlcl90ZXh0cGF0dGVybigpDQp7DQoJZ2xvYmFsICRwcm9kdWN0aW9uX3N0YXR1cywg JENOS19WRVJfT1VUUFVUX1BBVEgsICRDTktfVkVSX0VYVCwgJENOS19WRVJfRVhUX0NTUzsN CgkNCglpZiAoJHByb2R1Y3Rpb25fc3RhdHVzICE9ICdsaXZlJykNCgl7DQoJCSRlcnJvciA9 IGZhbHNlOw0KCQkNCgkJLy8gcmVhZCBhbGwgZmlsZXMNCgkJJGZvcm1zID0gZ2xvYigkQ05L X1ZFUl9PVVRQVVRfUEFUSC4nZm9ybXMvKi4nLiRDTktfVkVSX0VYVCk7DQoJCSRwYWdlcyA9 IGdsb2IoJENOS19WRVJfT1VUUFVUX1BBVEguJ3BhZ2VzLyouJy4kQ05LX1ZFUl9FWFQpOw0K CQkkY3NzID0gZ2xvYigkQ05LX1ZFUl9PVVRQVVRfUEFUSC4nY3NzLyouJy4kQ05LX1ZFUl9F WFRfQ1NTKTsNCgkJDQoJCWlmICgkZm9ybXMgIT09IGZhbHNlKSAkZXJyb3IgPSAhY25rX3Zl cl9wdXNoX2Zvcm1zKCRmb3Jtcyk7DQoJCWlmICgkcGFnZXMgIT09IGZhbHNlKSAkZXJyb3Ig PSAhY25rX3Zlcl9wdXNoX3BhZ2VzKCRwYWdlcyk7DQoJCWlmICgkY3NzICE9PSBmYWxzZSkg JGVycm9yID0gIWNua192ZXJfcHVzaF9jc3MoJGNzcyk7DQoJCQ0KCQlpZiAoJGVycm9yKSBl Y2hvICdFcnJvcnMgd2hpbGUgc3luY2hyb25pc2luZyBkYXRhYmFzZSBhbmQgZmlsZXMnOw0K CX0NCn0NCg0KZnVuY3Rpb24gY25rX3Zlcl9wdXNoX2Zvcm1zKCRmb3JtX2ZpbGVzKQ0Kew0K CWdsb2JhbCAkQ05LX1ZFUl9PVVRQVVRfUEFUSCwgJENOS19WRVJfRVhUOw0KCQ0KCSRmb3Jt cyA9IGFycmF5KCk7DQoNCgkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoJ25hbWUsdHlwZSxJRk5V TEwodW5peF90aW1lc3RhbXAoZmlsZV9tb2RfdGltZSksIDApIGFzIG1vZF90aW1lJywgJ3R4 cF9mb3JtJywgJzE9MScpOw0KCQ0KCXdoaWxlICgkcnMgJiYgJHIgPSBuZXh0Um93KCRycykp DQoJew0KCQkkZm9ybXNbJENOS19WRVJfT1VUUFVUX1BBVEguJ2Zvcm1zLycuJHJbJ25hbWUn XS4nLicuJHJbJ3R5cGUnXS4nLicuJENOS19WRVJfRVhUXSA9ICRyWydtb2RfdGltZSddOw0K CX0NCgkNCglmb3IgKCRpPTA7ICRpIDwgY291bnQoJGZvcm1fZmlsZXMpOyAkaSsrKQ0KCXsN CgkJaWYgKGlzc2V0KCRmb3Jtc1skZm9ybV9maWxlc1skaV1dKSAmJiAkZm9ybXNbJGZvcm1f ZmlsZXNbJGldXSA8IGZpbGVtdGltZSgkZm9ybV9maWxlc1skaV0pKQ0KCQl7DQoJCQljbmtf dmVyX3VwZGF0ZV9mb3JtKCRmb3JtX2ZpbGVzWyRpXSk7DQoJCX0NCgkJZWxzZSBpZiAoIWlz c2V0KCRmb3Jtc1skZm9ybV9maWxlc1skaV1dKSkNCgkJew0KCQkJY25rX3Zlcl91cGRhdGVf Zm9ybSgkZm9ybV9maWxlc1skaV0sIHRydWUpOw0KCQl9DQoJCSRmb3Jtc1skZm9ybV9maWxl c1skaV1dID0gJ3Byb2Nlc3NlZCc7DQoJfQ0KCQkNCgkvLyBkZWxldGUgcmVtb3ZlZCBmb3Jt cw0KCWZvcmVhY2ggKCRmb3JtcyBhcyAka2V5ID0+ICR2YWx1ZSkNCgl7DQoJCWlmICgkdmFs dWUgIT0gJ3Byb2Nlc3NlZCcpDQoJCXsNCgkJCSRjb2xzID0gZXhwbG9kZSgnLicsIGJhc2Vu YW1lKCRrZXksICcuJy4kQ05LX1ZFUl9FWFQpKTsNCgkJCSRuYW1lID0gJGNvbHNbMF07DQoJ CQkkdHlwZSA9ICRjb2xzWzFdOw0KCQkJDQoJCQlzYWZlX2RlbGV0ZSgndHhwX2Zvcm0nLCAi bmFtZSA9ICckbmFtZScgQU5EIHR5cGUgPSAnJHR5cGUnIik7DQoJCX0NCgl9DQoNCglyZXR1 cm4gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gY25rX3Zlcl91cGRhdGVfZm9ybSgkZmlsZW5hbWUs ICRjcmVhdGUgPSBmYWxzZSkNCnsNCglnbG9iYWwgJENOS19WRVJfRVhUOw0KCQ0KCSRjb2xz ID0gZXhwbG9kZSgnLicsIGJhc2VuYW1lKCRmaWxlbmFtZSwgJy4nLiRDTktfVkVSX0VYVCkp Ow0KDQoJJG5hbWUgPSAkY29sc1swXTsNCgkkdHlwZSA9ICRjb2xzWzFdOw0KCSRmb3JtID0g ZG9TbGFzaChmaWxlX2dldF9jb250ZW50cygkZmlsZW5hbWUpKTsNCgkNCglpZiAoJGNyZWF0 ZSkNCgl7DQoJCXNhZmVfaW5zZXJ0KCd0eHBfZm9ybScsICJuYW1lID0gJyRuYW1lJywgdHlw ZSA9ICckdHlwZScsIGZvcm0gPSAnJGZvcm0nLCBmaWxlX21vZF90aW1lID0gRlJPTV9VTklY VElNRSgnIi50aW1lKCkuIicpIik7DQoJfQ0KCWVsc2UNCgl7DQoJCXNhZmVfdXBkYXRlKCd0 eHBfZm9ybScsICJmb3JtID0gJyRmb3JtJywgZmlsZV9tb2RfdGltZSA9IEZST01fVU5JWFRJ TUUoJyIudGltZSgpLiInKSIsICJuYW1lID0gJyRuYW1lJyBBTkQgdHlwZSA9ICckdHlwZSci KTsNCgl9DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfcHVzaF9wYWdlcygkcGFnZV9maWxlcykN CnsNCglnbG9iYWwgJENOS19WRVJfT1VUUFVUX1BBVEgsICRDTktfVkVSX0VYVDsNCgkNCgkk cGFnZXMgPSBhcnJheSgpOw0KDQoJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KCduYW1lLElGTlVM TCh1bml4X3RpbWVzdGFtcChmaWxlX21vZF90aW1lKSwgMCkgYXMgbW9kX3RpbWUnLCAndHhw X3BhZ2UnLCAnMT0xJyk7DQoJDQoJd2hpbGUgKCRycyAmJiAkciA9IG5leHRSb3coJHJzKSkN Cgl7DQoJCSRwYWdlc1skQ05LX1ZFUl9PVVRQVVRfUEFUSC4ncGFnZXMvJy4kclsnbmFtZSdd LicuJy4kQ05LX1ZFUl9FWFRdID0gJHJbJ21vZF90aW1lJ107DQoJfQ0KCQ0KCWZvciAoJGk9 MDsgJGkgPCBjb3VudCgkcGFnZV9maWxlcyk7ICRpKyspDQoJew0KCQlpZiAoaXNzZXQoJHBh Z2VzWyRwYWdlX2ZpbGVzWyRpXV0pICYmICRwYWdlc1skcGFnZV9maWxlc1skaV1dIDwgZmls ZW10aW1lKCRwYWdlX2ZpbGVzWyRpXSkpDQoJCXsNCgkJCWNua192ZXJfdXBkYXRlX3BhZ2Uo JHBhZ2VfZmlsZXNbJGldKTsNCgkJfQ0KCQllbHNlIGlmICghaXNzZXQoJHBhZ2VzWyRwYWdl X2ZpbGVzWyRpXV0pKQ0KCQl7DQoJCQljbmtfdmVyX3VwZGF0ZV9wYWdlKCRwYWdlX2ZpbGVz WyRpXSwgdHJ1ZSk7DQoJCX0NCgkJJHBhZ2VzWyRwYWdlX2ZpbGVzWyRpXV0gPSAncHJvY2Vz c2VkJzsNCgl9DQoJCQ0KCS8vIGRlbGV0ZSByZW1vdmVkIHBhZ2VzDQoJZm9yZWFjaCAoJHBh Z2VzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCXsNCgkJaWYgKCR2YWx1ZSAhPSAncHJvY2Vzc2Vk JykNCgkJew0KCQkJJG5hbWUgPSBiYXNlbmFtZSgka2V5LCAnLicuJENOS19WRVJfRVhUKTsN CgkJCQ0KCQkJc2FmZV9kZWxldGUoJ3R4cF9wYWdlJywgIm5hbWUgPSAnJG5hbWUnIik7DQoJ CX0NCgl9DQoNCglyZXR1cm4gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gY25rX3Zlcl91cGRhdGVf cGFnZSgkZmlsZW5hbWUsICRjcmVhdGUgPSBmYWxzZSkNCnsNCglnbG9iYWwgJENOS19WRVJf RVhUOw0KCQ0KCSRuYW1lID0gYmFzZW5hbWUoJGZpbGVuYW1lLCAnLicuJENOS19WRVJfRVhU KTsNCgkkdXNlcl9odG1sID0gZG9TbGFzaChmaWxlX2dldF9jb250ZW50cygkZmlsZW5hbWUp KTsNCgkNCglpZiAoJGNyZWF0ZSkNCgl7DQoJCXNhZmVfaW5zZXJ0KCd0eHBfcGFnZScsICJu YW1lID0gJyRuYW1lJywgdXNlcl9odG1sID0gJyR1c2VyX2h0bWwnLCBmaWxlX21vZF90aW1l ID0gRlJPTV9VTklYVElNRSgnIi50aW1lKCkuIicpIik7DQoJfQ0KCWVsc2UNCgl7DQoJCXNh ZmVfdXBkYXRlKCd0eHBfcGFnZScsICJ1c2VyX2h0bWwgPSAnJHVzZXJfaHRtbCcsIGZpbGVf bW9kX3RpbWUgPSBGUk9NX1VOSVhUSU1FKCciLnRpbWUoKS4iJykiLCAibmFtZSA9ICckbmFt ZSciKTsNCgl9DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfcHVzaF9jc3MoJGNzc19maWxlcykN CnsNCglnbG9iYWwgJENOS19WRVJfT1VUUFVUX1BBVEgsICRDTktfVkVSX0VYVF9DU1M7DQoJ DQoJJGNzcyA9IGFycmF5KCk7DQoNCgkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoJ25hbWUsSUZO VUxMKHVuaXhfdGltZXN0YW1wKGZpbGVfbW9kX3RpbWUpLCAwKSBhcyBtb2RfdGltZScsICd0 eHBfY3NzJywgJzE9MScpOw0KCQ0KCXdoaWxlICgkcnMgJiYgJHIgPSBuZXh0Um93KCRycykp DQoJew0KCQkkY3NzWyRDTktfVkVSX09VVFBVVF9QQVRILidjc3MvJy4kclsnbmFtZSddLicu Jy4kQ05LX1ZFUl9FWFRfQ1NTXSA9ICRyWydtb2RfdGltZSddOw0KCX0NCgkNCglmb3IgKCRp PTA7ICRpIDwgY291bnQoJGNzc19maWxlcyk7ICRpKyspDQoJew0KCQlpZiAoaXNzZXQoJGNz c1skY3NzX2ZpbGVzWyRpXV0pICYmICRjc3NbJGNzc19maWxlc1skaV1dIDwgZmlsZW10aW1l KCRjc3NfZmlsZXNbJGldKSkNCgkJew0KCQkJY25rX3Zlcl91cGRhdGVfY3NzKCRjc3NfZmls ZXNbJGldKTsNCgkJfQ0KCQllbHNlIGlmICghaXNzZXQoJGNzc1skY3NzX2ZpbGVzWyRpXV0p KQ0KCQl7DQoJCQljbmtfdmVyX3VwZGF0ZV9jc3MoJGNzc19maWxlc1skaV0sIHRydWUpOw0K CQl9DQoJCSRjc3NbJGNzc19maWxlc1skaV1dID0gJ3Byb2Nlc3NlZCc7DQoJfQ0KCQkNCgkv LyBkZWxldGUgcmVtb3ZlZCBjc3MgZmlsZXMNCglmb3JlYWNoICgkY3NzIGFzICRrZXkgPT4g JHZhbHVlKQ0KCXsNCgkJaWYgKCR2YWx1ZSAhPSAncHJvY2Vzc2VkJykNCgkJew0KCQkJJG5h bWUgPSBiYXNlbmFtZSgka2V5LCAnLicuJENOS19WRVJfRVhUX0NTUyk7DQoJCQkNCgkJCXNh ZmVfZGVsZXRlKCd0eHBfY3NzJywgIm5hbWUgPSAnJG5hbWUnIik7DQoJCX0NCgl9DQoNCgly ZXR1cm4gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gY25rX3Zlcl91cGRhdGVfY3NzKCRmaWxlbmFt ZSwgJGNyZWF0ZSA9IGZhbHNlKQ0Kew0KCWdsb2JhbCAkQ05LX1ZFUl9FWFRfQ1NTOw0KCQ0K CSRuYW1lID0gYmFzZW5hbWUoJGZpbGVuYW1lLCAnLicuJENOS19WRVJfRVhUX0NTUyk7DQoJ JGNzcyA9IGRvU2xhc2goYmFzZTY0X2VuY29kZShmaWxlX2dldF9jb250ZW50cygkZmlsZW5h bWUpKSk7DQoJDQoJaWYgKCRjcmVhdGUpDQoJew0KCQlzYWZlX2luc2VydCgndHhwX2Nzcycs ICJuYW1lID0gJyRuYW1lJywgY3NzID0gJyRjc3MnLCBmaWxlX21vZF90aW1lID0gRlJPTV9V TklYVElNRSgnIi50aW1lKCkuIicpIik7DQoJfQ0KCWVsc2UNCgl7DQoJCXNhZmVfdXBkYXRl KCd0eHBfY3NzJywgImNzcyA9ICckY3NzJywgZmlsZV9tb2RfdGltZSA9IEZST01fVU5JWFRJ TUUoJyIudGltZSgpLiInKSIsICJuYW1lID0gJyRuYW1lJyIpOw0KCX0NCn0NCg0KZnVuY3Rp b24gY25rX3Zlcl9oYW5kbGVyKCRldmVudCwgJHN0ZXApDQp7DQoJaWYoISRzdGVwIG9yICFp bl9hcnJheSgkc3RlcCwgYXJyYXkoJ2Nua192ZXJfbWVudScsDQoJCQkJCQkJCQkJJ2Nua192 ZXJfcHVsbF9hbGwnLA0KCQkJCQkJCQkJCSdjbmtfdmVyX2luc3RhbGwnLA0KCQkJCQkJCQkJ CSdjbmtfdmVyX2RlaW5zdGFsbCcpKSkNCgl7DQoJCWNua192ZXJfbWVudSgpOw0KCX0gDQoJ ZWxzZQ0KCXsNCgkJJHN0ZXAoKTsNCgl9DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfZGlzYWJs ZV9vbmxpbmVfZWRpdGluZygkZXZlbnQsICRzdGVwKQ0Kew0KCS8vIGNsZWFyIG9iDQoJb2Jf ZW5kX2NsZWFuKCk7DQoJDQoJLy8gcmV0dXJuIGVycm9yIG1lc3NhZ2UNCgkNCglwYWdldG9w KCdWZXJzaW9uaW5nJyk7DQoJDQoJZWNobyAnPGRpdiBzdHlsZT0ibWFyZ2luOiBhdXRvOyB0 ZXh0LWFsaWduOiBjZW50ZXIiPjx1bD4nOw0KCQ0KCWVjaG8gJ1doaWxlIGNua192ZXJzaW9u aW5nIGlzIGVuYWJsZWQsIHRoaXMgZnVuY3Rpb24gaXMgZGlzYWJsZWQuJzsNCgkNCgllY2hv ICc8L2Rpdj4nOw0KfQ0KDQpmdW5jdGlvbiBjbmtfdmVyX21lbnUoJG1lc3NhZ2UgPSAnJykN CnsNCglwYWdldG9wKCdWZXJzaW9uaW5nJywgJG1lc3NhZ2UpOw0KCQ0KCWVjaG8gJzxkaXYg c3R5bGU9Im1hcmdpbjogYXV0bzsgdGV4dC1hbGlnbjogY2VudGVyIj48dWw+JzsNCgkNCgll Y2hvICc8bGk+PGEgaHJlZj0iP2V2ZW50PWNua192ZXJzaW9uaW5nJy5hLidzdGVwPWNua192 ZXJfcHVsbF9hbGwiPldyaXRlIHBhZ2VzICYgZm9ybXMgdG8gZmlsZXM8L2E+PC9saT4nOw0K CQ0KCWVjaG8gJzwvdWw+JzsNCgkNCgllY2hvICc8dWwgc3R5bGU9Im1hcmdpbi10b3A6IDEw MHB4Ij4nOwkNCgkNCgllY2hvICc8bGk+PGEgaHJlZj0iP2V2ZW50PWNua192ZXJzaW9uaW5n Jy5hLidzdGVwPWNua192ZXJfaW5zdGFsbCI+SW5zdGFsbDwvYT48L2xpPic7DQoJDQoJZWNo byAnPGxpPjxhIGhyZWY9Ij9ldmVudD1jbmtfdmVyc2lvbmluZycuYS4nc3RlcD1jbmtfdmVy X2RlaW5zdGFsbCI+RGVpbnN0YWxsPC9hPjwvbGk+JzsNCg0KCWVjaG8gJzwvdWw+JzsNCgkN CgllY2hvICc8L2Rpdj4nOw0KfQ0KDQpmdW5jdGlvbiBjbmtfdmVyX3B1bGxfYWxsKCkNCnsN CglnbG9iYWwgJENOS19WRVJfT1VUUFVUX1BBVEgsICRDTktfVkVSX0VYVCwgJENOS19WRVJf RVhUX0NTUzsNCgkNCglwYWdldG9wKCdXcml0ZSB0byBmaWxlcycsICcnKTsNCgkNCgllY2hv ICc8ZGl2IHN0eWxlPSJtYXJnaW46IGF1dG87IHRleHQtYWxpZ246IGNlbnRlciI+JzsNCgkJ CQkNCglpZiAoZ3BzKCdkb19wdWxsJykgfHwgKGdsb2IoJy4uLycuJENOS19WRVJfT1VUUFVU X1BBVEguJ3BhZ2VzLyouJy4kQ05LX1ZFUl9FWFQpID09PSBmYWxzZSAmJiBnbG9iKCcuLi8n LiRDTktfVkVSX09VVFBVVF9QQVRILidmb3Jtcy8qLicuJENOS19WRVJfRVhUKSA9PT0gZmFs c2UgJiYgZ2xvYignLi4vJy4kQ05LX1ZFUl9PVVRQVVRfUEFUSC4nY3NzLyouJy4kQ05LX1ZF Ul9FWFRfQ1NTKSA9PT0gZmFsc2UpKQ0KCXsNCgkJJGVycm9yID0gZmFsc2U7DQoJCQ0KCQkv LyB0ZXN0IGlmIGZvbGRlcnMgZXhpc3QgYW5kIGhhdmUgd3JpdGUgcGVybWlzc2lvbnMNCgkJ aWYgKEBpc193cml0YWJsZSgnLi4vJy4kQ05LX1ZFUl9PVVRQVVRfUEFUSC4nZm9ybXMvJykg PT09IGZhbHNlKQ0KCQl7DQoJCQkkZXJyb3IgPSB0cnVlOw0KCQkJZWNobyAnRm9sZGVyICIv Zm9ybXMvIiBpcyBub3Qgd3JpdGFibGUuPGJyIC8+PGJyIC8+JzsNCgkJfQ0KCQkNCgkJaWYg KEBpc193cml0YWJsZSgnLi4vJy4kQ05LX1ZFUl9PVVRQVVRfUEFUSC4ncGFnZXMvJykgPT09 IGZhbHNlKQ0KCQl7DQoJCQkkZXJyb3IgPSB0cnVlOw0KCQkJZWNobyAnRm9sZGVyICIvcGFn ZXMvIiBpcyBub3Qgd3JpdGFibGUuPGJyIC8+PGJyIC8+JzsNCgkJfQ0KCQkNCgkJaWYgKEBp c193cml0YWJsZSgnLi4vJy4kQ05LX1ZFUl9PVVRQVVRfUEFUSC4nY3NzLycpID09PSBmYWxz ZSkNCgkJew0KCQkJJGVycm9yID0gdHJ1ZTsNCgkJCWVjaG8gJ0ZvbGRlciAiL2Nzcy8iIGlz IG5vdCB3cml0YWJsZS4nOw0KCQl9DQoJCQ0KCQlpZiAoISRlcnJvcikNCgkJew0KCQkJCWlm IChjbmtfdmVyX3B1bGxfZm9ybXMoKSkNCgkJCQl7DQoJCQkJCWVjaG8gJ0Zvcm1zIHdlcmUg c3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhlICIvZm9ybXMvIiBkaXJlY3RvcnkuPGJyIC8+ PGJyIC8+JzsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJZWNobyAnVGhlcmUgd2Fz IGFuIGVycm9yIHdoaWxlIHByb2Nlc3NpbmcgZm9ybXMuPGJyIC8+PGJyIC8+JzsNCgkJCQl9 DQoJCQkJDQoJCQkJaWYgKGNua192ZXJfcHVsbF9wYWdlcygpKQ0KCQkJCXsNCgkJCQkJZWNo byAnUGFnZXMgd2VyZSBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0byB0aGUgIi9wYWdlcy8iIGRp cmVjdG9yeS48YnIgLz48YnIgLz4nOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQll Y2hvICdUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBwYWdlcy48YnIgLz48 YnIgLz4nOw0KCQkJCX0NCgkJCQkNCgkJCQlpZiAoY25rX3Zlcl9wdWxsX2NzcygpKQ0KCQkJ CXsNCgkJCQkJZWNobyAnU3R5bGVzIHdlcmUgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhl ICIvY3NzLyIgZGlyZWN0b3J5Lic7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCWVj aG8gJ1RoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBwcm9jZXNzaW5nIGNzcy4nOw0KCQkJCX0N CgkJfQ0KCQkNCgkJZWNobyAnPGJyIC8+PGJyIC8+PGEgaHJlZj0iP2V2ZW50PWNua192ZXJz aW9uaW5nIj5CYWNrIHRvIG1lbnUuLi48L2E+JzsNCgl9DQoJZWxzZQ0KCXsNCgkJZWNobyAn VGhlcmUgYXJlIGFscmVhZHkgc29tZSBmaWxlcyBpbiB0aGUgcGFnZXMsIGZvcm1zIG9yIGNz cyBkaXJlY3RvcnksIHdoaWNoIHdpbGwgYmUgb3ZlcnJpZGVuLiBEbyB5b3Ugd2FudCB0byBj b250aW51ZT88YnIgLz48YnIgLz4nLg0KCQkNCgkJJzxhIGhyZWY9Ij9ldmVudD1jbmtfdmVy c2lvbmluZycuYS4nc3RlcD1jbmtfdmVyX3B1bGxfYWxsJy5hLidkb19wdWxsPTEiPlllcywg b3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzLi4uPC9hPjxiciAvPjxiciAvPicuDQoJCQ0KCQkn PGEgaHJlZj0iP2V2ZW50PWNua192ZXJzaW9uaW5nIj5ObywgYnJpbmcgbWUgYmFjayB0byB0 aGUgbWVudS4uLjwvYT4nOw0KCX0NCgkNCgllY2hvICc8L2Rpdj4nOw0KfQ0KDQpmdW5jdGlv biBjbmtfdmVyX3B1bGxfZm9ybXMoKQ0Kew0KCWdsb2JhbCAkQ05LX1ZFUl9PVVRQVVRfUEFU SCwgJENOS19WRVJfRVhUOw0KCQ0KCSRycyA9IHNhZmVfcm93c19zdGFydCgnbmFtZSwgdHlw ZSwgZm9ybScsICd0eHBfZm9ybScsICcxPTEnKTsNCgkNCgl3aGlsZSAoJHJzICYmICRyID0g bmV4dFJvdygkcnMpKQ0KCXsNCgkJaWYgKEBmaWxlX3B1dF9jb250ZW50cygnLi4vJy4kQ05L X1ZFUl9PVVRQVVRfUEFUSC4nZm9ybXMvJy4kclsnbmFtZSddLicuJy4kclsndHlwZSddLicu Jy4kQ05LX1ZFUl9FWFQsICRyWydmb3JtJ10pID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlOw0K CX0NCgkNCglzYWZlX3VwZGF0ZSgndHhwX2Zvcm0nLCAiZmlsZV9tb2RfdGltZSA9IEZST01f VU5JWFRJTUUoJyIudGltZSgpLiInKSIsICcxPTEnKTsNCgkNCglyZXR1cm4gdHJ1ZTsNCn0N Cg0KZnVuY3Rpb24gY25rX3Zlcl9wdWxsX3BhZ2VzKCkNCnsNCglnbG9iYWwgJENOS19WRVJf T1VUUFVUX1BBVEgsICRDTktfVkVSX0VYVDsNCgkNCgkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQo J25hbWUsIHVzZXJfaHRtbCcsICd0eHBfcGFnZScsICcxPTEnKTsNCgkNCgl3aGlsZSAoJHJz ICYmICRyID0gbmV4dFJvdygkcnMpKQ0KCXsNCgkJaWYgKEBmaWxlX3B1dF9jb250ZW50cygn Li4vJy4kQ05LX1ZFUl9PVVRQVVRfUEFUSC4ncGFnZXMvJy4kclsnbmFtZSddLicuJy4kQ05L X1ZFUl9FWFQsICRyWyd1c2VyX2h0bWwnXSkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7DQoJ fQ0KCQ0KCXNhZmVfdXBkYXRlKCd0eHBfcGFnZScsICJmaWxlX21vZF90aW1lID0gRlJPTV9V TklYVElNRSgnIi50aW1lKCkuIicpIiwgJzE9MScpOw0KCQ0KCXJldHVybiB0cnVlOw0KfQ0K DQpmdW5jdGlvbiBjbmtfdmVyX3B1bGxfY3NzKCkNCnsNCglnbG9iYWwgJENOS19WRVJfT1VU UFVUX1BBVEgsICRDTktfVkVSX0VYVF9DU1M7DQoJDQoJJHJzID0gc2FmZV9yb3dzX3N0YXJ0 KCduYW1lLCBjc3MnLCAndHhwX2NzcycsICcxPTEnKTsNCgkNCgl3aGlsZSAoJHJzICYmICRy ID0gbmV4dFJvdygkcnMpKQ0KCXsNCgkJaWYgKEBmaWxlX3B1dF9jb250ZW50cygnLi4vJy4k Q05LX1ZFUl9PVVRQVVRfUEFUSC4nY3NzLycuJHJbJ25hbWUnXS4nLicuJENOS19WRVJfRVhU X0NTUywgYmFzZTY0X2RlY29kZSgkclsnY3NzJ10pKSA9PT0gZmFsc2UpIHJldHVybiBmYWxz ZTsNCgl9DQoJDQoJc2FmZV91cGRhdGUoJ3R4cF9jc3MnLCAiZmlsZV9tb2RfdGltZSA9IEZS T01fVU5JWFRJTUUoJyIudGltZSgpLiInKSIsICcxPTEnKTsNCgkNCglyZXR1cm4gdHJ1ZTsN Cn0NCg0KZnVuY3Rpb24gY25rX3Zlcl9pbnN0YWxsKCkNCnsNCglwYWdldG9wKCdWZXJzaW9u aW5nIFBsdWdpbiBJbnN0YWxsYXRpb24nLCAnJyk7DQoJDQoJZWNobyAnPGRpdiBzdHlsZT0i bWFyZ2luOmF1dG87IHRleHQtYWxpZ246Y2VudGVyIj4nOw0KCQ0KCWlmIChjbmtfdmVyX2Rv X2luc3RhbGwoKSkNCgl7DQoJCWVjaG8gJzxwPkluc3RhbGxhdGlvbiB3YXMgc3VjY2Vzc2Z1 bDwvcD4nOw0KCX0NCgllbHNlDQoJew0KCQllY2hvICc8cD5JbnN0YWxsYXRpb24gYWJvcnRl ZDwvcD4nOw0KCX0NCg0KCWVjaG8gJzwvZGl2Pic7DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJf ZG9faW5zdGFsbCgpDQp7DQoJJHNxbCA9ICJBTFRFUiBUQUJMRSAiLnNhZmVfcGZ4KCd0eHBf Zm9ybScpLiIgQUREIGBmaWxlX21vZF90aW1lYCBEQVRFVElNRSBOVUxMO0FMVEVSIFRBQkxF ICIuc2FmZV9wZngoJ3R4cF9wYWdlJykuIiBBREQgYGZpbGVfbW9kX3RpbWVgIERBVEVUSU1F IE5VTEw7QUxURVIgVEFCTEUgIi5zYWZlX3BmeCgndHhwX2NzcycpLiIgQUREIGBmaWxlX21v ZF90aW1lYCBEQVRFVElNRSBOVUxMIjsNCgkNCglpZiAoIWNua192ZXJfYmF0Y2hfcXVlcnko JHNxbCkpDQoJew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCWVsc2UNCgl7CQ0KCQlyZXR1cm4g dHJ1ZTsNCgl9DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfZGVpbnN0YWxsKCkNCnsNCglwYWdl dG9wKCdWZXJzaW9uaW5nIFBsdWdpbiBEZWluc3RhbGxhdGlvbicsICcnKTsNCgkNCgllY2hv ICc8ZGl2IHN0eWxlPSJtYXJnaW46YXV0bzsgdGV4dC1hbGlnbjpjZW50ZXIiPic7DQoJDQoJ aWYgKGdwcygnZG9fZGVpbnN0YWxsJykpDQoJew0KCQlpZiAoY25rX3Zlcl9kb19kZWluc3Rh bGwoKSkNCgkJew0KCQkJZWNobyAnPHA+RGVpbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWw8 L3A+JzsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCWVjaG8gJzxwPkRlaW5zdGFsbGF0aW9uIGFi b3J0ZWQ8L3A+JzsNCgkJfQ0KCX0NCgllbHNlDQoJew0KCQllY2hvICc8YSBocmVmPSI/ZXZl bnQ9Y25rX3ZlcnNpb25pbmcnLmEuJ3N0ZXA9Y25rX3Zlcl9kZWluc3RhbGwnLmEuJ2RvX2Rl aW5zdGFsbD0xIj5ZZXMsIEkgcmVhbGx5IHdhbnQgdG8gZGVpbnN0YWxsPC9hPic7DQoJfQ0K CQ0KCWVjaG8gJzwvZGl2Pic7DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfZG9fZGVpbnN0YWxs KCkNCnsNCgkkc3FsID0gIkFMVEVSIFRBQkxFICIuc2FmZV9wZngoJ3R4cF9mb3JtJykuIiBE Uk9QIGBmaWxlX21vZF90aW1lYDtBTFRFUiBUQUJMRSAiLnNhZmVfcGZ4KCd0eHBfcGFnZScp LiIgRFJPUCBgZmlsZV9tb2RfdGltZWA7QUxURVIgVEFCTEUgIi5zYWZlX3BmeCgndHhwX2Nz cycpLiIgRFJPUCBgZmlsZV9tb2RfdGltZWA7IjsNCgkNCglpZiAoIWNua192ZXJfYmF0Y2hf cXVlcnkoJHNxbCkpDQoJew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCWVsc2UNCgl7CQ0KCQly ZXR1cm4gdHJ1ZTsNCgl9DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfYmF0Y2hfcXVlcnkgKCRw X3F1ZXJ5LCAkcF90cmFuc2FjdGlvbl9zYWZlID0gdHJ1ZSkgDQp7DQoJaWYgKCRwX3RyYW5z YWN0aW9uX3NhZmUpIA0KCXsNCgkJJHBfcXVlcnkgPSAnU1RBUlQgVFJBTlNBQ1RJT047JyAu ICRwX3F1ZXJ5IC4gJzsgQ09NTUlUOyc7DQoJfQ0KCSAgDQoJJHF1ZXJ5X3NwbGl0ID0gcHJl Z19zcGxpdCAoIi9bO10rLyIsICRwX3F1ZXJ5KTsNCgkNCglmb3JlYWNoICgkcXVlcnlfc3Bs aXQgYXMgJGNvbW1hbmRfbGluZSkgDQoJew0KCQkkY29tbWFuZF9saW5lID0gdHJpbSgkY29t bWFuZF9saW5lKTsNCgkNCgkJaWYgKCRjb21tYW5kX2xpbmUgIT0gJycpIA0KCQl7DQoJCQkk cXVlcnlfcmVzdWx0ID0gc2FmZV9xdWVyeSgkY29tbWFuZF9saW5lKTsNCgkJDQoJCQlpZiAo JHF1ZXJ5X3Jlc3VsdCA9PT0gZmFsc2UpIA0KCQkJew0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9 DQoJfQ0KCQ0KCXJldHVybiAkcXVlcnlfcmVzdWx0Ow0KfSI7czo0OiJ0eXBlIjtzOjE6IjEi O3M6NDoiaGVscCI7czowOiIiO3M6MzoibWQ1IjtzOjMyOiJhMzVlMjVjNGM1YzZiNTNkOTFi YjAxMTY2YjkwMzM4MSI7fQ==