# Name: cnk_soccer v1.0.2 # Type: Admin/Client side plugin # Manages football league, clubs and games and displays statistics # 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: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTA6ImNua19zb2NjZXIiO3M6NjoiYXV0aG9yIjtzOjE1OiJD aHJpc3RpYW4gTm93YWsiO3M6MTA6ImF1dGhvcl91cmkiO3M6MjA6Imh0dHA6Ly93d3cuY25v d2FrLmRlIjtzOjc6InZlcnNpb24iO3M6NToiMS4wLjIiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjY0OiJNYW5hZ2VzIGZvb3RiYWxsIGxlYWd1ZSwgY2x1YnMgYW5kIGdhbWVzIGFuZCBkaXNw bGF5cyBzdGF0aXN0aWNzIjtzOjQ6ImNvZGUiO3M6NjM2Nzk6ImlmKEB0eHBpbnRlcmZhY2Ug PT0gJ2FkbWluJykgDQp7DQoJZGVmaW5lKCdDTktfU0NfSU1HX1VQTE9BRF9DQVRFR09SWScs ICdjbHVicycpOw0KCWRlZmluZSgnQ05LX1NDX0lNR19CUk9XU0VfRk9MREVSJywgJy9pbWFn ZXMvc29jY2VyL2NsdWJzLycpOw0KDQoJYWRkX3ByaXZzKCdjbmtfc29jY2VyJywnMSwyLDMs NCcpOw0KCWFkZF9wcml2cygnY25rX3NvY2Nlcl9hZG1pbicsJzEsMicpOw0KCQkJDQoJcmVn aXN0ZXJfdGFiKCdjb250ZW50JywgJ2Nua19zb2NjZXInLCAiU29jY2VyIik7DQoJcmVnaXN0 ZXJfY2FsbGJhY2soJ2Nua19zb2NjZXInLCAnY25rX3NvY2NlcicpOw0KCQ0KCSRjbHViX2Fy cmF5ID0gTlVMTDsNCn0NCg0KLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLyoNCglUQUc6IG5leHQgZ2FtZSA8 dHhwOmNua19uZXh0X2dhbWUgLz4NCiovDQovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpmdW5jdGlvbiBjbmtf bmV4dF9nYW1lKCRhdHRzKSANCnsNCglnbG9iYWwgJHByZWZzLCAkcHJldGV4dCwgJHMsICRp ZCwgJHRpdGxlOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ2xlYWd1ZV9pZCcgPT4g JzEnLA0KCQknZGF0ZV9wYXR0ZXJuJyA9PiAnJUEgJWUvJW0gLSAlWSwgS2wuICVIOiVNJywN CgkJJ2NvbG9uX2ltZ19maWxlbmFtZScgPT4gJ2ltYWdlcy9zb2NjZXIvY29sb24uZ2lmJywN CgkJJ2RlbGF5X2hvdXJzJyA9PiAnMicNCgkpLCAkYXR0cykpOw0KCQ0KCSRxID0gInNlbGVj dCBVTklYX1RJTUVTVEFNUChjbmtfc29jY2VyX2dhbWVzLmtpY2tvZmZfdGltZSkgYXMga2lj a29mZiwgY25rX3NvY2Nlcl9jbHViczEubmFtZSBhcyBjbHViMSwgY25rX3NvY2Nlcl9jbHVi czEubG9nbyBhcyBjbHViMV9sb2dvLCBjbmtfc29jY2VyX2NsdWJzMi5uYW1lIGFzIGNsdWIy LCBjbmtfc29jY2VyX2NsdWJzMi5sb2dvIGFzIGNsdWIyX2xvZ28sIGNua19zb2NjZXJfbGVh Z3VlLm5hbWUgYXMgbGVhZ3VlLCBjbmtfc29jY2VyX2xlYWd1ZS5zZWFzb24gYXMgc2Vhc29u IGZyb20gIi5zYWZlX3BmeCgnY25rX3NvY2Nlcl9nYW1lcycpLiIgYXMgY25rX3NvY2Nlcl9n YW1lcywgIi5zYWZlX3BmeCgnY25rX3NvY2Nlcl9sZWFndWUnKS4iIGFzIGNua19zb2NjZXJf bGVhZ3VlLCAiLnNhZmVfcGZ4KCdjbmtfc29jY2VyX2NsdWJzJykuIiBhcyBjbmtfc29jY2Vy X2NsdWJzMSwgIi5zYWZlX3BmeCgnY25rX3NvY2Nlcl9jbHVicycpLiIgYXMgY25rX3NvY2Nl cl9jbHViczIgd2hlcmUgY25rX3NvY2Nlcl9jbHViczEuaWQgPSBjbmtfc29jY2VyX2dhbWVz LmNsdWIxX2lkIEFORCBjbmtfc29jY2VyX2NsdWJzMi5pZCA9IGNua19zb2NjZXJfZ2FtZXMu Y2x1YjJfaWQgQU5EIGNua19zb2NjZXJfbGVhZ3VlLmlkID0gY25rX3NvY2Nlcl9nYW1lcy5s ZWFndWVfaWQgQU5EIGNua19zb2NjZXJfZ2FtZXMubGVhZ3VlX2lkID0gIi4kbGVhZ3VlX2lk LiIgQU5EIERBVEVfQUREKGNua19zb2NjZXJfZ2FtZXMua2lja29mZl90aW1lLCBJTlRFUlZB TCAiLiRkZWxheV9ob3Vycy4iIEhPVVIpID4gTk9XKCkgT1JERVIgQlkga2lja29mZl90aW1l IExJTUlUIDEiOw0KCQkNCgkkZ2FtZSA9IGdldFJvdygkcSk7DQoJDQoJJG91dCA9ICc8ZGl2 IGNsYXNzPSJjbmtfbmV4dF9nYW1lIj4nOw0KCQ0KCWlmICgkZ2FtZSkgew0KCQkNCgkJZXh0 cmFjdCgkZ2FtZSk7DQoJCQkNCgkJJG91dCAuPSAnPHA+PGltZyBjbGFzcz0iY25rX3NjX2Ns dWJfbG9nb18xIiBzcmM9IicudHJpbSgkY2x1YjFfbG9nbywgJy8nKS4nIiBhbHQ9IicuJGNs dWIxLicgbG9nbyIgLz48aW1nIGNsYXNzPSJjbmtfc2NfdmVyc3VzIiBzcmM9IicuJGNvbG9u X2ltZ19maWxlbmFtZS4nIiBhbHQ9InZlcnN1cyIgLz48aW1nIGNsYXNzPSJjbmtfc2NfY2x1 Yl9sb2dvXzIiIHNyYz0iJy50cmltKCRjbHViMl9sb2dvLCAnLycpLiciIGFsdD0iJy4kY2x1 YjIuJyBsb2dvIiAvPjwvcD4nLg0KCQkNCgkJJzxwPicuJGNsdWIxLicgLSAnLiRjbHViMi4n PC9wPicuDQoJCQkNCgkJJzxwPicuc3RyZnRpbWUoJGRhdGVfcGF0dGVybiwgJGtpY2tvZmYp Lic8L3A+JzsNCgkNCgl9DQoJZWxzZQ0KCXsNCgkJJG91dCAuPSAnTm8gdXBjb21pbmcgbWF0 Y2ghJzsNCgl9DQoJDQoJJG91dCAuPSAnPC9kaXY+JzsNCgkNCglyZXR1cm4gJG91dDsNCn0N Cg0KLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIw0KLyoNCglUQUc6IHRhYmxlIDx0eHA6Y25rX3RhYmxlIC8+DQoq Lw0KLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIw0KZnVuY3Rpb24gY25rX3RhYmxlKCRhdHRzKSANCnsNCglnbG9i YWwgJHByZWZzLCAkcHJldGV4dCwgJHMsICRpZCwgJHRpdGxlOw0KDQoJZXh0cmFjdChsQXR0 cyhhcnJheSgNCgkJJ2xlYWd1ZV9pZCcgPT4gJzEnLA0KCQknaW5jbHVkZV9yYW5rcycgPT4g JycsDQoJCSdjb2x1bW5faGVhZGVycycgPT4gJycsDQoJCSdjb2x1bW5fZGlzcGxheScgPT4g JycsDQoJCSdmb2xsb3dfY2x1YicgPT4gJycsDQoJCSdmb2xsb3dfY2x1Yl9wYWRkaW5nJyA9 PiAyDQoJKSwgJGF0dHMpKTsNCgkNCgkkcmFua19pbmNsdWRlcyA9IGV4cGxvZGUoJywnLCBz dHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCcgJywgJycsICRpbmNsdWRlX3JhbmtzKSkpOw0KCQ0K CSRjb2xfaGVhZGVycyA9IGV4cGxvZGUoJywnLCBzdHJfcmVwbGFjZSgnICcsICcnLCAkY29s dW1uX2hlYWRlcnMpKTsNCgkNCglpZiAoY291bnQoJGNvbF9oZWFkZXJzKSAhPSA5KSAkY29s X2hlYWRlcnMgPSBleHBsb2RlKCcsJywgJyMsY2x1Yixwb2ludHMsZ29hbHMgZm9yLGdvYWxz IGFnYWluc3QsZ29hbHMgc3VtLHdvbixkcmF3LGxvc3QnKTsNCgkNCgkkY29sX2Rpc3BsYXkg PSBleHBsb2RlKCcsJywgc3RyX3JlcGxhY2UoJyAnLCAnJywgJGNvbHVtbl9kaXNwbGF5KSk7 DQoJDQoJaWYgKGNvdW50KCRjb2xfZGlzcGxheSkgIT0gOSkgJGNvbF9kaXNwbGF5ID0gZXhw bG9kZSgnLCcsICcxLDEsMSwwLDAsMCwwLDAsMCcpOw0KCQkJDQoJJHEgPSAiU0VMRUNUIA0K CQkJY2wucG9pbnRzIEFTIHBvaW50cywgDQoJCQljLm5hbWUgQVMgY2x1YiwgDQoJCQljLmlk IEFTIGNsdWJfaWQsDQoJCQljbC5nb2Fsc19mb3IsDQoJCQljbC5nb2Fsc19hZ2FpbnN0LA0K CQkJKGNsLmdvYWxzX2ZvciAtIGNsLmdvYWxzX2FnYWluc3QpIGFzIGdvYWxzX3N1bSwNCgkJ CWdhbWVfd29uLA0KCQkJZ2FtZV9kcmF3LA0KCQkJZ2FtZV9sb3N0DQoJCQlGUk9NIA0KCQkJ Ii5zYWZlX3BmeCgnY25rX3NvY2Nlcl9jbHVicycpLiIgQVMgYyBMRUZUIEpPSU4gDQoJCQki LnNhZmVfcGZ4KCdjbmtfc29jY2VyX2NsdWJfdG9fbGVhZ3VlJykuIiBBUyBjbCBPTiAoYy5p ZCA9IGNsLmNsdWJfaWQpDQoJCQlXSEVSRSANCgkJCWNsLmxlYWd1ZV9pZCA9ICIuJGxlYWd1 ZV9pZC4iDQoJCQlPUkRFUiBCWSANCgkJCWNsLnBvaW50cyBERVNDLA0KCQkJKGNsLmdvYWxz X2ZvciAtIGNsLmdvYWxzX2FnYWluc3QpIERFU0MiOw0KDQoJJHJhbmtzID0gZ2V0Um93cygk cSk7DQoJDQoJLy8gYWRkIGZvbGxvd19jbHViIGFuZCBwYWRkaW5nIGNsdWJzDQoJaWYgKCRm b2xsb3dfY2x1YikNCgl7DQoJCWZvcigkaT0wOyAkaSA8IGNvdW50KCRyYW5rcyk7ICRpKysp DQoJCXsJCQkNCgkJCQlpZiAoJHJhbmtzWyRpXVsnY2x1Yl9pZCddID09ICRmb2xsb3dfY2x1 YikNCgkJCQl7DQoJCQkJCSRwID0gJGkgLSAkZm9sbG93X2NsdWJfcGFkZGluZzsgDQoJCQkJ CQ0KCQkJCQlpZiAoJHAgPCAwKSAkcCA9IDA7DQoJCQkJCQkJCQkNCgkJCQkJd2hpbGUgKCRw IDw9ICRpICsgJGZvbGxvd19jbHViX3BhZGRpbmcgJiYgJHAgPCBjb3VudCgkcmFua3MpKQ0K CQkJCQl7DQoJCQkJCQkkcmFua3NbJHBdWydkaXNwbGF5J10gPSAneWVzJzsNCgkJCQkJCSRw Kys7DQoJCQkJCX0NCgkJCQkJDQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJfQ0KCX0NCgkNCgkk b3V0ID0gJzxkaXYgY2xhc3M9ImNua19yYW5raW5nX3RhYmxlIj48dGFibGU+PHRyPic7DQoJ DQoJZm9yKCRjPTA7JGMgPCBjb3VudCgkY29sX2hlYWRlcnMpOyRjKyspDQoJewkNCgkJaWYg KCRjb2xfZGlzcGxheVskY10pICRvdXQgLj0gJzx0ZD4nLiRjb2xfaGVhZGVyc1skY10uJzwv dGQ+JzsNCgl9DQoJDQoJJG91dCAuPSAnPC90cj4nOw0KCQkNCglmb3IoJGk9MDsgJGkgPCBj b3VudCgkcmFua3MpOyAkaSsrKQ0KCXsNCgkJJHIgPSAkcmFua3NbJGldOw0KCQ0KCQlpZiAo dHJpbSgkaW5jbHVkZV9yYW5rcykgPT0gJycgfHwgaW5fYXJyYXkoKCRpKzEpLCAkcmFua19p bmNsdWRlcykgfHwgaXNzZXQoJHJbJ2Rpc3BsYXknXSkpIA0KCQl7DQoJCQkkb3V0IC49ICc8 dHInLigkclsnY2x1Yl9pZCddPT0kZm9sbG93X2NsdWI/JyBjbGFzcz0iY25rX3NjX2ZhdiIn OicnKS4nPic7DQoJCQkNCgkJCWlmICgkY29sX2Rpc3BsYXlbMF0pICRvdXQgLj0gJzx0ZD4n LigkaSsxKS4nPC90ZD4nOw0KCQkJDQoJCQlpZiAoJGNvbF9kaXNwbGF5WzFdKSAkb3V0IC49 ICc8dGQ+Jy4kclsnY2x1YiddLic8L3RkPic7DQoJCQkNCgkJCWlmICgkY29sX2Rpc3BsYXlb Ml0pICRvdXQgLj0gJzx0ZD4nLiRyWydwb2ludHMnXS4nPC90ZD4nOw0KCQkJDQoJCQlpZiAo JGNvbF9kaXNwbGF5WzNdKSAkb3V0IC49ICc8dGQ+Jy4kclsnZ29hbHNfZm9yJ10uJzwvdGQ+ JzsNCgkJCQ0KCQkJaWYgKCRjb2xfZGlzcGxheVs0XSkgJG91dCAuPSAnPHRkPicuJHJbJ2dv YWxzX2FnYWluc3QnXS4nPC90ZD4nOw0KCQkJDQoJCQlpZiAoJGNvbF9kaXNwbGF5WzVdKSAk b3V0IC49ICc8dGQ+Jy4oJHJbJ2dvYWxzX3N1bSddPjA/JysnOicnKS4kclsnZ29hbHNfc3Vt J10uJzwvdGQ+JzsNCgkJCQ0KCQkJaWYgKCRjb2xfZGlzcGxheVs2XSkgJG91dCAuPSAnPHRk PicuJHJbJ2dhbWVfd29uJ10uJzwvdGQ+JzsNCgkJCQ0KCQkJaWYgKCRjb2xfZGlzcGxheVs3 XSkgJG91dCAuPSAnPHRkPicuJHJbJ2dhbWVfZHJhdyddLic8L3RkPic7DQoJCQkNCgkJCWlm ICgkY29sX2Rpc3BsYXlbOF0pICRvdXQgLj0gJzx0ZD4nLiRyWydnYW1lX2xvc3QnXS4nPC90 ZD4nOw0KCQkJDQoJCQkkb3V0IC49ICc8L3RyPic7DQoJCX0NCgl9DQoJDQoJJG91dCAuPSAn PC90YWJsZT48L2Rpdj4nOw0KCQ0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj DQovKg0KCUZ1bmN0aW9uOiBIYW5kbGVzIGNhbGxiYWNrcw0KKi8NCi8vICMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMN CmZ1bmN0aW9uIGNua19zb2NjZXIoJGV2ZW50LCAkc3RlcCkNCnsNCglnbG9iYWwgJHZhcnM7 DQoJDQoJJHZhcnMgPSBhcnJheSgnbmFtZScsICdzZWFzb24nLCAnaWQnLCAnY291bnRyeScs ICdsb2dvJywgJ2xvZ29fMScsICdsb2dvXzInLCAnbG9nb18zJywgJ2NsdWJfaWQnLCAnbGVh Z3VlX2lkJywgJ29sZF9jbHViX2lkJywgJ29sZF9sZWFndWVfaWQnLCAncG9pbnRzJywgJ2dv YWxzX2ZvcicsICdnb2Fsc19hZ2FpbnN0JywgJ2dhbWVfd29uJywgJ2dhbWVfbG9zdCcsICdn YW1lX2RyYXcnLCAnY2x1YjFfaWQnLCAnY2x1YjJfaWQnLCAna2lja29mZl90aW1lJywgJ2dv YWxzX2NsdWIxJywgJ2dvYWxzX2NsdWIyJywgJ2NhbGNfcmFuaycsICd0b3RhbF9yb3VuZHMn LCAncm91bmQnLCAnZ2FtZXNfcGVyX3JvdW5kJyk7DQoNCglpZighJHN0ZXAgb3IgIWluX2Fy cmF5KCRzdGVwLCBhcnJheSgnY25rX3NjX2NvbmZpZycsIA0KCQkJCQkJCQkJCSdjbmtfc2Nf Y3JlYXRlX2NsdWInLCANCgkJCQkJCQkJCQknY25rX3NjX2NyZWF0ZV9sZWFndWUnLA0KCQkJ CQkJCQkJCSdjbmtfc2NfZWRpdF9jbHViJywgDQoJCQkJCQkJCQkJJ2Nua19zY19lZGl0X2xl YWd1ZScsDQoJCQkJCQkJCQkJJ2Nua19zY19lZGl0X3JhbmtpbmcnLA0KCQkJCQkJCQkJCSdj bmtfc2NfcG9zdF9sZWFndWUnLA0KCQkJCQkJCQkJCSdjbmtfc2NfcG9zdF9jbHViJywNCgkJ CQkJCQkJCQknY25rX3NjX3Bvc3RfcmFua2luZycsDQoJCQkJCQkJCQkJJ2Nua19zY19zYXZl X2xlYWd1ZScsDQoJCQkJCQkJCQkJJ2Nua19zY19zYXZlX2NsdWInLA0KCQkJCQkJCQkJCSdj bmtfc2Nfc2F2ZV9yYW5raW5nJywNCgkJCQkJCQkJCQknY25rX3NjX3NhdmVfcm91bmQnLA0K CQkJCQkJCQkJCSdjbmtfc2NfaW5zdGFsbCcsDQoJCQkJCQkJCQkJJ2Nua19zY19kZWluc3Rh bGwnLA0KCQkJCQkJCQkJCSdjbmtfc2NfcGFnZWJ5X2xlYWd1ZScsDQoJCQkJCQkJCQkJJ2Nu a19zY19wYWdlYnlfY2x1YicsDQoJCQkJCQkJCQkJJ2Nua19zY19wYWdlYnlfcmFua2luZycs DQoJCQkJCQkJCQkJJ2Nua19zY19wYWdlYnlfcm91bmRzJywNCgkJCQkJCQkJCQknY25rX3Nj X211bHRpX2VkaXRfbGVhZ3VlJywNCgkJCQkJCQkJCQknY25rX3NjX211bHRpX2VkaXRfY2x1 YicsDQoJCQkJCQkJCQkJJ2Nua19zY19tdWx0aV9lZGl0X3JhbmtpbmcnLA0KCQkJCQkJCQkJ CSdjbmtfc2NfbXVsdGlfZWRpdF9yb3VuZHMnLA0KCQkJCQkJCQkJCSdjbmtfc2NfYWRkX3Jv dW5kJywNCgkJCQkJCQkJCQknY25rX3NjX2VkaXRfcm91bmQnKSkpDQoJew0KCQljbmtfc2Nf Y29uZmlnKCk7DQoJfSANCgllbHNlDQoJew0KCQkkc3RlcCgpOw0KCX0NCn0NCg0KLy8gIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIw0KLyoNCglGdW5jdGlvbjogUmVuZGVycyBDb25maWd1cmF0aW9uIFBhZ2UNCiov DQovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjDQpmdW5jdGlvbiBjbmtfc2NfY29uZmlnKCRtZXNzYWdlID0gJycp DQp7DQoJcGFnZXRvcCgnQ29uZmlndXJlIFNvY2NlciBQbHVnaW4nLCAkbWVzc2FnZSk7DQoJ DQoJZWNobyAnPGRpdiBzdHlsZT0ibWFyZ2luOiBhdXRvOyB0ZXh0LWFsaWduOiBjZW50ZXIi Pjx1bD4nOw0KCQ0KCWlmIChoYXNfcHJpdnMoJ2Nua19zb2NjZXJfYWRtaW4nKSkgZWNobyAn PGxpPjxhIGhyZWY9Ij9ldmVudD1jbmtfc29jY2VyJy5hLidzdGVwPWNua19zY19lZGl0X2xl YWd1ZSI+TGVhZ3VlPC9hPjwvbGk+JzsNCgkNCglpZiAoaGFzX3ByaXZzKCdjbmtfc29jY2Vy X2FkbWluJykpIGVjaG8gJzxsaT48YSBocmVmPSI/ZXZlbnQ9Y25rX3NvY2NlcicuYS4nc3Rl cD1jbmtfc2NfZWRpdF9jbHViIj5DbHViczwvYT48L2xpPic7DQoJDQoJaWYgKGhhc19wcml2 cygnY25rX3NvY2Nlcl9hZG1pbicpKSBlY2hvICc8bGk+PGEgaHJlZj0iP2V2ZW50PWNua19z b2NjZXInLmEuJ3N0ZXA9Y25rX3NjX2VkaXRfcmFua2luZyI+VGFibGU8L2E+PC9saT4nOw0K CQ0KCWVjaG8gJzxsaT48YSBocmVmPSI/ZXZlbnQ9Y25rX3NvY2NlcicuYS4nc3RlcD1jbmtf c2NfYWRkX3JvdW5kIj5HYW1lczwvYT48L2xpPic7DQoJDQoJZWNobyAnPC91bD4nOw0KCQ0K CWVjaG8gJzx1bCBzdHlsZT0ibWFyZ2luLXRvcDogMTAwcHgiPic7CQkNCg0KCWlmIChoYXNf cHJpdnMoJ2Nua19zb2NjZXJfYWRtaW4nKSkgZWNobyAnPGxpPjxhIGhyZWY9Ij9ldmVudD1j bmtfc29jY2VyJy5hLidzdGVwPWNua19zY19pbnN0YWxsIj5JbnN0YWxsPC9hPjwvbGk+JzsN CgkNCglpZiAoaGFzX3ByaXZzKCdjbmtfc29jY2VyX2FkbWluJykpIGVjaG8gJzxsaT48YSBo cmVmPSI/ZXZlbnQ9Y25rX3NvY2NlcicuYS4nc3RlcD1jbmtfc2NfZGVpbnN0YWxsIj5EZWlu c3RhbGw8L2E+PC9saT4nOw0KCQ0KCWVjaG8gJzwvdWw+PC9kaXY+JzsNCn0NCg0KLy8gIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIw0KLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLyoNCglDbHViIEZ1bmN0 aW9ucw0KKi8NCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi8vICMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMN Cg0KZnVuY3Rpb24gY25rX3NjX3Bvc3RfY2x1YigpDQp7DQoJZ2xvYmFsICR0eHBjZmcsJHZh cnM7DQoJJHZhcnJheSA9IGdwc2EoJHZhcnMpOw0KDQoJZXh0cmFjdChkb1NsYXNoKCR2YXJy YXkpKTsNCgkNCglpZiAoJGxvZ29fMSkNCgl7DQoJCSRsb2dvID0gJy9pbWFnZXMvJy4kbG9n b18xOw0KCX0NCgllbHNlIGlmICgkbG9nb18yKQ0KCXsNCgkJJGxvZ28gPSBDTktfU0NfSU1H X0JST1dTRV9GT0xERVIuJGxvZ29fMjsNCgl9DQoJZWxzZQ0KCXsNCgkJJGxvZ28gPSAkbG9n b18zOw0KCX0NCg0KCSRxID0gQHNhZmVfaW5zZXJ0KCJjbmtfc29jY2VyX2NsdWJzIiwNCgkg ICAibmFtZSAgICA9ICckbmFtZScsDQoJCWNvdW50cnkgPSAnJGNvdW50cnknLA0KCQlsb2dv ID0gJyRsb2dvJyINCgkpOw0KDQoJJEdMT0JBTFNbJ0lEJ10gPSBteXNxbF9pbnNlcnRfaWQo ICk7DQoNCglpZiAoJHEpDQoJew0KCQkvL3VwZGF0ZSBsYXN0bW9kIGR1ZSB0byBsaW5rIGZl ZWRzDQoJCXVwZGF0ZV9sYXN0bW9kKCk7DQoNCgkJJG1lc3NhZ2UgPSAnQ2x1YiBjcmVhdGVk OiAnLiRuYW1lOw0KCX0NCgllbHNlDQoJew0KCQkkbWVzc2FnZSA9ICdDb3VsZCBub3QgY3Jl YXRlIGNsdWInOw0KCX0NCgkJCQ0KCWNua19zY19lZGl0X2NsdWIoJG1lc3NhZ2UpOwkNCn0N Cg0KZnVuY3Rpb24gY25rX3NjX3NhdmVfY2x1YigpIA0Kew0KCWdsb2JhbCAkdHhwY2ZnLCR2 YXJzOw0KCSR2YXJyYXkgPSBncHNhKCR2YXJzKTsNCg0KCWV4dHJhY3QoZG9TbGFzaCgkdmFy cmF5KSk7DQoJDQoJJGlkID0gYXNzZXJ0X2ludCgkaWQpOw0KCQ0KCWlmICgkbG9nb18xKQ0K CXsNCgkJJGxvZ28gPSAnL2ltYWdlcy8nLiRsb2dvXzE7DQoJfQ0KCWVsc2UgaWYgKCRsb2dv XzIpDQoJew0KCQkkbG9nbyA9IENOS19TQ19JTUdfQlJPV1NFX0ZPTERFUi4kbG9nb18yOw0K CX0NCgllbHNlDQoJew0KCQkkbG9nbyA9ICRsb2dvXzM7DQoJfQ0KDQoJJHJzID0gQHNhZmVf dXBkYXRlKCJjbmtfc29jY2VyX2NsdWJzIiwNCgkgICAibmFtZSAgICA9ICckbmFtZScsDQoJ CWNvdW50cnkgPSAnJGNvdW50cnknLA0KCQlsb2dvID0gJyRsb2dvJyIsDQoJICAgImlkID0g JGlkIg0KCSk7DQoNCglpZiAoJHJzKQ0KCXsNCgkJdXBkYXRlX2xhc3Rtb2QoKTsNCg0KCQkk bWVzc2FnZSA9ICdDbHViIHVwZGF0ZWQ6ICcuZG9TdHJpcCgkbmFtZSk7DQoJfQ0KCWVsc2UN Cgl7DQoJCSRtZXNzYWdlID0gJ0NvdWxkIG5vdCBzYXZlIGNsdWInOw0KCX0NCgkJCQ0KCWNu a19zY19lZGl0X2NsdWIoJG1lc3NhZ2UpOwkNCn0NCg0KZnVuY3Rpb24gY2x1Yl9pbWFnZV9k cm9wZG93bigkZmlsZW5hbWUgPSAnJykgDQp7DQoJJGltYWdlX2FycmF5ID0gYXJyYXkoKTsN Cg0KCSRycyA9IHNhZmVfcm93c19zdGFydCgiQ09OQ0FUKGlkLCBleHQpIGFzIGlkLCBuYW1l IGFzIHRpdGxlIiwgJ3R4cF9pbWFnZScsICJjYXRlZ29yeSA9ICciLkNOS19TQ19JTUdfVVBM T0FEX0NBVEVHT1JZLiInIG9yZGVyIGJ5IG5hbWUgYXNjIik7DQoJDQoJd2hpbGUgKCRyID0g bmV4dFJvdygkcnMpKQ0KCXsNCgkJJGltYWdlX2FycmF5WyRyWydpZCddXSA9ICRyWyd0aXRs ZSddOw0KCX0NCg0KCXJldHVybiB0ZGEoc2VsZWN0SW5wdXQoJ2xvZ29fMScsICRpbWFnZV9h cnJheSwgJGZpbGVuYW1lLCB0cnVlKSk7CQ0KfQ0KDQpmdW5jdGlvbiBjbHViX2ZvbGRlcl9k cm9wZG93bigkZmlsZW5hbWUgPSAnJykgDQp7DQoJJGltYWdlX2FycmF5ID0gYXJyYXkoKTsN CgkNCglpZiAoQ05LX1NDX0lNR19CUk9XU0VfRk9MREVSICE9ICcnICYmIGlzX2RpcignLi4n LkNOS19TQ19JTUdfQlJPV1NFX0ZPTERFUikpDQoJew0KCQlpZiAoJGhhbmRsZSA9IG9wZW5k aXIoJy4uJy5DTktfU0NfSU1HX0JST1dTRV9GT0xERVIpKSANCgkJew0KCQkJd2hpbGUgKGZh bHNlICE9PSAoJGZpbGUgPSByZWFkZGlyKCRoYW5kbGUpKSkgDQoJCQl7DQoJCQkJaWYgKCRm aWxlICE9ICIuIiAmJiAkZmlsZSAhPSAiLi4iKSANCgkJCQl7DQoJCQkJCSRpbWFnZV9hcnJh eVskZmlsZV0gPSAkZmlsZTsNCgkJCQl9DQoJCQl9DQoJCQkNCgkJCWNsb3NlZGlyKCRoYW5k bGUpOw0KCQl9DQoJCQ0KCQlhc29ydCgkaW1hZ2VfYXJyYXkpOw0KCX0NCg0KCXJldHVybiB0 ZGEoc2VsZWN0SW5wdXQoJ2xvZ29fMicsICRpbWFnZV9hcnJheSwgJGZpbGVuYW1lLCB0cnVl KSk7CQ0KfQ0KDQpmdW5jdGlvbiBjbmtfc2NfZWRpdF9jbHViKCRtZXNzYWdlID0gJycpDQp7 DQoJZ2xvYmFsICR2YXJzLCAkc3RlcDsNCg0KCXBhZ2V0b3AoJ0VkaXQgQ2x1YicsICRtZXNz YWdlKTsNCg0KCWV4dHJhY3QoZ3BzYSgkdmFycykpOw0KDQoJaWYgKCRpZCAmJiAkc3RlcCA9 PSAnY25rX3NjX2VkaXRfY2x1YicpDQoJew0KCQkkaWQgPSBhc3NlcnRfaW50KCRpZCk7DQoJ CWV4dHJhY3Qoc2FmZV9yb3coJyonLCAnY25rX3NvY2Nlcl9jbHVicycsICJpZCA9ICRpZCIp KTsNCgl9DQoJDQoJaWYgKCRzdGVwID09ICdjbmtfc2Nfc2F2ZV9jbHViJyBvciAkc3RlcCA9 PSAnY25rX3NjX3Bvc3RfY2x1YicpDQoJew0KCQlmb3JlYWNoICgkdmFycyBhcyAkdmFyKQ0K CQl7DQoJCQkkJHZhciA9ICcnOw0KCQl9DQoJfQ0KCQ0KCWVjaG8gJzxwIGNsYXNzPSJwcmV2 LW5leHQiPjxhIGhyZWY9Ij9ldmVudD1jbmtfc29jY2VyIj48IEJhY2sgdG8gU29jY2VyIE1l bnU8L2E+PC9wPicuDQoNCglmb3JtKA0KDQoJCXN0YXJ0VGFibGUoJ2VkaXQnKSAuDQoNCgkJ dHIoDQoJCQlmTGFiZWxDZWxsKCdOYW1lJykuDQoJCQlmSW5wdXRDZWxsKCduYW1lJywgJG5h bWUsIDEsIDMwKQ0KCQkpLg0KCQkNCgkJdHIoDQoJCQlmTGFiZWxDZWxsKCdDb3VudHJ5Jyku DQoJCQlmSW5wdXRDZWxsKCdjb3VudHJ5JywgJGNvdW50cnksIDIsIDMwKQ0KCQkpLg0KCQkN CgkJdHIoDQoJCQlmTGFiZWxDZWxsKCcxLiBTZWxlY3QgbG9nbyBmcm9tIFRYUCcpLg0KCQkJ Y2x1Yl9pbWFnZV9kcm9wZG93bigkbG9nbykNCgkJKS4NCgkJDQoJCXRyKA0KCQkJZkxhYmVs Q2VsbCgnMi4gU2VsZWN0IGxvZ28gZnJvbSBmb2xkZXInKS4NCgkJCWNsdWJfZm9sZGVyX2Ry b3Bkb3duKCRsb2dvKQ0KCQkpLg0KDQoJCXRyKA0KCQkJZkxhYmVsQ2VsbCgnMy4gRW50ZXIg bG9nbyBwYXRoJykuDQoJCQlmSW5wdXRDZWxsKCdsb2dvXzMnLCAkbG9nbywgMiwgMzApDQoJ CSkuDQoNCgkJdHIoDQoJCQl0ZCgpLg0KCQkJdGQoDQoJCQkJZklucHV0KCdzdWJtaXQnLCAn JywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpDQoJCQkpDQoJCSkuDQoNCgkJZW5kVGFibGUo KS4NCg0KCQllSW5wdXQoJ2Nua19zb2NjZXInKS4NCg0KCQkoJGlkID8gc0lucHV0KCdjbmtf c2Nfc2F2ZV9jbHViJykuaElucHV0KCdpZCcsICRpZCkgOiBzSW5wdXQoJ2Nua19zY19wb3N0 X2NsdWInKSkuDQoNCgkJaElucHV0KCdzZWFyY2hfbWV0aG9kJywgZ3BzKCdzZWFyY2hfbWV0 aG9kJykpLg0KCQloSW5wdXQoJ2NyaXQnLCBncHMoJ2NyaXQnKSkNCgksICdtYXJnaW4tYm90 dG9tOiAyNXB4OycpOw0KDQoJZWNobyBjbmtfc2NfbGlzdF9jbHViKCk7DQp9DQoNCmZ1bmN0 aW9uIGNua19zY19saXN0X2NsdWIoJG1lc3NhZ2UgPSAnJykgDQp7DQoJZ2xvYmFsICRzdGVw LCAkY25rX3NjX2NsdWJfbGlzdF9wYWdlYnk7DQoJDQoJZXh0cmFjdChnZXRfcHJlZnMoKSk7 DQoNCglleHRyYWN0KGdwc2EoYXJyYXkoJ3BhZ2UnLCAnc29ydCcsICdkaXInLCAnY3JpdCcs ICdzZWFyY2hfbWV0aG9kJykpKTsNCg0KCSRkaXIgPSAoJGRpciA9PSAnZGVzYycpID8gJ2Rl c2MnIDogJ2FzYyc7DQoNCglzd2l0Y2ggKCRzb3J0KQ0KCXsNCgkJY2FzZSAnaWQnOg0KCQkJ JHNvcnRfc3FsID0gJ2lkICcuJGRpcjsNCgkJYnJlYWs7DQoNCgkJY2FzZSAnbmFtZSc6DQoJ CQkkc29ydF9zcWwgPSAnbmFtZSAnLiRkaXIuJywgaWQgYXNjJzsNCgkJYnJlYWs7DQoNCgkJ Y2FzZSAnY291bnRyeSc6DQoJCQkkc29ydF9zcWwgPSAnY291bnRyeSAnLiRkaXIuJywgbmFt ZSBhc2MnOw0KCQlicmVhazsNCg0KCQlkZWZhdWx0Og0KCQkJJHNvcnQgPSAnY291bnRyeSc7 DQoJCQkkc29ydF9zcWwgPSAnY291bnRyeSAnLiRkaXIuJywgbmFtZSBhc2MnOw0KCQlicmVh azsNCgl9DQoNCgkkc3dpdGNoX2RpciA9ICgkZGlyID09ICdkZXNjJykgPyAnYXNjJyA6ICdk ZXNjJzsNCg0KCSRjcml0ZXJpYSA9IDE7DQoNCglpZiAoJHNlYXJjaF9tZXRob2QgYW5kICRj cml0KQ0KCXsNCgkJJGNyaXRfZXNjYXBlZCA9IGRvU2xhc2goJGNyaXQpOw0KDQoJCSRjcml0 c3FsID0gYXJyYXkoDQoJCQknaWQnCQkJICAgICA9PiAiaWQgPSAnJGNyaXRfZXNjYXBlZCci LA0KCQkJJ25hbWUnCQkgICAgID0+ICJuYW1lIGxpa2UgJyUkY3JpdF9lc2NhcGVkJSciLA0K CQkJJ2NvdW50cnknCSA9PiAiY291bnRyeSBsaWtlICclJGNyaXRfZXNjYXBlZCUnIg0KCQkp Ow0KDQoJCWlmIChhcnJheV9rZXlfZXhpc3RzKCRzZWFyY2hfbWV0aG9kLCAkY3JpdHNxbCkp DQoJCXsNCgkJCSRjcml0ZXJpYSA9ICRjcml0c3FsWyRzZWFyY2hfbWV0aG9kXTsNCgkJCSRs aW1pdCA9IDUwMDsNCgkJfQ0KDQoJCWVsc2UNCgkJew0KCQkJJHNlYXJjaF9tZXRob2QgPSAn JzsNCgkJCSRjcml0ID0gJyc7DQoJCX0NCgl9DQoNCgllbHNlDQoJew0KCQkkc2VhcmNoX21l dGhvZCA9ICcnOw0KCQkkY3JpdCA9ICcnOw0KCX0NCg0KCSR0b3RhbCA9IGdldENvdW50KCdj bmtfc29jY2VyX2NsdWJzJywgJGNyaXRlcmlhKTsgIA0KDQoJaWYgKCR0b3RhbCA8IDEpDQoJ ew0KCQlpZiAoJGNyaXRlcmlhICE9IDEpDQoJCXsNCgkJCWVjaG8gbi5jbmtfc2Nfc2VhcmNo X2Zvcm1fY2x1YigkY3JpdCwgJHNlYXJjaF9tZXRob2QpLg0KCQkJCW4uZ3JhZihnVHh0KCdu b19yZXN1bHRzX2ZvdW5kJyksICcgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiJyk7DQoJ CX0NCg0KCQllbHNlDQoJCXsNCgkJCWVjaG8gbi5ncmFmKCdObyBjbHViIHJlY29yZGVkJywg JyBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyInKTsNCgkJfQ0KDQoJCXJldHVybjsNCgl9 DQoNCgkkbGltaXQgPSBtYXgoQCRjbmtfc2NfY2x1Yl9saXN0X3BhZ2VieSwgMTUpOw0KDQoJ bGlzdCgkcGFnZSwgJG9mZnNldCwgJG51bVBhZ2VzKSA9IHBhZ2VyKCR0b3RhbCwgJGxpbWl0 LCAkcGFnZSk7DQoNCgllY2hvIGNua19zY19zZWFyY2hfZm9ybV9jbHViKCRjcml0LCAkc2Vh cmNoX21ldGhvZCk7DQoNCgkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoJyonLCAnY25rX3NvY2Nl cl9jbHVicycsICIkY3JpdGVyaWEgb3JkZXIgYnkgJHNvcnRfc3FsIGxpbWl0ICRvZmZzZXQs ICRsaW1pdCIpOw0KDQoJaWYgKCRycykNCgl7DQoJCWVjaG8gbi5uLic8Zm9ybSBhY3Rpb249 ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0IiBuYW1lPSJsb25nZm9ybSIgb25zdWJtaXQ9InJl dHVybiB2ZXJpZnkoXCcnLmdUeHQoJ2FyZV95b3Vfc3VyZScpLidcJykiPicsDQoNCgkJCXN0 YXJ0VGFibGUoJ2xpc3QnKS4NCg0KCQkJbi50cigNCgkJCQljbmtfc2NfY29sdW1uX2hlYWQo J0lEJywgJ2lkJywgJ2Nua19zb2NjZXInLCAnY25rX3NjX2VkaXRfY2x1YicsIHRydWUsICRz d2l0Y2hfZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QsICgnaWQnID09ICRzb3J0KSA/ICRk aXIgOiAnJykuDQoJCQkJY25rX3NjX2NvbHVtbl9oZWFkKCdDb3VudHJ5JywgJ2NvdW50cnkn LCAnY25rX3NvY2NlcicsICdjbmtfc2NfZWRpdF9jbHViJywgdHJ1ZSwgJHN3aXRjaF9kaXIs ICRjcml0LCAkc2VhcmNoX21ldGhvZCwgKCdjb3VudHJ5JyA9PSAkc29ydCkgPyAkZGlyIDog JycpLg0KCQkJCWNua19zY19jb2x1bW5faGVhZCgnbmFtZScsICduYW1lJywgJ2Nua19zb2Nj ZXInLCAnY25rX3NjX2VkaXRfY2x1YicsIHRydWUsICRzd2l0Y2hfZGlyLCAkY3JpdCwgJHNl YXJjaF9tZXRob2QsICgnbmFtZScgPT0gJHNvcnQpID8gJGRpciA6ICcnKS4NCgkJCQljbmtf c2NfY29sdW1uX2hlYWQoJ0xvZ28nLCAnbG9nbycpLg0KCQkJCWhDZWxsKCkNCgkJCSk7DQoN CgkJCXdoaWxlICgkYSA9IG5leHRSb3coJHJzKSkNCgkJCXsNCgkJCQlleHRyYWN0KCRhKTsJ CQkJDQoNCgkJCQkkZWRpdF91cmwgPSAnP2V2ZW50PWNua19zb2NjZXInLmEuJ3N0ZXA9Y25r X3NjX2VkaXRfY2x1YicuYS4naWQ9Jy4kaWQuYS4nc29ydD0nLiRzb3J0Lg0KCQkJCQlhLidk aXI9Jy4kZGlyLmEuJ3BhZ2U9Jy4kcGFnZS5hLidzZWFyY2hfbWV0aG9kPScuJHNlYXJjaF9t ZXRob2QuYS4nY3JpdD0nLiRjcml0Ow0KDQoJCQkJZWNobyB0cigNCg0KCQkJCQluLnRkKCRp ZCwgNDApLg0KCQkJCQkNCgkJCQkJdGQoaHRtbHNwZWNpYWxjaGFycygkY291bnRyeSksIDE1 MCkuDQoNCgkJCQkJdGQoaHJlZihodG1sc3BlY2lhbGNoYXJzKCRuYW1lKSwgJGVkaXRfdXJs KSwgMjU1KS4NCgkJCQkJDQoJCQkJCXRkKCc8aW1nIHNyYz0iLi4nLiRsb2dvLiciIC8+Jywg NDApLg0KDQoJCQkJCXRkKGZJbnB1dCgnY2hlY2tib3gnLCAnc2VsZWN0ZWRbXScsICRpZCks IDIwKQ0KCQkJCSk7DQoJCQl9DQoNCgkJZWNobyBuLm4udHIoDQoJCQl0ZGEoDQoJCQkJc2Vs ZWN0X2J1dHRvbnMoKS4NCgkJCQljbmtfc2NfbXVsdGllZGl0X2Zvcm1fY2x1YigkcGFnZSwg JHNvcnQsICRkaXIsICRjcml0LCAkc2VhcmNoX21ldGhvZCkNCgkJCSwgJyBjb2xzcGFuPSI1 IiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IGJvcmRlcjogbm9uZTsiJykNCgkJKS4NCg0K CQllbmRUYWJsZSgpLg0KCQknPC9mb3JtPicuDQoNCgkJbi5jbmtfc2NfbmF2X2Zvcm0oJ2Nu a19zb2NjZXInLCAnY25rX3NjX2VkaXRfY2x1YicsICRwYWdlLCAkbnVtUGFnZXMsICRzb3J0 LCAkZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QpLg0KDQoJCWNua19zY19wYWdlYnlfZm9y bSgnY25rX3NvY2NlcicsICdjbmtfc2NfcGFnZWJ5X2NsdWInLCAkY25rX3NjX2NsdWJfbGlz dF9wYWdlYnkpLg0KCQkNCgkJJzxwIGNsYXNzPSJwcmV2LW5leHQiPjxhIGhyZWY9Ij9ldmVu dD1jbmtfc29jY2VyIj48IEJhY2sgdG8gU29jY2VyIE1lbnU8L2E+PC9wPic7DQoJfQ0KfQ0K DQoNCg0KZnVuY3Rpb24gY25rX3NjX3NlYXJjaF9mb3JtX2NsdWIoJGNyaXQsICRtZXRob2Qp DQp7DQoJJG1ldGhvZHMgPQlhcnJheSgNCgkJJ2lkJwkJCQk9PiBnVHh0KCdJRCcpLA0KCQkn bmFtZScJCQkJPT4gZ1R4dCgnbmFtZScpLA0KCQknY291bnRyeScgCQkJPT4gJ0NvdW50cnkn DQoJKTsNCg0KCXJldHVybiBzZWFyY2hfZm9ybSgnY25rX3NvY2NlcicsICdjbmtfc2NfZWRp dF9jbHViJywgJGNyaXQsICRtZXRob2RzLCAkbWV0aG9kLCAnbmFtZScpOw0KfQ0KDQpmdW5j dGlvbiBjbmtfc2NfbXVsdGllZGl0X2Zvcm1fY2x1YigkcGFnZSwgJHNvcnQsICRkaXIsICRj cml0LCAkc2VhcmNoX21ldGhvZCkgDQp7DQoJJG1ldGhvZHMgPSBhcnJheSgNCgkJJ2RlbGV0 ZScgPT4gZ1R4dCgnZGVsZXRlJykNCgkpOw0KDQoJcmV0dXJuIGNua19zY19ldmVudF9tdWx0 aWVkaXRfZm9ybSgnY25rX3NvY2NlcicsICdjbmtfc2NfbXVsdGlfZWRpdF9jbHViJywgJG1l dGhvZHMsICRwYWdlLCAkc29ydCwgJGRpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKTsNCn0N Cg0KZnVuY3Rpb24gY25rX3NjX3BhZ2VieV9jbHViKCkgDQp7DQoJZXZlbnRfY2hhbmdlX3Bh Z2VieSgnY25rX3NjX2NsdWInKTsNCgljbmtfc2NfZWRpdF9jbHViKCk7DQp9DQoNCmZ1bmN0 aW9uIGNua19zY19tdWx0aV9lZGl0X2NsdWIoKSANCnsNCgkkZGVsZXRlZCA9IGNua19zY19l dmVudF9tdWx0aV9lZGl0KCdjbmtfc29jY2VyX2NsdWJzJywgJ2lkJyk7DQoNCglpZiAoJGRl bGV0ZWQpDQoJew0KCQkkbWVzc2FnZSA9ICdDbHViIGRlbGV0ZWQ6ICcuJGRlbGV0ZWQ7DQoN CgkJcmV0dXJuIAljbmtfc2NfZWRpdF9jbHViKCRtZXNzYWdlKTsNCgl9DQoNCglyZXR1cm4g CWNua19zY19lZGl0X2NsdWIoKTsNCn0NCg0KLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLy8gIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Iw0KLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIw0KLyoNCglMRUFHVUUgRnVuY3Rpb25zDQoqLw0KLy8gIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIw0KLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIw0KLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQpmdW5jdGlvbiBjbmtfc2Nf cG9zdF9sZWFndWUoKQ0Kew0KCWdsb2JhbCAkdHhwY2ZnLCR2YXJzOw0KCSR2YXJyYXkgPSBn cHNhKCR2YXJzKTsNCg0KCWV4dHJhY3QoZG9TbGFzaCgkdmFycmF5KSk7DQoNCgkkcSA9IEBz YWZlX2luc2VydCgiY25rX3NvY2Nlcl9sZWFndWUiLA0KCSAgICJuYW1lICAgID0gJyRuYW1l JywNCgkJc2Vhc29uID0gJyRzZWFzb24nLA0KCQl0b3RhbF9yb3VuZHMgPSAnJHRvdGFsX3Jv dW5kcycsDQoJCWdhbWVzX3Blcl9yb3VuZCA9ICckZ2FtZXNfcGVyX3JvdW5kJyINCgkpOw0K DQoJJEdMT0JBTFNbJ0lEJ10gPSBteXNxbF9pbnNlcnRfaWQoICk7DQoNCglpZiAoJHEpDQoJ ew0KCQkvL3VwZGF0ZSBsYXN0bW9kIGR1ZSB0byBsaW5rIGZlZWRzDQoJCXVwZGF0ZV9sYXN0 bW9kKCk7DQoNCgkJJG1lc3NhZ2UgPSAnTGVhZ3VlIGNyZWF0ZWQ6ICcuJG5hbWU7CQ0KCX0N CgllbHNlDQoJew0KCQkkbWVzc2FnZSA9ICdDb3VsZCBub3QgY3JlYXRlIGxlYWd1ZSc7DQoJ fQ0KCQ0KCWNua19zY19lZGl0X2xlYWd1ZSgkbWVzc2FnZSk7DQp9DQoNCmZ1bmN0aW9uIGNu a19zY19zYXZlX2xlYWd1ZSgpIA0Kew0KCWdsb2JhbCAkdHhwY2ZnLCR2YXJzOw0KCSR2YXJy YXkgPSBncHNhKCR2YXJzKTsNCg0KCWV4dHJhY3QoZG9TbGFzaCgkdmFycmF5KSk7DQoJDQoJ JGlkID0gYXNzZXJ0X2ludCgkaWQpOw0KDQoJJHJzID0gQHNhZmVfdXBkYXRlKCJjbmtfc29j Y2VyX2xlYWd1ZSIsDQoJICAgIm5hbWUgICAgPSAnJG5hbWUnLA0KCQlzZWFzb24gPSAnJHNl YXNvbicsDQoJCXRvdGFsX3JvdW5kcyA9ICckdG90YWxfcm91bmRzJywNCgkJZ2FtZXNfcGVy X3JvdW5kID0gJyRnYW1lc19wZXJfcm91bmQnIiwNCgkgICAiaWQgPSAkaWQiDQoJKTsNCg0K CWlmICgkcnMpDQoJew0KCQl1cGRhdGVfbGFzdG1vZCgpOw0KDQoJCSRtZXNzYWdlID0gJ0xl YWd1ZSB1cGRhdGVkOiAnLmRvU3RyaXAoJG5hbWUpOw0KCX0NCgllbHNlDQoJew0KCQkkbWVz c2FnZSA9ICdDb3VsZCBub3Qgc2F2ZSBsZWFndWUnOw0KCX0NCgkNCgljbmtfc2NfZWRpdF9s ZWFndWUoJG1lc3NhZ2UpOw0KfQ0KDQpmdW5jdGlvbiBjbmtfc2NfZWRpdF9sZWFndWUoJG1l c3NhZ2UgPSAnJykNCnsNCglnbG9iYWwgJHZhcnMsICRzdGVwOw0KDQoJcGFnZXRvcCgnRWRp dCBMZWFndWUnLCAkbWVzc2FnZSk7DQoNCglleHRyYWN0KGdwc2EoJHZhcnMpKTsNCg0KCWlm ICgkaWQgJiYgJHN0ZXAgPT0gJ2Nua19zY19lZGl0X2xlYWd1ZScpDQoJew0KCQkkaWQgPSBh c3NlcnRfaW50KCRpZCk7DQoJCWV4dHJhY3Qoc2FmZV9yb3coJyonLCAnY25rX3NvY2Nlcl9s ZWFndWUnLCAiaWQgPSAkaWQiKSk7DQoJfQ0KCQ0KCWlmICgkc3RlcCA9PSAnY25rX3NjX3Nh dmVfbGVhZ3VlJyBvciAkc3RlcCA9PSAnY25rX3NjX3Bvc3RfbGVhZ3VlJykNCgl7DQoJCWZv cmVhY2ggKCR2YXJzIGFzICR2YXIpDQoJCXsNCgkJCSQkdmFyID0gJyc7DQoJCX0NCgl9DQoJ DQoJZWNobyAnPHAgY2xhc3M9InByZXYtbmV4dCI+PGEgaHJlZj0iP2V2ZW50PWNua19zb2Nj ZXIiPjwgQmFjayB0byBTb2NjZXIgTWVudTwvYT48L3A+Jy4NCg0KCWZvcm0oDQoNCgkJc3Rh cnRUYWJsZSgnZWRpdCcpIC4NCg0KCQl0cigNCgkJCWZMYWJlbENlbGwoJ05hbWUnKS4NCgkJ CWZJbnB1dENlbGwoJ25hbWUnLCAkbmFtZSwgMSwgMzApDQoJCSkuDQoNCgkJdHIoDQoJCQlm TGFiZWxDZWxsKCdTZWFzb24nKS4NCgkJCWZJbnB1dENlbGwoJ3NlYXNvbicsICRzZWFzb24s IDIsIDkpDQoJCSkuDQoJCQ0KCQl0cigNCgkJCWZMYWJlbENlbGwoJ1RvdGFsIHJvdW5kcycp Lg0KCQkJZklucHV0Q2VsbCgndG90YWxfcm91bmRzJywgJHRvdGFsX3JvdW5kcywgMywgMikN CgkJKS4NCgkJDQoJCXRyKA0KCQkJZkxhYmVsQ2VsbCgnR2FtZXMgcGVyIHJvdW5kJykuDQoJ CQlmSW5wdXRDZWxsKCdnYW1lc19wZXJfcm91bmQnLCAkZ2FtZXNfcGVyX3JvdW5kLCA0LCAy KQ0KCQkpLg0KDQoJCXRyKA0KCQkJdGQoKS4NCgkJCXRkKA0KCQkJCWZJbnB1dCgnc3VibWl0 JywgJycsIGdUeHQoJ3NhdmUnKSwgJ3B1Ymxpc2gnKQ0KCQkJKQ0KCQkpLg0KDQoJCWVuZFRh YmxlKCkuDQoNCgkJZUlucHV0KCdjbmtfc29jY2VyJykuDQoNCgkJKCRpZCA/IHNJbnB1dCgn Y25rX3NjX3NhdmVfbGVhZ3VlJykuaElucHV0KCdpZCcsICRpZCkgOiBzSW5wdXQoJ2Nua19z Y19wb3N0X2xlYWd1ZScpKS4NCg0KCQloSW5wdXQoJ3NlYXJjaF9tZXRob2QnLCBncHMoJ3Nl YXJjaF9tZXRob2QnKSkuDQoJCWhJbnB1dCgnY3JpdCcsIGdwcygnY3JpdCcpKQ0KCSwgJ21h cmdpbi1ib3R0b206IDI1cHg7Jyk7DQoNCgllY2hvIGNua19zY19saXN0X2xlYWd1ZSgpOw0K fQ0KDQpmdW5jdGlvbiBjbmtfc2NfbGlzdF9sZWFndWUoJG1lc3NhZ2UgPSAnJykgDQp7DQoJ Z2xvYmFsICRzdGVwLCAkY25rX3NjX2xlYWd1ZV9saXN0X3BhZ2VieTsNCgkNCglleHRyYWN0 KGdldF9wcmVmcygpKTsNCg0KCWV4dHJhY3QoZ3BzYShhcnJheSgncGFnZScsICdzb3J0Jywg J2RpcicsICdjcml0JywgJ3NlYXJjaF9tZXRob2QnKSkpOw0KDQoJJGRpciA9ICgkZGlyID09 ICdkZXNjJykgPyAnZGVzYycgOiAnYXNjJzsNCg0KCXN3aXRjaCAoJHNvcnQpDQoJew0KCQlj YXNlICdpZCc6DQoJCQkkc29ydF9zcWwgPSAnaWQgJy4kZGlyOw0KCQlicmVhazsNCg0KCQlj YXNlICduYW1lJzoNCgkJCSRzb3J0X3NxbCA9ICduYW1lICcuJGRpci4nLCBpZCBhc2MnOw0K CQlicmVhazsNCg0KCQljYXNlICdzZWFzb24nOg0KCQkJJHNvcnRfc3FsID0gJ3NlYXNvbiAn LiRkaXIuJywgaWQgYXNjJzsNCgkJYnJlYWs7DQoNCgkJZGVmYXVsdDoNCgkJCSRzb3J0ID0g J25hbWUnOw0KCQkJJHNvcnRfc3FsID0gJ25hbWUgJy4kZGlyLicsIGlkIGFzYyc7DQoJCWJy ZWFrOw0KCX0NCg0KCSRzd2l0Y2hfZGlyID0gKCRkaXIgPT0gJ2Rlc2MnKSA/ICdhc2MnIDog J2Rlc2MnOw0KDQoJJGNyaXRlcmlhID0gMTsNCg0KCWlmICgkc2VhcmNoX21ldGhvZCBhbmQg JGNyaXQpDQoJew0KCQkkY3JpdF9lc2NhcGVkID0gZG9TbGFzaCgkY3JpdCk7DQoNCgkJJGNy aXRzcWwgPSBhcnJheSgNCgkJCSdpZCcJCQkgICAgID0+ICJpZCA9ICckY3JpdF9lc2NhcGVk JyIsDQoJCQknbmFtZScJCSAgICAgPT4gIm5hbWUgbGlrZSAnJSRjcml0X2VzY2FwZWQlJyIs DQoJCQknc2Vhc29uJwkgPT4gInNlYXNvbiBsaWtlICclJGNyaXRfZXNjYXBlZCUnIg0KCQkp Ow0KDQoJCWlmIChhcnJheV9rZXlfZXhpc3RzKCRzZWFyY2hfbWV0aG9kLCAkY3JpdHNxbCkp DQoJCXsNCgkJCSRjcml0ZXJpYSA9ICRjcml0c3FsWyRzZWFyY2hfbWV0aG9kXTsNCgkJCSRs aW1pdCA9IDUwMDsNCgkJfQ0KDQoJCWVsc2UNCgkJew0KCQkJJHNlYXJjaF9tZXRob2QgPSAn JzsNCgkJCSRjcml0ID0gJyc7DQoJCX0NCgl9DQoNCgllbHNlDQoJew0KCQkkc2VhcmNoX21l dGhvZCA9ICcnOw0KCQkkY3JpdCA9ICcnOw0KCX0NCg0KCSR0b3RhbCA9IGdldENvdW50KCdj bmtfc29jY2VyX2xlYWd1ZScsICRjcml0ZXJpYSk7ICANCg0KCWlmICgkdG90YWwgPCAxKQ0K CXsNCgkJaWYgKCRjcml0ZXJpYSAhPSAxKQ0KCQl7DQoJCQllY2hvIG4uY25rX3NjX3NlYXJj aF9mb3JtX2xlYWd1ZSgkY3JpdCwgJHNlYXJjaF9tZXRob2QpLg0KCQkJCW4uZ3JhZihnVHh0 KCdub19yZXN1bHRzX2ZvdW5kJyksICcgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiJyk7 DQoJCX0NCg0KCQllbHNlDQoJCXsNCgkJCWVjaG8gbi5ncmFmKCdObyBsZWFndWUgcmVjb3Jk ZWQnLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IicpOw0KCQl9DQoNCgkJcmV0dXJu Ow0KCX0NCg0KCSRsaW1pdCA9IG1heChAJGNua19zY19sZWFndWVfbGlzdF9wYWdlYnksIDE1 KTsNCg0KCWxpc3QoJHBhZ2UsICRvZmZzZXQsICRudW1QYWdlcykgPSBwYWdlcigkdG90YWws ICRsaW1pdCwgJHBhZ2UpOw0KDQoJZWNobyBjbmtfc2Nfc2VhcmNoX2Zvcm1fbGVhZ3VlKCRj cml0LCAkc2VhcmNoX21ldGhvZCk7DQoNCgkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoJyonLCAn Y25rX3NvY2Nlcl9sZWFndWUnLCAiJGNyaXRlcmlhIG9yZGVyIGJ5ICRzb3J0X3NxbCBsaW1p dCAkb2Zmc2V0LCAkbGltaXQiKTsNCg0KCWlmICgkcnMpDQoJew0KCQllY2hvIG4ubi4nPGZv cm0gYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCIgbmFtZT0ibG9uZ2Zvcm0iIG9u c3VibWl0PSJyZXR1cm4gdmVyaWZ5KFwnJy5nVHh0KCdhcmVfeW91X3N1cmUnKS4nXCcpIj4n LA0KDQoJCQlzdGFydFRhYmxlKCdsaXN0JykuDQoNCgkJCW4udHIoDQoJCQkJY25rX3NjX2Nv bHVtbl9oZWFkKCdJRCcsICdpZCcsICdjbmtfc29jY2VyJywgJ2Nua19zY19lZGl0X2xlYWd1 ZScsIHRydWUsICRzd2l0Y2hfZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QsICgnaWQnID09 ICRzb3J0KSA/ICRkaXIgOiAnJykuDQoJCQkJY25rX3NjX2NvbHVtbl9oZWFkKCduYW1lJywg J25hbWUnLCAnY25rX3NvY2NlcicsICdjbmtfc2NfZWRpdF9sZWFndWUnLCB0cnVlLCAkc3dp dGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAoJ25hbWUnID09ICRzb3J0KSA/ICRk aXIgOiAnJykuDQoJCQkJY25rX3NjX2NvbHVtbl9oZWFkKCdTZWFzb24nLCAnc2Vhc29uJywg J2Nua19zb2NjZXInLCAnY25rX3NjX2VkaXRfbGVhZ3VlJywgdHJ1ZSwgJHN3aXRjaF9kaXIs ICRjcml0LCAkc2VhcmNoX21ldGhvZCwgKCdzZWFzb24nID09ICRzb3J0KSA/ICRkaXIgOiAn JykuDQoJCQkJY25rX3NjX2NvbHVtbl9oZWFkKCdUb3RhbCByb3VuZHMnLCAndG90YWxfcm91 bmRzJykuDQoJCQkJY25rX3NjX2NvbHVtbl9oZWFkKCdHYW1lcy8gUm91bmQnLCAnZ2FtZXNf cGVyX3JvdW5kJykuDQoJCQkJaENlbGwoKQ0KCQkJKTsNCg0KCQkJd2hpbGUgKCRhID0gbmV4 dFJvdygkcnMpKQ0KCQkJew0KCQkJCWV4dHJhY3QoJGEpOwkJCQkNCg0KCQkJCSRlZGl0X3Vy bCA9ICc/ZXZlbnQ9Y25rX3NvY2NlcicuYS4nc3RlcD1jbmtfc2NfZWRpdF9sZWFndWUnLmEu J2lkPScuJGlkLmEuJ3NvcnQ9Jy4kc29ydC4NCgkJCQkJYS4nZGlyPScuJGRpci5hLidwYWdl PScuJHBhZ2UuYS4nc2VhcmNoX21ldGhvZD0nLiRzZWFyY2hfbWV0aG9kLmEuJ2NyaXQ9Jy4k Y3JpdDsNCg0KCQkJCWVjaG8gdHIoDQoNCgkJCQkJbi50ZCgkaWQsIDQwKS4NCg0KCQkJCQl0 ZChocmVmKGh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLCAkZWRpdF91cmwpLCAyNTUpLg0KDQoJ CQkJCXRkKGh0bWxzcGVjaWFsY2hhcnMoJHNlYXNvbiksIDE1MCkuDQoJCQkJCQ0KCQkJCQl0 ZChodG1sc3BlY2lhbGNoYXJzKCR0b3RhbF9yb3VuZHMpLCA0MCkuDQoJCQkJCQ0KCQkJCQl0 ZChodG1sc3BlY2lhbGNoYXJzKCRnYW1lc19wZXJfcm91bmQpLCA0MCkuDQoNCgkJCQkJdGQo ZklucHV0KCdjaGVja2JveCcsICdzZWxlY3RlZFtdJywgJGlkKSwgMjApDQoJCQkJKTsNCgkJ CX0NCg0KCQllY2hvIG4ubi50cigNCgkJCXRkYSgNCgkJCQlzZWxlY3RfYnV0dG9ucygpLg0K CQkJCWNua19zY19tdWx0aWVkaXRfZm9ybV9sZWFndWUoJHBhZ2UsICRzb3J0LCAkZGlyLCAk Y3JpdCwgJHNlYXJjaF9tZXRob2QpDQoJCQksICcgY29sc3Bhbj0iNiIgc3R5bGU9InRleHQt YWxpZ246IHJpZ2h0OyBib3JkZXI6IG5vbmU7IicpDQoJCSkuDQoNCgkJZW5kVGFibGUoKS4N CgkJJzwvZm9ybT4nLg0KDQoJCW4uY25rX3NjX25hdl9mb3JtKCdjbmtfc29jY2VyJywgJ2Nu a19zY19lZGl0X2xlYWd1ZScsICRwYWdlLCAkbnVtUGFnZXMsICRzb3J0LCAkZGlyLCAkY3Jp dCwgJHNlYXJjaF9tZXRob2QpLg0KDQoJCWNua19zY19wYWdlYnlfZm9ybSgnY25rX3NvY2Nl cicsICdjbmtfc2NfcGFnZWJ5X2xlYWd1ZScsICRjbmtfc2NfbGVhZ3VlX2xpc3RfcGFnZWJ5 KS4NCgkJDQoJCSc8cCBjbGFzcz0icHJldi1uZXh0Ij48YSBocmVmPSI/ZXZlbnQ9Y25rX3Nv Y2NlciI+PCBCYWNrIHRvIFNvY2NlciBNZW51PC9hPjwvcD4nOw0KCX0NCn0NCg0KDQoNCmZ1 bmN0aW9uIGNua19zY19zZWFyY2hfZm9ybV9sZWFndWUoJGNyaXQsICRtZXRob2QpDQp7DQoJ JG1ldGhvZHMgPQlhcnJheSgNCgkJJ2lkJwkJCQk9PiBnVHh0KCdJRCcpLA0KCQknbmFtZScJ CQkJPT4gZ1R4dCgnbmFtZScpLA0KCQknc2Vhc29uJyAJCQk9PiAnU2Vhc29uJw0KCSk7DQoN CglyZXR1cm4gc2VhcmNoX2Zvcm0oJ2Nua19zb2NjZXInLCAnY25rX3NjX2VkaXRfbGVhZ3Vl JywgJGNyaXQsICRtZXRob2RzLCAkbWV0aG9kLCAnbmFtZScpOw0KfQ0KDQpmdW5jdGlvbiBj bmtfc2NfbXVsdGllZGl0X2Zvcm1fbGVhZ3VlKCRwYWdlLCAkc29ydCwgJGRpciwgJGNyaXQs ICRzZWFyY2hfbWV0aG9kKSANCnsNCgkkbWV0aG9kcyA9IGFycmF5KA0KCQknZGVsZXRlJyA9 PiBnVHh0KCdkZWxldGUnKQ0KCSk7DQoNCglyZXR1cm4gY25rX3NjX2V2ZW50X211bHRpZWRp dF9mb3JtKCdjbmtfc29jY2VyJywgJ2Nua19zY19tdWx0aV9lZGl0X2xlYWd1ZScsICRtZXRo b2RzLCAkcGFnZSwgJHNvcnQsICRkaXIsICRjcml0LCAkc2VhcmNoX21ldGhvZCk7DQp9DQoN CmZ1bmN0aW9uIGNua19zY19wYWdlYnlfbGVhZ3VlKCkgDQp7DQoJZXZlbnRfY2hhbmdlX3Bh Z2VieSgnY25rX3NjX2xlYWd1ZScpOw0KCWNua19zY19lZGl0X2xlYWd1ZSgpOw0KfQ0KDQpm dW5jdGlvbiBjbmtfc2NfbXVsdGlfZWRpdF9sZWFndWUoKSANCnsNCgkkZGVsZXRlZCA9IGNu a19zY19ldmVudF9tdWx0aV9lZGl0KCdjbmtfc29jY2VyX2xlYWd1ZScsICdpZCcpOw0KDQoJ aWYgKCRkZWxldGVkKQ0KCXsNCgkJJG1lc3NhZ2UgPSAnTGVhZ3VlIGRlbGV0ZWQ6ICcuJGRl bGV0ZWQ7DQoNCgkJcmV0dXJuIAljbmtfc2NfZWRpdF9sZWFndWUoJG1lc3NhZ2UpOw0KCX0N Cg0KCXJldHVybiAJY25rX3NjX2VkaXRfbGVhZ3VlKCk7DQp9DQoNCi8vICMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMN Ci8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMNCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi8qDQoJUmFua2luZyBGdW5jdGlvbnMN CiovDQovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjDQovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQovLyAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCmZ1 bmN0aW9uIGNua19zY19wb3N0X3JhbmtpbmcoKQ0Kew0KCWdsb2JhbCAkdHhwY2ZnLCR2YXJz Ow0KCSR2YXJyYXkgPSBncHNhKCR2YXJzKTsNCg0KCWV4dHJhY3QoZG9TbGFzaCgkdmFycmF5 KSk7DQoNCgkkY2hlY2sgPSBnZXRDb3VudCgnY25rX3NvY2Nlcl9jbHViX3RvX2xlYWd1ZScs ICJjbHViX2lkID0gJyRjbHViX2lkJyBBTkQgbGVhZ3VlX2lkID0gJyRsZWFndWVfaWQnIik7 DQoJDQoJaWYgKCEkY2hlY2spDQoJew0KCQkkcSA9IHNhZmVfaW5zZXJ0KCJjbmtfc29jY2Vy X2NsdWJfdG9fbGVhZ3VlIiwNCgkJICAgImNsdWJfaWQgICAgPSAnJGNsdWJfaWQnLA0KCQkJ bGVhZ3VlX2lkID0gJyRsZWFndWVfaWQnIg0KCQkpOw0KDQoJCSRHTE9CQUxTWydJRCddID0g JGNsdWJfaWQ7DQoNCgkJaWYgKCRxKQ0KCQl7DQoJCQkvL3VwZGF0ZSBsYXN0bW9kIGR1ZSB0 byBsaW5rIGZlZWRzDQoJCQl1cGRhdGVfbGFzdG1vZCgpOw0KDQoJCQkkbWVzc2FnZSA9ICdS YW5rIGNyZWF0ZWQ6ICcuJGNsdWJfaWQuJ18nLiRsZWFndWVfaWQ7DQoJCX0NCgkJZWxzZQ0K CQl7DQoJCQkkbWVzc2FnZSA9ICdEYXRhYmFzZSBFcnJvcic7DQoJCX0NCgl9DQoJZWxzZQ0K CXsNCgkJJG1lc3NhZ2UgPSAnQ2x1YiBpcyBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoaXMgbGVh Z3VlLic7DQoJfQ0KCQ0KCWNua19zY19lZGl0X3JhbmtpbmcoJG1lc3NhZ2UpOwkNCn0NCg0K ZnVuY3Rpb24gY25rX3NjX3NhdmVfcmFua2luZygpIA0Kew0KCWdsb2JhbCAkdHhwY2ZnLCR2 YXJzOw0KCSR2YXJyYXkgPSBncHNhKCR2YXJzKTsNCg0KCWV4dHJhY3QoZG9TbGFzaCgkdmFy cmF5KSk7DQoJDQoJJGNsdWJfaWQgPSBhc3NlcnRfaW50KCRjbHViX2lkKTsNCgkkbGVhZ3Vl X2lkID0gYXNzZXJ0X2ludCgkbGVhZ3VlX2lkKTsNCgkkZ29hbHNfZm9yID0gYXNzZXJ0X2lu dCgkZ29hbHNfZm9yKTsNCgkkZ29hbHNfYWdhaW5zdCA9IGFzc2VydF9pbnQoJGdvYWxzX2Fn YWluc3QpOw0KCSRnYW1lX3dvbiA9IGFzc2VydF9pbnQoJGdhbWVfd29uKTsNCgkkZ2FtZV9s b3N0ID0gYXNzZXJ0X2ludCgkZ2FtZV9sb3N0KTsNCgkkZ2FtZV9kcmF3ID0gYXNzZXJ0X2lu dCgkZ2FtZV9kcmF3KTsNCgkNCglpZiAoJGNsdWJfaWQgIT0gJG9sZF9jbHViX2lkIHx8ICRs ZWFndWVfaWQgIT0gJG9sZF9sZWFndWVfaWQpDQoJew0KCQkkY2hlY2sgPSBnZXRDb3VudCgn Y25rX3NvY2Nlcl9jbHViX3RvX2xlYWd1ZScsICJjbHViX2lkID0gJyRjbHViX2lkJyBBTkQg bGVhZ3VlX2lkID0gJyRsZWFndWVfaWQnIik7DQoJfQ0KCWVsc2UNCgl7DQoJCSRjaGVjayA9 IGZhbHNlOw0KCX0NCgkNCglpZiAoISRjaGVjaykNCgl7DQoJCSRycyA9IHNhZmVfdXBkYXRl KCJjbmtfc29jY2VyX2NsdWJfdG9fbGVhZ3VlIiwNCgkJICAgInBvaW50cyAgICA9ICckcG9p bnRzJywNCgkJICAgIGdvYWxzX2ZvciA9ICckZ29hbHNfZm9yJywNCgkJICAgIGdvYWxzX2Fn YWluc3QgPSAnJGdvYWxzX2FnYWluc3QnLA0KCQkgICAgZ2FtZV93b24gPSAnJGdhbWVfd29u JywNCgkJICAgIGdhbWVfZHJhdyA9ICckZ2FtZV9kcmF3JywNCgkJICAgIGdhbWVfbG9zdCA9 ICckZ2FtZV9sb3N0JywNCgkJCWNsdWJfaWQgPSAnJGNsdWJfaWQnLA0KCQkJbGVhZ3VlX2lk ID0gJyRsZWFndWVfaWQnIiwNCgkJICAgImNsdWJfaWQgPSAkY2x1Yl9pZCBBTkQgbGVhZ3Vl X2lkID0gJGxlYWd1ZV9pZCINCgkJKTsNCg0KCQlpZiAoJHJzKQ0KCQl7DQoJCQl1cGRhdGVf bGFzdG1vZCgpOw0KDQoJCQkkbWVzc2FnZSA9ICdSYW5rIHVwZGF0ZWQ6ICcuZG9TdHJpcCgk bmFtZSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkbWVzc2FnZSA9ICdEYXRhYmFzZSBFcnJv cic7DQoJCX0NCgl9DQoJZWxzZQ0KCXsNCgkJJG1lc3NhZ2UgPSAnQ2x1YiBpcyBhbHJlYWR5 IGFzc2lnbmVkIHRvIHRoaXMgbGVhZ3VlLic7DQoJfQ0KCQ0KCWNua19zY19lZGl0X3Jhbmtp bmcoJG1lc3NhZ2UpOwkNCn0NCg0KLy8gVE9ETzogcmVkdW5kYW50IGZ1bmN0aW9ucw0KDQpm dW5jdGlvbiByYW5raW5nX2NsdWJfZHJvcGRvd24oJGNsdWJfaWQgPSAnJywgJGhlbHAgPSAn JykgDQp7DQoJJGNsdWJfYXJyYXkgPSBhcnJheSgpOw0KDQoJJHJzID0gc2FmZV9yb3dzX3N0 YXJ0KCJpZCwgQ09OQ0FUKGNvdW50cnksICcgLSAnLCBuYW1lKSBhcyB0aXRsZSIsICdjbmtf c29jY2VyX2NsdWJzJywgIjE9MSBvcmRlciBieSBjb3VudHJ5IGFzYywgbmFtZSBhc2MiKTsN CgkNCgl3aGlsZSAoJHIgPSBuZXh0Um93KCRycykpDQoJew0KCQkkY2x1Yl9hcnJheVskclsn aWQnXV0gPSAkclsndGl0bGUnXTsNCgl9DQoJDQoJcmV0dXJuIHRkYShzZWxlY3RJbnB1dCgn Y2x1Yl9pZCcsICRjbHViX2FycmF5LCAkY2x1Yl9pZCkuJGhlbHApOwkNCn0NCg0KZnVuY3Rp b24gcmFua2luZ19sZWFndWVfZHJvcGRvd24oJGxlYWd1ZV9pZCA9ICcnLCAkaGVscCA9ICcn KSANCnsNCgkkbGVhZ3VlX2FycmF5ID0gYXJyYXkoKTsNCg0KCSRycyA9IHNhZmVfcm93c19z dGFydCgiaWQsIENPTkNBVChuYW1lLCAnIC0gJywgc2Vhc29uKSBhcyB0aXRsZSIsICdjbmtf c29jY2VyX2xlYWd1ZScsICIxPTEgb3JkZXIgYnkgbmFtZSBhc2MsIHNlYXNvbiBhc2MiKTsN CgkNCgl3aGlsZSAoJHIgPSBuZXh0Um93KCRycykpDQoJew0KCQkkbGVhZ3VlX2FycmF5WyRy WydpZCddXSA9ICRyWyd0aXRsZSddOw0KCX0NCg0KCXJldHVybiB0ZGEoc2VsZWN0SW5wdXQo J2xlYWd1ZV9pZCcsICRsZWFndWVfYXJyYXksICRsZWFndWVfaWQpLiRoZWxwKTsJDQp9DQoN CmZ1bmN0aW9uIGNua19zY19lZGl0X3JhbmtpbmcoJG1lc3NhZ2UgPSAnJykNCnsNCglnbG9i YWwgJHZhcnMsICRzdGVwOw0KDQoJcGFnZXRvcCgnRWRpdCBSYW5rJywgJG1lc3NhZ2UpOw0K DQoJZXh0cmFjdChncHNhKCR2YXJzKSk7DQoNCglpZiAoJGNsdWJfaWQgJiYgJGxlYWd1ZV9p ZCAmJiAkc3RlcCA9PSAnY25rX3NjX2VkaXRfcmFua2luZycpDQoJew0KCQkkY2x1Yl9pZCA9 IGFzc2VydF9pbnQoJGNsdWJfaWQpOw0KCQkkbGVhZ3VlX2lkID0gYXNzZXJ0X2ludCgkbGVh Z3VlX2lkKTsNCgkJZXh0cmFjdChzYWZlX3JvdygnKicsICdjbmtfc29jY2VyX2NsdWJfdG9f bGVhZ3VlJywgImNsdWJfaWQgPSAkY2x1Yl9pZCBBTkQgbGVhZ3VlX2lkID0gJGxlYWd1ZV9p ZCIpKTsNCgl9DQoJDQoJaWYgKCRzdGVwID09ICdjbmtfc2Nfc2F2ZV9yYW5raW5nJyBvciAk c3RlcCA9PSAnY25rX3NjX3Bvc3RfcmFua2luZycpDQoJew0KCQlmb3JlYWNoICgkdmFycyBh cyAkdmFyKQ0KCQl7DQoJCQkkJHZhciA9ICcnOw0KCQl9DQoJfQ0KCQ0KCWVjaG8gJzxwIGNs YXNzPSJwcmV2LW5leHQiPjxhIGhyZWY9Ij9ldmVudD1jbmtfc29jY2VyIj48IEJhY2sgdG8g U29jY2VyIE1lbnU8L2E+PC9wPicuDQoNCglmb3JtKA0KDQoJCXN0YXJ0VGFibGUoJ2VkaXQn KSAuDQoNCgkJdHIoDQoJCQlmTGFiZWxDZWxsKCdDbHViJykuDQoJCQlyYW5raW5nX2NsdWJf ZHJvcGRvd24oJGNsdWJfaWQsICcgWycuZUxpbmsoJ2Nua19zb2NjZXInLCAnY25rX3NjX2Vk aXRfY2x1YicsICcnLCAnJywgZ1R4dCgnZWRpdCcpKS4nXScpDQoJCSkuDQoNCgkJdHIoDQoJ CQlmTGFiZWxDZWxsKCdMZWFndWUnKS4NCgkJCXJhbmtpbmdfbGVhZ3VlX2Ryb3Bkb3duKCRs ZWFndWVfaWQsICcgWycuZUxpbmsoJ2Nua19zb2NjZXInLCAnY25rX3NjX2VkaXRfbGVhZ3Vl JywgJycsICcnLCBnVHh0KCdlZGl0JykpLiddJykNCgkJKS4NCgkJDQoJCSgkY2x1Yl9pZD8N CgkJCXRyKA0KCQkJCWZMYWJlbENlbGwoJ1BvaW50cycpLg0KCQkJCWZJbnB1dENlbGwoJ3Bv aW50cycsICRwb2ludHMsIDMsIDMpDQoJCQkpLg0KCQkJDQoJCQl0cigNCgkJCQlmTGFiZWxD ZWxsKCdHb2FscyBmb3InKS4NCgkJCQlmSW5wdXRDZWxsKCdnb2Fsc19mb3InLCAkZ29hbHNf Zm9yLCA0LCAzKQ0KCQkJKS4NCgkJCQ0KCQkJdHIoDQoJCQkJZkxhYmVsQ2VsbCgnR29hbHMg YWdhaW5zdCcpLg0KCQkJCWZJbnB1dENlbGwoJ2dvYWxzX2FnYWluc3QnLCAkZ29hbHNfYWdh aW5zdCwgNSwgMykNCgkJCSkuDQoJCQkNCgkJCXRyKA0KCQkJCWZMYWJlbENlbGwoJ0dhbWVz IHdvbicpLg0KCQkJCWZJbnB1dENlbGwoJ2dhbWVfd29uJywgJGdhbWVfd29uLCA2LCAzKQ0K CQkJKS4NCgkJCQ0KCQkJdHIoDQoJCQkJZkxhYmVsQ2VsbCgnR2FtZXMgZHJhdycpLg0KCQkJ CWZJbnB1dENlbGwoJ2dhbWVfZHJhdycsICRnYW1lX2RyYXcsIDcsIDMpDQoJCQkpLg0KCQkJ DQoJCQl0cigNCgkJCQlmTGFiZWxDZWxsKCdHYW1lcyBsb3N0JykuDQoJCQkJZklucHV0Q2Vs bCgnZ2FtZV9sb3N0JywgJGdhbWVfbG9zdCwgOCwgMykNCgkJCSkNCgkJOicnKS4NCg0KCQl0 cigNCgkJCXRkKCkuDQoJCQl0ZCgNCgkJCQlmSW5wdXQoJ3N1Ym1pdCcsICcnLCBnVHh0KCdz YXZlJyksICdwdWJsaXNoJykNCgkJCSkNCgkJKS4NCg0KCQllbmRUYWJsZSgpLg0KDQoJCWVJ bnB1dCgnY25rX3NvY2NlcicpLg0KDQoJCSgkY2x1Yl9pZCA/IHNJbnB1dCgnY25rX3NjX3Nh dmVfcmFua2luZycpLmhJbnB1dCgnb2xkX2NsdWJfaWQnLCAkY2x1Yl9pZCkuaElucHV0KCdv bGRfbGVhZ3VlX2lkJywgJGxlYWd1ZV9pZCkgOiBzSW5wdXQoJ2Nua19zY19wb3N0X3Jhbmtp bmcnKSkuDQoNCgkJaElucHV0KCdzZWFyY2hfbWV0aG9kJywgZ3BzKCdzZWFyY2hfbWV0aG9k JykpLg0KCQloSW5wdXQoJ2NyaXQnLCBncHMoJ2NyaXQnKSkNCgksICdtYXJnaW4tYm90dG9t OiAyNXB4OycpOw0KDQoJZWNobyBjbmtfc2NfbGlzdF9yYW5raW5nKCk7DQp9DQoNCmZ1bmN0 aW9uIGNua19zY19saXN0X3JhbmtpbmcoJG1lc3NhZ2UgPSAnJykgDQp7DQoJZ2xvYmFsICRz dGVwLCAkY25rX3NjX3JhbmtpbmdfbGlzdF9wYWdlYnk7DQoJDQoJZXh0cmFjdChnZXRfcHJl ZnMoKSk7DQoNCglleHRyYWN0KGdwc2EoYXJyYXkoJ3BhZ2UnLCAnc29ydCcsICdkaXInLCAn Y3JpdCcsICdzZWFyY2hfbWV0aG9kJykpKTsNCg0KCSRkaXIgPSAoJGRpciA9PSAnZGVzYycp ID8gJ2Rlc2MnIDogJ2FzYyc7DQoNCglzd2l0Y2ggKCRzb3J0KQ0KCXsNCgkJY2FzZSAnY2x1 Yic6DQoJCQkkc29ydF9zcWwgPSAnY25rX3NvY2Nlcl9jbHVicy5uYW1lICcuJGRpci4nLCBj bmtfc29jY2VyX2xlYWd1ZS5uYW1lIGFzYywgY25rX3NvY2Nlcl9sZWFndWUuc2Vhc29uIGFz Yyc7DQoJCWJyZWFrOw0KDQoJCWNhc2UgJ2xlYWd1ZSc6DQoJCQkkc29ydF9zcWwgPSAnY25r X3NvY2Nlcl9sZWFndWUubmFtZSAnLiRkaXIuJywgY25rX3NvY2Nlcl9sZWFndWUuc2Vhc29u IGFzYywgY25rX3NvY2Nlcl9jbHVicy5uYW1lIGFzYyc7DQoJCWJyZWFrOw0KDQoJCWRlZmF1 bHQ6DQoJCQkkc29ydCA9ICdjbHViJzsNCgkJCSRzb3J0X3NxbCA9ICdjbmtfc29jY2VyX2Ns dWJzLm5hbWUgJy4kZGlyLicsIGNua19zb2NjZXJfbGVhZ3VlLm5hbWUgYXNjLCBjbmtfc29j Y2VyX2xlYWd1ZS5zZWFzb24gYXNjJzsNCgkJYnJlYWs7DQoJfQ0KDQoJJHN3aXRjaF9kaXIg PSAoJGRpciA9PSAnZGVzYycpID8gJ2FzYycgOiAnZGVzYyc7DQoNCgkkY3JpdGVyaWEgPSAx Ow0KDQoJaWYgKCRzZWFyY2hfbWV0aG9kIGFuZCAkY3JpdCkNCgl7DQoJCSRjcml0X2VzY2Fw ZWQgPSBkb1NsYXNoKCRjcml0KTsNCg0KCQkkY3JpdHNxbCA9IGFycmF5KA0KCQkJJ2NsdWIn CQkJICAgICA9PiAiY25rX3NvY2Nlcl9jbHVicy5uYW1lIGxpa2UgJyUkY3JpdF9lc2NhcGVk JSciLA0KCQkJJ2xlYWd1ZScJCSAgICAgPT4gImNua19zb2NjZXJfbGVhZ3VlLm5hbWUgbGlr ZSAnJSRjcml0X2VzY2FwZWQlJyINCgkJKTsNCg0KCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygk c2VhcmNoX21ldGhvZCwgJGNyaXRzcWwpKQ0KCQl7DQoJCQkkY3JpdGVyaWEgPSAkY3JpdHNx bFskc2VhcmNoX21ldGhvZF07DQoJCQkkbGltaXQgPSA1MDA7DQoJCX0NCg0KCQllbHNlDQoJ CXsNCgkJCSRzZWFyY2hfbWV0aG9kID0gJyc7DQoJCQkkY3JpdCA9ICcnOw0KCQl9DQoJfQ0K DQoJZWxzZQ0KCXsNCgkJJHNlYXJjaF9tZXRob2QgPSAnJzsNCgkJJGNyaXQgPSAnJzsNCgl9 DQoNCgkkdG90YWwgPSBnZXRDb3VudCgnY25rX3NvY2Nlcl9jbHViX3RvX2xlYWd1ZSxjbmtf c29jY2VyX2NsdWJzLGNua19zb2NjZXJfbGVhZ3VlJywgImNua19zb2NjZXJfY2x1Yl90b19s ZWFndWUuY2x1Yl9pZCA9IGNua19zb2NjZXJfY2x1YnMuaWQgQU5EIGNua19zb2NjZXJfY2x1 Yl90b19sZWFndWUubGVhZ3VlX2lkID0gY25rX3NvY2Nlcl9sZWFndWUuaWQgQU5EICIuJGNy aXRlcmlhKTsgIA0KDQoJaWYgKCR0b3RhbCA8IDEpDQoJew0KCQlpZiAoJGNyaXRlcmlhICE9 IDEpDQoJCXsNCgkJCWVjaG8gbi5jbmtfc2Nfc2VhcmNoX2Zvcm1fcmFua2luZygkY3JpdCwg JHNlYXJjaF9tZXRob2QpLg0KCQkJCW4uZ3JhZihnVHh0KCdub19yZXN1bHRzX2ZvdW5kJyks ICcgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiJyk7DQoJCX0NCg0KCQllbHNlDQoJCXsN CgkJCWVjaG8gbi5ncmFmKCdObyByYW5rIHJlY29yZGVkJywgJyBzdHlsZT0idGV4dC1hbGln bjogY2VudGVyOyInKTsNCgkJfQ0KDQoJCXJldHVybjsNCgl9DQoNCgkkbGltaXQgPSBtYXgo QCRjbmtfc2NfcmFua2luZ19saXN0X3BhZ2VieSwgMTUpOw0KDQoJbGlzdCgkcGFnZSwgJG9m ZnNldCwgJG51bVBhZ2VzKSA9IHBhZ2VyKCR0b3RhbCwgJGxpbWl0LCAkcGFnZSk7DQoNCgll Y2hvIGNua19zY19zZWFyY2hfZm9ybV9yYW5raW5nKCRjcml0LCAkc2VhcmNoX21ldGhvZCk7 DQoNCgkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoImNua19zb2NjZXJfY2x1Yl90b19sZWFndWUu KiwgY25rX3NvY2Nlcl9jbHVicy5uYW1lIGFzIGNsdWIsIENPTkNBVChjbmtfc29jY2VyX2xl YWd1ZS5uYW1lLCAnIC0gJywgY25rX3NvY2Nlcl9sZWFndWUuc2Vhc29uKSBhcyBsZWFndWUi LCAnY25rX3NvY2Nlcl9jbHViX3RvX2xlYWd1ZSxjbmtfc29jY2VyX2NsdWJzLGNua19zb2Nj ZXJfbGVhZ3VlJywgImNua19zb2NjZXJfY2x1Yl90b19sZWFndWUuY2x1Yl9pZCA9IGNua19z b2NjZXJfY2x1YnMuaWQgQU5EIGNua19zb2NjZXJfY2x1Yl90b19sZWFndWUubGVhZ3VlX2lk ID0gY25rX3NvY2Nlcl9sZWFndWUuaWQgQU5EICRjcml0ZXJpYSBvcmRlciBieSAkc29ydF9z cWwgbGltaXQgJG9mZnNldCwgJGxpbWl0Iik7DQoNCglpZiAoJHJzKQ0KCXsNCgkJZWNobyBu Lm4uJzxmb3JtIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9InBvc3QiIG5hbWU9Imxvbmdm b3JtIiBvbnN1Ym1pdD0icmV0dXJuIHZlcmlmeShcJycuZ1R4dCgnYXJlX3lvdV9zdXJlJyku J1wnKSI+JywNCg0KCQkJc3RhcnRUYWJsZSgnbGlzdCcpLg0KDQoJCQluLnRyKA0KCQkJCWNu a19zY19jb2x1bW5faGVhZCgnQ2x1YicsICduYW1lJywgJ2Nua19zb2NjZXInLCAnY25rX3Nj X2VkaXRfcmFua2luZycsIHRydWUsICRzd2l0Y2hfZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRo b2QsICgnY2x1YicgPT0gJHNvcnQpID8gJGRpciA6ICcnKS4NCgkJCQljbmtfc2NfY29sdW1u X2hlYWQoJ0xlYWd1ZSAtIFNlYXNvbicsICdsZWFndWUnLCAnY25rX3NvY2NlcicsICdjbmtf c2NfZWRpdF9yYW5raW5nJywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0LCAkc2VhcmNoX21l dGhvZCwgKCdsZWFndWUnID09ICRzb3J0KSA/ICRkaXIgOiAnJykuDQoJCQkJY25rX3NjX2Nv bHVtbl9oZWFkKCdQb2ludHMnLCAncG9pbnRzJykuDQoJCQkJY25rX3NjX2NvbHVtbl9oZWFk KCdHb2FscyBmb3InLCAnZ29hbHNfZm9yJykuDQoJCQkJY25rX3NjX2NvbHVtbl9oZWFkKCdH b2FscyBhZ2FpbnN0JywgJ2dvYWxzX2FnYWluc3QnKS4NCgkJCQljbmtfc2NfY29sdW1uX2hl YWQoJ0dhbWVzIHdvbicsICdnYW1lX3dvbicpLg0KCQkJCWNua19zY19jb2x1bW5faGVhZCgn R2FtZXMgZHJhdycsICdnYW1lX2RyYXcnKS4NCgkJCQljbmtfc2NfY29sdW1uX2hlYWQoJ0dh bWVzIGxvc3QnLCAnZ2FtZV9sb3N0JykuDQoJCQkJaENlbGwoKQ0KCQkJKTsNCg0KCQkJd2hp bGUgKCRhID0gbmV4dFJvdygkcnMpKQ0KCQkJew0KCQkJCWV4dHJhY3QoJGEpOwkJCQkNCg0K CQkJCSRlZGl0X3VybCA9ICc/ZXZlbnQ9Y25rX3NvY2NlcicuYS4nc3RlcD1jbmtfc2NfZWRp dF9yYW5raW5nJy5hLidjbHViX2lkPScuJGNsdWJfaWQuYS4nbGVhZ3VlX2lkPScuJGxlYWd1 ZV9pZC5hLidzb3J0PScuJHNvcnQuDQoJCQkJCWEuJ2Rpcj0nLiRkaXIuYS4ncGFnZT0nLiRw YWdlLmEuJ3NlYXJjaF9tZXRob2Q9Jy4kc2VhcmNoX21ldGhvZC5hLidjcml0PScuJGNyaXQ7 DQoNCgkJCQllY2hvIHRyKA0KCQkJCQ0KCQkJCQluLnRkKGhyZWYoaHRtbHNwZWNpYWxjaGFy cygkY2x1YiksICRlZGl0X3VybCksIDI1NSkuDQoNCgkJCQkJdGQoJGxlYWd1ZSwgMjU1KS4N Cg0KCQkJCQl0ZCgnPHN0cm9uZz4nLiRwb2ludHMuJzwvc3Ryb25nPicsIDIwKS4NCgkJCQkJ DQoJCQkJCXRkKCc8c3Ryb25nPicuJGdvYWxzX2Zvci4nPC9zdHJvbmc+JywgMjApLg0KCQkJ CQkNCgkJCQkJdGQoJzxzdHJvbmc+Jy4kZ29hbHNfYWdhaW5zdC4nPC9zdHJvbmc+JywgMjAp Lg0KCQkJCQkNCgkJCQkJdGQoJzxzdHJvbmc+Jy4kZ2FtZV93b24uJzwvc3Ryb25nPicsIDIw KS4NCgkJCQkJDQoJCQkJCXRkKCc8c3Ryb25nPicuJGdhbWVfZHJhdy4nPC9zdHJvbmc+Jywg MjApLg0KCQkJCQkNCgkJCQkJdGQoJzxzdHJvbmc+Jy4kZ2FtZV9sb3N0Lic8L3N0cm9uZz4n LCAyMCkuDQoNCgkJCQkJdGQoZklucHV0KCdjaGVja2JveCcsICdzZWxlY3RlZFtdJywgJGNs dWJfaWQuJ18nLiRsZWFndWVfaWQpLCAyMCkNCgkJCQkpOw0KCQkJfQ0KDQoJCWVjaG8gbi5u LnRyKA0KCQkJdGRhKA0KCQkJCXNlbGVjdF9idXR0b25zKCkuDQoJCQkJY25rX3NjX211bHRp ZWRpdF9mb3JtX3JhbmtpbmcoJHBhZ2UsICRzb3J0LCAkZGlyLCAkY3JpdCwgJHNlYXJjaF9t ZXRob2QpDQoJCQksICcgY29sc3Bhbj0iNCIgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyBi b3JkZXI6IG5vbmU7IicpDQoJCSkuDQoNCgkJZW5kVGFibGUoKS4NCgkJJzwvZm9ybT4nLg0K DQoJCW4uY25rX3NjX25hdl9mb3JtKCdjbmtfc29jY2VyJywgJ2Nua19zY19lZGl0X3Jhbmtp bmcnLCAkcGFnZSwgJG51bVBhZ2VzLCAkc29ydCwgJGRpciwgJGNyaXQsICRzZWFyY2hfbWV0 aG9kKS4NCg0KCQljbmtfc2NfcGFnZWJ5X2Zvcm0oJ2Nua19zb2NjZXInLCAnY25rX3NjX3Bh Z2VieV9yYW5raW5nJywgJGNua19zY19yYW5raW5nX2xpc3RfcGFnZWJ5KS4NCgkJDQoJCSc8 cCBjbGFzcz0icHJldi1uZXh0Ij48YSBocmVmPSI/ZXZlbnQ9Y25rX3NvY2NlciI+PCBCYWNr IHRvIFNvY2NlciBNZW51PC9hPjwvcD4nOw0KCX0NCn0NCg0KDQoNCmZ1bmN0aW9uIGNua19z Y19zZWFyY2hfZm9ybV9yYW5raW5nKCRjcml0LCAkbWV0aG9kKQ0Kew0KCSRtZXRob2RzID0J YXJyYXkoDQoJCSdjbHViJwkJCQk9PiAnQ2x1YicsDQoJCSdsZWFndWUnCQkJPT4gJ0xlYWd1 ZScNCgkpOw0KDQoJcmV0dXJuIHNlYXJjaF9mb3JtKCdjbmtfc29jY2VyJywgJ2Nua19zY19l ZGl0X3JhbmtpbmcnLCAkY3JpdCwgJG1ldGhvZHMsICRtZXRob2QsICduYW1lJyk7DQp9DQoN CmZ1bmN0aW9uIGNua19zY19tdWx0aWVkaXRfZm9ybV9yYW5raW5nKCRwYWdlLCAkc29ydCwg JGRpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKSANCnsNCgkkbWV0aG9kcyA9IGFycmF5KA0K CQknZGVsZXRlJyA9PiBnVHh0KCdkZWxldGUnKQ0KCSk7DQoNCglyZXR1cm4gY25rX3NjX2V2 ZW50X211bHRpZWRpdF9mb3JtKCdjbmtfc29jY2VyJywgJ2Nua19zY19tdWx0aV9lZGl0X3Jh bmtpbmcnLCAkbWV0aG9kcywgJHBhZ2UsICRzb3J0LCAkZGlyLCAkY3JpdCwgJHNlYXJjaF9t ZXRob2QpOw0KfQ0KDQpmdW5jdGlvbiBjbmtfc2NfcGFnZWJ5X3JhbmtpbmcoKSANCnsNCgll dmVudF9jaGFuZ2VfcGFnZWJ5KCdjbmtfc2NfcmFua2luZycpOw0KCWNua19zY19lZGl0X3Jh bmtpbmcoKTsNCn0NCg0KZnVuY3Rpb24gY25rX3NjX211bHRpX2VkaXRfcmFua2luZygpIA0K ew0KCSRkZWxldGVkID0gY25rX3NjX2V2ZW50X211bHRpX2VkaXQoJ2Nua19zb2NjZXJfY2x1 Yl90b19sZWFndWUnLCAnY2x1Yl9pZHxsZWFndWVfaWQnKTsNCg0KCWlmICgkZGVsZXRlZCkN Cgl7DQoJCSRtZXNzYWdlID0gJ1JhbmsgZGVsZXRlZDogJy4kZGVsZXRlZDsNCg0KCQlyZXR1 cm4gCWNua19zY19lZGl0X3JhbmtpbmcoJG1lc3NhZ2UpOw0KCX0NCg0KCXJldHVybiAJY25r X3NjX2VkaXRfcmFua2luZygpOw0KfQ0KDQovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQovLyAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj DQovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjDQovKg0KCVJvdW5kIEZ1bmN0aW9ucw0KKi8NCi8vICMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMNCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMNCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KZnVuY3Rpb24gY25rX3NjX3Nh dmVfcm91bmQoKQ0Kew0KCWdsb2JhbCAkdHhwY2ZnLCR2YXJzOw0KCSR2YXJyYXkgPSBncHNh KCR2YXJzKTsNCgkkd3JvbmdfZ2FtZXMgPSBhcnJheSgpOw0KCSR3cm9uZ19pZHMgPSBhcnJh eSgpOw0KDQoJZXh0cmFjdChkb1NsYXNoKCR2YXJyYXkpKTsNCgkNCgkkaSA9IDA7DQoJDQoJ d2hpbGUgKCRpIDwgJGdhbWVzX3Blcl9yb3VuZCkNCgl7DQoJCSRpKys7DQoJCQ0KCQkkY2x1 YjFfaWQgPSBncHMoJ2NsdWIxX2lkXycuJGkpOw0KCQkkY2x1YjJfaWQgPSBncHMoJ2NsdWIy X2lkXycuJGkpOw0KCQkka2lja29mZl90aW1lID0gZ3BzKCdraWNrb2ZmX3RpbWVfJy4kaSk7 DQoJCSRnb2Fsc19jbHViMSA9IGdwcygnZ29hbHNfY2x1YjFfJy4kaSk7IA0KCQkkZ29hbHNf Y2x1YjIgPSBncHMoJ2dvYWxzX2NsdWIyXycuJGkpOw0KCQkkaWQgPSBncHMoJ2lkXycuJGkp Ow0KCQkNCgkJJGdhbWUgPSBhcnJheQ0KCQkoDQoJCQknaWQnID0+ICRpZCwNCgkJCSdjbHVi MV9pZCcgPT4gJGNsdWIxX2lkLA0KCQkJJ2NsdWIyX2lkJyA9PiAkY2x1YjJfaWQsDQoJCQkn a2lja29mZl90aW1lJyA9PiAka2lja29mZl90aW1lLA0KCQkJJ2dvYWxzX2NsdWIxJyA9PiAk Z29hbHNfY2x1YjEsDQoJCQknZ29hbHNfY2x1YjInID0+ICRnb2Fsc19jbHViMgkJDQoJCSk7 DQoJCQ0KCQlpZiAodHJpbSgkZ29hbHNfY2x1YjEpID09ICcnKSAkZ29hbHNfY2x1YjEgPSAn TlVMTCc7DQoJCWlmICh0cmltKCRnb2Fsc19jbHViMikgPT0gJycpICRnb2Fsc19jbHViMiA9 ICdOVUxMJzsNCgkJDQoJCWlmICgoaXNfbnVtZXJpYygkZ29hbHNfY2x1YjEpIHx8ICRnb2Fs c19jbHViMSA9PSAnTlVMTCcpICYmIChpc19udW1lcmljKCRnb2Fsc19jbHViMikgfHwgJGdv YWxzX2NsdWIyID09ICdOVUxMJykpDQoJCXsJCQkJCQkNCgkJCS8vIGNoZWNrIGlmIGNsdWJz IGFyZSBzZXQNCgkJCQ0KCQkJaWYgKCRjbHViMV9pZCAmJiAkY2x1YjJfaWQgJiYgJGNsdWIx X2lkICE9ICRjbHViMl9pZCkNCgkJCXsNCgkJCQkvLyBjaGVjayBpZiBjbHViIGlzIGFscmVh ZHkgYXNzaWduZWQgdG8gYSBnYW1lIGluIHRoaXMgcm91bmQNCgkJCQkNCgkJCQkkYyA9IGdl dENvdW50KCdjbmtfc29jY2VyX2dhbWVzJywgImlkIDw+ICciLiRpZC4iJyBBTkQgbGVhZ3Vl X2lkID0gIi4kbGVhZ3VlX2lkLiIgQU5EIHJvdW5kID0gIi4kcm91bmQuIiBBTkQgKGNsdWIx X2lkIGluICgiLiRjbHViMV9pZC4iLCAiLiRjbHViMl9pZC4iKSBPUiBjbHViMl9pZCBpbiAo Ii4kY2x1YjFfaWQuIiwgIi4kY2x1YjJfaWQuIikpIik7DQoNCgkJCQlpZiAoISRjKQ0KCQkJ CXsNCgkJCQkJJHJzID0gZmFsc2U7DQoJCQkJCSRnb2FscyA9IGZhbHNlOw0KCQkJCQ0KCQkJ CQlpZiAoaGFzX3ByaXZzKCdjbmtfc29jY2VyX2FkbWluJykpDQoJCQkJCXsNCgkJCQkJCWlm ICgkaWQpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZ2V0IHByZXZpb3VzIGdvYWxzDQoJCQkJCQkJ JGdvYWxzID0gc2FmZV9yb3coJ2NsdWIxX2lkLCBjbHViMl9pZCwgZ29hbHNfY2x1YjEsIGdv YWxzX2NsdWIyJywgJ2Nua19zb2NjZXJfZ2FtZXMnLCAnaWQgPSAnLiRpZCk7DQoJCQkJCQkN CgkJCQkJCQkkcnMgPSBzYWZlX3VwZGF0ZSgiY25rX3NvY2Nlcl9nYW1lcyIsDQoJCQkJCQkJ ICAgImNsdWIxX2lkICAgID0gJyRjbHViMV9pZCcsDQoJCQkJCQkJCWNsdWIyX2lkICAgID0g JyRjbHViMl9pZCcsDQoJCQkJCQkJCWdvYWxzX2NsdWIxICAgID0gJGdvYWxzX2NsdWIxLA0K CQkJCQkJCQlnb2Fsc19jbHViMiAgICA9ICRnb2Fsc19jbHViMiwNCgkJCQkJCQkJa2lja29m Zl90aW1lICAgID0gJyRraWNrb2ZmX3RpbWUnLA0KCQkJCQkJCQlzdGF0dXMgPSAnMSciLA0K CQkJCQkJCSAgICJpZCA9ICRpZCINCgkJCQkJCQkpOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZQ0K CQkJCQkJew0KCQkJCQkJCSRycyA9IHNhZmVfaW5zZXJ0KCJjbmtfc29jY2VyX2dhbWVzIiwN CgkJCQkJCQkgICAiY2x1YjFfaWQgICAgPSAnJGNsdWIxX2lkJywNCgkJCQkJCQkJY2x1YjJf aWQgICAgPSAnJGNsdWIyX2lkJywNCgkJCQkJCQkJZ29hbHNfY2x1YjEgICAgPSAkZ29hbHNf Y2x1YjEsDQoJCQkJCQkJCWdvYWxzX2NsdWIyICAgID0gJGdvYWxzX2NsdWIyLA0KCQkJCQkJ CQlraWNrb2ZmX3RpbWUgICAgPSAnJGtpY2tvZmZfdGltZScsDQoJCQkJCQkJCWxlYWd1ZV9p ZCA9ICckbGVhZ3VlX2lkJywNCgkJCQkJCQkJc3RhdHVzID0gJzEnLA0KCQkJCQkJCQlyb3Vu ZCA9ICckcm91bmQnIg0KCQkJCQkJCSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWxzZQ0K CQkJCQl7DQoJCQkJCQlpZiAoJGlkKQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCBwcmV2aW91 cyBnb2Fscw0KCQkJCQkJCSRnb2FscyA9IHNhZmVfcm93KCdjbHViMV9pZCwgY2x1YjJfaWQs IGdvYWxzX2NsdWIxLCBnb2Fsc19jbHViMicsICdjbmtfc29jY2VyX2dhbWVzJywgJ2lkID0g Jy4kaWQpOw0KCQkJCQkJCQ0KCQkJCQkJCSRycyA9IHNhZmVfdXBkYXRlKCJjbmtfc29jY2Vy X2dhbWVzIiwNCgkJCQkJCQkgICAiZ29hbHNfY2x1YjEgICAgPSAkZ29hbHNfY2x1YjEsDQoJ CQkJCQkJCWdvYWxzX2NsdWIyICAgID0gJGdvYWxzX2NsdWIyLA0KCQkJCQkJCQlzdGF0dXMg PSAnMSciLA0KCQkJCQkJCSAgICJpZCA9ICRpZCBBTkQgc3RhdHVzIElTIE5VTEwiDQoJCQkJ CQkJKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYgKCRycykNCgkJCQkJewkJ CQkNCgkJCQkJCS8vIGNvcnJlY3Qgc3RhdHMNCgkJCQkJCWlmICgkZ29hbHMgJiYgJGdvYWxz Wydnb2Fsc19jbHViMSddICE9ICcnICYmICRnb2Fsc1snZ29hbHNfY2x1YjInXSAhPSAnJykN CgkJCQkJCXsNCgkJCQkJCQlpZiAoJGdvYWxzWydnb2Fsc19jbHViMSddID4gJGdvYWxzWydn b2Fsc19jbHViMiddKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHJzID0gc2FmZV91cGRhdGUoImNu a19zb2NjZXJfY2x1Yl90b19sZWFndWUiLA0KCQkJCQkJCQkJInBvaW50cyA9IHBvaW50cyAt IDMsDQoJCQkJCQkJCQlnb2Fsc19mb3IgPSBnb2Fsc19mb3IgLSAiLiRnb2Fsc1snZ29hbHNf Y2x1YjEnXS4iLA0KCQkJCQkJCQkJZ29hbHNfYWdhaW5zdCA9IGdvYWxzX2FnYWluc3QgLSAi LiRnb2Fsc1snZ29hbHNfY2x1YjInXS4iLA0KCQkJCQkJCQkJZ2FtZV93b24gPSBnYW1lX3dv biAtIDEiLA0KCQkJCQkJCQkJImNsdWJfaWQgPSAiLiRnb2Fsc1snY2x1YjFfaWQnXS4iIEFO RCBsZWFndWVfaWQgPSAkbGVhZ3VlX2lkIik7DQoJCQkJCQkJCQkNCgkJCQkJCQkJJHJzID0g c2FmZV91cGRhdGUoImNua19zb2NjZXJfY2x1Yl90b19sZWFndWUiLA0KCQkJCQkJCQkJImdv YWxzX2ZvciA9IGdvYWxzX2ZvciAtICIuJGdvYWxzWydnb2Fsc19jbHViMiddLiIsDQoJCQkJ CQkJCQlnb2Fsc19hZ2FpbnN0ID0gZ29hbHNfYWdhaW5zdCAtICIuJGdvYWxzWydnb2Fsc19j bHViMSddLiIsDQoJCQkJCQkJCQlnYW1lX2xvc3QgPSBnYW1lX2xvc3QgLSAxIiwNCgkJCQkJ CQkJCSJjbHViX2lkID0gIi4kZ29hbHNbJ2NsdWIyX2lkJ10uIiBBTkQgbGVhZ3VlX2lkID0g JGxlYWd1ZV9pZCIpOw0KCQkJCQkJCX0gDQoJCQkJCQkJZWxzZSBpZiAoJGdvYWxzWydnb2Fs c19jbHViMSddIDwgJGdvYWxzWydnb2Fsc19jbHViMiddKQ0KCQkJCQkJCXsNCgkJCQkJCQkJ JHJzID0gc2FmZV91cGRhdGUoImNua19zb2NjZXJfY2x1Yl90b19sZWFndWUiLA0KCQkJCQkJ CQkJInBvaW50cyA9IHBvaW50cyAtIDMsDQoJCQkJCQkJCQlnb2Fsc19mb3IgPSBnb2Fsc19m b3IgLSAiLiRnb2Fsc1snZ29hbHNfY2x1YjInXS4iLA0KCQkJCQkJCQkJZ29hbHNfYWdhaW5z dCA9IGdvYWxzX2FnYWluc3QgLSAiLiRnb2Fsc1snZ29hbHNfY2x1YjEnXS4iLA0KCQkJCQkJ CQkJZ2FtZV93b24gPSBnYW1lX3dvbiAtIDEiLA0KCQkJCQkJCQkJImNsdWJfaWQgPSAiLiRn b2Fsc1snY2x1YjJfaWQnXS4iIEFORCBsZWFndWVfaWQgPSAkbGVhZ3VlX2lkIik7DQoJCQkJ CQkJCQkNCgkJCQkJCQkJJHJzID0gc2FmZV91cGRhdGUoImNua19zb2NjZXJfY2x1Yl90b19s ZWFndWUiLA0KCQkJCQkJCQkJImdvYWxzX2ZvciA9IGdvYWxzX2ZvciAtICIuJGdvYWxzWydn b2Fsc19jbHViMSddLiIsDQoJCQkJCQkJCQlnb2Fsc19hZ2FpbnN0ID0gZ29hbHNfYWdhaW5z dCAtICIuJGdvYWxzWydnb2Fsc19jbHViMiddLiIsDQoJCQkJCQkJCQlnYW1lX2xvc3QgPSBn YW1lX2xvc3QgLSAxIiwNCgkJCQkJCQkJCSJjbHViX2lkID0gIi4kZ29hbHNbJ2NsdWIxX2lk J10uIiBBTkQgbGVhZ3VlX2lkID0gJGxlYWd1ZV9pZCIpOw0KCQkJCQkJCX0NCgkJCQkJCQll bHNlIGlmICgkZ29hbHNbJ2dvYWxzX2NsdWIxJ10gPT0gJGdvYWxzWydnb2Fsc19jbHViMidd KQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHJzID0gc2FmZV91cGRhdGUoImNua19zb2NjZXJfY2x1 Yl90b19sZWFndWUiLA0KCQkJCQkJCQkJInBvaW50cyA9IHBvaW50cyAtIDEsDQoJCQkJCQkJ CQlnb2Fsc19mb3IgPSBnb2Fsc19mb3IgLSAiLiRnb2Fsc1snZ29hbHNfY2x1YjEnXS4iLA0K CQkJCQkJCQkJZ29hbHNfYWdhaW5zdCA9IGdvYWxzX2FnYWluc3QgLSAiLiRnb2Fsc1snZ29h bHNfY2x1YjInXS4iLA0KCQkJCQkJCQkJZ2FtZV9kcmF3ID0gZ2FtZV9kcmF3IC0gMSIsDQoJ CQkJCQkJCQkiY2x1Yl9pZCA9ICIuJGdvYWxzWydjbHViMV9pZCddLiIgQU5EIGxlYWd1ZV9p ZCA9ICRsZWFndWVfaWQiKTsNCgkJCQkJCQkJCQ0KCQkJCQkJCQkkcnMgPSBzYWZlX3VwZGF0 ZSgiY25rX3NvY2Nlcl9jbHViX3RvX2xlYWd1ZSIsDQoJCQkJCQkJCQkicG9pbnRzID0gcG9p bnRzIC0gMSwNCgkJCQkJCQkJCWdvYWxzX2ZvciA9IGdvYWxzX2ZvciAtICIuJGdvYWxzWydn b2Fsc19jbHViMiddLiIsDQoJCQkJCQkJCQlnb2Fsc19hZ2FpbnN0ID0gZ29hbHNfYWdhaW5z dCAtICIuJGdvYWxzWydnb2Fsc19jbHViMSddLiIsDQoJCQkJCQkJCQlnYW1lX2RyYXcgPSBn YW1lX2RyYXcgLSAxIiwNCgkJCQkJCQkJCSJjbHViX2lkID0gIi4kZ29hbHNbJ2NsdWIyX2lk J10uIiBBTkQgbGVhZ3VlX2lkID0gJGxlYWd1ZV9pZCIpOw0KCQkJCQkJCX0NCgkJCQkJCX0N CgkJCQkJCQ0KCQkJCQkJaWYgKCRnb2Fsc19jbHViMSAhPSAnTlVMTCcgJiYgJGdvYWxzX2Ns dWIyICE9ICdOVUxMJykNCgkJCQkJCXsJCQkJDQoJCQkJCQkJaWYgKCRnb2Fsc19jbHViMSA+ ICRnb2Fsc19jbHViMikNCgkJCQkJCQl7DQoJCQkJCQkJCSRycyA9IHNhZmVfdXBkYXRlKCJj bmtfc29jY2VyX2NsdWJfdG9fbGVhZ3VlIiwNCgkJCQkJCQkJCSJwb2ludHMgPSBwb2ludHMg KyAzLA0KCQkJCQkJCQkJZ29hbHNfZm9yID0gZ29hbHNfZm9yICsgIi4kZ29hbHNfY2x1YjEu IiwNCgkJCQkJCQkJCWdvYWxzX2FnYWluc3QgPSBnb2Fsc19hZ2FpbnN0ICsgIi4kZ29hbHNf Y2x1YjIuIiwNCgkJCQkJCQkJCWdhbWVfd29uID0gZ2FtZV93b24gKyAxIiwNCgkJCQkJCQkJ CSJjbHViX2lkID0gIi4kY2x1YjFfaWQuIiBBTkQgbGVhZ3VlX2lkID0gJGxlYWd1ZV9pZCIp Ow0KCQkJCQkJCQkJDQoJCQkJCQkJCSRycyA9IHNhZmVfdXBkYXRlKCJjbmtfc29jY2VyX2Ns dWJfdG9fbGVhZ3VlIiwNCgkJCQkJCQkJCSJnb2Fsc19mb3IgPSBnb2Fsc19mb3IgKyAiLiRn b2Fsc19jbHViMi4iLA0KCQkJCQkJCQkJZ29hbHNfYWdhaW5zdCA9IGdvYWxzX2FnYWluc3Qg KyAiLiRnb2Fsc19jbHViMS4iLA0KCQkJCQkJCQkJZ2FtZV9sb3N0ID0gZ2FtZV9sb3N0ICsg MSIsDQoJCQkJCQkJCQkiY2x1Yl9pZCA9ICIuJGNsdWIyX2lkLiIgQU5EIGxlYWd1ZV9pZCA9 ICRsZWFndWVfaWQiKTsNCgkJCQkJCQl9IA0KCQkJCQkJCWVsc2UgaWYgKCRnb2Fsc19jbHVi MSA8ICRnb2Fsc19jbHViMikNCgkJCQkJCQl7DQoJCQkJCQkJCSRycyA9IHNhZmVfdXBkYXRl KCJjbmtfc29jY2VyX2NsdWJfdG9fbGVhZ3VlIiwNCgkJCQkJCQkJCSJwb2ludHMgPSBwb2lu dHMgKyAzLA0KCQkJCQkJCQkJZ29hbHNfZm9yID0gZ29hbHNfZm9yICsgIi4kZ29hbHNfY2x1 YjIuIiwNCgkJCQkJCQkJCWdvYWxzX2FnYWluc3QgPSBnb2Fsc19hZ2FpbnN0ICsgIi4kZ29h bHNfY2x1YjEuIiwNCgkJCQkJCQkJCWdhbWVfd29uID0gZ2FtZV93b24gKyAxIiwNCgkJCQkJ CQkJCSJjbHViX2lkID0gIi4kY2x1YjJfaWQuIiBBTkQgbGVhZ3VlX2lkID0gJGxlYWd1ZV9p ZCIpOw0KCQkJCQkJCQkJDQoJCQkJCQkJCSRycyA9IHNhZmVfdXBkYXRlKCJjbmtfc29jY2Vy X2NsdWJfdG9fbGVhZ3VlIiwNCgkJCQkJCQkJCSJnb2Fsc19mb3IgPSBnb2Fsc19mb3IgKyAi LiRnb2Fsc19jbHViMS4iLA0KCQkJCQkJCQkJZ29hbHNfYWdhaW5zdCA9IGdvYWxzX2FnYWlu c3QgKyAiLiRnb2Fsc19jbHViMi4iLA0KCQkJCQkJCQkJZ2FtZV9sb3N0ID0gZ2FtZV9sb3N0 ICsgMSIsDQoJCQkJCQkJCQkiY2x1Yl9pZCA9ICIuJGNsdWIxX2lkLiIgQU5EIGxlYWd1ZV9p ZCA9ICRsZWFndWVfaWQiKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZSBpZiAoJGdvYWxzX2Ns dWIxID09ICRnb2Fsc19jbHViMikNCgkJCQkJCQl7DQoJCQkJCQkJCSRycyA9IHNhZmVfdXBk YXRlKCJjbmtfc29jY2VyX2NsdWJfdG9fbGVhZ3VlIiwNCgkJCQkJCQkJCSJwb2ludHMgPSBw b2ludHMgKyAxLA0KCQkJCQkJCQkJZ29hbHNfZm9yID0gZ29hbHNfZm9yICsgIi4kZ29hbHNf Y2x1YjEuIiwNCgkJCQkJCQkJCWdvYWxzX2FnYWluc3QgPSBnb2Fsc19hZ2FpbnN0ICsgIi4k Z29hbHNfY2x1YjIuIiwNCgkJCQkJCQkJCWdhbWVfZHJhdyA9IGdhbWVfZHJhdyArIDEiLA0K CQkJCQkJCQkJImNsdWJfaWQgPSAiLiRjbHViMV9pZC4iIEFORCBsZWFndWVfaWQgPSAkbGVh Z3VlX2lkIik7DQoJCQkJCQkJCQkNCgkJCQkJCQkJJHJzID0gc2FmZV91cGRhdGUoImNua19z b2NjZXJfY2x1Yl90b19sZWFndWUiLA0KCQkJCQkJCQkJInBvaW50cyA9IHBvaW50cyArIDEs DQoJCQkJCQkJCQlnb2Fsc19mb3IgPSBnb2Fsc19mb3IgKyAiLiRnb2Fsc19jbHViMi4iLA0K CQkJCQkJCQkJZ29hbHNfYWdhaW5zdCA9IGdvYWxzX2FnYWluc3QgKyAiLiRnb2Fsc19jbHVi MS4iLA0KCQkJCQkJCQkJZ2FtZV9kcmF3ID0gZ2FtZV9kcmF3ICsgMSIsDQoJCQkJCQkJCQki Y2x1Yl9pZCA9ICIuJGNsdWIyX2lkLiIgQU5EIGxlYWd1ZV9pZCA9ICRsZWFndWVfaWQiKTsN CgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJ CQkJJGdhbWVbJ2Vycm9yJ10gPSAnT25lIG9mIHRoZSBjbHVicyBpcyBhbHJlYWR5IGFzc2ln bmVkIHRvIGEgZ2FtZSBpbiB0aGlzIHJvdW5kLic7DQoJCQkJCWFycmF5X3B1c2goJHdyb25n X2dhbWVzLCAkZ2FtZSk7DQoJCQkJCWlmICgkaWQpICR3cm9uZ19pZHNbJGlkXSA9IHRydWU7 DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZSBpZiAoJGNsdWIxX2lkIHx8ICRjbHViMl9pZCB8fCAk aWQgfHwgJGtpY2tvZmZfdGltZSkNCgkJCXsNCgkJCQkkZ2FtZVsnZXJyb3InXSA9ICdTb21l dGhpbmcgaXMgd3Jvbmcgd2l0aCB5b3VyIGNsdWIgc2VsZWN0aW9ucy4nOw0KCQkJCWFycmF5 X3B1c2goJHdyb25nX2dhbWVzLCAkZ2FtZSk7DQoJCQkJaWYgKCRpZCkgJHdyb25nX2lkc1sk aWRdID0gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRnYW1lWydlcnJvcidd ID0gJ0dvYWxzIG9ubHkgYWNjZXB0IG51bWVyaWMgdmFsdWVzLic7DQoJCQlhcnJheV9wdXNo KCR3cm9uZ19nYW1lcywgJGdhbWUpOw0KCQkJaWYgKCRpZCkgJHdyb25nX2lkc1skaWRdID0g dHJ1ZTsNCgkJfQ0KCX0NCgkNCgkvL3VwZGF0ZSBsYXN0bW9kIGR1ZSB0byBsaW5rIGZlZWRz DQoJdXBkYXRlX2xhc3Rtb2QoKTsNCg0KCWNua19zY19lZGl0X3JvdW5kKCcnLCAkd3Jvbmdf Z2FtZXMsICR3cm9uZ19pZHMpOwkJCQ0KfQ0KDQpmdW5jdGlvbiBjbmtfc2NfZWRpdF9yb3Vu ZCgkbWVzc2FnZSA9ICcnLCAkd3JvbmdfZ2FtZXMgPSBhcnJheSgpLCAkd3JvbmdfaWRzID0g YXJyYXkoKSkNCnsNCglnbG9iYWwgJHZhcnMsICRzdGVwOw0KDQoJcGFnZXRvcCgnRWRpdCBS b3VuZCcsICRtZXNzYWdlKTsNCg0KCWV4dHJhY3QoZ3BzYSgkdmFycykpOw0KDQoJZWNobyAn PHAgY2xhc3M9InByZXYtbmV4dCI+PGEgaHJlZj0iP2V2ZW50PWNua19zb2NjZXInLmEuJ3N0 ZXA9Y25rX3NjX2FkZF9yb3VuZCI+PCBCYWNrIHRvIFJvdW5kczwvYT48L3A+JzsNCgkNCglp ZiAoJHJvdW5kKQ0KCXsNCgkJJHJvdW5kID0gYXNzZXJ0X2ludCgkcm91bmQpOw0KCQ0KCQll Y2hvICc8cCBjbGFzcz0icHJldi1uZXh0Ij5Sb3VuZCBOby4gJy4kcm91bmQuJzwvcD4nLiAv LyBUT0RPOiBhZGQgbGVhZ3VlIG5hbWUNCgkJDQoJCW4ubi4nPGZvcm0gYWN0aW9uPSJpbmRl eC5waHAiIG1ldGhvZD0icG9zdCIgbmFtZT0ibG9uZ2Zvcm0iPicsDQoNCgkJCXN0YXJ0VGFi bGUoJ2xpc3QnKS4NCg0KCQkJCW4udHIoDQoJCQkJCWNua19zY19jb2x1bW5faGVhZCgnSG9t ZSBUZWFtJywgJ2NsdWJfMScpLg0KCQkJCQljbmtfc2NfY29sdW1uX2hlYWQoJ0F3YXkgVGVh bScsICdjbHViXzInKS4NCgkJCQkJY25rX3NjX2NvbHVtbl9oZWFkKCdLaWNrb2ZmIChZWVlZ LU1NLUREIEhIOk1NKScsICdraWNrb2ZmX3RpbWUnKS4NCgkJCQkJY25rX3NjX2NvbHVtbl9o ZWFkKCdHb2FscyBIb21lJywgJ2dvYWxzX2NsdWIxJykuDQoJCQkJCWNua19zY19jb2x1bW5f aGVhZCgnR29hbHMgQXdheScsICdnb2Fsc19jbHViMicpDQoJCQkJLy8JY25rX3NjX2NvbHVt bl9oZWFkKCdBZGQgcG9pbnRzJywgJ2dvYWxzX2NsdWIyJykNCgkJCQkpOw0KCQkJCQ0KCQkJ CSRnYW1lcyA9IHNhZmVfcm93cygnKicsICdjbmtfc29jY2VyX2dhbWVzJywgInJvdW5kID0g JHJvdW5kIE9SREVSIEJZIEtJQ0tPRkZfVElNRSBBU0MiKTsNCg0KCQkJCSRpID0gMDsNCgkJ CQkkYSA9IDA7DQoJCQkJDQoJCQkJJGdhbWVzX3Blcl9yb3VuZCA9IGhhc19wcml2cygnY25r X3NvY2Nlcl9hZG1pbicpP2dldFRoaW5nKCdTRUxFQ1QgZ2FtZXNfcGVyX3JvdW5kIEZST00g Jy5zYWZlX3BmeCgnY25rX3NvY2Nlcl9sZWFndWUnKS4nIFdIRVJFIGlkID0gJy4kbGVhZ3Vl X2lkKTpjb3VudCgkZ2FtZXMpOw0KCQkJCQ0KCQkJCXdoaWxlICgkaSA8ICRnYW1lc19wZXJf cm91bmQpDQoJCQkJewkJCQkNCgkJCQkJaWYgKGlzc2V0KCRnYW1lc1skaV0pICYmICFpc3Nl dCgkd3JvbmdfaWRzWyRnYW1lc1skaV1bJ2lkJ11dKSkNCgkJCQkJeyANCgkJCQkJCWV4dHJh Y3QoJGdhbWVzWyRpXSk7DQoJCQkJCQkkZXJyb3IgPSAnJzsNCgkJCQkJfQ0KCQkJCQllbHNl IGlmIChpc3NldCgkd3JvbmdfZ2FtZXNbJGFdKSkNCgkJCQkJew0KCQkJCQkJZXh0cmFjdCgk d3JvbmdfZ2FtZXNbJGFdKTsNCgkJCQkJCSRhKys7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJ CQl7DQoJCQkJCQkkY2x1YjFfaWQgPSBOVUxMOw0KCQkJCQkJJGNsdWIyX2lkID0gTlVMTDsN CgkJCQkJCSRraWNrb2ZmX3RpbWUgPSAnJzsNCgkJCQkJCSRnb2Fsc19jbHViMSA9ICcnOyAN CgkJCQkJCSRnb2Fsc19jbHViMiA9ICcnOw0KCQkJCQkvLwkkc3RhdHVzID0gJyc7DQoJCQkJ CQkkaWQgPSAnJzsNCgkJCQkJCSRlcnJvciA9ICcnOw0KCQkJCQl9DQoJCQkJCQ0KCQkJCQkk aSsrOw0KDQoJCQkJCWVjaG8gdHIoDQoNCgkJCQkJCXJvdW5kX2NsdWJfZHJvcGRvd24oJGNs dWIxX2lkLCAnY2x1YjFfaWRfJy4kaSwgJGxlYWd1ZV9pZCwgIWhhc19wcml2cygnY25rX3Nv Y2Nlcl9hZG1pbicpKS4NCgkJCQkJCQ0KCQkJCQkJcm91bmRfY2x1Yl9kcm9wZG93bigkY2x1 YjJfaWQsICdjbHViMl9pZF8nLiRpLCAkbGVhZ3VlX2lkLCAhaGFzX3ByaXZzKCdjbmtfc29j Y2VyX2FkbWluJykpLg0KDQoJCQkJCQkoaGFzX3ByaXZzKCdjbmtfc29jY2VyX2FkbWluJyk/ dGRhKGZJbnB1dCgndGV4dCcsICdraWNrb2ZmX3RpbWVfJy4kaSwgJGtpY2tvZmZfdGltZSwg J2VkaXQnLCAnJywgJycsIDE2LCAxKSk6dGRhKCRraWNrb2ZmX3RpbWUuaElucHV0KCdjbHVi MV9pZF8nLiRpLCAkY2x1YjFfaWQpLmhJbnB1dCgnY2x1YjJfaWRfJy4kaSwgJGNsdWIyX2lk KSkpLg0KCQkJCQkJDQoJCQkJCQl0ZGEoZklucHV0KCd0ZXh0JywgJ2dvYWxzX2NsdWIxXycu JGksICRnb2Fsc19jbHViMSwgJ2VkaXQnLCAnJywgJycsIDIsIDIpKS4NCgkJCQkJCQ0KCQkJ CQkJdGRhKGZJbnB1dCgndGV4dCcsICdnb2Fsc19jbHViMl8nLiRpLCAkZ29hbHNfY2x1YjIs ICdlZGl0JywgJycsICcnLCAyLCAzKS5oSW5wdXQoJ2lkXycuJGksICRpZCkpDQoJCQkJCQkN CgkJCQkJLy8JdGQoKCRzdGF0dXM9PScnP2ZJbnB1dCgnY2hlY2tib3gnLCAnYWRkX3BvaW50 c18nLiRpLCAnMScpOidhZGRlZCcpLmhJbnB1dCgnaWRfJy4kaSwgJGlkKSwgMTIwKQ0KCQkJ CQksICRlcnJvcj8nIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnJlZCIgdGl0bGU9IicuJGVy cm9yLiciJzonJyk7DQoJCQkJfQ0KDQoJCS8vCWlmIChoYXNfcHJpdnMoJ2Nua19zb2NjZXJf YWRtaW4nKSkNCg0KCQkJCWVjaG8gdHIoDQoJCQkJCXRkKCkuDQoJCQkJCXRkKCkuDQoJCQkJ CXRkKCkuDQoJCQkJCXRkKCkuDQoJCQkJLy8JdGQoKS4NCgkJCQkJdGQoDQoJCQkJCQlmSW5w dXQoJ3N1Ym1pdCcsICcnLCBnVHh0KCdzYXZlJyksICdwdWJsaXNoJykNCgkJCQkJKQ0KCQkJ CSkuDQoNCgkJCWVuZFRhYmxlKCkuDQoJCQkJCQ0KCQllSW5wdXQoJ2Nua19zb2NjZXInKS4N Cg0KCQlzSW5wdXQoJ2Nua19zY19zYXZlX3JvdW5kJykuDQoJCQkNCgkJaElucHV0KCdyb3Vu ZCcsICRyb3VuZCkuDQoJCWhJbnB1dCgnbGVhZ3VlX2lkJywgJGxlYWd1ZV9pZCkuDQoJCWhJ bnB1dCgnZ2FtZXNfcGVyX3JvdW5kJywgJGdhbWVzX3Blcl9yb3VuZCkuDQoJCQ0KCQknPC9m b3JtPic7DQoJfQ0KfQ0KDQpmdW5jdGlvbiByb3VuZF9sZWFndWVfZHJvcGRvd24oJGxlYWd1 ZV9pZCA9ICcnLCAkaGVscCA9ICcnKSANCnsNCgkkbGVhZ3VlX2FycmF5ID0gYXJyYXkoKTsN Cg0KCSRycyA9IHNhZmVfcm93c19zdGFydCgiaWQsIENPTkNBVChuYW1lLCAnIC0gJywgc2Vh c29uKSBhcyB0aXRsZSIsICdjbmtfc29jY2VyX2xlYWd1ZScsICIxPTEgb3JkZXIgYnkgbmFt ZSBhc2MsIHNlYXNvbiBhc2MiKTsNCgkNCgl3aGlsZSAoJHIgPSBuZXh0Um93KCRycykpDQoJ ew0KCQkkbGVhZ3VlX2FycmF5WyRyWydpZCddXSA9ICRyWyd0aXRsZSddOw0KCX0NCg0KCXJl dHVybiB0ZGEoc2VsZWN0SW5wdXQoJ2xlYWd1ZV9pZCcsICRsZWFndWVfYXJyYXksICRsZWFn dWVfaWQpLiRoZWxwKTsJDQp9DQoNCmZ1bmN0aW9uIHJvdW5kX2NsdWJfZHJvcGRvd24oJGNs dWJfaWQgPSAnJywgJG5hbWUsICRsZWFndWVfaWQsICRyZWFkb25seSA9IGZhbHNlKSANCnsN CglnbG9iYWwgJGNsdWJfYXJyYXk7DQoJDQoJaWYgKCRjbHViX2FycmF5ID09PSBOVUxMKQ0K CXsNCgkJJGNsdWJfYXJyYXkgPSBhcnJheSgpOw0KDQoJCSRycyA9IHNhZmVfcm93c19zdGFy dCgiY25rX3NvY2Nlcl9jbHVicy5pZCwgY25rX3NvY2Nlcl9jbHVicy5uYW1lIGFzIHRpdGxl IiwgJ2Nua19zb2NjZXJfY2x1YnMsY25rX3NvY2Nlcl9jbHViX3RvX2xlYWd1ZScsICJjbmtf c29jY2VyX2NsdWJzLmlkID0gY25rX3NvY2Nlcl9jbHViX3RvX2xlYWd1ZS5jbHViX2lkIEFO RCBjbmtfc29jY2VyX2NsdWJfdG9fbGVhZ3VlLmxlYWd1ZV9pZCA9ICRsZWFndWVfaWQgb3Jk ZXIgYnkgY25rX3NvY2Nlcl9jbHVicy5uYW1lIGFzYyIpOw0KCQkNCgkJd2hpbGUgKCRyID0g bmV4dFJvdygkcnMpKQ0KCQl7DQoJCQkkY2x1Yl9hcnJheVskclsnaWQnXV0gPSAkclsndGl0 bGUnXTsNCgkJfQ0KCX0NCgkNCglpZiAoJHJlYWRvbmx5KQ0KCXsNCgkJcmV0dXJuIHRkYSgk Y2x1Yl9hcnJheVskY2x1Yl9pZF0pOw0KCX0NCgllbHNlDQoJew0KCQlyZXR1cm4gdGRhKHNl bGVjdElucHV0KCRuYW1lLCAkY2x1Yl9hcnJheSwgJGNsdWJfaWQsIHRydWUpKTsJDQoJfQ0K fQ0KDQpmdW5jdGlvbiBjbmtfc2NfYWRkX3JvdW5kKCRtZXNzYWdlID0gJycpDQp7DQoJZ2xv YmFsICR2YXJzLCAkc3RlcDsNCg0KCXBhZ2V0b3AoJ0FkZCByb3VuZCcsICRtZXNzYWdlKTsN Cg0KCWVjaG8gJzxwIGNsYXNzPSJwcmV2LW5leHQiPjxhIGhyZWY9Ij9ldmVudD1jbmtfc29j Y2VyIj48IEJhY2sgdG8gU29jY2VyIE1lbnU8L2E+PC9wPic7DQoNCglpZiAoaGFzX3ByaXZz KCdjbmtfc29jY2VyX2FkbWluJykpDQoJew0KCQllY2hvIGZvcm0oDQoNCgkJCXN0YXJ0VGFi bGUoJ2VkaXQnKSAuDQoJCQkNCgkJCXRyKA0KCQkJCWZMYWJlbENlbGwoJ0xlYWd1ZScpLg0K CQkJCXJvdW5kX2xlYWd1ZV9kcm9wZG93bignJywgJyBbJy5lTGluaygnY25rX3NvY2Nlcics ICdjbmtfc2NfZWRpdF9sZWFndWUnLCAnJywgJycsIGdUeHQoJ2VkaXQnKSkuJ10nKQ0KCQkJ KS4NCgkJCQkJDQoJCQl0cigNCgkJCQlmTGFiZWxDZWxsKCdSb3VuZCAjJykuDQoJCQkJZklu cHV0Q2VsbCgncm91bmQnLCAnJywgMiwgMikNCgkJCSkuDQoNCgkJCXRyKA0KCQkJCXRkKCku DQoJCQkJdGQoDQoJCQkJCWZJbnB1dCgnc3VibWl0JywgJycsICdBZGQnLCAncHVibGlzaCcp DQoJCQkJKQ0KCQkJKS4NCg0KCQkJZW5kVGFibGUoKS4NCg0KCQkJZUlucHV0KCdjbmtfc29j Y2VyJykuDQoNCgkJCXNJbnB1dCgnY25rX3NjX2VkaXRfcm91bmQnKS4NCg0KCQkJaElucHV0 KCdzZWFyY2hfbWV0aG9kJywgZ3BzKCdzZWFyY2hfbWV0aG9kJykpLg0KCQkJaElucHV0KCdj cml0JywgZ3BzKCdjcml0JykpDQoJCSwgJ21hcmdpbi1ib3R0b206IDI1cHg7Jyk7DQoJfQ0K CQ0KCWVjaG8gY25rX3NjX2xpc3Rfcm91bmRzKCk7DQp9DQoNCmZ1bmN0aW9uIGNua19zY19s aXN0X3JvdW5kcygkbWVzc2FnZSA9ICcnKSANCnsNCglnbG9iYWwgJHN0ZXAsICRjbmtfc2Nf cm91bmRzX2xpc3RfcGFnZWJ5Ow0KCQ0KCWV4dHJhY3QoZ2V0X3ByZWZzKCkpOw0KDQoJZXh0 cmFjdChncHNhKGFycmF5KCdwYWdlJywgJ3NvcnQnLCAnZGlyJywgJ2NyaXQnLCAnc2VhcmNo X21ldGhvZCcpKSk7DQoNCgkkZGlyID0gKCRkaXIgPT0gJ2Rlc2MnKSA/ICdkZXNjJyA6ICdh c2MnOw0KDQoJc3dpdGNoICgkc29ydCkNCgl7DQoJCWNhc2UgJ2xlYWd1ZSc6DQoJCQkkc29y dF9zcWwgPSAnY25rX3NvY2Nlcl9sZWFndWUubmFtZSAnLiRkaXIuJywgY25rX3NvY2Nlcl9s ZWFndWUuc2Vhc29uIGFzYywgY25rX3NvY2Nlcl9nYW1lcy5yb3VuZCBkZXNjJzsNCgkJYnJl YWs7DQoNCgkJY2FzZSAnc2Vhc29uJzoNCgkJCSRzb3J0X3NxbCA9ICdjbmtfc29jY2VyX2xl YWd1ZS5zZWFzb24gJy4kZGlyLicsIGNua19zb2NjZXJfbGVhZ3VlLm5hbWUgYXNjLCBjbmtf c29jY2VyX2dhbWVzLnJvdW5kIGRlc2MnOw0KCQlicmVhazsNCg0KCQljYXNlICdyb3VuZCc6 DQoJCQkkc29ydF9zcWwgPSAnY25rX3NvY2Nlcl9nYW1lcy5yb3VuZCAnLiRkaXIuJywgY25r X3NvY2Nlcl9sZWFndWUubmFtZSBhc2MsIGNua19zb2NjZXJfbGVhZ3VlLnNlYXNvbiBhc2Mn Ow0KCQlicmVhazsNCg0KCQlkZWZhdWx0Og0KCQkJJHNvcnQgPSAnbGVhZ3VlJzsNCgkJCSRz b3J0X3NxbCA9ICdjbmtfc29jY2VyX2xlYWd1ZS5uYW1lICcuJGRpci4nLCBjbmtfc29jY2Vy X2xlYWd1ZS5zZWFzb24gYXNjLCBjbmtfc29jY2VyX2dhbWVzLnJvdW5kIGRlc2MnOw0KCQli cmVhazsNCgl9DQoNCgkkc3dpdGNoX2RpciA9ICgkZGlyID09ICdkZXNjJykgPyAnYXNjJyA6 ICdkZXNjJzsNCg0KCSRjcml0ZXJpYSA9IDE7DQoNCglpZiAoJHNlYXJjaF9tZXRob2QgYW5k ICRjcml0KQ0KCXsNCgkJJGNyaXRfZXNjYXBlZCA9IGRvU2xhc2goJGNyaXQpOw0KDQoJCSRj cml0c3FsID0gYXJyYXkoDQoJCQknbGVhZ3VlJwkJICAgICA9PiAiY25rX3NvY2Nlcl9sZWFn dWUubmFtZSBsaWtlICclJGNyaXRfZXNjYXBlZCUnIiwNCgkJCSdzZWFzb24nCSA9PiAiY25r X3NvY2Nlcl9sZWFndWUuc2Vhc29uIGxpa2UgJyUkY3JpdF9lc2NhcGVkJSciLA0KCQkJJ3Jv dW5kJwkJICAgICA9PiAiY25rX3NvY2Nlcl9nYW1lcy5yb3VuZCA9ICckY3JpdF9lc2NhcGVk JyINCgkJKTsNCg0KCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkc2VhcmNoX21ldGhvZCwgJGNy aXRzcWwpKQ0KCQl7DQoJCQkkY3JpdGVyaWEgPSAkY3JpdHNxbFskc2VhcmNoX21ldGhvZF07 DQoJCQkkbGltaXQgPSA1MDA7DQoJCX0NCg0KCQllbHNlDQoJCXsNCgkJCSRzZWFyY2hfbWV0 aG9kID0gJyc7DQoJCQkkY3JpdCA9ICcnOw0KCQl9DQoJfQ0KDQoJZWxzZQ0KCXsNCgkJJHNl YXJjaF9tZXRob2QgPSAnJzsNCgkJJGNyaXQgPSAnJzsNCgl9DQoNCgkkdG90YWwgPSBnZXRD b3VudCgnY25rX3NvY2Nlcl9nYW1lcyxjbmtfc29jY2VyX2xlYWd1ZScsICJjbmtfc29jY2Vy X2xlYWd1ZS5pZCA9IGNua19zb2NjZXJfZ2FtZXMubGVhZ3VlX2lkIEFORCAiLiRjcml0ZXJp YS4iIEdST1VQIEJZIGxlYWd1ZV9pZCIpOw0KDQoJaWYgKCR0b3RhbCA8IDEpDQoJew0KCQlp ZiAoJGNyaXRlcmlhICE9IDEpDQoJCXsNCgkJCWVjaG8gbi5jbmtfc2Nfc2VhcmNoX2Zvcm1f bGVhZ3VlKCRjcml0LCAkc2VhcmNoX21ldGhvZCkuDQoJCQkJbi5ncmFmKGdUeHQoJ25vX3Jl c3VsdHNfZm91bmQnKSwgJyBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyInKTsNCgkJfQ0K DQoJCWVsc2UNCgkJew0KCQkJZWNobyBuLmdyYWYoJ05vIHJvdW5kIHJlY29yZGVkJywgJyBz dHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyInKTsNCgkJfQ0KDQoJCXJldHVybjsNCgl9DQoN CgkkbGltaXQgPSBtYXgoQCRjbmtfc2Nfcm91bmRzX2xpc3RfcGFnZWJ5LCAxNSk7DQoNCgls aXN0KCRwYWdlLCAkb2Zmc2V0LCAkbnVtUGFnZXMpID0gcGFnZXIoJHRvdGFsLCAkbGltaXQs ICRwYWdlKTsNCg0KCWVjaG8gY25rX3NjX3NlYXJjaF9mb3JtX3JvdW5kcygkY3JpdCwgJHNl YXJjaF9tZXRob2QpOw0KDQoJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KCJjbmtfc29jY2VyX2dh bWVzLnJvdW5kLCBjbmtfc29jY2VyX2dhbWVzLmxlYWd1ZV9pZCwgY25rX3NvY2Nlcl9sZWFn dWUubmFtZSBhcyBsZWFndWUsIGNua19zb2NjZXJfbGVhZ3VlLnNlYXNvbiBhcyBzZWFzb24i LCAnY25rX3NvY2Nlcl9nYW1lcyxjbmtfc29jY2VyX2xlYWd1ZScsICJjbmtfc29jY2VyX2dh bWVzLmxlYWd1ZV9pZCA9IGNua19zb2NjZXJfbGVhZ3VlLmlkIEFORCAkY3JpdGVyaWEgZ3Jv dXAgYnkgJHNvcnRfc3FsIGxpbWl0ICRvZmZzZXQsICRsaW1pdCIpOw0KDQoJaWYgKCRycykN Cgl7DQoJCWVjaG8gbi5uLic8Zm9ybSBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0 IiBuYW1lPSJsb25nZm9ybSIgb25zdWJtaXQ9InJldHVybiB2ZXJpZnkoXCcnLmdUeHQoJ2Fy ZV95b3Vfc3VyZScpLidcJykiPicsDQoNCgkJCXN0YXJ0VGFibGUoJ2xpc3QnKS4NCg0KCQkJ bi50cigNCgkJCQljbmtfc2NfY29sdW1uX2hlYWQoJ0xlYWd1ZScsICdsZWFndWUnLCAnY25r X3NvY2NlcicsICdjbmtfc2NfYWRkX3JvdW5kJywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0 LCAkc2VhcmNoX21ldGhvZCwgKCdsZWFndWUnID09ICRzb3J0KSA/ICRkaXIgOiAnJykuDQoJ CQkJY25rX3NjX2NvbHVtbl9oZWFkKCdTZWFzb24nLCAnc2Vhc29uJywgJ2Nua19zb2NjZXIn LCAnY25rX3NjX2FkZF9yb3VuZCcsIHRydWUsICRzd2l0Y2hfZGlyLCAkY3JpdCwgJHNlYXJj aF9tZXRob2QsICgnc2Vhc29uJyA9PSAkc29ydCkgPyAkZGlyIDogJycpLg0KCQkJCWNua19z Y19jb2x1bW5faGVhZCgnUm91bmQgIycsICdyb3VuZCcsICdjbmtfc29jY2VyJywgJ2Nua19z Y19hZGRfcm91bmQnLCB0cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9k LCAoJ3JvdW5kJyA9PSAkc29ydCkgPyAkZGlyIDogJycpLg0KCQkJCWhDZWxsKCkuDQoJCQkJ aENlbGwoKQ0KCQkJKTsNCg0KCQkJd2hpbGUgKCRhID0gbmV4dFJvdygkcnMpKQ0KCQkJew0K CQkJCWV4dHJhY3QoJGEpOwkJCQkNCg0KCQkJCSRlZGl0X3VybCA9ICc/ZXZlbnQ9Y25rX3Nv Y2NlcicuYS4nc3RlcD1jbmtfc2NfZWRpdF9yb3VuZCcuYS4ncm91bmQ9Jy4kcm91bmQuYS4n bGVhZ3VlX2lkPScuJGxlYWd1ZV9pZC5hLidzb3J0PScuJHNvcnQuDQoJCQkJCWEuJ2Rpcj0n LiRkaXIuYS4ncGFnZT0nLiRwYWdlLmEuJ3NlYXJjaF9tZXRob2Q9Jy4kc2VhcmNoX21ldGhv ZC5hLidjcml0PScuJGNyaXQ7DQoNCgkJCQllY2hvIHRyKA0KCQkJCQkNCgkJCQkJdGQoaHRt bHNwZWNpYWxjaGFycygkbGVhZ3VlKSwgMjU1KS4NCg0KCQkJCQl0ZChodG1sc3BlY2lhbGNo YXJzKCRzZWFzb24pLCAxNTApLg0KCQkJCQkNCgkJCQkJdGQoaHRtbHNwZWNpYWxjaGFycygk cm91bmQpLCAxNTApLg0KCQkJCQkNCgkJCQkJdGQoaHJlZihnVHh0KCdlZGl0JyksICRlZGl0 X3VybCksIDQwKS4NCgkJCQkJDQoJCQkJCXRkKGhhc19wcml2cygnY25rX3NvY2Nlcl9hZG1p bicpP2ZJbnB1dCgnY2hlY2tib3gnLCAnc2VsZWN0ZWRbXScsICRyb3VuZC4nXycuJGxlYWd1 ZV9pZCk6JycsIDIwKQ0KCQkJCSk7DQoJCQl9DQoNCgkJaWYgKGhhc19wcml2cygnY25rX3Nv Y2Nlcl9hZG1pbicpKQ0KCQl7DQoJCQllY2hvIG4ubi50cigNCgkJCQl0ZGEoDQoJCQkJCXNl bGVjdF9idXR0b25zKCkuDQoJCQkJCWNua19zY19tdWx0aWVkaXRfZm9ybV9yb3VuZHMoJHBh Z2UsICRzb3J0LCAkZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QpDQoJCQkJLCAnIGNvbHNw YW49IjQiIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgYm9yZGVyOiBub25lOyInKQ0KCQkJ KTsNCgkJfQ0KDQoJCWVjaG8gZW5kVGFibGUoKS4NCgkJJzwvZm9ybT4nLg0KDQoJCW4uY25r X3NjX25hdl9mb3JtKCdjbmtfc29jY2VyJywgJ2Nua19zY19hZGRfcm91bmQnLCAkcGFnZSwg JG51bVBhZ2VzLCAkc29ydCwgJGRpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKS4NCg0KCQlj bmtfc2NfcGFnZWJ5X2Zvcm0oJ2Nua19zb2NjZXInLCAnY25rX3NjX3BhZ2VieV9yb3VuZHMn LCAkY25rX3NjX3JvdW5kc19saXN0X3BhZ2VieSkuDQoJCQ0KCQknPHAgY2xhc3M9InByZXYt bmV4dCI+PGEgaHJlZj0iP2V2ZW50PWNua19zb2NjZXIiPjwgQmFjayB0byBTb2NjZXIgTWVu dTwvYT48L3A+JzsNCgl9DQp9DQoNCg0KDQpmdW5jdGlvbiBjbmtfc2Nfc2VhcmNoX2Zvcm1f cm91bmRzKCRjcml0LCAkbWV0aG9kKQ0Kew0KCSRtZXRob2RzID0JYXJyYXkoDQoJCSdsZWFn dWUnCQkJCT0+ICdMZWFndWUnLA0KCQkncm91bmQnCQkJCT0+ICdSb3VuZCcsDQoJCSdzZWFz b24nIAkJCT0+ICdTZWFzb24nDQoJKTsNCg0KCXJldHVybiBzZWFyY2hfZm9ybSgnY25rX3Nv Y2NlcicsICdjbmtfc2NfYWRkX3JvdW5kJywgJGNyaXQsICRtZXRob2RzLCAkbWV0aG9kLCAn bmFtZScpOw0KfQ0KDQpmdW5jdGlvbiBjbmtfc2NfbXVsdGllZGl0X2Zvcm1fcm91bmRzKCRw YWdlLCAkc29ydCwgJGRpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKSANCnsNCgkkb3V0ID0g Jyc7DQoNCgkkbWV0aG9kcyA9IGFycmF5KA0KCQknZGVsZXRlJyA9PiBnVHh0KCdkZWxldGUn KQ0KCSk7DQoJDQoJcmV0dXJuIGNua19zY19ldmVudF9tdWx0aWVkaXRfZm9ybSgnY25rX3Nv Y2NlcicsICdjbmtfc2NfbXVsdGlfZWRpdF9yb3VuZHMnLCAkbWV0aG9kcywgJHBhZ2UsICRz b3J0LCAkZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QpOw0KfQ0KDQpmdW5jdGlvbiBjbmtf c2NfcGFnZWJ5X3JvdW5kcygpIA0Kew0KCWV2ZW50X2NoYW5nZV9wYWdlYnkoJ2Nua19zY19y b3VuZHMnKTsNCgljbmtfc2NfYWRkX3JvdW5kKCk7DQp9DQoNCmZ1bmN0aW9uIGNua19zY19t dWx0aV9lZGl0X3JvdW5kcygpIA0Kew0KCSRkZWxldGVkID0gY25rX3NjX2V2ZW50X211bHRp X2VkaXQoJ2Nua19zb2NjZXJfZ2FtZXMnLCAncm91bmR8bGVhZ3VlX2lkJyk7DQoNCglpZiAo JGRlbGV0ZWQgJiYgaGFzX3ByaXZzKCdjbmtfc29jY2VyX2FkbWluJykpDQoJew0KCQkkbWVz c2FnZSA9ICdSb3VuZHMgZGVsZXRlZDogJy4kZGVsZXRlZDsNCg0KCQlyZXR1cm4gCWNua19z Y19hZGRfcm91bmQoJG1lc3NhZ2UpOw0KCX0NCg0KCXJldHVybiAJY25rX3NjX2FkZF9yb3Vu ZCgpOw0KfQ0KDQovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQovLyAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj DQovKg0KCVNvY2NlciBpbnN0YWxsYXRpb24gLyBkZWluc3RhbGxhdGlvbg0KKi8NCi8vICMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMNCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmZ1bmN0aW9uIGNua19z Y19pbnN0YWxsKCkNCnsNCglwYWdldG9wKCdTb2NjZXIgUGx1Z2luIEluc3RhbGxhdGlvbics ICcnKTsNCgkNCgllY2hvICc8ZGl2IHN0eWxlPSJtYXJnaW46YXV0bzsgdGV4dC1hbGlnbjpj ZW50ZXIiPic7DQoJDQoJLy8gY2hlY2sgaWYgdGFibGVzIGFscmVhZHkgaW5zdGFsbGVkDQoJ JHRlc3QgPSBnZXRUaGluZygnU0VMRUNUIG5hbWUgRlJPTSAnLnNhZmVfcGZ4KCd0eHBfcHJl ZnMnKS4iIFdIRVJFIG5hbWUgPSAnY25rX3NjX2xlYWd1ZV9saXN0X3BhZ2VieSciKTsNCgkN CglpZiAoJHRlc3QpDQoJew0KCQllY2hvICc8cD5QbHVnaW4gYWxyZWFkeSBpbnN0YWxsZWQ8 L3A+JzsNCgl9DQoJZWxzZQ0KCXsJDQoJCWlmIChjbmtfc2NfZG9faW5zdGFsbCgpKQ0KCQl7 DQoJCQllY2hvICc8cD5JbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWw8L3A+JzsNCgkJfQ0K CQllbHNlDQoJCXsNCgkJCWVjaG8gJzxwPkluc3RhbGxhdGlvbiBhYm9ydGVkPC9wPic7DQoJ CX0NCgl9DQoJDQoJZWNobyAnPC9kaXY+JzsNCn0NCg0KZnVuY3Rpb24gY25rX3NjX2RvX2lu c3RhbGwoKQ0Kew0KDQokdmVyc2lvbiA9IG15c3FsX2dldF9zZXJ2ZXJfaW5mbygpOw0KLy9V c2UgIkVOR0lORSIgaWYgdmVyc2lvbiBvZiBNeVNRTCA+ICg0LjAuMTggb3IgNC4xLjIpDQok dGFibGV0eXBlID0gKCBpbnR2YWwoJHZlcnNpb25bMF0pID49IDUgfHwgcHJlZ19tYXRjaCgn I140XC4oMFwuWzItOV18KDFbODldKSl8KDFcLlsyLTldKSMnLCR2ZXJzaW9uKSkgDQoJPyAi IEVOR0lORT1NeUlTQU0gIiANCgk6ICIgVFlQRT1NeUlTQU0gIjsNCg0KLy8gT24gNC4xIG9y IGdyZWF0ZXIgdXNlIHV0ZjgtdGFibGVzDQppZiAoaW50dmFsKCR2ZXJzaW9uWzBdKSA+PSA1 IHx8IHByZWdfbWF0Y2goJyNeNFwuWzEtOV0jJywkdmVyc2lvbikpIA0Kew0KCSR0YWJsZXR5 cGUgLj0gIiBDSEFSQUNURVIgU0VUID0gdXRmOCAiOw0KCSR0YWJsZXR5cGUgLj0gIiBDT0xM QVRFIHV0ZjhfZ2VuZXJhbF9jaSAiOw0KCW15c3FsX3F1ZXJ5KCJTRVQgTkFNRVMgIi4kZGJj aGFyc2V0KTsNCn0NCg0KLy8gaW5zZXJ0IHRhYmxlcyBhbmQgdGVzdCBkYXRhDQoNCiRzcWwg PSAiQ1JFQVRFIFRBQkxFICIuc2FmZV9wZngoJ2Nua19zb2NjZXJfY2x1YnMnKS4iICgNCiAg aWQgaW50KDExKSBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwNCiAgY291bnRyeSB2YXJjaGFy KDI1NSkgTk9UIE5VTEwgZGVmYXVsdCAnZGVmYXVsdCcsDQogIGBuYW1lYCB2YXJjaGFyKDI1 NSkgTk9UIE5VTEwsDQogIGxvZ28gdmFyY2hhcigyNTUpIGRlZmF1bHQgTlVMTCwNCiAgUFJJ TUFSWSBLRVkgIChpZCksDQogIFVOSVFVRSBLRVkgYG5hbWVgIChgbmFtZWApLA0KICBLRVkg Y291bnRyeSAoY291bnRyeSkNCikgIi4kdGFibGV0eXBlLiI7DQoNCkNSRUFURSBUQUJMRSAi LnNhZmVfcGZ4KCdjbmtfc29jY2VyX2NsdWJfdG9fbGVhZ3VlJykuIiAoDQogIGNsdWJfaWQg aW50KDExKSBOT1QgTlVMTCwNCiAgbGVhZ3VlX2lkIGludCgxMSkgTk9UIE5VTEwsDQogIHBv aW50cyB0aW55aW50KDQpIE5PVCBOVUxMIGRlZmF1bHQgJzAnLA0KICBnb2Fsc19mb3IgdGlu eWludCg0KSBOT1QgTlVMTCBkZWZhdWx0ICcwJywNCiAgZ29hbHNfYWdhaW5zdCB0aW55aW50 KDQpIE5PVCBOVUxMIGRlZmF1bHQgJzAnLA0KICBnYW1lX3dvbiB0aW55aW50KDQpIE5PVCBO VUxMIGRlZmF1bHQgJzAnLA0KICBnYW1lX2RyYXcgdGlueWludCg0KSBOT1QgTlVMTCBkZWZh dWx0ICcwJywNCiAgZ2FtZV9sb3N0IHRpbnlpbnQoNCkgTk9UIE5VTEwgZGVmYXVsdCAnMCcs DQogIFBSSU1BUlkgS0VZICAoY2x1Yl9pZCxsZWFndWVfaWQpDQopICIuJHRhYmxldHlwZS4i Ow0KDQpDUkVBVEUgVEFCTEUgIi5zYWZlX3BmeCgnY25rX3NvY2Nlcl9nYW1lcycpLiIgKA0K ICBpZCBpbnQoMTEpIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LA0KICBsZWFndWVfaWQgaW50 KDExKSBOT1QgTlVMTCwNCiAgcm91bmQgVElOWUlOVCBOT1QgTlVMTCwNCiAgY2x1YjFfaWQg aW50KDExKSBOT1QgTlVMTCwNCiAgY2x1YjJfaWQgaW50KDExKSBOT1QgTlVMTCwNCiAga2lj a29mZl90aW1lIGRhdGV0aW1lIE5PVCBOVUxMLA0KICBnb2Fsc19jbHViMSB0aW55aW50KDQp IGRlZmF1bHQgTlVMTCwNCiAgZ29hbHNfY2x1YjIgdGlueWludCg0KSBkZWZhdWx0IE5VTEws DQogIGBzdGF0dXNgIGNoYXIoMSkgZGVmYXVsdCBOVUxMLA0KICBQUklNQVJZIEtFWSAgKGlk KSwNCiAgS0VZIGtpY2tvZmZfdGltZSAoa2lja29mZl90aW1lKSwNCiAgS0VZIGxlYWd1ZV9p ZCAobGVhZ3VlX2lkKSwNCiAgS0VZIGNsdWIxX2lkIChjbHViMV9pZCksDQogIEtFWSBjbHVi Ml9pZCAoY2x1YjJfaWQpLA0KICBLRVkgYHN0YXR1c2AgKGBzdGF0dXNgKQ0KKSAiLiR0YWJs ZXR5cGUuIjsNCg0KQ1JFQVRFIFRBQkxFICIuc2FmZV9wZngoJ2Nua19zb2NjZXJfbGVhZ3Vl JykuIiAoDQogIGlkIGludCgxMSkgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsDQogIGBuYW1l YCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwsDQogIHNlYXNvbiB2YXJjaGFyKDkpIGRlZmF1bHQg TlVMTCwNCiAgdG90YWxfcm91bmRzIFRJTllJTlQgTk9UIE5VTEwgREVGQVVMVCAnMzYnLA0K ICBnYW1lc19wZXJfcm91bmQgVElOWUlOVCBOT1QgTlVMTCBERUZBVUxUICcxMCcsDQogIFBS SU1BUlkgS0VZICAoaWQpLA0KICBVTklRVUUgS0VZIGBuYW1lYCAoYG5hbWVgLGBzZWFzb25g KQ0KKSAiLiR0YWJsZXR5cGUuIjsiOw0KDQppZiAoIWNua19zY19iYXRjaF9xdWVyeSgkc3Fs KSkgcmV0dXJuIGZhbHNlOw0KDQovLyBpbnNlcnQgcHJlZnMNCg0KJHNxbCA9ICJJTlNFUlQg SU5UTyAiLnNhZmVfcGZ4KCd0eHBfcHJlZnMnKS4iIChgcHJlZnNfaWRgLCBgbmFtZWAsIGB2 YWxgLCBgdHlwZWAsIGBldmVudGAsIGBodG1sYCwgYHBvc2l0aW9uYCkgVkFMVUVTIA0KKCcx JywgJ2Nua19zY19sZWFndWVfbGlzdF9wYWdlYnknLCAnMTUnLCAnMicsICdwdWJsaXNoJywg J3RleHRfaW5wdXQnLCAnMCcpLA0KKCcxJywgJ2Nua19zY19jbHViX2xpc3RfcGFnZWJ5Jywg JzE1JywgJzInLCAncHVibGlzaCcsICd0ZXh0X2lucHV0JywgJzAnKSwNCignMScsICdjbmtf c2NfcmFua2luZ19saXN0X3BhZ2VieScsICcxNScsICcyJywgJ3B1Ymxpc2gnLCAndGV4dF9p bnB1dCcsICcwJyksDQooJzEnLCAnY25rX3NjX3JvdW5kc19saXN0X3BhZ2VieScsICcxNScs ICcyJywgJ3B1Ymxpc2gnLCAndGV4dF9pbnB1dCcsICcwJyk7IjsNCg0KaWYgKCFjbmtfc2Nf YmF0Y2hfcXVlcnkoJHNxbCkpIHJldHVybiBmYWxzZTsNCg0KcmV0dXJuIHRydWU7DQoNCn0N Cg0KZnVuY3Rpb24gY25rX3NjX2RlaW5zdGFsbCgpDQp7DQoJcGFnZXRvcCgnU29jY2VyIFBs dWdpbiBEZWluc3RhbGxhdGlvbicsICcnKTsNCgkNCgllY2hvICc8ZGl2IHN0eWxlPSJtYXJn aW46YXV0bzsgdGV4dC1hbGlnbjpjZW50ZXIiPic7DQoJDQoJLy8gY2hlY2sgaWYgdGFibGVz IGFscmVhZHkgaW5zdGFsbGVkDQoJJHRlc3QgPSBnZXRUaGluZygnU0VMRUNUIG5hbWUgRlJP TSAnLnNhZmVfcGZ4KCd0eHBfcHJlZnMnKS4iIFdIRVJFIG5hbWUgPSAnY25rX3NjX2xlYWd1 ZV9saXN0X3BhZ2VieSciKTsNCgkNCglpZiAoISR0ZXN0KQ0KCXsNCgkJZWNobyAnPHA+UGx1 Z2luIG5vdCBpbnN0YWxsZWQ8L3A+JzsNCgl9DQoJZWxzZQ0KCXsJDQoJCWlmIChncHMoJ2Rv X2RlaW5zdGFsbCcpKQ0KCQl7DQoJCQlpZiAoY25rX3NjX2RvX2RlaW5zdGFsbCgpKQ0KCQkJ ew0KCQkJCWVjaG8gJzxwPkRlaW5zdGFsbGF0aW9uIHdhcyBzdWNjZXNzZnVsPC9wPic7DQoJ CQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJZWNobyAnPHA+RGVpbnN0YWxsYXRpb24gYWJvcnRl ZDwvcD4nOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJZWNobyAnPGEgaHJlZj0iP2V2 ZW50PWNua19zb2NjZXInLmEuJ3N0ZXA9Y25rX3NjX2RlaW5zdGFsbCcuYS4nZG9fZGVpbnN0 YWxsPTEiPlllcywgSSByZWFsbHkgd2FudCB0byBkZWluc3RhbGw8L2E+JzsNCgkJfQ0KCX0N CgkNCgllY2hvICc8L2Rpdj4nOw0KfQ0KDQpmdW5jdGlvbiBjbmtfc2NfZG9fZGVpbnN0YWxs KCkNCnsNCg0KLy8gZHJvcCB0YWJsZXMNCg0KJHNxbCA9ICJEUk9QIFRBQkxFICIuc2FmZV9w ZngoJ2Nua19zb2NjZXJfY2x1YnMnKS4iOw0KRFJPUCBUQUJMRSAiLnNhZmVfcGZ4KCdjbmtf c29jY2VyX2NsdWJfdG9fbGVhZ3VlJykuIjsNCkRST1AgVEFCTEUgIi5zYWZlX3BmeCgnY25r X3NvY2Nlcl9nYW1lcycpLiI7DQpEUk9QIFRBQkxFICIuc2FmZV9wZngoJ2Nua19zb2NjZXJf bGVhZ3VlJyk7DQoNCmlmICghY25rX3NjX2JhdGNoX3F1ZXJ5KCRzcWwpKSByZXR1cm4gZmFs c2U7DQoNCi8vIGRlbGV0ZSBwcmVmcw0KDQokc3FsID0gIkRFTEVURSBGUk9NICIuc2FmZV9w ZngoJ3R4cF9wcmVmcycpLiIgV0hFUkUgbmFtZSBJTiAoJ2Nua19zY19sZWFndWVfbGlzdF9w YWdlYnknLCAnY25rX3NjX2NsdWJfbGlzdF9wYWdlYnknLCAnY25rX3NjX3JhbmtpbmdfbGlz dF9wYWdlYnknLCAnY25rX3NjX3JvdW5kc19saXN0X3BhZ2VieScpIjsNCg0KaWYgKCFjbmtf c2NfYmF0Y2hfcXVlcnkoJHNxbCkpIHJldHVybiBmYWxzZTsNCg0KcmV0dXJuIHRydWU7DQoN Cn0NCg0KZnVuY3Rpb24gY25rX3NjX2JhdGNoX3F1ZXJ5ICgkcF9xdWVyeSwgJHBfdHJhbnNh Y3Rpb25fc2FmZSA9IHRydWUpIA0Kew0KCWlmICgkcF90cmFuc2FjdGlvbl9zYWZlKSANCgl7 DQoJCSRwX3F1ZXJ5ID0gJ1NUQVJUIFRSQU5TQUNUSU9OOycgLiAkcF9xdWVyeSAuICc7IENP TU1JVDsnOw0KCX0NCgkgIA0KCSRxdWVyeV9zcGxpdCA9IHByZWdfc3BsaXQgKCIvWztdKy8i LCAkcF9xdWVyeSk7DQoJDQoJZm9yZWFjaCAoJHF1ZXJ5X3NwbGl0IGFzICRjb21tYW5kX2xp bmUpIA0KCXsNCgkJJGNvbW1hbmRfbGluZSA9IHRyaW0oJGNvbW1hbmRfbGluZSk7DQoJDQoJ CWlmICgkY29tbWFuZF9saW5lICE9ICcnKSANCgkJew0KCQkJJHF1ZXJ5X3Jlc3VsdCA9IHNh ZmVfcXVlcnkoJGNvbW1hbmRfbGluZSk7DQoJCQ0KCQkJaWYgKCRxdWVyeV9yZXN1bHQgPT09 IGZhbHNlKSANCgkJCXsNCgkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCX0NCgkNCglyZXR1cm4g JHF1ZXJ5X3Jlc3VsdDsNCn0NCg0KLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLy8gIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLy8g IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIw0KLyoNCglDdXN0b20gVFhQIEZ1bmN0aW9ucw0KKi8NCi8vICMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMNCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMNCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KZnVuY3Rpb24gY25rX3NjX2Nv bHVtbl9oZWFkKCR2YWx1ZSwgJHNvcnQgPSAnJywgJGV2ZW50ID0gJycsICRzdGVwID0gJycs ICRpc19saW5rID0gJycsICRkaXIgPSAnJywgJGNyaXQgPSAnJywgJG1ldGhvZCA9ICcnLCAk Y2xhc3MgPSAnJykNCnsNCglyZXR1cm4gY25rX3NjX2NvbHVtbl9tdWx0aV9oZWFkKCBhcnJh eSgNCgkJCQlhcnJheSAoJ3ZhbHVlJyA9PiAkdmFsdWUsICdzb3J0JyA9PiAkc29ydCwgJ2V2 ZW50JyA9PiAkZXZlbnQsICdpc19saW5rJyA9PiAkaXNfbGluaywNCgkJCQkJICAgJ2Rpcicg PT4gJGRpciwgJ2NyaXQnID0+ICRjcml0LCAnbWV0aG9kJyA9PiAkbWV0aG9kLCAnc3RlcCcg PT4gJHN0ZXApDQoJCQkpLCAkY2xhc3MpOw0KfQ0KDQpmdW5jdGlvbiBjbmtfc2NfY29sdW1u X211bHRpX2hlYWQoJGhlYWRfaXRlbXMsICRjbGFzcz0nJykNCnsNCgkkbyA9IG4udC4nPHRo Jy4oJGNsYXNzID8gJyBjbGFzcz0iJy4kY2xhc3MuJyInIDogJycpLic+JzsNCgkkZmlyc3Rf aXRlbSA9IHRydWU7DQoJZm9yZWFjaCAoJGhlYWRfaXRlbXMgYXMgJGl0ZW0pDQoJew0KCQlp ZiAoZW1wdHkoJGl0ZW0pKSBjb250aW51ZTsNCgkJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJ CSd2YWx1ZScJCT0+ICcnLA0KCQkJJ3NvcnQnCQk9PiAnJywNCgkJCSdldmVudCcJCT0+ICcn LA0KCQkJJ3N0ZXAnCQk9PiAnJywNCgkJCSdpc19saW5rJwk9PiAnJywNCgkJCSdkaXInCQk9 PiAnJywNCgkJCSdjcml0JwkJPT4gJycsDQoJCQknbWV0aG9kJwk9PiAnJywNCgkJKSwkaXRl bSkpOw0KDQoJCSRvIC49ICgkZmlyc3RfaXRlbSkgPyAnJyA6ICcsICc7ICRmaXJzdF9pdGVt ID0gZmFsc2U7DQoNCgkJaWYgKCRpc19saW5rKQ0KCQl7DQoJCQkkbyAuPSAnPGEgaHJlZj0i aW5kZXgucGhwPyc7DQoJCQ0KCQkJJG8gLj0gKCRzdGVwKSA/IGEuInN0ZXA9JHN0ZXAiIDog Jyc7DQoJCQkkbyAuPSAoJGV2ZW50KSA/IGEuImV2ZW50PSRldmVudCIgOiAnJzsNCgkJCSRv IC49ICgkc29ydCkgPyBhLiJzb3J0PSRzb3J0IiA6ICcnOw0KCQkJJG8gLj0gKCRkaXIpID8g YS4iZGlyPSRkaXIiIDogJyc7DQoJCQkkbyAuPSAoJGNyaXQpID8gYS4iY3JpdD0kY3JpdCIg OiAnJzsNCgkJCSRvIC49ICgkbWV0aG9kKSA/IGEuInNlYXJjaF9tZXRob2Q9JG1ldGhvZCIg OiAnJzsNCg0KCQkJJG8gLj0gJyI+JzsNCgkJfQ0KDQoJCSRvIC49IGdUeHQoJHZhbHVlKTsN Cg0KCQlpZiAoJGlzX2xpbmspDQoJCXsNCgkJCSRvIC49ICc8L2E+JzsNCgkJfQ0KCX0NCgkk byAuPSAnPC90aD4nOw0KDQoJcmV0dXJuICRvOw0KfQ0KDQpmdW5jdGlvbiBjbmtfc2NfcGFn ZWJ5X2Zvcm0oJGV2ZW50LCAkc3RlcCwgJHZhbCkNCnsNCgkkdmFscyA9IGFycmF5KA0KCQkx NSAgPT4gMTUsDQoJCTI1ICA9PiAyNSwNCgkJNTAgID0+IDUwLA0KCQkxMDAgPT4gMTAwDQoJ KTsNCg0KCSRzZWxlY3RfcGFnZSA9IHNlbGVjdElucHV0KCdxdHknLCAkdmFscywgJHZhbCwn JywgMSk7DQoNCgkvLyBwcm9wZXIgbG9jYWxpc2F0aW9uDQoJJHBhZ2UgPSBzdHJfcmVwbGFj ZSgne3BhZ2V9JywgJHNlbGVjdF9wYWdlLCBnVHh0KCd2aWV3X3Blcl9wYWdlJykpOw0KDQoJ cmV0dXJuIGZvcm0oDQoJCSc8ZGl2IHN0eWxlPSJtYXJnaW46IGF1dG87IHRleHQtYWxpZ246 IGNlbnRlcjsiPicuDQoJCQkkcGFnZS4NCgkJCWVJbnB1dCgkZXZlbnQpLg0KCQkJc0lucHV0 KCRzdGVwKS4NCgkJCSc8bm9zY3JpcHQ+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSIn LmdUeHQoJ2dvJykuJyIgY2xhc3M9InNtYWxsZXJib3giIC8+PC9ub3NjcmlwdD4nLg0KCQkn PC9kaXY+Jw0KCSk7DQp9DQoNCmZ1bmN0aW9uIGNua19zY19ldmVudF9tdWx0aWVkaXRfZm9y bSgkbmFtZSwgJHN0ZXAsICRtZXRob2RzID0gbnVsbCwgJHBhZ2UsICRzb3J0LCAkZGlyLCAk Y3JpdCwgJHNlYXJjaF9tZXRob2QpDQp7DQoJJG1ldGhvZCA9IHBzKCdlZGl0X21ldGhvZCcp Ow0KDQoJaWYgKCRtZXRob2RzID09PSBOVUxMKQ0KCXsNCgkJJG1ldGhvZHMgPSBhcnJheSgN CgkJCSdkZWxldGUnID0+IGdUeHQoJ2RlbGV0ZScpDQoJCSk7DQoJfQ0KDQoJcmV0dXJuICc8 bGFiZWwgZm9yPSJ3aXRoc2VsZWN0ZWQiPicuZ1R4dCgnd2l0aF9zZWxlY3RlZCcpLic8L2xh YmVsPicuc3AuDQoJCXNlbGVjdElucHV0KCdlZGl0X21ldGhvZCcsICRtZXRob2RzLCAkbWV0 aG9kLCAxLA0KCQkJKCAoJG5hbWUgPT0gJ2xpc3QnKSA/ICcgaWQ9IndpdGhzZWxlY3RlZCIg b25jaGFuZ2U9InBvd2VyZWRpdCh0aGlzKTsgcmV0dXJuIGZhbHNlOyInIDogJyBpZD0id2l0 aHNlbGVjdGVkIicgKQ0KCQkpLg0KCQluLmVJbnB1dCgkbmFtZSkuDQoJCW4uc0lucHV0KCRz dGVwKS4NCgkJbi5oSW5wdXQoJ3BhZ2UnLCAkcGFnZSkuDQoJCSggJHNvcnQgPyBuLmhJbnB1 dCgnc29ydCcsICRzb3J0KS5uLmhJbnB1dCgnZGlyJywgJGRpcikgOiAnJyApLg0KCQkoICRj cml0ID8gbi5oSW5wdXQoJ2NyaXQnLCAkY3JpdCkubi5oSW5wdXQoJ3NlYXJjaF9tZXRob2Qn LCAkc2VhcmNoX21ldGhvZCkgOiAnJyApLg0KCQluLmZJbnB1dCgnc3VibWl0JywgJycsIGdU eHQoJ2dvJyksICdzbWFsbGVyYm94Jyk7DQp9DQoNCmZ1bmN0aW9uIGNua19zY19QcmV2TmV4 dExpbmsoJGV2ZW50LCAkc3RlcCwgJHBhZ2UsICRsYWJlbCwgJHR5cGUsICRzb3J0ID0gJycs ICRkaXIgPSAnJywgJGNyaXQgPSAnJywgJHNlYXJjaF9tZXRob2QgPSAnJykNCnsNCglyZXR1 cm4gJzxhIGhyZWY9Ij9ldmVudD0nLiRldmVudC5hLidzdGVwPScuJHN0ZXAuYS4ncGFnZT0n LiRwYWdlLg0KCQkoJHNvcnQgPyBhLidzb3J0PScuJHNvcnQgOiAnJykuDQoJCSgkZGlyID8g YS4nZGlyPScuJGRpciA6ICcnKS4NCgkJKCRjcml0ID8gYS4nY3JpdD0nLiRjcml0IDogJycp Lg0KCQkoJHNlYXJjaF9tZXRob2QgPyBhLidzZWFyY2hfbWV0aG9kPScuJHNlYXJjaF9tZXRo b2QgOiAnJykuDQoJCSciIGNsYXNzPSJuYXZsaW5rIj4nLg0KCQkoJHR5cGUgPT0gJ3ByZXYn ID8gJyYjODI0OTsnLnNwLiRsYWJlbCA6ICRsYWJlbC5zcC4nJiM4MjUwOycpLg0KCQknPC9h Pic7DQp9DQoNCmZ1bmN0aW9uIGNua19zY19uYXZfZm9ybSgkZXZlbnQsICRzdGVwLCAkcGFn ZSwgJG51bVBhZ2VzLCAkc29ydCwgJGRpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKQ0Kew0K CWlmICgkbnVtUGFnZXMgPiAxKQ0KCXsNCgkJJG9wdGlvbl9saXN0ID0gYXJyYXkoKTsNCg0K CQlmb3IgKCRpID0gMTsgJGkgPD0gJG51bVBhZ2VzOyAkaSsrKQ0KCQl7DQoJCQlpZiAoJGkg PT0gJHBhZ2UpDQoJCQl7DQoJCQkJJG9wdGlvbl9saXN0W10gPSAnPG9wdGlvbiB2YWx1ZT0i Jy4kaS4nIiBzZWxlY3RlZD0ic2VsZWN0ZWQiPicuIiRpLyRudW1QYWdlcyIuJzwvb3B0aW9u Pic7DQoJCQl9DQoNCgkJCWVsc2UNCgkJCXsNCgkJCQkkb3B0aW9uX2xpc3RbXSA9ICc8b3B0 aW9uIHZhbHVlPSInLiRpLiciPicuIiRpLyRudW1QYWdlcyIuJzwvb3B0aW9uPic7DQoJCQl9 DQoJCX0NCg0KCQkkbmF2ID0gYXJyYXkoKTsNCg0KCQkkbmF2W10gPSAoJHBhZ2UgPiAxKSA/ DQoJCQljbmtfc2NfUHJldk5leHRMaW5rKCRldmVudCwgJHN0ZXAsICRwYWdlIC0gMSwgZ1R4 dCgncHJldicpLCAncHJldicsICRzb3J0LCAkZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2Qp LnNwIDoNCgkJCXRhZygnJiM4MjQ5OyAnLmdUeHQoJ3ByZXYnKSwgJ3NwYW4nLCAnIGNsYXNz PSJuYXZsaW5rLWRpc2FibGVkIicpLnNwOw0KDQoJCSRuYXZbXSA9ICc8c2VsZWN0IG5hbWU9 InBhZ2UiIGNsYXNzPSJsaXN0IiBvbmNoYW5nZT0ic3VibWl0KHRoaXMuZm9ybSk7Ij4nOw0K CQkkbmF2W10gPSBuLmpvaW4obiwgJG9wdGlvbl9saXN0KTsNCgkJJG5hdltdID0gbi4nPC9z ZWxlY3Q+JzsNCgkJJG5hdltdID0gJzxub3NjcmlwdD4gPGlucHV0IHR5cGU9InN1Ym1pdCIg dmFsdWU9IicuZ1R4dCgnZ28nKS4nIiBjbGFzcz0ic21hbGxlcmJveCIgLz48L25vc2NyaXB0 Pic7DQoNCgkJJG5hdltdID0gKCRwYWdlICE9ICRudW1QYWdlcykgPw0KCQkJc3AuY25rX3Nj X1ByZXZOZXh0TGluaygkZXZlbnQsICRzdGVwLCAkcGFnZSArIDEsIGdUeHQoJ25leHQnKSwg J25leHQnLCAkc29ydCwgJGRpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKSA6DQoJCQlzcC50 YWcoZ1R4dCgnbmV4dCcpLicgJiM4MjUwOycsICdzcGFuJywgJyBjbGFzcz0ibmF2bGluay1k aXNhYmxlZCInKTsNCg0KCQlyZXR1cm4gJzxmb3JtIGNsYXNzPSJwcmV2LW5leHQiIG1ldGhv ZD0iZ2V0IiBhY3Rpb249ImluZGV4LnBocCI+Jy4NCgkJCW4uZUlucHV0KCRldmVudCkuDQoJ CQluLnNJbnB1dCgkc3RlcCkuDQoJCQkoICRzb3J0ID8gbi5oSW5wdXQoJ3NvcnQnLCAkc29y dCkubi5oSW5wdXQoJ2RpcicsICRkaXIpIDogJycgKS4NCgkJCSggJGNyaXQgPyBuLmhJbnB1 dCgnY3JpdCcsICRjcml0KS5uLmhJbnB1dCgnc2VhcmNoX21ldGhvZCcsICRzZWFyY2hfbWV0 aG9kKSA6ICcnICkuDQoJCQlqb2luKCcnLCAkbmF2KS4NCgkJCSc8L2Zvcm0+JzsNCgl9DQoN CgllbHNlDQoJew0KCQlyZXR1cm4gZ3JhZigkcGFnZS4nLycuJG51bVBhZ2VzLCAnIGNsYXNz PSJwcmV2LW5leHQiJyk7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBjbmtfc2NfZXZlbnRfbXVsdGlf ZWRpdCgkdGFibGUsICRpZF9rZXkpIC8vIFRPRE86IHJlcGxhY2UgJGlkX2tleSB3aXRoIGFy cmF5DQp7DQoJJG1ldGhvZCA9IHBzKCdlZGl0X21ldGhvZCcpOw0KCSRzZWxlY3RlZCA9IHBz KCdzZWxlY3RlZCcpOw0KDQoJJGlkX2tleXMgPSBleHBsb2RlKCd8JywgJGlkX2tleSk7DQoN CglpZiAoJHNlbGVjdGVkKQ0KCXsNCgkJaWYgKCRtZXRob2QgPT0gJ2RlbGV0ZScpDQoJCXsN CgkJCWZvcmVhY2ggKCRzZWxlY3RlZCBhcyAkaWQpDQoJCQl7DQoJCQkJJHdoZXJlID0gYXJy YXkoKTsNCgkJCQkkaWRfYXJyID0gZXhwbG9kZSgnXycsICRpZCk7DQoJCQkNCgkJCQlmb3Ig KCRpPTA7ICRpIDwgY291bnQoJGlkX2tleXMpOyAkaSsrKQ0KCQkJCXsNCgkJCQkJYXJyYXlf cHVzaCgkd2hlcmUsICRpZF9rZXlzWyRpXS4nID0gJy4kaWRfYXJyWyRpXSk7DQoJCQkJfQ0K CQkJCQ0KCQkJCWlmIChzYWZlX2RlbGV0ZSgkdGFibGUsIGltcGxvZGUoJyBBTkQgJywgJHdo ZXJlKSkpDQoJCQkJew0KCQkJCQkkaWRzW10gPSAkaWQ7DQoJCQkJfQ0KCQkJfQ0KDQoJCQly ZXR1cm4gam9pbignLCAnLCAkaWRzKTsNCgkJfQ0KCX0NCg0KCXJldHVybiAnJzsNCn0iO3M6 NDoidHlwZSI7czoxOiIxIjtzOjQ6ImhlbHAiO3M6NDQ5NDoiPHN0eWxlPgouY25rX3RhZwp7 CmJhY2tncm91bmQtY29sb3I6YmxhY2s7CmNvbG9yOndoaXRlOwpwYWRkaW5nOjVweDsKbWFy Z2luLXRvcDoxMHB4Owp9Ci5jbmtfZG9uYXRlCnsKYmFja2dyb3VuZC1jb2xvcjojRUVEOwpw YWRkaW5nOjVweDsKfQouY25rX3RhYmxlCnsKICBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7 Cn0KLmNua190YWJsZSB0ZAp7CiAgYm9yZGVyOjFweCBkb3R0ZWQgIzMzMzsKICBwYWRkaW5n OiA0cHg7Cn0KPC9zdHlsZT4KCjxoMT48c3Ryb25nPkNOS19TT0NDRVI8L3N0cm9uZz4gMS4w LjA8L2gxPgo8aDI+RGVzY3JpcHRpb248L2gyPgo8cD5NYW5hZ2UgeW91ciBmb290YmFsbCBs ZWFndWUsIGNsdWJzIGFuZCBnYW1lcy48L3A+CjxwPkFmdGVyIHlvdSBoYXZlIGluc3RhbGxl ZCB0aGUgcGx1Z2luIGZyb20gdGhlIGNvbnRlbnQgPiBzb2NjZXIgdGFiLCB5b3UgbWF5IHdh bnQgdG8gZWRpdCB0aGUgcGx1Z2luIGhlYWRlciBjb2RlLCB0byBzZXQgYSBwcm9wZXIgaW1h Z2UgcGF0aCBmb3IgY2x1YiBsb2dvcyBhbmQgdG8gY29uZmlndXJlIHBlcm1pc3Npb24gbGV2 ZWxzLiBZb3UnbGwgZmluZCBmb2xsb3dpbmcgNCBsaW5lcyBhdCB0aGUgYmVnaW5uaW5nIG9m IHRoZSBwbHVnaW4gY29kZTo8L3A+Cjxjb2RlPjxwcmU+CglkZWZpbmUoJ0NOS19TQ19JTUdf VVBMT0FEX0NBVEVHT1JZJywgJ2NsdWJzJyk7CglkZWZpbmUoJ0NOS19TQ19JTUdfQlJPV1NF X0ZPTERFUicsICcvaW1hZ2VzL3NvY2Nlci9jbHVicy8nKTsKCglhZGRfcHJpdnMoJ2Nua19z b2NjZXInLCcxLDIsMyw0Jyk7CglhZGRfcHJpdnMoJ2Nua19zb2NjZXJfYWRtaW4nLCcxLDIn KTsKPC9wcmU+PC9jb2RlPgo8cD5TZXQgQ05LX1NDX0lNR19VUExPQURfQ0FURUdPUlkgdG8g YSB0ZXh0cGF0dGVybiBpbWFnZS1jYXRlZ29yeSBvZiB5b3VyIGNob2ljZS4gQSBkcm9wZG93 biB3aXRoIGFsbCB0aGUgaW1hZ2UgbmFtZXMgd2lsbCBiZSBkaXNwbGF5ZWQgd2hlbiBlZGl0 aW5nIGEgY2x1YiBsb2dvLiBDTktfU0NfSU1HX0JST1dTRV9GT0xERVIgd2lsbCBhbHNvIGRp c3BsYXkgYSBkcm9wZG93biB3aXRoIGltYWdlIG5hbWVzLCBidXQgaXQgc2NhbnMgdGhlIGRl ZmluZWQgZm9sZGVyIGZvciBmaWxlcy48L3A+CjxwPlVzaW5nIGFkZF9wcml2cygpIGFsbG93 cyB5b3UgdG8gc2V0IHBlcm1pc3Npb24gbGV2ZWxzLiAiY25rX3NvY2Nlcl9hZG1pbiIgZ2l2 ZXMgeW91IGFjY2VzcyB0byBhbGwgKGluY2x1ZGluZyBpbnN0YWxsL2RlaW5zdGFsbCkgZnVu Y3Rpb25zLiAiY25rX3NvY2NlciIgb25seSBhbGxvd3MgeW91IHRvIGVkaXQgc2NvcmVzLiBU aGUgbnVtYmVycyBpbmRpY2F0ZSB3aGljaCB1c2VyIGxldmVscyBhIHByaXZpbGVnZSB3aWxs IGJlIGFzc2lnbmVkIHRvLiBIZXJlIGlzIGEgbGlzdCBvZiB1c2VyIGxldmVsczo8L3A+Cjxj b2RlPjxwcmU+CgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglVU0VSIExFVkVMUwoJLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQoJMSA9PiAncHVibGlzaGVyJwoJMiA9PiAnbWFuYWdpbmdfZWRp dG9yJwoJMyA9PiAnY29weV9lZGl0b3InCgk0ID0+ICdzdGFmZl93cml0ZXInCgk1ID0+ICdm cmVlbGFuY2VyJwoJNiA9PiAnZGVzaWduZXInCgkwID0+ICdub25lJwoJLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQo8L3ByZT48L2NvZGU+Cgo8cD5GZWVsIGZyZWUgdG8gYXNrIGZ1cnRoZXIg cXVlc3Rpb25zIGFuZC9vciBnaXZlIGZlZWRiYWNrIGluIHRoZSA8YSBocmVmPSJodHRwOi8v Zm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9Mjc0NjYiPlRleHRwYXR0 ZXJuIEZvcnVtcyBUaHJlYWQ8L2E+LjwvcD4KPHAgY2xhc3M9ImNua19kb25hdGUiPklmIHlv dSBmaW5kIHRoaXMgcGx1Z2luIHVzZWZ1bCwgcGxlYXNlIGNvbnNpZGVyIGEgPGEgaHJlZj0i aHR0cHM6Ly93d3cucGF5cGFsLmNvbS9jZ2ktYmluL3dlYnNjcj9jbWQ9X2RvbmF0aW9ucyZi dXNpbmVzcz1kb25hdGUlNDBjbm93YWslMmVkZSZpdGVtX25hbWU9VGV4dHBhdHRlcm4lMjBG b290YmFsbCUyMFBsdWdpbiZpdGVtX251bWJlcj1jbmtfc29jY2VyJm5vX3NoaXBwaW5nPTAm bm9fbm90ZT0xJnRheD0wJmN1cnJlbmN5X2NvZGU9RVVSJmxjPUdCJmJuPVBQJTJkRG9uYXRp b25zQkYmY2hhcnNldD1VVEYlMmQ4Ij5kb25hdGlvbjwvYT4uIEl0IHdpbGwgaGVscCBlbnN1 cmUgZnVydGhlciBkZXZlbG9wbWVudCBvZiB0aGlzIGFuZCB5ZXQgdW5yZWxlYXNlZCBwbHVn aW5zLjwvcD4KCjxoMj5UYWdzPC9oMj4KCjxwIGNsYXNzPSJjbmtfdGFnIj48Y29kZT4mIzYw O3R4cDpjbmtfbmV4dF9nYW1lIC8mIzYyOzwvY29kZT48L3A+Cgo8cD48c3Ryb25nPkRlc2Ny aXB0aW9uOjwvc3Ryb25nPjwvcD4KPHA+RGlzcGxheXMgdGhlIG5leHQgdXBjb21pbmcgbWF0 Y2ggd2l0aCBjbHViIG5hbWVzIGFuZCBsb2dvcywgYXMgd2VsbCBhcyBraWNrb2ZmIHRpbWU8 L3A+Cgo8cD48c3Ryb25nPlBhcmFtZXRlcnM6PC9zdHJvbmc+PC9wPgoKPHRhYmxlIGNsYXNz PSJjbmtfdGFibGUiPgo8dHI+PHRkPjxzdHJvbmc+cGFyYW08L3N0cm9uZz48L3RkPjx0ZD48 c3Ryb25nPmRlc2M8L3N0cm9uZz48L3RkPjx0ZD48c3Ryb25nPmFjY2VwdGVkIHZhbHVlczwv c3Ryb25nPjwvdGQ+PC90cj4KPHRyPjx0ZD5sZWFndWVfaWQ8L3RkPjx0ZD4gY2hvb3NlIGEg bGVhZ3VlIDwvdGQ+PHRkPmludGVnZXIgOyBkZWZhdWx0OiAxPC90ZD48L3RyPgo8dHI+PHRk PmRhdGVfcGF0dGVybjwvdGQ+PHRkPiBwYXR0ZXJuIGZvciBraWNrb2ZmIGRhdGV0aW1lIGZv cm1hdGluZy4gRm9yIGZvcm1hdGluZyBvcHRpb25zLCBwbGVhc2UgbG9vayA8YSBocmVmPSJo dHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2RlL2Z1bmN0aW9uLnN0cmZ0aW1lLnBocCI+aGVy ZTwvYT4uPC90ZD48dGQ+c3RyaW5nIDsgZGVmYXVsdDogJyVBICVlLyVtIC0gJVksIEtsLiAl SDolTSc8L3RkPjwvdHI+Cjx0cj48dGQ+Y29sb25faW1nX2ZpbGVuYW1lPC90ZD48dGQ+IHBh dGggJiBmaWxlbmFtZSBmb3IgdGhlIGNvbG9uIGltYWdlIDwvdGQ+PHRkPnN0cmluZyA7IGRl ZmF1bHQgJ2ltYWdlcy9zb2NjZXIvY29sb24uZ2lmJzwvdGQ+PC90cj4KPHRyPjx0ZD5kZWxh eV9ob3VyczwvdGQ+PHRkPiBkZWxheXMgdGhlIHNlbGVjdGlvbiBvZiB0aGUgbmV4dCBnYW1l IGJ5IGhvdXJzIDwvdGQ+PHRkPmludGVnZXIgOyBkZWZhdWx0OiAyPC90ZD48L3RyPgo8L3Rh YmxlPgoKPHAgY2xhc3M9ImNua190YWciPjxjb2RlPiYjNjA7dHhwOmNua190YWJsZSAvJiM2 Mjs8L2NvZGU+PC9wPgoKPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjo8L3N0cm9uZz48L3A+Cjxw PkRpc3BsYXlzIGEgbGVhZ3VlIHRhYmxlLiBGdWxseSBjdXN0b21pemFibGUuIE5vdGU6IGNv bHVtbl9oZWFkZXJzIGFuZCBjb2x1bW5fZGlzcGxheSBtdXN0IGJlIGEgbGlzdCBvZiBleGFj dGx5IDkgc3RyaW5ncywgb3RoZXJ3aXNlIHRoZXkgd2lsbCBiZSBvdmVycmlkZGVuIHdpdGgg dGhlIGRlZmF1bHQgdmFsdWVzLjwvcD4KCjxwPjxzdHJvbmc+UGFyYW1ldGVyczo8L3N0cm9u Zz48L3A+Cgo8dGFibGUgY2xhc3M9ImNua190YWJsZSI+Cjx0cj48dGQ+PHN0cm9uZz5wYXJh bTwvc3Ryb25nPjwvdGQ+PHRkPjxzdHJvbmc+ZGVzYzwvc3Ryb25nPjwvdGQ+PHRkPjxzdHJv bmc+YWNjZXB0ZWQgdmFsdWVzPC9zdHJvbmc+PC90ZD48L3RyPgo8dHI+PHRkPmxlYWd1ZV9p ZDwvdGQ+PHRkPmNob29zZSBhIGxlYWd1ZSA8L3RkPjx0ZD5pbnRlZ2VyIDsgZGVmYXVsdDog MTwvdGQ+PC90cj4KPHRyPjx0ZD5jb2x1bW5faGVhZGVyczwvdGQ+PHRkPiBhbiBhcnJheSBv ZiBzdHJpbmdzIGZvciBjb2x1bW4gaGVhZGVycyA8L3RkPjx0ZD4nIycsJ2NsdWInLC4uLiA7 IGRlZmF1bHQ6ICcjLGNsdWIscG9pbnRzLGdvYWxzLGdvYWxzIGFnYWluc3QsZ29hbHMgc3Vt LHdvbixkcmF3LGxvc3QnPC90ZD48L3RyPgo8dHI+PHRkPmNvbHVtbl9kaXNwbGF5PC90ZD48 dGQ+IGFuIGFycmF5IG9mIDAvMSBpbmRpY2F0aW5nIGlmIGNvbHVtbiBpcyBkaXNwbGF5ZWQg PC90ZD48dGQ+JzAsMScsLi4uIDsgZGVmYXVsdDogJzEsMSwxLDAsMCwwLDAsMCwwJzwvdGQ+ PC90cj4KPHRyPjx0ZD5pbmNsdWRlX3JhbmtzPC90ZD48dGQ+IGEgbGlzdCBvZiByYW5rcywg dGhhdCBzaG91bGQgYmUgc2hvd24uIHdoZW4gbm90IHNldCwgYWxsIHJhbmtzIGFyZSBzaG93 biA8L3RkPjx0ZD4nMTQnLCcxNScgOyBkZWZhdWx0OiAnJzwvdGQ+PC90cj4KPHRyPjx0ZD5m b2xsb3dfY2x1YjwvdGQ+PHRkPiBjbHViIGlkLCB0aGF0IHdpbGwgYmUgc2hvd24gaW4gYW55 IGNhc2UuIDwvdGQ+PHRkPmludGVnZXIgOyBkZWZhdWx0OiAnJzwvdGQ+PC90cj4KPHRyPjx0 ZD5mb2xsb3dfY2x1Yl9wYWRfbnVtYmVyPC90ZD48dGQ+IG51bWJlciBvZiByYW5rcywgdGhh dCB3aWxsIGJlIGRpc3BsYXllZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBmb2xsb3dfY2x1Yi4g PC90ZD48dGQ+aW50ZWdlciA7IGRlZmF1bHQ6IDI8L3RkPjwvdHI+CjwvdGFibGU+IjtzOjM6 Im1kNSI7czozMjoiZTg3Y2UzOWQ4ZmFjMGQ3MjBiYTc2MTY2MGQyYWU1NmUiO30=