# Name: smd_tags v0.31 # Type: Admin/Client side plugin # Unlimited tags for articles, images, files and links # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjg6InNtZF90YWdzIjtzOjY6ImF1dGhvciI7czoxMToiU3Rl ZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3c29uLmNv bS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjMxIjtzOjExOiJkZXNjcmlwdGlvbiI7czo1Mjoi VW5saW1pdGVkIHRhZ3MgZm9yIGFydGljbGVzLCBpbWFnZXMsIGZpbGVzIGFuZCBsaW5rcyI7 czo0OiJjb2RlIjtzOjg0NzIwOiIvLyBzbWRfdGFncyBieSBTdGVmIERhd3Nvbg0KLy8gVE9E TzogZ2xvYmFsIHRhZ3MNCi8vIFRPRE86IGxpc3QgdGFncyBieSBsaW5rZWQgY2F0IChpLmUu IGEgJ3doZXJlIHVzZWQnIGZvciBjYXRlZ29yeS0+VGFnIHJlbGF0aW9uc2hpcHMpDQovLyBU T0RPOiBSZXNvbHZlIHdoYXQgaGFwcGVucyBpZiBhbiBhcnRpY2xlIGlzIGFzc2lnbmVkIHNv bWUgdGFncyBhbmQgdGhlbiB0aGUgY2F0ZWdvcnkgaXMgY2hhbmdlZCAodGhlIHRhZ3MgcmVt YWluIGFzc29jaWF0ZWQsIGJ1dCBhcmUgaGlkZGVuKQ0KLy8gVE9ETzogV2hhdCBoYXBwZW5z IGlmIG9uIGFuIGFydGljbGUgbGlzdCBwYWdlIHRoYXQgaXMgbm90IHRoZSAnZ2xvYmFsJyBz bWRfdGFncyBwYWdlPyBTaG91bGQgd2UgYmUgYWJsZSB0byBjYWxsIHRhZ19saXN0Pw0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEFETUlOIFNJREUgQ09ERQ0KaWYgKEB0 eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCWFkZF9wcml2cygnc21kX3RhZ3MnLCcxLDIn KTsNCglhZGRfcHJpdnMoJ3NtZF90YWdzX3VzZXJzJywnMSwyLDMsNCw1LDYnKTsNCglhZGRf cHJpdnMoJ3BsdWdpbl9wcmVmcy5zbWRfdGFncycsJzEsMicpOw0KDQoJLy8gRXh0ZW5zaW9u cyB0YWINCglyZWdpc3Rlcl90YWIoJ2V4dGVuc2lvbnMnLCAnc21kX3RhZ3MnLCBzbWRfdGFn c19nVHh0KCdzbWRfdGFncycpKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3MnLCAn c21kX3RhZ3MnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3NfdXNlcnMnLCAnc21k X3RhZ3NfdXNlcnMnKTsNCg0KCS8vIE5vdGUgdGhlIGNhbGxiYWNrcyBhcmUgb3JkZXJlZCB3 aXRoICdzYXZlJyBmaXJzdA0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19tdWx0aV9l ZGl0JywgJ2xpc3QnLCAnbGlzdF9tdWx0aV9lZGl0Jyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2so J3NtZF90YWdzX3NhdmVsaXN0JywgJ2FydGljbGUnLCAnY3JlYXRlJyk7DQoJcmVnaXN0ZXJf Y2FsbGJhY2soJ3NtZF90YWdzX3NhdmVsaXN0JywgJ2FydGljbGUnLCAnZWRpdCcpOw0KCXJl Z2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19sb2FkbGlzdCcsICdhcnRpY2xlJyk7DQoNCgly ZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3NfbXVsdGlfZWRpdCcsICdpbWFnZScsICdpbWFn ZV9kZWxldGUnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3Nfc2F2ZWxpc3QnLCAn aW1hZ2UnLCAnaW1hZ2Vfc2F2ZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19s b2FkbGlzdCcsICdpbWFnZScpOw0KDQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90YWdzX211 bHRpX2VkaXQnLCAnZmlsZScsICdmaWxlX2RlbGV0ZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNr KCdzbWRfdGFnc19zYXZlbGlzdCcsICdmaWxlJywgJ2ZpbGVfc2F2ZScpOw0KCXJlZ2lzdGVy X2NhbGxiYWNrKCdzbWRfdGFnc19sb2FkbGlzdCcsICdmaWxlJyk7DQoNCglyZWdpc3Rlcl9j YWxsYmFjaygnc21kX3RhZ3NfbXVsdGlfZWRpdCcsICdsaW5rJywgJ2xpbmtfbXVsdGlfZWRp dCcpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19zYXZlbGlzdCcsICdsaW5rJywg J2xpbmtfcG9zdCcpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19zYXZlbGlzdCcs ICdsaW5rJywgJ2xpbmtfc2F2ZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19s b2FkbGlzdCcsICdsaW5rJyk7DQoNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3Nfc2V0 dXAnLCAncGx1Z2luX3ByZWZzLnNtZF90YWdzJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3Nt ZF90YWdzX3dlbGNvbWUnLCAncGx1Z2luX2xpZmVjeWNsZS5zbWRfdGFncycpOw0KDQoJLy8g VHJpcGxlIGFycmF5LCBvdXRwdXQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLCBzZXF1ZW50aWFs bHkgbnVtYmVyZWQNCgkvLyAgMDogbGlzdCBvZiBjdXJyZW50IHByZWZzICsgZGVmYXVsdA0K CS8vICAxOiBsaXN0IG9mIGxlZ2FjeSBwcmVmcyB0aGF0IG1heSBuZWVkIHJlbW92aW5nIChk ZWZhdWx0IHNob3VsZCBhbGwgYmUgZW1wdHkpDQoJLy8gIDI6IHBvc2l0aW9uIHRoYXQgYSBo ZWFkaW5nIHNob3VsZCBiZSBpbnNlcnRlZCArIGhlYWRpbmcgaXRzZWxmDQoJZ2xvYmFsICRz bWRfdGFnX3ByZWZzOw0KCSRzbWRfdGFnX3ByZWZzID0gYXJyYXkoDQoJCWFycmF5KA0KCQkJ J3NtZF90YWdfcF9lbmFibGUnID0+ICcxMTExJywgLy8gb25lIGRpZ2l0IGZvciBhcnRpY2xl L2ltYWdlL2ZpbGUvbGluay4gMT1lbmFibGVkOyAwPWRpc2FibGVkDQoJCQknc21kX3RhZ19w X2ZpcnN0JyA9PiAnMCcsDQoJCQknc21kX3RhZ19wX2lucHV0JyA9PiAnMCcsIC8vIDA9c2Vs ZWN0LCAxPWxpbmtzLCAyPXRleHRhcmVhLCAzPXRleHRhcmVhKw0KCQkJJ3NtZF90YWdfcF9s aW5rY2F0JyA9PiAnMCcsDQoJCQknc21kX3RhZ19wX3F0YWcnID0+ICcwJywgLy8gMD1ubyBh dXRvY29tcGxldGUsIDE9c3RkIGEvYywgMj1zdHJpY3QgYS9jDQoJCQknc21kX3RhZ19wX3F0 cGF0aCcgPT4gJycsIC8vIERpciB0byBqcyBmaWxlKHMpIHJlbGF0aXZlIHRvIHRleHRwYXR0 ZXJuIGRpcg0KCQkJJ3NtZF90YWdfcF9xdHN0eWwnID0+ICcnLCAvLyBEaXIgdG8gY3NzIGZp bGUocykNCgkJCSdzbWRfdGFnX3Bfc2l6ZScgPT4gJzYnLA0KCQkJJ3NtZF90YWdfdF9hdXRv JyA9PiAnMScsDQoJCQknc21kX3RhZ190X2NvbHMnID0+ICcxJywNCgkJCSdzbWRfdGFnX3Rf Y29sc29yZCcgPT4gJzAnLA0KCQkJJ3NtZF90YWdfdF9jb3VudCcgPT4gJzEnLA0KCQkJJ3Nt ZF90YWdfdF9kZWx0cmVlJyA9PiAnMCcsDQoJCQknc21kX3RhZ190X2RlbHVzZWQnID0+ICcw JywNCgkJCSdzbWRfdGFnX3RfaGlsaXRlJyA9PiAnZmZhJywNCgkJCSdzbWRfdGFnX3RfaG92 ZXInID0+ICdmZmMnLA0KCQkJJ3NtZF90YWdfdF9pbmRlbnQnID0+ICcmIzgyMTI7JywNCgkJ CSdzbWRfdGFnX3VfcG5hbScgPT4gJ3NtZF90YWcnLA0KCQkJJ3NtZF90YWdfdV9wdHlwJyA9 PiAnc21kX3RhZ3R5cGUnLA0KCQkJJ3NtZF90YWdfdV9zZWMnID0+ICdzbWRfdGFncycsDQoJ CSksDQoJCWFycmF5KA0KCQkJJ3NtZF90YWdfdG9fcmVtb3ZlJyA9PiAnJywNCgkJKSwNCgkJ YXJyYXkoDQoJCQkxID0+IHNtZF90YWdzX2dUeHQoJ3ByZWZzX3AnKSwNCgkJCTkgPT4gc21k X3RhZ3NfZ1R4dCgncHJlZnNfdCcpLA0KCQkJMTggPT4gc21kX3RhZ3NfZ1R4dCgncHJlZnNf dScpLA0KCQkpDQoJKTsNCn0NCg0KaWYgKCFkZWZpbmVkKCdTTURfVEFHJykpIHsNCglkZWZp bmUoIlNNRF9UQUciLCAnc21kX3RhZ3MnKTsNCn0NCmlmICghZGVmaW5lZCgnU01EX1RBR0Mn KSkgew0KCWRlZmluZSgiU01EX1RBR0MiLCAnc21kX3RhZ3NfY2F0Jyk7DQp9DQppZiAoIWRl ZmluZWQoJ1NNRF9UQUdVJykpIHsNCglkZWZpbmUoIlNNRF9UQUdVIiwgJ3NtZF90YWdzX3Vz ZWQnKTsNCn0NCnJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc191cmxfaGFuZGxlcicsICdw cmV0ZXh0Jyk7DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90YWdzX3dlbGNvbWUoJGV2 ZW50LCAkc3RlcCkgew0KCSRtc2cgPSAnJzsNCglzd2l0Y2ggKCRzdGVwKSB7DQoJCWNhc2Ug J2luc3RhbGxlZCc6DQoJCQlzbWRfdGFnc190YWJsZV9pbnN0YWxsKCcnLCAwKTsNCgkJCSRt c2cgPSAnVGhhbmtzIGZvciBpbnN0YWxsaW5nIHNtZF90YWdzLiBQbGVhc2UgcmVhZCB0aGUg ZG9jcyA6LSknOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ2RlbGV0ZWQnOg0KCQkJc21kX3RhZ3Nf cHJlZnNfcmVtb3ZlKCcnLCAwKTsNCgkJCWJyZWFrOw0KCX0NCglyZXR1cm4gJG1zZzsNCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGFncygkZXZl bnQsICRzdGVwKSB7DQoJZ2xvYmFsICRzbWRfdGFnX3ByZWZzOw0KDQoJaWYoISRzdGVwIG9y ICFpbl9hcnJheSgkc3RlcCwgYXJyYXkoDQoJCQknc21kX3RhZ19jcmVhdGUnLA0KCQkJJ3Nt ZF90YWdfZGVsZXRlJywNCgkJCSdzbWRfdGFnX3NhdmUnLA0KCQkJJ3NtZF90YWdfY2F0bGlz dCcsDQoJCQknc21kX3RhZ19wYXJlbnRsaXN0JywNCgkJCSdzbWRfdGFnc19tYW5hZ2UnLA0K CQkJJ3NtZF90YWdzX3RhYmxlX2luc3RhbGwnLA0KCQkJJ3NtZF90YWdzX3RhYmxlX3JlbW92 ZScsDQoJCQknc21kX3RhZ3NfcHJlZnNfc2hvdycsDQoJCQknc21kX3RhZ3NfcHJlZnNfaW5z dGFsbCcsDQoJCQknc21kX3RhZ3NfcHJlZnNfcmVtb3ZlJywNCgkJCSdzbWRfdGFnc19wcmVm c191cGRhdGUnLA0KCQkpKSkgew0KCQkkcHJlZiA9IHNtZF90YWdzX3ByZWZfZ2V0KCdzbWRf dGFnX3BfZmlyc3QnKTsNCgkJaWYgKCRwcmVmKSB7DQoJCQlzd2l0Y2ggKCRwcmVmWydzbWRf dGFnX3BfZmlyc3QnXVsndmFsJ10pIHsNCgkJCQljYXNlIDE6DQoJCQkJCXNtZF90YWdzX21h bmFnZSgnJyk7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgMDoNCgkJCQlkZWZhdWx0Og0KCQkJ CQlzbWRfdGFnc19wcmVmc19zaG93KCcnKTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCXNtZF90 YWdzX3ByZWZzX3Nob3coJycpOw0KCQl9DQoJfSBlbHNlICRzdGVwKCk7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RhZ3NfdXNlcnMoJGV2ZW50 LCAkc3RlcCkgew0KCWlmKCEkc3RlcCBvciAhaW5fYXJyYXkoJHN0ZXAsIGFycmF5KA0KCQkJ J3NtZF90YWdfY2F0bGlzdCcsDQoJCQknc21kX3RhZ19wYXJlbnRsaXN0JywNCgkJKSkpIHsN CgkJCS8vIERvIG5vdGhpbmcNCgl9IGVsc2UgJHN0ZXAoKTsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQovLyBDcmVhdGUgZHJvcGRvd24gYW5kIHBvcHVsYXRlIGl0IHdp dGggdGFncyBvZiB0aGUgcmVsZXZhbnQgdHlwZSwgaGlnaGxpZ2h0aW5nIGFueSAkc2VsIHRh Z3MNCmZ1bmN0aW9uIHNtZF9tdWx0aVRyZWVTZWxlY3RJbnB1dCgkc2VsZWN0X25hbWUgPSAn JywgJHRyZWUgPSAnJywgJHNlbCA9ICcnKSB7DQoJJHByZWYgPSBzbWRfdGFnc19wcmVmX2dl dCgnc21kX3RhZ19wX3NpemUnLCAxKTsNCgkkcm93cyA9ICRwcmVmWydzbWRfdGFnX3Bfc2l6 ZSddWyd2YWwnXTsNCg0KCSRvdXRbXSA9ICc8c2VsZWN0IGlkPSInLiRzZWxlY3RfbmFtZS4n IiBuYW1lPSInLiRzZWxlY3RfbmFtZS4nW10iIGNsYXNzPSJsaXN0IiBzaXplPSInLiAkcm93 cyAuJyInIC4oKCRyb3dzPT0xKSA/ICcnIDogJyBtdWx0aXBsZT0ibXVsdGlwbGUiJykuICc+ JzsNCglmb3JlYWNoICgkdHJlZSBhcyAkbGVhZikgew0KCQlpZiAoJGxlYWZbJ25hbWUnXSA9 PSAncm9vdCcpIGNvbnRpbnVlOw0KDQoJCSRzZWxlY3RlZD0nJzsNCgkJZm9yZWFjaCAoJHNl bCBhcyAkZ2lkID0+ICRpdGVtKSB7DQoJCQlpZiAoJGxlYWZbJ2lkJ10gPT0gJGl0ZW1bJ3Rh Z19pZCddKSB7DQoJCQkJJHNlbGVjdGVkID0gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzsNCgkJ CQljb250aW51ZTsNCgkJCX0NCgkJfQ0KDQoJCSRsZWFmWyduYW1lJ10gPSBodG1sc3BlY2lh bGNoYXJzKCRsZWFmWyduYW1lJ10pOw0KCQkkaW5kZW50ID0gKCRsZWFmWydsZXZlbCddID4g MCkgPyBzdHJfcmVwZWF0KHNwLnNwLCRsZWFmWydsZXZlbCddKSA6ICcnOw0KCQkkb3V0W10g PSB0Lic8b3B0aW9uIHZhbHVlPSInLiRsZWFmWydpZCddLiciJy4kc2VsZWN0ZWQuJz4nLiRp bmRlbnQuYWRkc2xhc2hlcygkbGVhZlsndGl0bGUnXSkuJzwvb3B0aW9uPic7DQoJfQ0KCSRv dXRbXSA9ICc8L3NlbGVjdD4nOw0KCXJldHVybiBqb2luKCcnLCRvdXQpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIENhbGxlZCB3aGVuZXZlciBvbmUgb2YgdGhl IDQgbWFpbiB0YWJzIGFyZSB1c2VkIG9uIHRoZSBhZG1pbiBzaWRlLiBJbnNlcnRzIHRoZSBp bnB1dCBtZXRob2QgaWYgcmVxdWlyZWQNCmZ1bmN0aW9uIHNtZF90YWdzX2xvYWRsaXN0KCRl dmVudCwgJHN0ZXApIHsNCglpZiAoc21kX3RhZ3NfdGFibGVfZXhpc3QoKSkgew0KCQkkY3Ry bHMgPSBzbWRfdGFnc19wcmVmX2dldChhcnJheSgnc21kX3RhZ19wX2VuYWJsZScsICdzbWRf dGFnX3BfaW5wdXQnLCAnc21kX3RhZ19wX3NpemUnLCAnc21kX3RhZ19wX3F0YWcnLCAnc21k X3RhZ19wX3F0cGF0aCcsICdzbWRfdGFnX3BfcXRzdHlsJywgJ3NtZF90YWdfcF9saW5rY2F0 JyksIDEpOw0KCQkkb25vZmYgPSBzbWRfdGFnc19wcmVmX2V4cGxvZGUoJGN0cmxzWydzbWRf dGFnX3BfZW5hYmxlJ11bJ3ZhbCddKTsNCgkJJGlwdHlwID0gJGN0cmxzWydzbWRfdGFnX3Bf aW5wdXQnXVsndmFsJ107DQoJCSRzZWxzeiA9ICRjdHJsc1snc21kX3RhZ19wX3NpemUnXVsn dmFsJ107DQoJCSRxdWljayA9ICRjdHJsc1snc21kX3RhZ19wX3F0YWcnXVsndmFsJ107DQoJ CSRqc2RpciA9ICRjdHJsc1snc21kX3RhZ19wX3F0cGF0aCddWyd2YWwnXTsNCgkJJGNzZGly ID0gJGN0cmxzWydzbWRfdGFnX3BfcXRzdHlsJ11bJ3ZhbCddOw0KCQkkY2xpbmsgPSAkY3Ry bHNbJ3NtZF90YWdfcF9saW5rY2F0J11bJ3ZhbCddOw0KCQkkanN0YWlsID0gKCRqc2Rpcikg PyAnLycgOiAnJzsNCgkJJGNzdGFpbCA9ICgkY3NkaXIpID8gJy8nIDogJyc7DQoJCSRhZGRJ dCA9IGZhbHNlOw0KDQoJCSRpdGVtSUQgPSBzbWRfZ2V0SUQoKTsNCgkJJGVkdEJ0biA9IGhh c19wcml2cygnc21kX3RhZ3MnKSA/ICcgWycuZUxpbmsoJ3NtZF90YWdzJywgJ3NtZF90YWdz X21hbmFnZScsICdzbWRfdGFnX3R5cGUnLCAkZXZlbnQsIGdUeHQoJ2VkaXQnKSkuJ10gJyA6 ICcnOw0KCQkkdGFndG9wID0gJzxkaXYgY2xhc3M9InNtZF90b3AiPicuc21kX3RhZ3NfZ1R4 dCgndGl0bGUnKS4kZWR0QnRuLic8L2Rpdj4nOw0KCQkkc2VsaXN0ID0gJzxkaXYgaWQ9InNt ZF90YWdzIiBuYW1lPSJzbWRfdGFnc19ieWxpc3QiIGNsYXNzPSJzbWRfdGFnaXAiPjwvZGl2 Pic7DQoJCSRzZWxoaWQgPSAnPGRpdiBpZD0ic21kX3RhZ3MiIG5hbWU9InNtZF90YWdzX2J5 bGlzdCIgY2xhc3M9InNtZF9oaWRlIj48L2Rpdj4nOw0KCQlzd2l0Y2ggKCRpcHR5cCkgew0K CQkJY2FzZSAwOg0KCQkJCSRpcG1ldGggPSAkc2VsaXN0Ow0KCQkJCWJyZWFrOw0KCQkJY2Fz ZSAxOg0KCQkJCSRpcG1ldGggPSAnPGRpdiBuYW1lPSJzbWRfdGFnc19ieWxpbmsiIGlkPSJz bWRfdGFnc19ieWxpbmsiIGNsYXNzPSJzbWRfdGFnaXAiPjwvZGl2PicuJHNlbGhpZDsNCgkJ CQlicmVhazsNCgkJCWNhc2UgMjoNCgkJCWNhc2UgMzoNCgkJCQkkaXBtZXRoID0gJzx0ZXh0 YXJlYSBuYW1lPSJzbWRfdGFnc19ieXRleHQiIHJvd3M9IicuJHNlbHN6LiciIGNsYXNzPSJz bWRfdGFnaXAiPjwvdGV4dGFyZWE+Jy4kc2VsaGlkOw0KCQkJCWJyZWFrOw0KCQl9DQoNCgkJ c3dpdGNoICgkZXZlbnQpIHsNCgkJCWNhc2UgImFydGljbGUiOg0KCQkJCSRhZGRJdCA9ICgk b25vZmZbZ1R4dCgndGFiX2xpc3QnKV0gPT0gMSkgPyB0cnVlIDogZmFsc2U7DQoJCQkJaWYg KCRhZGRJdCkgew0KCQkJCQlleHRyYWN0KGdwc2EoYXJyYXkoJ3ZpZXcnLCdmcm9tX3ZpZXcn KSkpOw0KCQkJCQkkdmlldyA9ICgkdmlldykgPyAkdmlldyA6ICJ0ZXh0IjsNCgkJCQkJJGdy YWJjYXRzID0gJ2pRdWVyeSgiI2NhdGVnb3J5LTEgb3B0aW9uOnNlbGVjdGVkLCAjY2F0ZWdv cnktMiBvcHRpb246c2VsZWN0ZWQiKSc7DQoJCQkJCSRqc0VsZW0gPSAnalF1ZXJ5KCIjY2F0 ZWdvcnktMiIpJzsNCgkJCQkJJHRyaWdnZXIgPSAnalF1ZXJ5KCIjY2F0ZWdvcnktMSwgI2Nh dGVnb3J5LTIiKSc7DQoJCQkJCWlmICgkdmlldyAhPSAndGV4dCcpIHsNCgkJCQkJCSR0YWd0 b3AgPSAkaXBtZXRoID0gJyc7DQoJCQkJCX0NCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNl ICJpbWFnZSI6DQoJCQkJaWYgKCRzdGVwID09ICJpbWFnZV9lZGl0Iikgew0KCQkJCQkkYWRk SXQgPSAoJG9ub2ZmW2dUeHQoJ3RhYl9pbWFnZScpXSA9PSAxKSA/IHRydWUgOiBmYWxzZTsN CgkJCQkJaWYgKCRhZGRJdCkgew0KCQkJCQkJJGdyYWJjYXRzID0gJ2pRdWVyeSgiI2ltYWdl LWNhdGVnb3J5IG9wdGlvbjpzZWxlY3RlZCIpJzsNCgkJCQkJCSRqc0VsZW0gPSAkdHJpZ2dl ciA9ICJqUXVlcnkoJyNpbWFnZS1jYXRlZ29yeScpIjsNCgkJCQkJfQ0KCQkJCX0NCgkJCQli cmVhazsNCgkJCWNhc2UgImZpbGUiOg0KCQkJCWlmICgkc3RlcCA9PSAiZmlsZV9lZGl0Iikg ew0KCQkJCQkkYWRkSXQgPSAoJG9ub2ZmW2dUeHQoJ3RhYl9maWxlJyldID09IDEpID8gdHJ1 ZSA6IGZhbHNlOw0KCQkJCQlpZiAoJGFkZEl0KSB7DQoJCQkJCQkkZ3JhYmNhdHMgPSAnalF1 ZXJ5KCJzZWxlY3RbbmFtZT1cJ2NhdGVnb3J5XCddIG9wdGlvbjpzZWxlY3RlZCIpJzsNCgkJ CQkJCSRqc0VsZW0gPSAkdHJpZ2dlciA9ICdqUXVlcnkoInNlbGVjdFtuYW1lPVwnY2F0ZWdv cnlcJ10iKSc7DQoJCQkJCX0NCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICJsaW5rIjoN CgkJCQkkYWRkSXQgPSAoJG9ub2ZmW2dUeHQoJ3RhYl9saW5rJyldID09IDEpID8gdHJ1ZSA6 IGZhbHNlOw0KCQkJCWlmICgkYWRkSXQpIHsNCgkJCQkJJHRhZ3RvcCA9ICcnOw0KCQkJCQkk aXBtZXRoID0gdHIoZkxhYmVsQ2VsbChzbWRfdGFnc19nVHh0KCd0aXRsZScpLCAnJywgJ3Nt ZF90YWdzJykgLiB0ZGEoJGVkdEJ0bi5ici4kaXBtZXRoKSk7DQoJCQkJCSRncmFiY2F0cyA9 ICdqUXVlcnkoIiNsaW5rLWNhdGVnb3J5IG9wdGlvbjpzZWxlY3RlZCIpJzsNCgkJCQkJJGpz RWxlbSA9ICR0cmlnZ2VyID0gImpRdWVyeSgnI2xpbmstY2F0ZWdvcnknKS5wYXJlbnQoKSI7 DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQl9DQoNCgkJLy8gQWRkIHRoZSBkcm9wZG93biBhbmQg anMgdG9nZ2xlL2NsZWFyIG9wdGlvbnMgaWYgcmVxdWlyZWQNCgkJaWYgKCRhZGRJdCkgew0K CQkJJHFzID0gYXJyYXkoDQoJCQkJImV2ZW50IiA9PiAic21kX3RhZ3NfdXNlcnMiLA0KCQkJ KTsNCg0KCQkJJHFzVmFycyA9ICJpbmRleC5waHAiLmpvaW5fcXMoJHFzKTsNCg0KCQkJaWYg KCRxdWljayA+IDApIHsNCgkJCQllY2hvIDw8PEVPSlMNCjxzY3JpcHQgdHlwZT0idGV4dC9q YXZhc2NyaXB0IiBzcmM9InskanNkaXJ9eyRqc3RhaWx9anF1ZXJ5LmF1dG9jb21wbGV0ZS5w YWNrLmpzIj48L3NjcmlwdD4NCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9j c3MiIGhyZWY9InskY3NkaXJ9eyRjc3RhaWx9anF1ZXJ5LmF1dG9jb21wbGV0ZS5jc3MiPjwv c2NyaXB0Pg0KDQpFT0pTOw0KCQkJfQ0KCQkJZWNobyA8PDxFT0pTDQo8c2NyaXB0IHR5cGU9 InRleHQvamF2YXNjcmlwdCI+DQpqUXVlcnkoZnVuY3Rpb24oKSB7DQoJeyRqc0VsZW19LnBh cmVudCgpLmFmdGVyKCd7JHRhZ3RvcH17JGlwbWV0aH0nKTsNCg0KCWZ1bmN0aW9uIHNtZF90 YWdMaXN0KHR5cCkgew0KCQl2YXIgZ3JhYmNhdHMgPSBbXTsNCgkJeyRncmFiY2F0c30uZWFj aChmdW5jdGlvbigpIHsNCgkJCWlmIChqUXVlcnkodGhpcykudmFsKCkgIT0gJycpIHsNCgkJ CSAgIGdyYWJjYXRzLnB1c2goalF1ZXJ5KHRoaXMpLnZhbCgpKTsNCgkJCX0NCgkJfSk7DQoJ CWdyYWJjYXRzID0gZ3JhYmNhdHMuam9pbigiLCIpOw0KDQoJCWpRdWVyeS5wb3N0KCd7JHFz VmFyc30nLCB7IHN0ZXA6ICJzbWRfdGFnX3BhcmVudGxpc3QiLCBuYW1lOiAnc21kX3RhZ19w YXJlbnQnLCB0eXBlOiB0eXAsIGNhdDogZ3JhYmNhdHMsIGl0ZW1pZDogInskaXRlbUlEfSIg fSwNCgkJCWZ1bmN0aW9uKGRhdGEpIHsNCgkJCQlqUXVlcnkoIiNzbWRfdGFncyIpLmh0bWwo ZGF0YSk7DQoJCQkJalF1ZXJ5KCIjc21kX3RhZ3NfYnlsaW5rIikuZW1wdHkoKTsNCgkJCQl2 YXIgc21kX3RhZ3Bvb2wgPSBbXTsNCgkJCQl2YXIgc21kX3RhZ3NlbCA9IFtdOw0KCQkJCXZh ciBzbWRfdGFnbGlua3MgPSBbXTsNCgkJCQlqUXVlcnkoJyNzbWRfdGFncyBzZWxlY3Qgb3B0 aW9uJykuZWFjaChmdW5jdGlvbigpIHsNCgkJCQkJdmFyIGN1cnIgPSBqUXVlcnkodGhpcyk7 DQoJCQkJCXZhciB0eHQgPSBqUXVlcnkudHJpbShjdXJyLnRleHQoKSk7DQoJCQkJCXNtZF90 YWdwb29sLnB1c2godHh0KTsNCg0KCQkJCQlpZiAoalF1ZXJ5KCIjc21kX3RhZ3NfYnlsaW5r IikudGV4dCgpICE9ICIiKSB7DQoJCQkJCQlqUXVlcnkoIiNzbWRfdGFnc19ieWxpbmsiKS5h cHBlbmQoIiAmbWlkZG90OyAiKTsNCgkJCQkJfQ0KDQoJCQkJCWlmIChjdXJyLmF0dHIoInNl bGVjdGVkIikgPT0gdHJ1ZSkgew0KCQkJCQkJc21kX3RhZ3NlbC5wdXNoKHR4dCk7DQoJCQkJ CQlqUXVlcnkoIiNzbWRfdGFnc19ieWxpbmsiKS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJzbWRf c2VsIj4nK3R4dCsnPC9zcGFuPicpOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJalF1ZXJ5KCIj c21kX3RhZ3NfYnlsaW5rIikuYXBwZW5kKCc8c3Bhbj4nK3R4dCsnPC9zcGFuPicpOw0KCQkJ CQl9DQoJCQkJfSk7DQoNCgkJCQlqUXVlcnkoIiNzbWRfdGFnc19ieWxpbmsgc3BhbiIpLmNs aWNrKGZ1bmN0aW9uKCkgew0KCQkJCQlqUXVlcnkodGhpcykudG9nZ2xlQ2xhc3MoInNtZF9z ZWwiKTsNCgkJCQkJdmFyIGx0eHQgPSBqUXVlcnkodGhpcykudGV4dCgpOw0KCQkJCQlqUXVl cnkoIiNzbWRfdGFncyBzZWxlY3Qgb3B0aW9uIikuZWFjaChmdW5jdGlvbigpIHsNCgkJCQkJ CXZhciBjdXJyID0galF1ZXJ5KHRoaXMpOw0KCQkJCQkJaWYgKGpRdWVyeS50cmltKGN1cnIu dGV4dCgpKSA9PSBsdHh0KSB7DQoJCQkJCQkJdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVj dGVkOw0KCQkJCQkJfQ0KCQkJCQl9KTsNCgkJCQl9KTsNCgkJCQlqUXVlcnkoInRleHRhcmVh W25hbWU9J3NtZF90YWdzX2J5dGV4dCddIikudmFsKHNtZF90YWdzZWwuam9pbigiLCAiKSk7 DQoNCgkJCQlpZiAoeyRxdWlja30gPiAwKSB7DQoJCQkJCWpRdWVyeSgidGV4dGFyZWFbbmFt ZT0nc21kX3RhZ3NfYnl0ZXh0J10iKS5hdXRvY29tcGxldGUoc21kX3RhZ3Bvb2wsIHsNCgkJ CQkJCW11bHRpcGxlOiB0cnVlLA0KCQkJCQkJbXVzdE1hdGNoOiAoKCRxdWljaz09Mik/dHJ1 ZTpmYWxzZSksDQoJCQkJCQlhdXRvRmlsbDogdHJ1ZQ0KCQkJCQl9KTsNCgkJCQl9DQoJCQkJ alF1ZXJ5KCJ0ZXh0YXJlYVtuYW1lPSdzbWRfdGFnc19ieXRleHQnXSIpLmtleXVwKGZ1bmN0 aW9uKCkgew0KCQkJCQlzbWRfdGFnc1Jlc3luY1NlbGVjdCh7JHF1aWNrfSk7DQoJCQkJfSk7 DQoJCQkJalF1ZXJ5KCcjc21kX2NscicpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQkJCQlqUXVl cnkoJyNzbWRfdGFncyBzZWxlY3Qgb3B0aW9uJykuYXR0cigic2VsZWN0ZWQiLCAiIik7DQoJ CQkJfSk7DQoJCQkJalF1ZXJ5KCcjc21kX3RvZycpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQkJ CQlqUXVlcnkoJyNzbWRfdGFncyBzZWxlY3Qgb3B0aW9uJykuZWFjaChmdW5jdGlvbigpIHsN CgkJCQkJCXRoaXMuc2VsZWN0ZWQgPSAhdGhpcy5zZWxlY3RlZDsNCgkJCQkJfSk7DQoJCQkJ fSk7DQoJCQl9DQoJCSk7DQoJfQ0KDQoJc21kX3RhZ0xpc3QoJ3skZXZlbnR9Jyk7DQoJaWYg KHskY2xpbmt9KSB7DQoJCXskdHJpZ2dlcn0uY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQkJc21k X3RhZ0xpc3QoJ3skZXZlbnR9Jyk7DQoJCX0pOw0KCX0NCg0KCWZ1bmN0aW9uIHNtZF90YWdz UmVzeW5jU2VsZWN0KGx2bCkgew0KCQl2YXIgdGJUYWdzID0galF1ZXJ5KCJ0ZXh0YXJlYVtu YW1lPSdzbWRfdGFnc19ieXRleHQnXSIpLnZhbCgpLnNwbGl0KC8sXHMrPy8pOw0KCQlqUXVl cnkoIiNzbWRfdGFncyBzZWxlY3Qgb3B0aW9uIikuZWFjaChmdW5jdGlvbigpIHsNCgkJCXZh ciBjdXJyID0galF1ZXJ5KHRoaXMpOw0KCQkJaWYoalF1ZXJ5LmluQXJyYXkoalF1ZXJ5LnRy aW0oY3Vyci50ZXh0KCkpLCB0YlRhZ3MpID09IC0xKSB7DQoJCQkJY3Vyci5hdHRyKCJzZWxl Y3RlZCIsICIiKTsNCgkJCX0gZWxzZSB7DQoJCQkJY3Vyci5hdHRyKCJzZWxlY3RlZCIsIHRy dWUpOw0KCQkJfQ0KCQl9KTsNCgl9DQp9KTsNCjwvc2NyaXB0Pg0KPHN0eWxlIHR5cGU9InRl eHQvY3NzIj4NCi5zbWRfZmFrZWJ0biwNCiNzbWRfdGFnc19ieWxpbmsgc3BhbiB7DQoJY29s b3I6IzU1NTsNCgljdXJzb3I6cG9pbnRlcjsNCn0NCi5zbWRfdGFnaXAgew0KCW1hcmdpbjou NGVtIDAgLjhlbTsNCgltYXgtd2lkdGg6NDAwcHg7DQp9DQouc21kX2hpZGUgew0KCWRpc3Bs YXk6bm9uZTsNCn0NCi5zbWRfc2VsIHsNCglmb250LXdlaWdodDpib2xkOw0KCWNvbG9yOiMy MjIhaW1wb3J0YW50Ow0KfQ0KPC9zdHlsZT4NCkVPSlM7DQoJCX0NCgl9DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gVXBkYXRlIHRoZSB0YWdzIHVzZWQgdGFibGUg aWYgc29tZSB0YWdzIGhhdmUgYmVlbiBhZGRlZC9zYXZlZA0KZnVuY3Rpb24gc21kX3RhZ3Nf c2F2ZWxpc3QoJGV2ZW50LCAkc3RlcCkgew0KCWlmIChzbWRfdGFnc190YWJsZV9leGlzdCgp KSB7DQoJCSRjdHJscyA9IHNtZF90YWdzX3ByZWZfZ2V0KGFycmF5KCdzbWRfdGFnX3BfcXRh ZycsICdzbWRfdGFnX3BfaW5wdXQnLCAnc21kX3RhZ19wX2xpbmtjYXQnKSwgMSk7DQoJCSRx dWljayA9ICRjdHJsc1snc21kX3RhZ19wX3F0YWcnXVsndmFsJ107DQoJCSRpcHR5cCA9ICRj dHJsc1snc21kX3RhZ19wX2lucHV0J11bJ3ZhbCddOw0KCQkkY2xpbmsgPSAkY3RybHNbJ3Nt ZF90YWdfcF9saW5rY2F0J11bJ3ZhbCddOw0KDQoJCSRpdGVtSUQgPSBzbWRfZ2V0SUQoKTsN CgkJaWYgKCRpdGVtSUQpIHsNCgkJCSRzYXZlU3RlcHMgPSBhcnJheSgnaW1hZ2Vfc2F2ZScs J2ZpbGVfc2F2ZScsJ2xpbmtfc2F2ZScsJ2xpbmtfcG9zdCcpOw0KCQkJaWYgKHBzKCdzYXZl JykgfHwgaW5fYXJyYXkoJHN0ZXAsICRzYXZlU3RlcHMpKQ0KCQkJCXNhZmVfZGVsZXRlKFNN RF9UQUdVLCAnaXRlbV9pZD0iJy4kaXRlbUlELiciIEFORCB0eXBlPSInLiRldmVudC4nIicp Ow0KDQoJCQkkdmFscyA9IGFycmF5KCk7DQoJCQkkdGFncyA9IHBzKCdzbWRfdGFnX3BhcmVu dCcpID8gcHMoJ3NtZF90YWdfcGFyZW50JykgOiBhcnJheSgpOw0KCQkJZm9yZWFjaCgkdGFn cyBhcyAkdmFsKXsNCgkJCQlzYWZlX2luc2VydChTTURfVEFHVSwgJ3RhZ19pZCA9ICInLiR2 YWwuJyIsIGl0ZW1faWQ9IicuJGl0ZW1JRC4nIiwgdHlwZT0iJy4kZXZlbnQuJyInKTsNCgkJ CQkkdmFsc1tdID0gJHZhbDsNCgkJCX0NCgkJCSR0YWdzVGV4dCA9IHByZWdfc3BsaXQoIi8s XHMrPy8iLCBwcygnc21kX3RhZ3NfYnl0ZXh0JykpOw0KDQoJCQkvLyBJZiB3ZSdyZSBpbiBu b24tU1RSSUNUIG1vZGUgYW5kIHRoZXJlIGFyZSBhbnkgdHlwZWQgdGFncyB0aGF0IGFyZSBu b3QgaW4gdGhlIHNlbGVjdCBsaXN0LCBjaGVjayB0aGV5IGV4aXN0IGFuZCBtYWtlIGxpbmtz IHRvIHRoZW0NCgkJCWlmICgkcXVpY2sgPCAyKSB7DQoJCQkJJGFkZGVkID0gKCR2YWxzKSA/ IHNhZmVfY29sdW1uKCJ0aXRsZSIsIFNNRF9UQUcsICJpZCBJTiAoJyIuam9pbigiJywnIiwk dmFscykuIicpIEFORCB0eXBlPSckZXZlbnQnIikgOiBhcnJheSgpOw0KCQkJCSR0YWdzVGV4 dCA9IGFycmF5X2RpZmYoJHRhZ3NUZXh0LCAkYWRkZWQpOw0KDQoJCQkJLy8gT25seSBsb29w IG92ZXIgdGFncyB0aGF0IGRvbid0IGFwcGVhciB0byBiZSBhbHJlYWR5IGRlZmluZWQNCgkJ CQlmb3JlYWNoKCR0YWdzVGV4dCBhcyAkdGFnKSB7DQoJCQkJCWlmICgkdGFnID09ICIiKSBj b250aW51ZTsNCgkJCQkJJGV4aXN0cyA9IHNhZmVfZmllbGQoJ2lkJywgU01EX1RBRywgIm5h bWUgPSAnJHRhZycgQU5EIHR5cGUgPSAnJGV2ZW50JyIpOyAvLyAxc3QgY2hlY2sNCg0KCQkJ CQkvLyBUZXh0YXJlYSsgaW5wdXQgc3lzdGVtIGNhbiBhZGQgKGxpbmtlZCkgdGFncyB3aXRo IGltcHVuaXR5DQoJCQkJCWlmICgkaXB0eXAgPT0gMyAmJiAhJGV4aXN0cykgew0KCQkJCQkJ JHRhZ0JpdHMgPSBleHBsb2RlKCctLT4nLCAkdGFnKTsNCgkJCQkJCWlmIChjb3VudCgkdGFn Qml0cykgPT0gMikgew0KCQkJCQkJCSR0YWdwYXJlbnQgPSBzdHJ0b2xvd2VyKHNhbml0aXpl Rm9yVXJsKCR0YWdCaXRzWzBdKSk7DQoJCQkJCQkJJHRhZ3BhcmVudCA9IHNhZmVfZmllbGQo J25hbWUnLCBTTURfVEFHLCAibmFtZSA9ICckdGFncGFyZW50JyBBTkQgdHlwZSA9ICckZXZl bnQnIik7IC8vIENoZWNrIHBhcmVudCBleGlzdHMgZm9yIHRoaXMgdHlwZQ0KCQkJCQkJCSR0 YWdwYXJlbnQgPSAoJHRhZ3BhcmVudCA9PT0gZmFsc2UpID8gJ3Jvb3QnIDogJHRhZ3BhcmVu dDsNCgkJCQkJCQkkdGFnY2hpbGQgPSAkdGFnQml0c1sxXTsNCgkJCQkJCX0gZWxzZSB7DQoJ CQkJCQkJJHRhZ3BhcmVudCA9ICdyb290JzsNCgkJCQkJCQkkdGFnY2hpbGQgPSAkdGFnQml0 c1swXTsNCgkJCQkJCX0NCgkJCQkJCSRzYW5pdGFnID0gc3RydG9sb3dlcihzYW5pdGl6ZUZv clVybCgkdGFnY2hpbGQpKTsNCgkJCQkJCSRhbHJlYWR5ID0gc2FmZV9maWVsZCgnaWQnLCBT TURfVEFHLCAibmFtZSA9ICckc2FuaXRhZycgQU5EIHR5cGUgPSAnJGV2ZW50JyIpOyAvLyBD aGVjayBhZ2FpbiBiZWNhdXNlIHBhcmVudC0tPmNoaWxkIHdpbGwgZmFpbCAxc3QgY2hlY2sN CgkJCQkJCWlmICgkYWxyZWFkeSA9PT0gZmFsc2UpIHsNCgkJCQkJCQkkZXhpc3RzID0gc2Fm ZV9pbnNlcnQoU01EX1RBRywgIm5hbWU9JyIuJHNhbml0YWcuIicsIHRpdGxlPSckdGFnY2hp bGQnLCBwYXJlbnQ9JyR0YWdwYXJlbnQnLCB0eXBlPSckZXZlbnQnIik7DQoJCQkJCQl9DQoJ CQkJCQkkY2F0ZmllbGQgPSAoJGV2ZW50PT0iYXJ0aWNsZSIpID8gZ3BzKCdjYXRlZ29yeTEn KSA6IGdwcygnY2F0ZWdvcnknKTsNCgkJCQkJCWlmICgkY2xpbmsgJiYgJGNhdGZpZWxkICYm ICRleGlzdHMpIHsNCgkJCQkJCQkvLyBBc3NpZ24gbmV3IHRhZyB0byBjdXJyZW50IGNhdGVn b3J5IChjYXQxIGZvciBhcnRpY2xlcykNCgkJCQkJCQkkY2F0aWQgPSBzYWZlX2luc2VydChT TURfVEFHQywidGFnX2lkPSckZXhpc3RzJywgY2F0X2lkPShTRUxFQ1QgaWQgRlJPTSAiLlBG WC4idHhwX2NhdGVnb3J5IFdIRVJFIG5hbWU9JyRjYXRmaWVsZCcgQU5EIHR5cGU9JyRldmVu dCcpIik7DQoJCQkJCQl9DQoJCQkJCQlyZWJ1aWxkX3RyZWVfZnVsbCgkZXZlbnQsIFNNRF9U QUcpOw0KCQkJCQl9DQoJCQkJCWlmICgkZXhpc3RzKSB7DQoJCQkJCQlzYWZlX2luc2VydChT TURfVEFHVSwgJ3RhZ19pZCA9ICInLiRleGlzdHMuJyIsIGl0ZW1faWQ9IicuJGl0ZW1JRC4n IiwgdHlwZT0iJy4kZXZlbnQuJyInKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0N Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBIYW5kbGUgY2hhbmdlcyB0 byB0aGUgdGFncyB0YWJsZSBkdXJpbmcgbXVsdGktaXRlbSBlZGl0cw0KZnVuY3Rpb24gc21k X3RhZ3NfbXVsdGlfZWRpdCgkZXZlbnQsICRzdGVwKSB7DQoJLy8gSW4gVFhQIDQuMC42IHRo ZSBvbmx5IHRhYnMgdG8gYWxsb3cgbXVsdGktZWRpdHMgYXJlIHRoZSBBcnRpY2xlIChsaXN0 KSBhbmQgTGluayB0YWJzLiBDaGVhdCBmb3Igbm93DQoJaWYgKHNtZF90YWdzX3RhYmxlX2V4 aXN0KCkpIHsNCgkJc3dpdGNoICgkZXZlbnQpIHsNCgkJCWNhc2UgImxpc3QiOg0KCQkJY2Fz ZSAibGluayI6DQoJCQkJJG1ldGhvZCA9IHBzKCdlZGl0X21ldGhvZCcpOw0KCQkJCSRzZWxl Y3RlZCA9IHBzKCdzZWxlY3RlZCcpOw0KCQkJCWJyZWFrOw0KCQkJZGVmYXVsdDoNCgkJCQkk bWV0aG9kID0gImRlbGV0ZSI7DQoJCQkJJHNlbGVjdGVkID0gYXJyYXkocHMoJ2lkJykpOw0K CQkJCWJyZWFrOw0KCQl9DQoNCgkJLy8gJ2xpc3QnIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQg ZXF1YXRlcyB0byBhcnRpY2xlcw0KCQkkdHlwZSA9ICgkZXZlbnQgPT0gImxpc3QiKSA/ICJh cnRpY2xlIiA6ICRldmVudDsNCg0KCQlpZiAoJHNlbGVjdGVkKSB7DQoJCQlzd2l0Y2ggKCRt ZXRob2QpIHsNCgkJCQljYXNlICJkZWxldGUiOg0KCQkJCQkkaWRzID0gYXJyYXkoKTsNCgkJ CQkJZm9yZWFjaCAoJHNlbGVjdGVkIGFzICRpZCkgew0KCQkJCQkJJGlkID0gYXNzZXJ0X2lu dCgkaWQpOw0KCQkJCQkJaWYgKHNhZmVfZGVsZXRlKFNNRF9UQUdVLCAnaXRlbV9pZCA9ICcu JGlkLicgQU5EIHR5cGU9IicuJHR5cGUuJyInKSkgew0KCQkJCQkJCSRpZHNbXSA9ICRpZDsN CgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQlyZXR1cm4gam9pbignLCAnLCAkaWRzKTsNCgkJCQkJ YnJlYWs7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICcnOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQovLyBHcmFiIHRoZSBjdXJyZW50IGFydGljbGUvaW1hZ2UvZmls ZS9saW5rIElEDQpmdW5jdGlvbiBzbWRfZ2V0SUQoKSB7DQoJaWYoIWVtcHR5KCRHTE9CQUxT WydJRCddKSkgeyAvLyBuZXdseS1zYXZlZCBpdGVtDQoJCSRpdGVtSUQgPSBpbnR2YWwoJEdM T0JBTFNbJ0lEJ10pOw0KCX0gZWxzZSB7DQoJCSRpdGVtSUQgPSAoZ3BzKCdJRCcpKSA/IGdw cygnSUQnKSA6IGdwcygnaWQnKTsNCgl9DQoJcmV0dXJuICRpdGVtSUQ7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RhZ3NfdGFibGVfZXhpc3Qo JGFsbD0nJykgew0KCWlmICgkYWxsKSB7DQoJCSR0YmxzID0gYXJyYXkoU01EX1RBRyA9PiA3 LCBTTURfVEFHQyA9PiAyLCBTTURfVEFHVSA9PiAzKTsNCgkJJG91dCA9IGNvdW50KCR0Ymxz KTsNCgkJZm9yZWFjaCAoJHRibHMgYXMgJHRibCA9PiAkY29scykgew0KCQkJaWYgKGdwcygn ZGVidWcnKSkgew0KCQkJCWVjaG8gIisrIFRBQkxFICIuJHRibC4iIEhBUyAiLmNvdW50KEBz YWZlX3Nob3coJ2NvbHVtbnMnLCAkdGJsKSkuIiBDT0xVTU5TOyBSRVFVSVJFUyAiLiRjb2xz LiIgKysiLmJyOw0KCQkJfQ0KCQkJaWYgKGNvdW50KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCAk dGJsKSkgPT0gJGNvbHMpIHsNCgkJCQkkb3V0LS07DQoJCQl9DQoJCX0NCgkJcmV0dXJuICgk b3V0PT09MCkgPyAxIDogMDsNCgl9IGVsc2Ugew0KCQlpZiAoZ3BzKCdkZWJ1ZycpKSB7DQoJ CQllY2hvICIrKyBUQUJMRSAiLlNNRF9UQUcuIiBIQVMgIi5jb3VudChAc2FmZV9zaG93KCdj b2x1bW5zJywgU01EX1RBRykpLiIgQ09MVU1OUzsiOw0KCQl9DQoJCXJldHVybihAc2FmZV9z aG93KCdjb2x1bW5zJywgU01EX1RBRykpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQovLyBBZGQgdGFnIHRhYmxlcyBpZiBub3QgYWxyZWFkeSBpbnN0YWxsZWQN CmZ1bmN0aW9uIHNtZF90YWdzX3RhYmxlX2luc3RhbGwoJHNob3dwYW5lPScxJykgew0KCSR2 ZXJzaW9uID0gbXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCk7DQoJJEdMT0JBTFNbJ3R4cF9lcnJf Y291bnQnXSA9IDA7DQoJaWYgKCR2ZXJzaW9uIDwgIjQuMS4yIikgew0KCQkkR0xPQkFMU1sn dHhwX2Vycl9jb3VudCddKys7DQoJCXRyaWdnZXJfZXJyb3IoInNtZF90YWdzIHJlcXVpcmVz IE15U1FMIHY0LjEuMiBvciBncmVhdGVyLiIpOw0KCX0gZWxzZSB7DQoJCSRyZXQgPSAnJzsN CgkJJHNxbCA9IGFycmF5KCk7DQoJCSRzcWxbXSA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVY SVNUUyBgIi5QRlguU01EX1RBRy4iYCAoDQoJCQlgaWRgIGludCg2KSBOT1QgTlVMTCBhdXRv X2luY3JlbWVudCwNCgkJCWBuYW1lYCB2YXJjaGFyKDY0KSBOT1QgTlVMTCBkZWZhdWx0ICcn LA0KCQkJYHR5cGVgIHZhcmNoYXIoNjQpIE5PVCBOVUxMIGRlZmF1bHQgJycsDQoJCQlgcGFy ZW50YCB2YXJjaGFyKDY0KSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0KCQkJYGxmdGAgaW50KDYp IE5PVCBOVUxMIGRlZmF1bHQgJzAnLA0KCQkJYHJndGAgaW50KDYpIE5PVCBOVUxMIGRlZmF1 bHQgJzAnLA0KCQkJYHRpdGxlYCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgZGVmYXVsdCAnJywN CgkJCVBSSU1BUlkgS0VZIChgaWRgKQ0KCQkpIEVOR0lORT1NeUlTQU0gUEFDS19LRVlTPTEg QVVUT19JTkNSRU1FTlQ9NSAiOw0KDQoJCWlmICghc21kX3RhZ3NfdGFibGVfZXhpc3QoKSkg ew0KCQkJJHNxbFtdID0gIklOU0VSVCBJTlRPIGAiLlBGWC5TTURfVEFHLiJgIFZBTFVFUyAo MSwgJ3Jvb3QnLCAnYXJ0aWNsZScsICcnLCAxLCAyLCAncm9vdCcpIjsNCgkJCSRzcWxbXSA9 ICJJTlNFUlQgSU5UTyBgIi5QRlguU01EX1RBRy4iYCBWQUxVRVMgKDIsICdyb290JywgJ2xp bmsnLCAnJywgMSwgMiwgJ3Jvb3QnKSI7DQoJCQkkc3FsW10gPSAiSU5TRVJUIElOVE8gYCIu UEZYLlNNRF9UQUcuImAgVkFMVUVTICgzLCAncm9vdCcsICdpbWFnZScsICcnLCAxLCAyLCAn cm9vdCcpIjsNCgkJCSRzcWxbXSA9ICJJTlNFUlQgSU5UTyBgIi5QRlguU01EX1RBRy4iYCBW QUxVRVMgKDQsICdyb290JywgJ2ZpbGUnLCAnJywgMSwgMiwgJ3Jvb3QnKSI7DQoJCX0NCg0K CQkkc3FsW10gPSAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCIuUEZYLlNNRF9UQUdD LiJgICgNCgkJCWB0YWdfaWRgIGludCg2KSBOT1QgTlVMTCBkZWZhdWx0ICcwJywNCgkJCWBj YXRfaWRgIGludCg2KSBOT1QgTlVMTCBkZWZhdWx0ICcwJywNCgkJCVBSSU1BUlkgS0VZIChg dGFnX2lkYCxgY2F0X2lkYCkNCgkJKSBFTkdJTkU9TXlJU0FNOyAiOw0KDQoJCSRzcWxbXSA9 ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgIi5QRlguU01EX1RBR1UuImAgKA0KCQkJ YGl0ZW1faWRgIGludCgxMSkgTk9UIE5VTEwgZGVmYXVsdCAnMCcsDQoJCQlgdGFnX2lkYCBp bnQoNikgTk9UIE5VTEwgZGVmYXVsdCAnMCcsDQoJCQlgdHlwZWAgdmFyY2hhcig2NCkgTk9U IE5VTEwgZGVmYXVsdCAnJywNCgkJCVBSSU1BUlkgS0VZIChgaXRlbV9pZGAsYHRhZ19pZGAp DQoJCSkgRU5HSU5FPU15SVNBTTsgIjsNCg0KCQlpZihncHMoJ2RlYnVnJykpIHsNCgkJCWRt cCgkc3FsKTsNCgkJfQ0KCQlmb3JlYWNoICgkc3FsIGFzICRxcnkpIHsNCgkJCSRyZXQgPSBz YWZlX3F1ZXJ5KCRxcnkpOw0KCQkJaWYgKCRyZXQ9PT1mYWxzZSkgew0KCQkJCSRHTE9CQUxT Wyd0eHBfZXJyX2NvdW50J10rKzsNCgkJCQllY2hvICI8Yj4iLiRHTE9CQUxTWyd0eHBfZXJy X2NvdW50J10uIi48L2I+ICIubXlzcWxfZXJyb3IoKS4iPGJyIC8+XG4iOw0KCQkJCWVjaG8g IjwhLS1cbiAkcXJ5IFxuLS0+XG4iOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJaWYgKCRHTE9CQUxT Wyd0eHBfZXJyX2NvdW50J10gPT0gMCkgew0KCQkkbWVzc2FnZSA9IHNtZF90YWdzX2dUeHQo J3RibF9pbnN0YWxsZWQnKTsNCgkJc21kX3RhZ3NfcHJlZnNfaW5zdGFsbCgkbWVzc2FnZSwg JHNob3dwYW5lKTsNCgl9IGVsc2Ugew0KCQlpZiAoJHNob3dwYW5lKSB7DQoJCQkkbWVzc2Fn ZSA9IHNtZF90YWdzX2dUeHQoJ3RibF9ub3RfaW5zdGFsbGVkJyk7DQoJCQlzbWRfdGFnc19w cmVmc19zaG93KCRtZXNzYWdlKTsNCgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQovLyBEcm9wIHRhZyB0YWJsZXMgaWYgaW4gZGF0YWJhc2UNCmZ1bmN0aW9u IHNtZF90YWdzX3RhYmxlX3JlbW92ZSgpIHsNCgkkcmV0ID0gJyc7DQoJJHNxbCA9IGFycmF5 KCk7DQoJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9IDA7DQoJaWYgKHNtZF90YWdzX3Rh YmxlX2V4aXN0KCkpIHsNCgkJJHNxbFtdID0gIkRST1AgVEFCTEUgSUYgRVhJU1RTICIgLlBG WC5TTURfVEFHLiAiOyAiOw0KCQkkc3FsW10gPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMgIiAu UEZYLlNNRF9UQUdVLiAiOyAiOw0KCQkkc3FsW10gPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMg IiAuUEZYLlNNRF9UQUdDLiAiOyAiOw0KCQlpZihncHMoJ2RlYnVnJykpIHsNCgkJCWRtcCgk c3FsKTsNCgkJfQ0KCQlmb3JlYWNoICgkc3FsIGFzICRxcnkpIHsNCgkJCSRyZXQgPSBzYWZl X3F1ZXJ5KCRxcnkpOw0KCQkJaWYgKCRyZXQ9PT1mYWxzZSkgew0KCQkJCSRHTE9CQUxTWyd0 eHBfZXJyX2NvdW50J10rKzsNCgkJCQllY2hvICI8Yj4iLiRHTE9CQUxTWyd0eHBfZXJyX2Nv dW50J10uIi48L2I+ICIubXlzcWxfZXJyb3IoKS4iPGJyIC8+XG4iOw0KCQkJCWVjaG8gIjwh LS1cbiAkcXJ5IFxuLS0+XG4iOw0KCQkJfQ0KCQl9DQoJfQ0KCWlmICgkR0xPQkFMU1sndHhw X2Vycl9jb3VudCddID09IDApIHsNCgkJJG1lc3NhZ2UgPSBzbWRfdGFnc19nVHh0KCd0Ymxf cmVtb3ZlZCcpOw0KCQlzbWRfdGFnc19wcmVmc19yZW1vdmUoJG1lc3NhZ2UpOw0KCX0gZWxz ZSB7DQoJCSRtZXNzYWdlID0gc21kX3RhZ3NfZ1R4dCgndGJsX25vdF9yZW1vdmVkJyk7DQoJ CXNtZF90YWdzX3ByZWZzX3Nob3coJG1lc3NhZ2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQovLyBBZGQgcGx1Z2luIHByZWZlcmVuY2VzIHRvIHByZWZzDQpm dW5jdGlvbiBzbWRfdGFnc19wcmVmc19pbnN0YWxsKCRtZXNzYWdlPScnLCAkc2hvd3BhbmU9 JzEnKSB7DQoJZ2xvYmFsICRzbWRfdGFnX3ByZWZzOw0KDQoJJGN0ciA9IHNhZmVfY291bnQo J3R4cF9wcmVmcycsICdldmVudD0ic21kX3RhZ3MiJykgKyAxOw0KCWZvcmVhY2ggKCRzbWRf dGFnX3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmICghZmV0Y2goJ25hbWUn LCd0eHBfcHJlZnMnLCduYW1lJywkcHJlZikpIHsNCgkJCSRpZCA9IHNhZmVfaW5zZXJ0KCd0 eHBfcHJlZnMnLCdwcmVmc19pZD0xLCBuYW1lPScuZG9RdW90ZShkb1NsYXNoKCRwcmVmKSku JywgdmFsPScuZG9RdW90ZShkb1NsYXNoKCRkZmx0KSkuJywgZXZlbnQ9InNtZF90YWdzIiwg cG9zaXRpb249IicuJGN0ci4nIicpOw0KCQkJJGN0cisrOw0KCQl9DQoJfQ0KCWlmICgkc2hv d3BhbmUpIHsNCgkJJG1lc3NhZ2UgLj0gc21kX3RhZ3NfZ1R4dCgncHJlZnNfaW5zdGFsbGVk Jyk7DQoJCXNtZF90YWdzX3ByZWZzX3Nob3coJG1lc3NhZ2UpOw0KCX0NCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBSZW1vdmUgcGx1Z2luIHByZWZlcmVuY2VzIGZy b20gcHJlZnMgdGFibGUuDQovLyBOb3RlOiBib3RoIHBhcnRzIG9mIHNtZF90YWdzX3ByZWZz IGFycmF5IGFyZSBpdGVyYXRlZCBvdmVyIHRvIHRpZHkgdXAgYW55IGxlZ2FjeSBzZXR0aW5n cw0KZnVuY3Rpb24gc21kX3RhZ3NfcHJlZnNfcmVtb3ZlKCRtZXNzYWdlPScnLCAkc2hvd3Bh bmU9JzEnKSB7DQoJZ2xvYmFsICRzbWRfdGFnX3ByZWZzOw0KDQoJZm9yZWFjaCAoYXJyYXlf bWVyZ2UoJHNtZF90YWdfcHJlZnNbMF0sJHNtZF90YWdfcHJlZnNbMV0pIGFzICRwcmVmID0+ ICRkZmx0KSB7DQoJCWlmIChmZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVm KSkgew0KCQkJJGlkID0gc2FmZV9kZWxldGUoJ3R4cF9wcmVmcycsJ25hbWU9Jy5kb1F1b3Rl KGRvU2xhc2goJHByZWYpKSk7DQoJCX0NCgl9DQoJaWYgKCRzaG93cGFuZSkgew0KCQkkbWVz c2FnZSAuPSBzbWRfdGFnc19nVHh0KCdwcmVmc19yZW1vdmVkJyk7DQoJCXNtZF90YWdzX3By ZWZzX3Nob3coJG1lc3NhZ2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQovLyBTYXZlcyBwbHVnaW4gcHJlZmVyZW5jZXMNCmZ1bmN0aW9uIHNtZF90YWdzX3By ZWZzX3VwZGF0ZSgkbWVzc2FnZSA9ICcnKSB7DQoJZ2xvYmFsICRzbWRfdGFnX3ByZWZzOw0K CSRwb3N0ID0gZG9TbGFzaChzdHJpcFBvc3QoKSk7DQoJZm9yZWFjaCAoJHNtZF90YWdfcHJl ZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGlzc2V0KCRwb3N0WyRwcmVmXSkp IHsNCgkJCXNhZmVfdXBkYXRlKCJ0eHBfcHJlZnMiLCAidmFsID0gJyIuJHBvc3RbJHByZWZd LiInIiwgIm5hbWUgPSAnIi5kb1NsYXNoKCRwcmVmKS4iJyBhbmQgcHJlZnNfaWQgPSAxIik7 DQoJCX0NCgl9DQoJJG1lc3NhZ2UgLj0gZ1R4dCgncHJlZmVyZW5jZXNfc2F2ZWQnKTsNCglz bWRfdGFnc19wcmVmc19zaG93KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQovLyBTcGxpdCBhIG11bHRpLWNoYXIgcHJlZmVyZW5jZSB2YWx1ZSBpbnRv IGFuIGFycmF5IG9mIGtleXMvdmFsdWVzLg0KLy8gTm90ZTogdmFsdWUgaXMgcGFzc2VkIGlu IGFuZCBub3QgcmVhZCBkaXJlY3RseSBmcm9tIHRoZSBwcmVmcyBhcnJheSBpbiB0aGlzIGZ1 bmN0aW9uIC0gaW50ZW50aW9uYWxseQ0KZnVuY3Rpb24gc21kX3RhZ3NfcHJlZl9leHBsb2Rl KCR2YWwpIHsNCgkkb3JkZXIgPSBhcnJheV92YWx1ZXMoYXJyYXkoZ1R4dCgndGFiX2xpc3Qn KSxnVHh0KCd0YWJfaW1hZ2UnKSxnVHh0KCd0YWJfZmlsZScpLGdUeHQoJ3RhYl9saW5rJykp KTsNCgkkb25vZmYgPSBhcnJheV92YWx1ZXMocHJlZ19zcGxpdCgnLy8nLCAkdmFsLCAtMSwg UFJFR19TUExJVF9OT19FTVBUWSkpOw0KCSRvdXQgPSBhcnJheSgpOw0KCWZvcmVhY2goJG9y ZGVyIGFzICRrZXkxID0+ICR2YWx1ZTEpIHsNCgkJJG91dFsoc3RyaW5nKSR2YWx1ZTFdID0g JG9ub2ZmWyRrZXkxXTsNCgl9DQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KLy8gR2V0IHZhbHVlcyBmcm9tIHByZWZzIC0gcGFzcyBlaXRoZXIg YSBzaW5nbGUga2V5IG9yIGFuIGFycmF5Lg0KLy8gSWYgMm5kIGFyZyBpcyBzZXQgYW5kIHRo ZSBwcmVmIGRvZXNuJ3QgZXhpc3QsIHJlYWQgaXQgZnJvbSB0aGUgcGx1Z2luIGRlZmF1bHQN CmZ1bmN0aW9uIHNtZF90YWdzX3ByZWZfZ2V0KCRrZXlzLCAkZGZsdD0wKSB7DQoJZ2xvYmFs ICRzbWRfdGFnX3ByZWZzOw0KDQoJaWYgKCFpc19hcnJheSgka2V5cykpIHsNCgkJJGtleXMg PSBhcnJheSgka2V5cyk7DQoJfQ0KCSRwcmVma2V5cyA9IGRvUXVvdGUoaW1wbG9kZSgiJywn Iixkb1NsYXNoKCRrZXlzKSkpOw0KCSRycyA9IHNhZmVfcm93cygnbmFtZSx2YWwsaHRtbCcs J3R4cF9wcmVmcycsJ25hbWUgSU4gKCcuJHByZWZrZXlzLicpIE9SREVSIEJZIG5hbWUnKTsN CgkkcHJlZm91dCA9IGFycmF5KCk7DQoJZm9yZWFjaCgkcnMgYXMgJHByZWYpIHsNCgkJJHBy ZWZvdXRbJHByZWZbJ25hbWUnXV0gPSBhcnJheV9zbGljZSgkcHJlZiwxKTsNCgl9DQoJaWYg KCRkZmx0KSB7DQoJCWZvcmVhY2ggKCRrZXlzIGFzICRwcmVmKSB7DQoJCQlpZiAoIWlzc2V0 KCRwcmVmb3V0WyRwcmVmXSkpIHsNCgkJCQkkcHJlZm91dFskcHJlZl0gPSAkc21kX3RhZ19w cmVmc1swXVskcHJlZl07DQoJCQl9DQoJCX0NCgl9DQoJcmV0dXJuICRwcmVmb3V0Ow0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIENvbW1vbiBidXR0b25zIG9uIHRo ZSBhZG1pbiBwYW5lbA0KZnVuY3Rpb24gc21kX3RhZ3NfcHJlZnNfYnV0dG9ucygpIHsNCgkk cmV0ID0gYXJyYXkgKA0KCQknYnRuUHJlZnNTYXZlJyA9PiBmSW5wdXQoJ3N1Ym1pdCcsICdz dWJtaXQnLCBnVHh0KCdzYXZlJyksICdwdWJsaXNoJyksDQoJCSdidG5JbnN0YWxsVGJsJyA9 PiAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1zbWRfdGFncycuYS4nc3Rl cD1zbWRfdGFnc190YWJsZV9pbnN0YWxsIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklu cHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX3RhZ3NfZ1R4dCgndGJsX2luc3RhbGxfbGJs JyksICdzbWFsbGVyYm94JykuJzwvZm9ybT4nLA0KCQknYnRuUmVtb3ZlVGJsJyA9PiAnPGZv cm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1zbWRfdGFncycuYS4nc3RlcD1zbWRf dGFnc190YWJsZV9yZW1vdmUiIHN0eWxlPSJkaXNwbGF5OmlubGluZSIgb25zdWJtaXQ9InJl dHVybiB2ZXJpZnkoXCcnLmdUeHQoJ2FyZV95b3Vfc3VyZScpLidcJykiPicuZklucHV0KCdz dWJtaXQnLCAnc3VibWl0Jywgc21kX3RhZ3NfZ1R4dCgndGJsX3JlbW92ZV9sYmwnKSwgJ3Nt YWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5JbnN0YWxsJyA9PiAnPGZvcm0gbWV0aG9k PSJwb3N0IiBhY3Rpb249Ij9ldmVudD1zbWRfdGFncycuYS4nc3RlcD1zbWRfdGFnc19wcmVm c19pbnN0YWxsIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0KCdzdWJtaXQnLCAn c3VibWl0Jywgc21kX3RhZ3NfZ1R4dCgncHJlZl9pbnN0YWxsX2xibCcpLCAnc21hbGxlcmJv eCcpLic8L2Zvcm0+JywNCgkJJ2J0blJlbW92ZScgPT4gJzxmb3JtIG1ldGhvZD0icG9zdCIg YWN0aW9uPSI/ZXZlbnQ9c21kX3RhZ3MnLmEuJ3N0ZXA9c21kX3RhZ3NfcHJlZnNfcmVtb3Zl IiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywg c21kX3RhZ3NfZ1R4dCgncHJlZl9yZW1vdmVfbGJsJyksICdzbWFsbGVyYm94JykuJzwvZm9y bT4nLA0KCQknYnRuUHJlZnMnID0+ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2 ZW50PXNtZF90YWdzJy5hLidzdGVwPXNtZF90YWdzX3ByZWZzX3Nob3ciIHN0eWxlPSJkaXNw bGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfdGFnc19nVHh0 KCdwcmVmX3Nob3dfbGJsJyksICdzbWFsbGVyYm94JykuJzwvZm9ybT4nLA0KCQknYnRuTWFu YWdlJyA9PiAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1zbWRfdGFncycu YS4nc3RlcD1zbWRfdGFnc19tYW5hZ2UiIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+Jy5mSW5w dXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfdGFnc19nVHh0KCdtYW5hZ2VfbGJsJyksICdz bWFsbGVyYm94JykuJzwvZm9ybT4nLA0KCQknYnRuSGVscCcgPT4gJzxhIGhyZWY9Ij9ldmVu dD1wbHVnaW4nLmEuJ3N0ZXA9cGx1Z2luX2hlbHAnLmEuJ25hbWU9c21kX3RhZ3MiIHN0eWxl PSJkaXNwbGF5OmlubGluZSI+KCcuIGdUeHQoJ2hlbHAnKSAuJyk8L2E+JywNCgkJJ2J0bkNy ZWF0ZScgPT4gZklucHV0KCdzdWJtaXQnLCAnc21kX3RhZ19jcmVhdGUnLCBnVHh0KCdjcmVh dGUnKSwgJ3NtYWxsZXJib3gnLCAnJywgJ3NtZF90YWdzX3N0ZXA9dGhpcy5uYW1lO3NtZF9w cmVzdWIoKScpLA0KCQknYnRuU2F2ZScgPT4gZklucHV0KCdzdWJtaXQnLCAnc21kX3RhZ19z YXZlJywgZ1R4dCgnc2F2ZScpLCAnc21hbGxlcmJveCcsICcnLCAnc21kX3RhZ3Nfc3RlcD10 aGlzLm5hbWU7c21kX3ByZXN1YigpJyksDQoJCSdidG5EZWxldGUnID0+IGZJbnB1dCgnc3Vi bWl0JywgJ3NtZF90YWdfZGVsZXRlJywgJ8OXJywgJ3NtYWxsZXJib3gnLCAnJywgJ3NtZF90 YWdzX3N0ZXA9dGhpcy5uYW1lO3NtZF9wcmVzdWIoKScpLA0KCQknYnRuU3R5bGUnID0+ICcg c3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4IicsDQoJKTsNCglyZXR1cm4gJHJldDsNCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBBIHN0dWIgdGhhdCBjYW4gYmUg Y2FsbGVkIHdpdGhvdXQgYSAkbWVzc2FnZQ0KZnVuY3Rpb24gc21kX3RhZ3Nfc2V0dXAoJGV2 ZW50PScnLCAkc3RlcD0nJywgJG1lc3NhZ2U9JycpIHsNCgkJc21kX3RhZ3NfcHJlZnNfc2hv dygpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERpc3BsYXkgdGhl IHByZWZzIHBhbmVsDQpmdW5jdGlvbiBzbWRfdGFnc19wcmVmc19zaG93KCRtZXNzYWdlPScn KSB7DQoJZ2xvYmFsICRzbWRfdGFnX3ByZWZzOw0KDQoJcGFnZXRvcChzbWRfdGFnc19nVHh0 KCdwcmVmc190aXRsZScpLCRtZXNzYWdlKTsNCglleHRyYWN0KHNtZF90YWdzX3ByZWZzX2J1 dHRvbnMoKSk7DQoNCgkvLyBQcmVmcyBjaGVjaw0KCSRwcmVmc2V0ID0gc21kX3RhZ3NfcHJl Zl9nZXQoYXJyYXlfa2V5cygkc21kX3RhZ19wcmVmc1swXSkpOw0KCSRudW1SZXFQcmVmcyA9 IGNvdW50KCRzbWRfdGFnX3ByZWZzWzBdKTsNCgkkbnVtUHJlZnMgPSBjb3VudCgkcHJlZnNl dCk7DQoNCgllY2hvIDw8PEVPSlMNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4N CgkvLyBDb25jYXRlbmF0ZSBjaGVja2JveCBvcHRpb25zIGZvciBzdG9yYWdlDQoJZnVuY3Rp b24gc21kX3ByZXN1YigpIHsNCgkJdmFyIHNtZF9vdXQgPSAiIjsNCgkJalF1ZXJ5KCI6Y2hl Y2tib3giKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQkJc21kX291dCArPSAodGhpcy5jaGVja2Vk KSA/IDEgOiAwOw0KCQl9KTsNCgkJalF1ZXJ5KCIjc21kX3RhZ19wX2VuYWJsZSIpLnZhbChz bWRfb3V0KTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQo8L3NjcmlwdD4NCkVPSlM7DQoJZWNo byBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJaWYgKHNtZF90YWdzX3RhYmxlX2V4aXN0KDEpKSB7 DQoJCS8vIFRhYmxlcyBpbnN0YWxsZWQNCgkJaWYgKCRudW1QcmVmcyA9PSAkbnVtUmVxUHJl ZnMpIHsNCgkJCS8vIFByZWZzIGFsbCBpbnN0YWxsZWQNCgkJCWVjaG8gdHIodGRhKHN0cm9u ZyhzbWRfdGFnc19nVHh0KCdwcmVmc190aXRsZScpKS4nICcuJGJ0bkhlbHAsICcgY29sc3Bh bj0iNSInKSk7DQoJCQllY2hvIHRyKA0KCQkJCWZMYWJlbENlbGwoc21kX3RhZ3NfZ1R4dCgn Y29udHJvbCcpLic6JykNCgkJCQkuIHRkYSgkYnRuUmVtb3ZlLCAkYnRuU3R5bGUpDQoJCQkJ LiB0ZGEoJGJ0blJlbW92ZVRibCwgJGJ0blN0eWxlKQ0KCQkJCS4gdGRhKCRidG5NYW5hZ2Us ICRidG5TdHlsZSkNCgkJCSk7DQoJCQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlv bj0iP2V2ZW50PXNtZF90YWdzJy5hLidzdGVwPXNtZF90YWdzX3ByZWZzX3VwZGF0ZSIgb25z dWJtaXQ9InJldHVybiBzbWRfcHJlc3ViKCk7Ij4nOw0KCQkJJGN0ciA9IDE7DQoJCQlmb3Jl YWNoICgkcHJlZnNldCBhcyAkcG5hbSA9PiAkcGFycikgew0KCQkJCSRwdmFsID0gJHBhcnJb J3ZhbCddOw0KCQkJCSRvdXQgPSAoaXNzZXQoJHNtZF90YWdfcHJlZnNbMl1bJGN0cl0pKSA/ IHRyKHRkY3MoaGVkKCRzbWRfdGFnX3ByZWZzWzJdWyRjdHJdLCAyLCAnIGNsYXNzPSJwcmVm LWhlYWRpbmciJyksIDQpKSA6ICcnOw0KCQkJCSRsYWJlbCA9ICc8bGFiZWwgZm9yPSInLiRw bmFtLiciPicuc21kX3RhZ3NfZ1R4dCgkcG5hbSkuJzo8L2xhYmVsPic7DQoJCQkJJG91dCAu PSB0ZGEoJGxhYmVsLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgdmVydGljYWwtYWxp Z246IG1pZGRsZTsiJyk7DQoNCgkJCQlzd2l0Y2goJHBuYW0pIHsNCgkJCQkJY2FzZSAic21k X3RhZ19wX2VuYWJsZSI6DQoJCQkJCQkkb3B0aW9ucyA9IHNtZF90YWdzX3ByZWZfZXhwbG9k ZSgkcHZhbCk7DQoJCQkJCQkkb3V0IC49ICc8dGQgaWQ9InNtZF90YWdzX2VuYWJsZV9ob2xk ZXIiIGNvbHNwYW49IjMiPic7DQoJCQkJCQlmb3JlYWNoICgkb3B0aW9ucyBhcyAkb3B0ID0+ ICRvbm9mZikgew0KCQkJCQkJCSRvdXQgLj0gJzxsYWJlbD4nLiRvcHQuJzwvbGFiZWw+JyAu IGNoZWNrYm94KCJlbmFibGUiLiRvcHQsIDEsICRvbm9mZikgLiAnJm5ic3A7Jm5ic3A7JzsN CgkJCQkJCX0NCgkJCQkJCSRvdXQgLj0gJzwvdGQ+JzsNCgkJCQkJCSRvdXQgLj0gZklucHV0 KCdoaWRkZW4nLCAnc21kX3RhZ19wX2VuYWJsZScsIGltcGxvZGUoJG9wdGlvbnMpLCcnLCcn LCcnLCcnLCcnLCdzbWRfdGFnX3BfZW5hYmxlJyk7DQoJCQkJCQlicmVhazsNCgkJCQkJY2Fz ZSAic21kX3RhZ19wX3NpemUiOg0KCQkJCQljYXNlICJzbWRfdGFnX3RfY29scyI6DQoJCQkJ CWNhc2UgInNtZF90YWdfdF9oaWxpdGUiOg0KCQkJCQljYXNlICJzbWRfdGFnX3RfaG92ZXIi Og0KCQkJCQljYXNlICJzbWRfdGFnX3RfaW5kZW50IjoNCgkJCQkJY2FzZSAic21kX3RhZ191 X3BuYW0iOg0KCQkJCQljYXNlICJzbWRfdGFnX3VfcHR5cCI6DQoJCQkJCWNhc2UgInNtZF90 YWdfdV9zZWMiOg0KCQkJCQkJJG91dCAuPSB0YWcoZklucHV0KCd0ZXh0JywgJHBuYW0sICRw dmFsLCAnZWRpdCcsICcnLCAnJywgMTIsICcnLCAkcG5hbSksICd0ZCcsICcgY29sc3Bhbj0i MyInKTsNCgkJCQkJCWJyZWFrOw0KCQkJCQljYXNlICJzbWRfdGFnX3BfcXRwYXRoIjoNCgkJ CQkJY2FzZSAic21kX3RhZ19wX3F0c3R5bCI6DQoJCQkJCQkkb3V0IC49IHRhZyhmSW5wdXQo J3RleHQnLCAkcG5hbSwgJHB2YWwsICdlZGl0JywgJycsICcnLCAzMCwgJycsICRwbmFtKSwg J3RkJywgJyBjb2xzcGFuPSIzIicpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgInNtZF90 YWdfdF9hdXRvIjoNCgkJCQkJCSRvdXQgLj0gdGRjcyhvbm9mZlJhZGlvKCRwbmFtLCAkcHZh bCksMyk7DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAic21kX3RhZ190X2NvbHNvcmQiOg0K CQkJCQkJJG91dCAuPSB0ZGNzKHJhZGlvKCRwbmFtLDAsKCgkcHZhbD09MCk/MTowKSkuc21k X3RhZ3NfZ1R4dCgnYnlfY29sdW1uJykuIiAiIC4gcmFkaW8oJHBuYW0sMSwoKCRwdmFsPT0x KT8xOjApKS5zbWRfdGFnc19nVHh0KCdieV9yb3cnKS4iICIsMyk7DQoJCQkJCQlicmVhazsN CgkJCQkJY2FzZSAic21kX3RhZ190X2RlbHRyZWUiOg0KCQkJCQkJJG91dCAuPSB0ZGNzKHJh ZGlvKCRwbmFtLDAsKCgkcHZhbD09MCk/MTowKSkuc21kX3RhZ3NfZ1R4dCgnY2hpbGRyZW5f cHJvJykuIiAiIC4gcmFkaW8oJHBuYW0sMSwoKCRwdmFsPT0xKT8xOjApKS5zbWRfdGFnc19n VHh0KCdjaGlsZHJlbl9kZWwnKS4iICIsMyk7DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAi c21kX3RhZ190X2RlbHVzZWQiOg0KCQkJCQljYXNlICJzbWRfdGFnX3RfY291bnQiOg0KCQkJ CQljYXNlICJzbWRfdGFnX3BfbGlua2NhdCI6DQoJCQkJCQkkb3V0IC49IHRkY3MoeWVzbm9S YWRpbygkcG5hbSwgJHB2YWwpLDMpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgInNtZF90 YWdfcF9maXJzdCI6DQoJCQkJCQkkb3V0IC49IHRkY3MocmFkaW8oJHBuYW0sMCwoKCRwdmFs PT0wKT8xOjApKS5zbWRfdGFnc19nVHh0KCdwcmVmc19wYW5lJykuIiAiIC4gcmFkaW8oJHBu YW0sMSwoKCRwdmFsPT0xKT8xOjApKS5zbWRfdGFnc19nVHh0KCd0YWdzX3BhbmUnKS4iICIs Myk7DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAic21kX3RhZ19wX3F0YWciOg0KCQkJCQkJ JG91dCAuPSB0ZGNzKHJhZGlvKCRwbmFtLDAsKCgkcHZhbD09MCk/MTowKSkuZ1R4dCgnb2Zm JykuIiAiIC4gcmFkaW8oJHBuYW0sMSwoKCRwdmFsPT0xKT8xOjApKS5zbWRfdGFnc19nVHh0 KCdhY19zdGQnKS4iICIuIiAiIC4gcmFkaW8oJHBuYW0sMiwoKCRwdmFsPT0yKT8xOjApKS5z bWRfdGFnc19nVHh0KCdhY19zdHInKS4iICIsMyk7DQoJCQkJCQlicmVhazsNCgkJCQkJY2Fz ZSAic21kX3RhZ19wX2lucHV0IjoNCgkJCQkJCSRvdXQgLj0gdGRjcyhyYWRpbygkcG5hbSww LCgoJHB2YWw9PTApPzE6MCkpLnNtZF90YWdzX2dUeHQoJ3NlbF9saXN0JykuIiAiLiByYWRp bygkcG5hbSwxLCgoJHB2YWw9PTEpPzE6MCkpLnNtZF90YWdzX2dUeHQoJ3RleHRsaXN0Jyku IiAiLiByYWRpbygkcG5hbSwyLCgoJHB2YWw9PTIpPzE6MCkpLnNtZF90YWdzX2dUeHQoJ3Rl eHRib3gnKS4iICIuIHJhZGlvKCRwbmFtLDMsKCgkcHZhbD09Myk/MTowKSkuc21kX3RhZ3Nf Z1R4dCgndGV4dGJveHBsdXMnKS4iICIsMyk7DQoJCQkJCQlicmVhazsNCgkJCQl9DQoJCQkJ ZWNobyB0cigkb3V0KTsNCgkJCQkkY3RyKys7DQoJCQl9DQoJCQllY2hvIHRyKHRkYSgkYnRu UHJlZnNTYXZlLCAkYnRuU3R5bGUpKTsNCgkJCWVjaG8gJzwvZm9ybT4nOw0KCQl9IGVsc2Ug aWYgKCRudW1QcmVmcyA+IDAgJiYgJG51bVByZWZzIDwgJG51bVJlcVByZWZzKSB7DQoJCQkv LyBQcmVmcyBwb3NzaWJseSBjb3JydXB0LCBvciBwbHVnaW4gdXBkYXRlZA0KCQkJZWNobyB0 cih0ZGEoc3Ryb25nKHNtZF90YWdzX2dUeHQoJ3ByZWZzX3NvbWUnKSkuYnIuYnINCgkJCQkJ LnNtZF90YWdzX2dUeHQoJ3ByZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyDQoJCQkJCS5zbWRf dGFnc19nVHh0KCdwcmVmc19zb21lX29wdHMxJyksICcgY29sc3Bhbj0iMiInKQ0KCQkJKTsN CgkJCWVjaG8gdHIoDQoJCQkJdGRhKCRidG5SZW1vdmUsJGJ0blN0eWxlKQ0KCQkJCS4gdGRh KCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpDQoJCQkpOw0KCQl9IGVsc2Ugew0KCQkJLy8gUHJl ZnMgbm90IGluc3RhbGxlZA0KCQkJZWNobyB0cih0ZGEoc21kX3RhZ3NfZ1R4dCgncHJlZnNf bm90X2luc3RhbGxlZCcpLCAnIGNvbHNwYW49IjIiJykpOw0KCQkJZWNobyB0cih0ZGEoJGJ0 bkluc3RhbGwsICRidG5TdHlsZSkpOw0KCQl9DQoJfSBlbHNlIHsNCgkJLy8gVGFibGVzIG5v dCBpbnN0YWxsZWQNCgkJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF90YWdzX2dUeHQoJ3ByZWZz X3NvbWVfdGJsJykpLmJyLmJyDQoJCQkJLnNtZF90YWdzX2dUeHQoJ3ByZWZzX3NvbWVfZXhw bGFpbicpLmJyLmJyDQoJCQkJLnNtZF90YWdzX2dUeHQoJ3ByZWZzX3NvbWVfb3B0czInKSwg JyBjb2xzcGFuPSIyIicpDQoJCSk7DQoJCWVjaG8gdHIodGRhKCRidG5JbnN0YWxsVGJsLCAk YnRuU3R5bGUpKTsNCgl9DQoJZWNobyBlbmRUYWJsZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIE1hbmFnZSB0YWdzIGluIGEgc2ltaWxhciB3YXkgdG8gdGhl IGNhdGVnb3JpZXMgdGFiDQpmdW5jdGlvbiBzbWRfdGFnc19tYW5hZ2UoJG1lc3NhZ2U9Jycp IHsNCglnbG9iYWwgJHNtZF90YWdfcHJlZnM7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShh cnJheSgnc21kX3RhZ19uYW1lJywgJ3NtZF90YWdfdGl0bGUnLCAnc21kX3RhZ19wYXJlbnQn LCAnc21kX3RhZ19jYXQnLCAnc21kX3RhZ190eXBlJywgJ3NtZF90YWdfaWQnKSkpKTsNCglw YWdldG9wKHNtZF90YWdzX2dUeHQoJ21hbmFnZV9sYmwnKSwkbWVzc2FnZSk7DQoJZXh0cmFj dChzbWRfdGFnc19wcmVmc19idXR0b25zKCkpOw0KDQoJLy8gUHJlZnMgY2hlY2sNCgkkcHJl ZnNldCA9IHNtZF90YWdzX3ByZWZfZ2V0KGFycmF5X2tleXMoJHNtZF90YWdfcHJlZnNbMF0p KTsNCgkkbnVtUmVxUHJlZnMgPSBjb3VudCgkc21kX3RhZ19wcmVmc1swXSk7DQoJJG51bVBy ZWZzID0gY291bnQoJHByZWZzZXQpOw0KDQoJJHR5cGVzID0gYXJyYXkoDQoJCSdhcnRpY2xl JyA9PiB1Y2ZpcnN0KGd0eHQoJ2FydGljbGUnKSksDQoJCSdpbWFnZScgPT4gZ3R4dCgndGFn X2ltYWdlJyksDQoJCSdmaWxlJyA9PiBndHh0KCdmaWxlJyksDQoJCSdsaW5rJyA9PiBndHh0 KCd0YWdfbGluaycpLA0KCQkpOw0KDQoJLy8gTWFrZSB1cCB0aGUgcmFkaW8gYnV0dG9ucw0K CSRzbWRfdGFnX3R5cGUgPSAoIWVtcHR5KCRzbWRfdGFnX3R5cGUpKSA/ICRzbWRfdGFnX3R5 cGUgOiAnYXJ0aWNsZSc7DQoNCgkkcmFkaW9zID0gYXJyYXkoKTsNCglmb3JlYWNoICgkdHlw ZXMgYXMgJGtleSA9PiAkdmFsKSB7DQoJCSRpZCA9ICdzbWRfdGFnc190eXBlLScuJGtleTsN CgkJJHJhZGlvc1tdID0gbi50LnJhZGlvKCdzbWRfdGFnc190eXBlJywgJGtleSwgKCRzbWRf dGFnX3R5cGUgPT0gJGtleSkgPyAxIDogMCwgJGlkKS4NCgkJCQknPGxhYmVsIGZvcj0iJy4k aWQuJyI+Jy4kdmFsLic8L2xhYmVsPic7DQoJfQ0KCSRyYWRpb3MgPSBqb2luKHNwLnNwLCAk cmFkaW9zKS5uOw0KDQoJLy8gQ3JlYXRlIGFsbCB0aGUgbGlzdHMgYnV0IGhpZGUgdGhlbSB3 aXRoIENTUy4galF1ZXJ5IHRha2VzIG92ZXIgYW5kIHN3aXRjaGVzIGJldHdlZW4gdGhlbSBv biBkZW1hbmQNCglpZiAoc21kX3RhZ3NfdGFibGVfZXhpc3QoMSkgJiYgJG51bVByZWZzID09 ICRudW1SZXFQcmVmcykgew0KCQkkdGFnQ29scyA9ICgkcHJlZnNldFsnc21kX3RhZ190X2Nv bHMnXVsndmFsJ10gPiAwKSA/ICRwcmVmc2V0WydzbWRfdGFnX3RfY29scyddWyd2YWwnXSA6 IDE7DQoJCSRjb2xPcmRlciA9ICgkcHJlZnNldFsnc21kX3RhZ190X2NvbHNvcmQnXVsndmFs J10gPT0gMCkgPyAiYnljb2wiIDogImJ5cm93IjsNCgkJJGNvdW50cyA9ICRwcmVmc2V0Wydz bWRfdGFnX3RfY291bnQnXVsndmFsJ107DQoJCSRjbGluayA9ICRwcmVmc2V0WydzbWRfdGFn X3BfbGlua2NhdCddWyd2YWwnXTsNCg0KCQlmb3JlYWNoIChhcnJheV9rZXlzKCR0eXBlcykg YXMgJHR5cGUpIHsNCgkJCSRkaXZ0YWdpZCA9ICJzbWRfdGFnc19ncnBfIi4kdHlwZTsNCgkJ CSR0YWdsaXN0ID0gInRhZ3NfIi4kdHlwZTsNCgkJCSQkdGFnbGlzdCA9IHNtZF90YWdfbGlz dF9hZG0oDQoJCQkJYXJyYXkoDQoJCQkJCSJ0eXBlIiA9PiAkdHlwZSwNCgkJCQkJIndyYXB0 YWciID0+ICJ0YWJsZToiLiR0YWdDb2xzLiI6Y29sczoiLiRjb2xPcmRlciwNCgkJCQkJImNv dW50IiA9PiAkY291bnRzLA0KCQkJCQkiaW5kZW50IiA9PiAkcHJlZnNldFsnc21kX3RhZ190 X2luZGVudCddWyd2YWwnXQ0KCQkJCSkNCgkJCSk7DQoNCgkJCS8vVE9ETzogRmluZCBhIHdh eSB0byBhZGQgdGhlIGRpdnRhZ2lkIG9ubHkgd2hlbiBuZWVkZWQuIEF0IHRoZSBtb21lbnQg aXQgYXBwZWFycyB0d2ljZSBvbiB0aGUgcGFnZSAoaWxsZWdhbCBET00pDQoJCQkkdGFnb3V0 WyR0eXBlXSA9ICc8ZGl2IGlkPSInLiRkaXZ0YWdpZC4nIj4nLiQkdGFnbGlzdC4nPC9kaXY+ JzsNCgkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9oaWRkZW4iPicuJHRhZ291dFskdHlwZV0u JzwvZGl2Pic7DQoJCX0NCg0KCQkkcXMgPSBhcnJheSgNCgkJCSJldmVudCIgPT4gInNtZF90 YWdzIiwNCgkJKTsNCg0KDQoJCSRxc1ZhcnMgPSAiaW5kZXgucGhwIi5qb2luX3FzKCRxcyk7 DQoNCgkJZWNobyA8PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJ dmFyIHNtZF90YWdzX3N0ZXAgPSAnJzsNCg0KCS8vIFBhZ2UgaW5pdGlhbGlzYXRpb24NCglq UXVlcnkoZnVuY3Rpb24oKSB7DQoJCS8vIEluZGljYXRlIHBhcmVudCBsaXN0IGlzIGxvYWRp bmcNCgkJalF1ZXJ5KCIuc21kX3RhZ3Nfc2hvd3BhcnMiKS5hamF4U3RhcnQoZnVuY3Rpb24o KSB7DQoJCQlqUXVlcnkodGhpcykuZmFkZVRvKCJub3JtYWwiLCAwLjMzKTsNCgkJfSkuYWph eFN0b3AoZnVuY3Rpb24oKSB7DQoJCQlqUXVlcnkodGhpcykuZmFkZVRvKCJub3JtYWwiLCAx KTsNCgkJfSk7DQoNCgkJLy8gU3dpdGNoIGJldHdlZW4gdHlwZXMNCgkJalF1ZXJ5KCJpbnB1 dFtuYW1lPSdzbWRfdGFnc190eXBlJ10iKS5jaGFuZ2UoZnVuY3Rpb24gKCkgew0KCQkJdmFy IHNtZF9uZXdjb250ZW50ID0galF1ZXJ5KCIjc21kX3RhZ3NfZ3JwXyIralF1ZXJ5KHRoaXMp LnZhbCgpKS5odG1sKCk7DQoJCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdfaWQnXSIp LnZhbCgnJyk7IC8vIENoYW5naW5nIHR5cGUgZm9yY2VzIGFueSAnc2F2ZScgdG8gdHJpZ2dl ciB0aGUgJ2NyZWF0ZScgYmVoYXZpb3VyDQoJCQlqUXVlcnkoIi5zbWRfdGFnc19zaG93bGlz dCIpLmh0bWwoc21kX25ld2NvbnRlbnQpOw0KCQkJdmFyIG5hbSA9IGpRdWVyeSgiaW5wdXRb bmFtZT0nc21kX3RhZ19vbmFtZSddIikudmFsKCk7DQoJCQl2YXIgdGlkID0galF1ZXJ5KCJp bnB1dFtuYW1lPSdzbWRfdGFnX2lkJ10iKS52YWwoKTsNCgkJCXZhciB0eXAgPSBqUXVlcnko ImlucHV0W25hbWU9J3NtZF90YWdzX3R5cGUnXTpjaGVja2VkIikudmFsKCk7DQoJCQl2YXIg cGFyID0gJ3Jvb3QnOw0KCQkJdmFyIGNhdCA9ICcnOw0KDQoJCQlqUXVlcnkoIi5zbWRfdGFn c19zaG93bGlzdCB0ZCBzcGFuW25hbWU9J3NtZF90YWduYW0nXSIpLmVhY2goZnVuY3Rpb24o KSB7DQoJCQkJaWYgKGpRdWVyeSh0aGlzKS50ZXh0KCkgPT0gbmFtKSB7DQoJCQkJCWpRdWVy eSh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygnc21kX2N1cnJlbnQnKTsNCgkJCQkJcGFyID0g alF1ZXJ5KHRoaXMpLnNpYmxpbmdzKCI6ZXEoMikiKS50ZXh0KCk7DQoJCQkJCWNhdCA9IGpR dWVyeSh0aGlzKS5zaWJsaW5ncygiOmVxKDMpIikudGV4dCgpOw0KCQkJCQl0aWQgPSAodGlk ID09ICcnKSA/IGpRdWVyeSh0aGlzKS5zaWJsaW5ncygiOmVxKDApIikudGV4dCgpIDogdGlk Ow0KCQkJCX0gZWxzZSB7DQoJCQkJCWpRdWVyeSh0aGlzKS5wYXJlbnQoKS5yZW1vdmVDbGFz cygnc21kX2N1cnJlbnQnKTsNCgkJCQl9DQoJCQl9KTsNCg0KCQkJLy8gUmUtaW5zZXJ0IHRo ZSBJRCBpZiB0aGlzIG5hbWVkIGl0ZW0gZXhpc3RzIGluIHRoZSBuZXcgbGlzdA0KCQkJalF1 ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnX2lkJ10iKS52YWwodGlkKTsNCg0KCQkJLy8gVXBk YXRlIHRoZSBVSQ0KCQkJc21kX3BhcmVudEhhbmRsZXIobmFtLCB0eXAsIHRpZCwgcGFyKTsN CgkJCXNtZF9jYXRIYW5kbGVyKGNhdCwgdHlwKTsNCgkJCWpRdWVyeSgiLnNtZF90YWdzX2xp bmtjYXQgc2VsZWN0IG9wdGlvblt2YWx1ZT0nIitjYXQrIiddIikuYXR0cigic2VsZWN0ZWQi LCB0cnVlKTsNCgkJCXNtZF9hdXRvZm9jdXMoKTsNCgkJCXNtZF9jZWxsSGFuZGxlcigpOw0K CQkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc190eXBlJ10iKS5lYWNoKGZ1bmN0aW9u ICgpIHsNCgkJCQlpZiAoalF1ZXJ5KHRoaXMpLnZhbCgpID09IHR5cCkgew0KCQkJCQlqUXVl cnkodGhpcykubmV4dCgpLmFkZENsYXNzKCdzbWRfY3VycmVudCcpOw0KCQkJCX0gZWxzZSB7 DQoJCQkJCWpRdWVyeSh0aGlzKS5uZXh0KCkucmVtb3ZlQ2xhc3MoJ3NtZF9jdXJyZW50Jyk7 DQoJCQkJfQ0KCQkJfSk7DQoJCX0pOw0KDQoJCS8vIENhbGwgdGhlIG9uY2hhbmdlIGhhbmRs ZXIgZm9yIHRoZSBjdXJyZW50IHR5cGUNCgkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFn c190eXBlJ106Y2hlY2tlZCIpLmNoYW5nZSgpOw0KDQoJCS8vIEF1dG90YWcgLSBUT0RPOiBm b3JlaWduIGNoYXJhY3RlciBkdW1iZG93biBmb3IgVVJJDQoJCWlmICh7JHByZWZzZXRbJ3Nt ZF90YWdfdF9hdXRvJ11bJ3ZhbCddfSkgew0KCQkJc3BjUkUgPSAvXHMvZzsNCgkJCWJhZFJF ID0gL1teYS16QS1aMC05X1wtXS9nOw0KCQkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFn c19uZXd0aXRsZSddIikua2V5dXAoZnVuY3Rpb24oKSB7DQoJCQkJdGFnbmFtZSA9IGpRdWVy eSh0aGlzKS52YWwoKS5yZXBsYWNlKHNwY1JFLCAnLScpLnJlcGxhY2UoYmFkUkUsICcnKS50 b0xvd2VyQ2FzZSgpOw0KCQkJCWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ3NfbmV3bmFt ZSddIikudmFsKHRhZ25hbWUpOw0KCQkJfSk7DQoJCX0NCgkJLy8gQmluZCBFbnRlciBrZXkg dG8gY3JlYXRlDQoJCWpRdWVyeSgiaW5wdXRbbmFtZV49J3NtZF90YWcnXSIpLmtleXVwKGZ1 bmN0aW9uKGV2KSB7DQoJCQlpZiAoZXYua2V5Q29kZSA9PSAxMykgew0KCQkJCWpRdWVyeSgi aW5wdXRbbmFtZT0nc21kX3RhZ19jcmVhdGUnXSIpLmNsaWNrKCk7DQoJCQl9DQoJCX0pOw0K CX0pOw0KDQoJLy8gS2VlcCB0cmFjayBvZiB3aGljaCB0YWcgaGFzIGJlZW4gY2xpY2tlZCBz byBpdCBjYW4gYmUgZWRpdGVkL3VwZGF0ZWQNCglmdW5jdGlvbiBzbWRfY2VsbEhhbmRsZXIo KSB7DQoJCS8vIENlbGwgaGlnaGxpZ2h0cw0KCQlqUXVlcnkoIi5zbWRfdGFnc19zaG93bGlz dCB0ZCIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQlpZiAoalF1ZXJ5LnRyaW0oalF1ZXJ5KHRo aXMpLnRleHQoKSkgIT0gIiIpIHsNCgkJCQlqUXVlcnkodGhpcykuaG92ZXIoDQoJCQkJCWZ1 bmN0aW9uICgpIHsNCgkJCQkJCWpRdWVyeSh0aGlzKS5hZGRDbGFzcygnc21kX2hvdmVyJyk7 DQoJCQkJCX0sDQoJCQkJCWZ1bmN0aW9uICgpIHsNCgkJCQkJCWpRdWVyeSh0aGlzKS5yZW1v dmVDbGFzcygnc21kX2hvdmVyJyk7DQoJCQkJCX0NCgkJCQkpDQoJCQkJLmNsaWNrKGZ1bmN0 aW9uKCkgew0KCQkJCQl2YXIgbmFtID0galF1ZXJ5KHRoaXMpLmNoaWxkcmVuKCI6ZXEoMCki KS50ZXh0KCk7DQoJCQkJCXZhciB0aWQgPSBqUXVlcnkodGhpcykuY2hpbGRyZW4oIjplcSgx KSIpLnRleHQoKTsNCgkJCQkJdmFyIHR0bCA9IGpRdWVyeSh0aGlzKS5jaGlsZHJlbigiOmVx KDIpIikudGV4dCgpOw0KCQkJCQl2YXIgcGFyID0galF1ZXJ5KHRoaXMpLmNoaWxkcmVuKCI6 ZXEoMykiKS50ZXh0KCk7DQoJCQkJCXZhciBjYXQgPSBqUXVlcnkodGhpcykuY2hpbGRyZW4o IjplcSg0KSIpLnRleHQoKTsNCgkJCQkJdmFyIHR5cCA9IGpRdWVyeSgiaW5wdXRbbmFtZT0n c21kX3RhZ3NfdHlwZSddOmNoZWNrZWQiKS52YWwoKQ0KCQkJCQlqUXVlcnkoImlucHV0W25h bWU9J3NtZF90YWdfb25hbWUnXSIpLnZhbChuYW0pOw0KCQkJCQlqUXVlcnkoImlucHV0W25h bWU9J3NtZF90YWdzX25ld25hbWUnXSIpLnZhbChuYW0pOw0KCQkJCQlqUXVlcnkoImlucHV0 W25hbWU9J3NtZF90YWdfaWQnXSIpLnZhbCh0aWQpOw0KCQkJCQlqUXVlcnkoImlucHV0W25h bWU9J3NtZF90YWdzX25ld3RpdGxlJ10iKS52YWwodHRsKTsNCgkJCQkJalF1ZXJ5KCIuc21k X3RhZ3NfbGlua2NhdCBzZWxlY3Qgb3B0aW9uW3ZhbHVlPSciK2NhdCsiJ10iKS5hdHRyKCJz ZWxlY3RlZCIsIHRydWUpOw0KCQkJCQlzbWRfcGFyZW50SGFuZGxlcihuYW0sIHR5cCwgdGlk LCBwYXIpOw0KCQkJCQlqUXVlcnkoIi5zbWRfdGFnc19zaG93bGlzdCB0ZCIpLnJlbW92ZUNs YXNzKCdzbWRfY3VycmVudCcpOw0KCQkJCQlqUXVlcnkodGhpcykuYWRkQ2xhc3MoJ3NtZF9j dXJyZW50Jyk7DQoJCQkJCXNtZF9hdXRvZm9jdXMoKTsNCgkJCQl9KTsNCgkJCX0NCgkJfSk7 DQoJfQ0KDQoJLy8gQXNrIFRYUCBmb3IgdGhlIHBhcmVudCBkcm9wZG93biB3aXRob3V0IGNo aWxkIGVudHJpZXMNCglmdW5jdGlvbiBzbWRfcGFyZW50SGFuZGxlcihuYW0sIHR5cCwgdGlk LCBwYXIpIHsNCgkJalF1ZXJ5LnBvc3QoJ3skcXNWYXJzfScsIHsgc3RlcDogInNtZF90YWdf cGFyZW50bGlzdCIsIG5hbWU6IG5hbSwgdHlwZTogdHlwLCBpZDogdGlkIH0sDQoJCQlmdW5j dGlvbihkYXRhKSB7DQoJCQkJalF1ZXJ5KCIuc21kX3RhZ3Nfc2hvd3BhcnMiKS5odG1sKGRh dGEpOw0KCQkJCWlmIChwYXIgPT0gInJvb3QiIHx8IHBhciA9PSAiIikgew0KCQkJCQlqUXVl cnkoIi5zbWRfdGFnc19zaG93cGFycyBzZWxlY3Qgb3B0aW9uOmZpcnN0IikuYXR0cigic2Vs ZWN0ZWQiLCB0cnVlKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQlqUXVlcnkoIi5zbWRfdGFnc19z aG93cGFycyBzZWxlY3Qgb3B0aW9uW3ZhbHVlPSciK3BhcisiJ10iKS5hdHRyKCJzZWxlY3Rl ZCIsIHRydWUpOw0KCQkJCX0NCgkJCX0NCgkJKTsNCgl9DQoNCgkvLyBBc2sgVFhQIGZvciB0 aGUgY2F0ZWdvcnkgZHJvcGRvd24NCglmdW5jdGlvbiBzbWRfY2F0SGFuZGxlcihjYXQsIHR5 cCkgew0KCQlqUXVlcnkoIi5zbWRfdGFnc19saW5rY2F0IikuZmFkZVRvKCJub3JtYWwiLCAw LjMzKTsNCgkJalF1ZXJ5LnBvc3QoJ3skcXNWYXJzfScsIHsgc3RlcDogInNtZF90YWdfY2F0 bGlzdCIsIG5hbWU6IGNhdCwgdHlwZTogdHlwIH0sDQoNCg0KDQoNCg0KDQoJCQlmdW5jdGlv bihkYXRhKSB7DQoJCQkJalF1ZXJ5KCIuc21kX3RhZ3NfbGlua2NhdCIpLmh0bWwoZGF0YSk7 DQoJCQkJaWYgKGNhdCA9PSAicm9vdCIgfHwgY2F0ID09ICIiKSB7DQoJCQkJCWpRdWVyeSgi LnNtZF90YWdzX2xpbmtjYXQgc2VsZWN0IG9wdGlvbjpmaXJzdCIpLmF0dHIoInNlbGVjdGVk IiwgdHJ1ZSk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJalF1ZXJ5KCIuc21kX3RhZ3NfbGlua2Nh dCBzZWxlY3Qgb3B0aW9uW3ZhbHVlPSciK2NhdCsiJ10iKS5hdHRyKCJzZWxlY3RlZCIsIHRy dWUpOw0KCQkJCX0NCgkJCQlqUXVlcnkoIi5zbWRfdGFnc19saW5rY2F0IikuZmFkZVRvKCJu b3JtYWwiLCAxKTsNCgkJCX0NCgkJKTsNCgl9DQoNCglmdW5jdGlvbiBzbWRfYXV0b2ZvY3Vz KCkgew0KCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdzX25ld3RpdGxlJ10iKS5mb2N1 cygpLnNlbGVjdCgpOw0KCX0NCg0KCS8vIE1ha2Ugc3VyZSB3aGF0IGlzIGluIHRoZSBib3hl cyBpcyBQT1NUZWQgdmlhIHRoZSBoaWRkZW4gZm9ybQ0KCWZ1bmN0aW9uIHNtZF9wcmVzdWIo KSB7DQoJCWpRdWVyeSgiI3NtZF9wb3N0aXQgaW5wdXRbbmFtZT0nc3RlcCddIikudmFsKHNt ZF90YWdzX3N0ZXApOw0KCQlqUXVlcnkoIiNzbWRfcG9zdGl0IGlucHV0W25hbWU9J3NtZF90 YWdfbmFtZSddIikudmFsKGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ3NfbmV3bmFtZSdd IikudmFsKCkpOw0KCQlqUXVlcnkoIiNzbWRfcG9zdGl0IGlucHV0W25hbWU9J3NtZF90YWdf dGl0bGUnXSIpLnZhbChqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdzX25ld3RpdGxlJ10i KS52YWwoKSk7DQoJCWpRdWVyeSgiI3NtZF9wb3N0aXQgaW5wdXRbbmFtZT0nc21kX3RhZ190 eXBlJ10iKS52YWwoalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc190eXBlJ106Y2hlY2tl ZCIpLnZhbCgpKTsNCgkJalF1ZXJ5KCIjc21kX3Bvc3RpdCBpbnB1dFtuYW1lPSdzbWRfdGFn X3BhcmVudCddIikudmFsKGpRdWVyeSgiLnNtZF90YWdzX3Nob3dwYXJzIG9wdGlvbjpzZWxl Y3RlZCIpLnZhbCgpKTsNCgkJalF1ZXJ5KCIjc21kX3Bvc3RpdCBpbnB1dFtuYW1lPSdzbWRf dGFnX2NhdCddIikudmFsKGpRdWVyeSgiLnNtZF90YWdzX2xpbmtjYXQgb3B0aW9uOnNlbGVj dGVkIikudmFsKCkpOw0KCQlqUXVlcnkoIiNzbWRfcG9zdGl0Iikuc3VibWl0KCk7DQoJfQ0K PC9zY3JpcHQ+DQoNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQouc21kX2hpZGRlbiB7DQoJ ZGlzcGxheTpub25lOw0KfQ0KLnNtZF9ob3ZlciB7DQoJY3Vyc29yOnBvaW50ZXI7DQoJYmFj a2dyb3VuZDojeyRwcmVmc2V0WydzbWRfdGFnX3RfaG92ZXInXVsndmFsJ119Ow0KfQ0KLnNt ZF9jdXJyZW50IHsNCglmb250LXdlaWdodDpib2xkOw0KCWJhY2tncm91bmQ6I3skcHJlZnNl dFsnc21kX3RhZ190X2hpbGl0ZSddWyd2YWwnXX07DQp9DQouc21kX3RhZ3Nfc2hvd3BhcnMs DQouc21kX3RhZ3NfbGlua2NhdCB7DQoJd2lkdGg6MTJlbTsNCn0NCjwvc3R5bGU+DQpFT0pT Ow0KDQoJfQ0KDQoJLy8gVGhlIHRhZyBtYW5hZ2VtZW50IHRhYmxlDQoJZWNobyBzdGFydFRh YmxlKCdjb250cm9sJywnJywnJyw1KTsNCglpZiAoc21kX3RhZ3NfdGFibGVfZXhpc3QoKSkg ew0KCQkvLyBUYWJsZXMgaW5zdGFsbGVkDQoJCWlmICgkbnVtUHJlZnMgPT0gJG51bVJlcVBy ZWZzKSB7DQoJCQkvLyBQcmVmcyBhbGwgaW5zdGFsbGVkDQoJCQllY2hvIHRyKA0KCQkJCWZM YWJlbENlbGwoc21kX3RhZ3NfZ1R4dCgnY29udHJvbCcpLic6JykNCgkJCQkuIHRkYSgkYnRu UHJlZnMsICRidG5TdHlsZSkNCgkJCSk7DQoJCQllY2hvIGVuZFRhYmxlKCk7DQoJCQllY2hv ICc8Zm9ybSBtZXRob2Q9IlBPU1QiIGlkPSJzbWRfcG9zdGl0IiBhY3Rpb249Ij9ldmVudD1z bWRfdGFncyI+JzsNCgkJCWVjaG8gaElucHV0KCdzdGVwJywgJycpOw0KCQkJZWNobyBoSW5w dXQoJ3NtZF90YWdfaWQnLCAkc21kX3RhZ19pZCk7DQoJCQllY2hvIGhJbnB1dCgnc21kX3Rh Z19uYW1lJywgJycpOw0KCQkJZWNobyBoSW5wdXQoJ3NtZF90YWdfb25hbWUnLCAkc21kX3Rh Z19uYW1lKTsNCgkJCWVjaG8gaElucHV0KCdzbWRfdGFnX3BhcmVudCcsICcnKTsNCgkJCWVj aG8gaElucHV0KCdzbWRfdGFnX2NhdCcsICcnKTsNCgkJCWVjaG8gaElucHV0KCdzbWRfdGFn X3RpdGxlJywgJycpOw0KCQkJZWNobyBoSW5wdXQoJ3NtZF90YWdfdHlwZScsICcnKTsNCgkJ CWVjaG8gJzwvZm9ybT4nOw0KCQkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJCQllY2hv IHRyKHRkYShzdHJvbmcoc21kX3RhZ3NfZ1R4dCgnbWFuYWdlX2xibCcpKS4nICcuJGJ0bkhl bHAsICcgY29sc3Bhbj0iMTEiJykpOw0KCQkJZWNobyB0cigNCgkJCQl0ZCgnPGxhYmVsIGZv cj0ic21kX3RhZ3NfbmV3dGl0bGUiPicuZ1R4dCgndGl0bGUnKS4nOjwvbGFiZWw+JykNCgkJ CQkuIHRkKGZJbnB1dCgndGV4dCcsICdzbWRfdGFnc19uZXd0aXRsZScsICRzbWRfdGFnX3Rp dGxlKSkNCgkJCQkuIHRkKCc8bGFiZWwgZm9yPSJzbWRfdGFnX3BhcmVudCI+Jy5nVHh0KCdw YXJlbnQnKS4nOjwvbGFiZWw+JykNCgkJCQkuIHRkKCcnLCAnJywgJ3NtZF90YWdzX3Nob3dw YXJzJykNCgkJCQkuICgoJGNsaW5rKQ0KCQkJCQk/IHRkKHNtZF90YWdzX2dUeHQoJ2NsaW5r X2xibCcpLic6JykNCgkJCQkJCS4gdGQoJycsICcnLCAnc21kX3RhZ3NfbGlua2NhdCcpDQoJ CQkJCTogdGQoc3ApLnRkKHNwKQ0KCQkJCSkNCgkJCQkuIHRkKCc8bGFiZWwgZm9yPSJzbWRf dGFnc19uZXduYW1lIj4nLmdUeHQoJ25hbWUnKS4nOjwvbGFiZWw+JykNCgkJCQkuIHRkYShm SW5wdXQoJ3RleHQnLCAnc21kX3RhZ3NfbmV3bmFtZScsICRzbWRfdGFnX25hbWUpKQ0KCQkJ CS4gdGRhKCRidG5TYXZlKQ0KCQkJCS4gdGRhKCRidG5DcmVhdGUpDQoJCQkJLiB0ZGEoJGJ0 bkRlbGV0ZSkNCgkJCSk7DQoJCQllY2hvIHRyKA0KCQkJCXRkKCc8bGFiZWw+Jy5zbWRfdGFn c19nVHh0KCdmaWx0ZXInKS4nOjwvbGFiZWw+JykNCgkJCQkuIHRkY3MoJHJhZGlvcywgMTAp DQoJCQkpOw0KCQkJZWNobyB0cigNCgkJCQl0ZChzcCkNCgkJCQkuIHRkY3MoJHRhZ291dFsk c21kX3RhZ190eXBlXSwgMTAsICcnLCAnc21kX3RhZ3Nfc2hvd2xpc3QnKQ0KCQkJKTsNCgkJ fSBlbHNlIGlmICgkbnVtUHJlZnMgPiAwICYmICRudW1QcmVmcyA8ICRudW1SZXFQcmVmcykg ew0KCQkJLy8gUHJlZnMgcG9zc2libHkgY29ycnVwdCwgb3IgcGx1Z2luIHVwZGF0ZWQNCgkJ CWVjaG8gdHIoDQoJCQkJdGRhKHN0cm9uZyhzbWRfdGFnc19nVHh0KCdwcmVmc19zb21lJykp LmJyLmJyDQoJCQkJCS5zbWRfdGFnc19nVHh0KCdwcmVmc19zb21lX2V4cGxhaW4nKS5ici5i cg0KCQkJCQkuc21kX3RhZ3NfZ1R4dCgncHJlZnNfc29tZV9vcHRzMScpLCAnIGNvbHNwYW49 IjIiJykNCgkJCSk7DQoJCQllY2hvIHRyKA0KCQkJCXRkYSgkYnRuUmVtb3ZlLCRidG5TdHls ZSkNCgkJCQkuIHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKQ0KCQkJKTsNCgkJfSBlbHNl IHsNCgkJCS8vIFByZWZzIG5vdCBpbnN0YWxsZWQNCgkJCWVjaG8gdHIodGRhKHNtZF90YWdz X2dUeHQoJ3ByZWZzX25vdF9pbnN0YWxsZWQnKSwgJyBjb2xzcGFuPSIyIicpKTsNCgkJCWVj aG8gdHIodGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsNCgkJfQ0KCX0gZWxzZSB7DQoJ CS8vIFRhYmxlcyBub3QgaW5zdGFsbGVkDQoJCWVjaG8gdHIodGRhKHN0cm9uZyhzbWRfdGFn c19nVHh0KCdwcmVmc19zb21lX3RibCcpKS5ici5icg0KCQkJCS5zbWRfdGFnc19nVHh0KCdw cmVmc19zb21lX2V4cGxhaW4nKS5ici5icg0KCQkJCS5zbWRfdGFnc19nVHh0KCdwcmVmc19z b21lX29wdHMyJyksICcgY29sc3Bhbj0iMiInKQ0KCQkpOw0KCQllY2hvIHRyKHRkYSgkYnRu SW5zdGFsbFRibCwgJGJ0blN0eWxlKSk7DQoJfQ0KCWVjaG8gZW5kVGFibGUoKTsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBTdG9yZSB0aGUgdGFnIHRoYXQgaXMg Y3VycmVudGx5IGJlaW5nIGVkaXRlZA0KZnVuY3Rpb24gc21kX3RhZ19zYXZlKCkgew0KCWV4 dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdzbWRfdGFnX29uYW1lJywgJ3NtZF90YWdfbmFt ZScsICdzbWRfdGFnX3RpdGxlJywgJ3NtZF90YWdfcGFyZW50JywgJ3NtZF90YWdfY2F0Jywg J3NtZF90YWdfdHlwZScsICdzbWRfdGFnX2lkJykpKSk7DQoNCgkkbWVzc2FnZSA9ICcnOw0K CSRzbWRfdGFnX3BhcmVudCA9ICghZW1wdHkoJHNtZF90YWdfcGFyZW50KSkgPyAkc21kX3Rh Z19wYXJlbnQgOiAncm9vdCc7DQoJJHNtZF90YWdfbmFtZSA9ICghZW1wdHkoJHNtZF90YWdf bmFtZSkpID8gc2FuaXRpemVGb3JVcmwoJHNtZF90YWdfbmFtZSkgOiAnJzsNCg0KCS8vIENh bid0IHVzZSBzYWZlX3Vwc2VydCgpIGJlY2F1c2UgdGhlIFdIRVJFIGlzIGZvciBJRCBBTkQg dHlwZQ0KCWlmIChlbXB0eSgkc21kX3RhZ19pZCkpIHsNCgkJLy8gQ3JlYXRlDQoJCWlmIChl bXB0eSgkc21kX3RhZ19uYW1lKSkgew0KCQkJJG1lc3NhZ2UgPSBhcnJheShzbWRfdGFnc19n VHh0KCdub19uYW1lJywgYXJyYXkoJ3t0eXBlfScgPT4gdWNmaXJzdCgkc21kX3RhZ190eXBl KSkpLCBFX1dBUk5JTkcpOw0KCQl9IGVsc2Ugew0KCQkJJGV4aXN0cyA9IHNhZmVfZmllbGQo J25hbWUnLCBTTURfVEFHLCAibmFtZSA9ICckc21kX3RhZ19uYW1lJyBBTkQgdHlwZSA9ICck c21kX3RhZ190eXBlJyIpOw0KCQkJJHBhcmV4ID0gc2FmZV9maWVsZCgnbmFtZScsIFNNRF9U QUcsICJuYW1lID0gJyRzbWRfdGFnX3BhcmVudCcgQU5EIHR5cGUgPSAnJHNtZF90YWdfdHlw ZSciKTsNCgkJCWlmICgkZXhpc3RzKSB7DQoJCQkJJG1lc3NhZ2UgPSBhcnJheShzbWRfdGFn c19nVHh0KCdleGlzdHMnLCBhcnJheSgne25hbWV9JyA9PiAkc21kX3RhZ19uYW1lLCAne3R5 cGV9JyA9PiB1Y2ZpcnN0KCRzbWRfdGFnX3R5cGUpKSksIEVfV0FSTklORyk7DQoJCQl9IGVs c2Ugew0KCQkJCSRzbWRfdGFnX2lkID0gc2FmZV9pbnNlcnQoDQoJCQkJCVNNRF9UQUcsDQoJ CQkJCSJuYW1lPSckc21kX3RhZ19uYW1lJywgdGl0bGU9JyRzbWRfdGFnX3RpdGxlJywgcGFy ZW50PSciLigoJHBhcmV4KSA/ICRzbWRfdGFnX3BhcmVudCA6ICdyb290JykuIicsIHR5cGU9 JyRzbWRfdGFnX3R5cGUnIg0KCQkJCSk7DQoNCgkJCQlpZiAoJHNtZF90YWdfaWQgPiAwKSB7 DQoJCQkJCWlmICgkc21kX3RhZ19jYXQpIHsNCgkJCQkJCXNhZmVfaW5zZXJ0KFNNRF9UQUdD LCJ0YWdfaWQ9JyRzbWRfdGFnX2lkJywgY2F0X2lkPShTRUxFQ1QgaWQgRlJPTSAiLlBGWC4i dHhwX2NhdGVnb3J5IFdIRVJFIG5hbWU9JyRzbWRfdGFnX2NhdCcgQU5EIHR5cGU9JyRzbWRf dGFnX3R5cGUnKSIpOw0KCQkJCQl9DQoJCQkJCSRtZXNzYWdlID0gc21kX3RhZ3NfZ1R4dCgn Y3JlYXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRzbWRfdGFnX25hbWUsICd7dHlwZX0nID0+ IHVjZmlyc3QoJHNtZF90YWdfdHlwZSkpKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkbWVzc2Fn ZSA9IGFycmF5KHNtZF90YWdzX2dUeHQoJ25vdF9jcmVhdGVkJywgYXJyYXkoJ3tuYW1lfScg PT4gJHNtZF90YWdfbmFtZSwgJ3t0eXBlfScgPT4gdWNmaXJzdCgkc21kX3RhZ190eXBlKSkp LCBFX1dBUk5JTkcpOw0KCQkJCX0NCgkJCX0NCgkJCQkJfQ0KCX0gZWxzZSB7DQoJCS8vIFVw ZGF0ZSAtIG5vIG5lZWQgdG8gbWFpbnRhaW4gcmVmZXJlbnRpYWwgaW50ZWdyaXR5IHVubGlr ZSB0eHBfY2F0cw0KCQkvLyBzaW5jZSB0YWdzIGFyZSBzdG9yZWQgYWdhaW5zdCBpdGVtIElE cw0KCQkkZXhpc3RpbmdfaWQgPSBzYWZlX2ZpZWxkKCdpZCcsIFNNRF9UQUcsICJuYW1lID0g JyRzbWRfdGFnX25hbWUnIGFuZCB0eXBlID0gJyRzbWRfdGFnX3R5cGUnIik7DQoNCgkJaWYg KCRleGlzdGluZ19pZCBhbmQgJGV4aXN0aW5nX2lkICE9ICRzbWRfdGFnX2lkKSB7DQoJCQkk bWVzc2FnZSA9IGFycmF5KHNtZF90YWdzX2dUeHQoJ2V4aXN0cycsIGFycmF5KCd7bmFtZX0n ID0+ICRzbWRfdGFnX25hbWUsICd7dHlwZX0nID0+IHVjZmlyc3QoJHNtZF90YWdfdHlwZSkp KSwgRV9XQVJOSU5HKTsNCgkJfSBlbHNlIHsNCgkJCWlmIChzYWZlX3VwZGF0ZSgNCgkJCQkJ U01EX1RBRywNCgkJCQkJIm5hbWU9JyRzbWRfdGFnX25hbWUnLCB0aXRsZT0nJHNtZF90YWdf dGl0bGUnLCBwYXJlbnQ9JyRzbWRfdGFnX3BhcmVudCciLA0KCQkJCQkidHlwZT0nJHNtZF90 YWdfdHlwZScgQU5EIGlkPSRzbWRfdGFnX2lkIg0KCQkJCSkpIHsNCgkJCQlzYWZlX3VwZGF0 ZShTTURfVEFHLCAicGFyZW50PSckc21kX3RhZ19uYW1lJyIsICJwYXJlbnQ9JyRzbWRfdGFn X29uYW1lJyBBTkQgdHlwZT0nJHNtZF90YWdfdHlwZSciKTsNCgkJCQlpZiAoJHNtZF90YWdf Y2F0KSB7DQoJCQkJCXNhZmVfdXBzZXJ0KFNNRF9UQUdDLCAiY2F0X2lkPShTRUxFQ1QgaWQg RlJPTSAiLlBGWC4idHhwX2NhdGVnb3J5IFdIRVJFIG5hbWU9JyRzbWRfdGFnX2NhdCcgQU5E IHR5cGU9JyRzbWRfdGFnX3R5cGUnKSIsICJ0YWdfaWQgPSAnJHNtZF90YWdfaWQnIik7DQoJ CQkJfSBlbHNlIHsNCgkJCQkJc2FmZV9kZWxldGUoU01EX1RBR0MsICJ0YWdfaWQ9JHNtZF90 YWdfaWQiKTsNCgkJCQl9DQoJCQkJJG1lc3NhZ2UgPSBzbWRfdGFnc19nVHh0KCd1cGRhdGVk JywgYXJyYXkoJ3tuYW1lfScgPT4gJHNtZF90YWdfbmFtZSwgJ3t0eXBlfScgPT4gdWNmaXJz dCgkc21kX3RhZ190eXBlKSkpOw0KCQkJfSBlbHNlIHsNCgkJCQkkbWVzc2FnZSA9IGFycmF5 KHNtZF90YWdzX2dUeHQoJ25vdF91cGRhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJHNtZF90 YWdfbmFtZSwgJ3t0eXBlfScgPT4gdWNmaXJzdCgkc21kX3RhZ190eXBlKSkpLCBFX1dBUk5J TkcpOw0KCQkJfQ0KCQl9DQoJfQ0KCXJlYnVpbGRfdHJlZV9mdWxsKCRzbWRfdGFnX3R5cGUs IFNNRF9UQUcpOw0KDQoJLy8gRm9yY2Ugc21kX3RhZ19pZCB0byB0aGUgbmV3IElEIHNvIGl0 IGNhbiBiZSBpbW1lZGlhdGVseSBlZGl0ZWQNCgkkX1BPU1RbJ3NtZF90YWdfaWQnXSA9ICRz bWRfdGFnX2lkOw0KDQoJc21kX3RhZ3NfbWFuYWdlKCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBTdG9yZSBuZXcgdGFnIC0gdXNlcyBzbWRfdGFn X3NhdmUgd2l0aG91dCB0aGUgSUQvb2xkX25hbWUNCmZ1bmN0aW9uIHNtZF90YWdfY3JlYXRl KCkgew0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdzbWRfdGFnX25hbWUnLCAnc21k X3RhZ190aXRsZScsICdzbWRfdGFnX3BhcmVudCcsICdzbWRfdGFnX3R5cGUnKSkpKTsNCgl1 bnNldCgkX1BPU1RbJ3NtZF90YWdfaWQnXSk7DQoJc21kX3RhZ19zYXZlKCk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRGVsZXRlIGN1cnJlbnRseSBlZGl0ZWQg dGFnLiBSZXNwZWN0cyBub2Nsb2JiZXIvdHJlZSBpZiBwcmVmcyBzZXQNCmZ1bmN0aW9uIHNt ZF90YWdfZGVsZXRlKCkgew0KCWdsb2JhbCAkc21kX3RhZ19wcmVmczsNCglleHRyYWN0KGRv U2xhc2goZ3BzYShhcnJheSgnc21kX3RhZ19vbmFtZScsICdzbWRfdGFnX3R5cGUnLCAnc21k X3RhZ19pZCcpKSkpOw0KDQoJJHNtZF90YWdfaWQgPSBhc3NlcnRfaW50KCRzbWRfdGFnX2lk KTsNCg0KCSRwcmVmID0gc21kX3RhZ3NfcHJlZl9nZXQoYXJyYXkoJ3NtZF90YWdfdF9kZWx1 c2VkJywgJ3NtZF90YWdfdF9kZWx0cmVlJykpOw0KCSRtZXNzYWdlID0gJG1zZ0V4dHJhID0g Jyc7DQoNCglsaXN0KCRsZnQsICRyZ3QpID0gYXJyYXlfdmFsdWVzKHNhZmVfcm93KCdsZnQs IHJndCcsIFNNRF9UQUcsICdpZCA9ICcuJHNtZF90YWdfaWQpKTsNCgkkY2hpbGRyZW4gPSAo JHJndCAtICRsZnQgLSAxKSAvIDI7DQoJJHVzZWQgPSBzYWZlX2NvdW50KFNNRF9UQUdVLCAi dGFnX2lkPSRzbWRfdGFnX2lkIEFORCB0eXBlPSckc21kX3RhZ190eXBlJyIpOw0KCSRkb2l0 ID0gJHByZWZbJ3NtZF90YWdfdF9kZWx1c2VkJ11bJ3ZhbCddOw0KCSR0cmVlID0gJHByZWZb J3NtZF90YWdfdF9kZWx0cmVlJ11bJ3ZhbCddOw0KDQoJaWYgKCRkb2l0ID09IDApIHsNCgkJ aWYgKCR1c2VkIHx8ICRjaGlsZHJlbiA+IDApIHsNCgkJCSRtZXNzYWdlID0gc21kX3RhZ3Nf Z1R4dCgnaW5fdXNlJywgYXJyYXkoJ3t0eXBlfScgPT4gdWNmaXJzdCgkc21kX3RhZ190eXBl KSwgJ3tuYW1lfScgPT4gJHNtZF90YWdfb25hbWUpKTsNCgkJfSBlbHNlIHsNCgkJCSRkb2l0 ID0gMTsNCgkJfQ0KCX0NCg0KCS8vIERvIHRoZSBkZWxldGUvdHJlZQ0KCWlmICgkZG9pdCkg ew0KCQlpZiAoJHRyZWUpIHsNCgkJCSRpZHMgPSBzYWZlX2NvbHVtbignaWQnLCBTTURfVEFH LCAidHlwZSA9ICckc21kX3RhZ190eXBlJyBBTkQgKGxmdCBCRVRXRUVOICRsZnQgQU5EICRy Z3QpIik7DQoJCQkkbXNnRXh0cmEgPSBzbWRfdGFnc19nVHh0KCdjaGlsZHJlbl9hbmQnKTsN CgkJfSBlbHNlIHsNCgkJCSRpZHMgPSBhcnJheSgkc21kX3RhZ19pZCk7DQoJCX0NCgkJJHdo ZXJlID0gJ2lkIElOICgnLmRvUXVvdGUoaW1wbG9kZSgiJywnIiwkaWRzKSkuJyknOw0KDQoJ CSRyZXQgPSBzYWZlX2RlbGV0ZShTTURfVEFHLCAkd2hlcmUuIiBBTkQgdHlwZT0nJHNtZF90 YWdfdHlwZSciKTsNCgkJaWYgKCRyZXQpIHsNCgkJCWlmICghJHRyZWUpIHsNCgkJCQlzYWZl X3VwZGF0ZShTTURfVEFHLCAicGFyZW50PSdyb290JyIsICJ0eXBlPSckc21kX3RhZ190eXBl JyBhbmQgcGFyZW50PSckc21kX3RhZ19vbmFtZSciKTsNCgkJCX0NCgkJCWZvcmVhY2ggKCRp ZHMgYXMgJGRlbGlkKSB7DQoJCQkJc2FmZV9kZWxldGUoU01EX1RBR1UsICJ0YWdfaWQ9JGRl bGlkIEFORCB0eXBlPSckc21kX3RhZ190eXBlJyIpOw0KCQkJCXNhZmVfZGVsZXRlKFNNRF9U QUdDLCAidGFnX2lkPSRkZWxpZCIpOw0KCQkJfQ0KCQl9DQoJCWlmICgkcmV0KSB7DQoJCQkk bWVzc2FnZSA9IHNtZF90YWdzX2dUeHQoJ2RlbGV0ZWQnLCBhcnJheSgne3R5cGV9JyA9PiB1 Y2ZpcnN0KCRzbWRfdGFnX3R5cGUpLCAne25hbWV9JyA9PiAkc21kX3RhZ19vbmFtZSkpLiRt c2dFeHRyYTsNCgkJCS8vIEZvcmNlIGFsbCBzbWRfdGFnXyBib3hlcyBjbGVhcg0KCQkJJF9Q T1NUWydzbWRfdGFnX2lkJ10gPSAkX1BPU1RbJ3NtZF90YWdfb25hbWUnXSA9ICRfUE9TVFsn c21kX3RhZ19uYW1lJ10gPSAkX1BPU1RbJ3NtZF90YWdfdGl0bGUnXSA9ICRfUE9TVFsnc21k X3RhZ19wYXJlbnQnXSA9ICcnOw0KCQl9IGVsc2Ugew0KCQkJJG1lc3NhZ2UgPSBzbWRfdGFn c19nVHh0KCdub3RfZGVsZXRlZCcsIGFycmF5KCd7dHlwZX0nID0+IHVjZmlyc3QoJHNtZF90 YWdfdHlwZSksICd7bmFtZX0nID0+ICRzbWRfdGFnX29uYW1lKSk7DQoJCX0NCgl9DQoJcmVi dWlsZF90cmVlX2Z1bGwoJHNtZF90YWdfdHlwZSwgU01EX1RBRyk7DQoJc21kX3RhZ3NfbWFu YWdlKCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBN SURETEVXQVJFIC0gQURNSU4vUFVCTElDIEdMVUUNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KLy8gR3JhYiBhIHZhbGlkIHRhZyBwYXJlbnQgbGlzdC4gQ2Fubm90IGJlIGRvbmUg ZWFzaWx5IGZyb20gZml4ZWQgZGF0YTogQUpBWCBpcyB0aGUgb25seSByZWxpYWJsZSB3YXkg Oi0oDQpmdW5jdGlvbiBzbWRfdGFnX3BhcmVudGxpc3QoKSB7DQoJJHRyeWNhdCA9IGlzc2V0 KCRfUE9TVFsnY2F0J10pOw0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1lJywg J3R5cGUnLCAnaWQnLCAnY2F0JywgJ2l0ZW1pZCcpKSkpOw0KDQoJd2hpbGUoQG9iX2VuZF9j bGVhbigpKTsgLy8gR2V0IHJpZCBvZiBhbnkgcGFnZSBzbyBmYXINCgkkdHlwZSA9ICgkdHlw ZSA9PSAiIiB8fCAkdHlwZSA9PSAidW5kZWZpbmVkIikgPyAnYXJ0aWNsZScgOiAkdHlwZTsN CgkkY2F0ID0gKCRjYXQgPT0gIiIgfHwgJGNhdCA9PSAidW5kZWZpbmVkIikgPyAnJyA6ICRj YXQ7DQoJJHRhZ3MgPSAoJGl0ZW1pZCA9PSAiIiB8fCAkaXRlbWlkID09ICJ1bmRlZmluZWQi KSA/IGFycmF5KCkgOiBzYWZlX3Jvd3MoInRhZ19pZCIsIFNNRF9UQUdVLCAidHlwZT0nJHR5 cGUnIEFORCBpdGVtX2lkPSckaXRlbWlkJyIpOw0KCSRjbHJCdG4gPSAnWzxzcGFuIGlkPSJz bWRfY2xyIiBjbGFzcz0ic21kX2Zha2VidG4iPicuc21kX3RhZ3NfZ1R4dCgnY2xlYXInKS4n PC9zcGFuPl0nOw0KCSR0b2dCdG4gPSAnWzxzcGFuIGlkPSJzbWRfdG9nIiBjbGFzcz0ic21k X2Zha2VidG4iPicuc21kX3RhZ3NfZ1R4dCgndG9nZ2xlJykuJzwvc3Bhbj5dJzsNCg0KCWlm ICgkY2F0KSB7DQoJICAgJGNhdCA9IGRvX2xpc3QoJGNhdCk7DQoJICAgJHJzaWQgPSBhcnJh eSgpOw0KCSAgICRyc2MgPSBnZXRSb3dzKCJTRUxFQ1QgdHh0LmlkLCB0eHQubGZ0LCB0eHQu cmd0DQoJCQlGUk9NICIuUEZYLlNNRF9UQUcuIiBBUyB0eHQsICIuUEZYLiJ0eHBfY2F0ZWdv cnkgQVMgdHhjLCAiLlBGWC5TTURfVEFHQy4iIEFTIHR4bA0KCQkJV0hFUkUgdHh0LmlkID0g dHhsLnRhZ19pZA0KCQkJQU5EIHR4bC5jYXRfaWQgPSB0eGMuaWQNCgkJCUFORCB0eGMubmFt ZSBJTiAoJyIgLmltcGxvZGUoIicsJyIsICRjYXQpLiAiJykNCgkJCUFORCB0eHQudHlwZSA9 ICckdHlwZSciKTsNCgkJaWYgKCRyc2MpIHsNCgkJCWZvcmVhY2ggKCRyc2MgYXMgJHJvdykg ew0KCQkJCSRpZHMgPSBzYWZlX2NvbHVtbignaWQnLCBTTURfVEFHLCAidHlwZSA9ICckdHlw ZScgQU5EIChsZnQgQkVUV0VFTiAiIC4kcm93WydsZnQnXS4gIiBBTkQgIiAuJHJvd1sncmd0 J10uICIpIik7DQoJCQkJJHJzaWQgPSBhcnJheV9tZXJnZSgkcnNpZCwgJGlkcyk7DQoJCQl9 DQoJCX0NCgkJJGNhdCA9ICgkcnNjKSA/ICcgQU5EIGlkIElOICgnLmRvUXVvdGUoaW1wbG9k ZSgiJywnIiwkcnNpZCkpLicpJyA6ICcnOw0KCX0NCglpZiAoJGlkKSB7DQovL2VjaG8gIkFT U0VSVCBJRCA+PiIuJGlkLiI8PCI7DQoJCSRpZCA9IGFzc2VydF9pbnQoJGlkKTsNCgkJbGlz dCgkbGZ0LCAkcmd0KSA9IGFycmF5X3ZhbHVlcyhzYWZlX3JvdygnbGZ0LCByZ3QnLCBTTURf VEFHLCAnaWQgPSAnLiRpZCkpOw0KCQkkcnMgPSBnZXRUcmVlKCdyb290JywgJHR5cGUsICJs ZnQgbm90IGJldHdlZW4gJGxmdCBhbmQgJHJndCIuJGNhdCwgU01EX1RBRyk7DQoJfSBlbHNl IHsNCgkJJHJzID0gZ2V0VHJlZSgncm9vdCcsICR0eXBlLCAiMT0xIi4kY2F0LCBTTURfVEFH KTsNCgl9DQoNCglpZiAoJHJzKSB7DQoJICAgaWYgKCR0cnljYXQpIHsNCgkJCWVjaG8gc21k X211bHRpVHJlZVNlbGVjdElucHV0KCdzbWRfdGFnX3BhcmVudCcsICRycywgJHRhZ3MpLiRj bHJCdG4uJHRvZ0J0bjsNCgkJfSBlbHNlIHsNCgkJCWVjaG8gdHJlZVNlbGVjdElucHV0KCdz bWRfdGFnX3BhcmVudCcsICRycywgJG5hbWUpOw0KCQl9DQoJfSBlbHNlIHsNCgkJZWNobyBz bWRfdGFnc19nVHh0KCdub19wYXJlbnQnKTsNCgl9DQoJZXhpdCgpOyAvLyBEb24ndCBjYWxs IHBhZ2VfZW5kKCkNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBHcmFi IGEgdmFsaWQgY2F0ZWdvcnkgbGlzdA0KZnVuY3Rpb24gc21kX3RhZ19jYXRsaXN0KCRjYXQ9 JycpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmFtZScsJ3R5cGUnKSkpKTsN Cgl3aGlsZShAb2JfZW5kX2NsZWFuKCkpOyAvLyBHZXQgcmlkIG9mIGFueSBwYWdlIHNvIGZh cg0KDQoJJHR5cGUgPSAoJHR5cGUgPT0gIiIgfHwgJHR5cGUgPT0gInVuZGVmaW5lZCIpID8g J2FydGljbGUnIDogJHR5cGU7DQoJJHJzID0gZ2V0VHJlZSgncm9vdCcsICR0eXBlLCAiMT0x Iik7DQoNCglpZiAoJHJzKSB7DQoJCWVjaG8gdHJlZVNlbGVjdElucHV0KCdzbWRfY2F0bGlz dCcsICRycywgJG5hbWUpOw0KCX0gZWxzZSB7DQoJCWVjaG8gZ1R4dCgnbm9fY2F0ZWdvcmll c19hdmFpbGFibGUnKTsNCgl9DQoJZXhpdCgpOyAvLyBEb24ndCBjYWxsIHBhZ2VfZW5kKCkN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBIYW5kbGUgZmFrZSB0YWcg c2VjdGlvbiBVUkwNCmZ1bmN0aW9uIHNtZF90YWdzX3VybF9oYW5kbGVyKCRldmVudCwgJHN0 ZXApIHsNCglnbG9iYWwgJHNtZF90YWdfdHlwZSwgJHNtZF90YWdzLCAkcGVybWxpbmtfbW9k ZTsNCg0KCWlmICghc21kX3RhZ3NfdGFibGVfZXhpc3QoKSkgew0KCQlyZXR1cm47DQoJfQ0K DQoJJHByZWZzID0gc21kX3RhZ3NfcHJlZl9nZXQoYXJyYXkoJ3NtZF90YWdfdV9zZWMnLCAn c21kX3RhZ191X3BuYW0nLCAnc21kX3RhZ191X3B0eXAnKSwgMSk7DQoJJHVybHNlYyA9ICRw cmVmc1snc21kX3RhZ191X3NlYyddWyd2YWwnXTsNCgkkdXJsbmFtID0gJHByZWZzWydzbWRf dGFnX3VfcG5hbSddWyd2YWwnXTsNCgkkdXJsdHlwID0gJHByZWZzWydzbWRfdGFnX3VfcHR5 cCddWyd2YWwnXTsNCg0KCSRzdWJwYXRoID0gcHJlZ19yZXBsYWNlKCIvaHR0cHM/OlwvXC8u KihcLy4qKS9VaSIsIiQxIixodSk7DQoJJHJlZ3NhZmVzdWJwYXRoID0gcHJlZ19xdW90ZSgk c3VicGF0aCwgJy8nKTsNCgkkcmVxID0gcHJlZ19yZXBsYWNlKCIvXiRyZWdzYWZlc3VicGF0 aC9pIiwnLycsJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pOw0KDQoJJHFzID0gc3RycG9zKCRy ZXEsICc/Jyk7DQoJJHFhdHRzID0gKCRxcyA/IGEuc3Vic3RyKCRyZXEsICRxcyArIDEpIDog JycpOw0KCWlmICgkcXMpICRyZXEgPSBzdWJzdHIoJHJlcSwgMCwgJHFzKTsNCgkkcGFydHMg PSBhcnJheV92YWx1ZXMoYXJyYXlfZmlsdGVyKHNwbGl0KCcvJywgJHJlcSkpKTsNCgkkdmFs aWRUeXBlcyA9IGFycmF5KCdhcnRpY2xlJywnaW1hZ2UnLCdmaWxlJywnbGluaycpOw0KDQoJ aWYgKChjb3VudCgkcGFydHMpID4gMSkgJiYgKCRwYXJ0c1swXSA9PSAkdXJsc2VjKSkgew0K CQlpZiAoY291bnQoJHBhcnRzKSA9PSAzKSB7DQoJCQkkc21kX3RhZ190eXBlID0gJHBhcnRz WzFdOw0KCQkJJHNtZF90YWcgPSAkcGFydHNbMl07DQoJCX0gZWxzZSB7DQoJCQlpZiAoaW5f YXJyYXkoJHBhcnRzWzFdLCAkdmFsaWRUeXBlcykpIHsNCgkJCQkkc21kX3RhZ190eXBlID0g JHBhcnRzWzFdOw0KCQkJCSRzbWRfdGFnID0gJyc7DQoJCQl9IGVsc2Ugew0KCQkJCSRzbWRf dGFnX3R5cGUgPSAkdmFsaWRUeXBlc1swXTsNCgkJCQkkc21kX3RhZyA9ICRwYXJ0c1sxXTsN CgkJCX0NCgkJfQ0KCQlzbWRfdGFnc19zZXQoJHNtZF90YWdfdHlwZSwgJHNtZF90YWcpOw0K CQkkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10gPSAkdXJsbmFtLic9Jy4kc21kX3RhZyAuYS4g JHVybHR5cC4nPScuJHNtZF90YWdfdHlwZSAuICRxYXR0czsNCgkJJF9TRVJWRVJbJ1JFUVVF U1RfVVJJJ10gPSAkc3VicGF0aCAuICR1cmxzZWMgLiAnLz8nIC4gJF9TRVJWRVJbJ1FVRVJZ X1NUUklORyddOw0KCX0gZWxzZSBpZiAoKGNvdW50KCRwYXJ0cykgPT0gMSkgJiYgJHBhcnRz WzBdID09ICR1cmxzZWMgfHwgZ3BzKCdzJykgPT0gJHVybHNlYykgew0KCQkkc21kX3RhZ190 eXBlID0gKGluX2FycmF5KGdwcygkdXJsdHlwKSwgJHZhbGlkVHlwZXMpKSA/IGdwcygkdXJs dHlwKSA6ICcnOw0KCQkkc21kX3RhZyA9IGdwcygkdXJsbmFtKTsNCgkJc21kX3RhZ3Nfc2V0 KCRzbWRfdGFnX3R5cGUsICRzbWRfdGFnKTsNCgkJJF9TRVJWRVJbJ1FVRVJZX1NUUklORydd ID0gJHVybG5hbS4nPScuJHNtZF90YWcgLmEuICR1cmx0eXAuJz0nLiRzbWRfdGFnX3R5cGUg LiAkcWF0dHM7DQoJCSRfU0VSVkVSWydSRVFVRVNUX1VSSSddID0gJHN1YnBhdGggLiAkdXJs c2VjIC4gJy8/JyAuICRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXTsNCgl9DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RhZ3Nfc2V0KCR0eXAsICR0 YWc9JycsICRpdGVtPScnKSB7DQoJZ2xvYmFsICRzbWRfdGFnczsNCg0KCSRzbWRfdGFncyA9 ICcnOw0KDQoJLy8gTXVsdGktdGFnIGZpbHRlcmluZw0KCWlmICgkdGFnKSB7DQoJCSR0YWds aXN0ID0gZXhwbG9kZSgnfCcsICR0YWcpOyAvL1RPRE86IHNldCBkZWxpbWl0ZXIgYXMgYW4g b3B0aW9uDQoJCSR0YWcgPSBqb2luKCcsJywgcXVvdGVfbGlzdCgkdGFnbGlzdCkpOw0KCX0N Cg0KCS8vIE1PTlNURVIhDQoJJHJzID0gc3RhcnRSb3dzKA0KCQkiU0VMRUNUIGlkLCBuYW1l LCB0eHQudHlwZSwgcGFyZW50LCB0aXRsZSwgY291bnQoaXRlbV9pZCkgQVMgY291bnQiDQoJ CS4iLChTRUxFQ1QgQ0FTVCgocmd0IC0gbGZ0IC0gMSkgLyAyIEFTIFVOU0lHTkVEKSkgQVMg Y2hpbGRyZW4iDQoJCS4iLChTRUxFQ1QgQ09VTlQoKikgRlJPTSAiLlBGWC5TTURfVEFHLiIg V0hFUkUgdHlwZT0nJHR5cCcgQU5EIG5hbWU9bmFtZSBBTkQgbGZ0IDwgdHh0LmxmdCBBTkQg cmd0ID4gdHh0LnJndCktMSBBUyBsZXZlbCINCgkJLiIgRlJPTSAiLlBGWC5TTURfVEFHLiIg QVMgdHh0LCAiLlBGWC5TTURfVEFHVS4iIEFTIHR4dSINCgkJLiIgV0hFUkUgdHh0LnR5cGU9 JyR0eXAnIg0KCQkuIiBBTkQgdGFnX2lkID0gaWQiDQoJCS4oKCR0YWcpID8gIiBBTkQgbmFt ZSBJTiAoJHRhZykiIDogIiIpDQoJCS4oKCRpdGVtKSA/ICIgQU5EIGl0ZW1faWQ9JyRpdGVt JyIgOiAiIikNCgkJLiIgR1JPVVAgQlkgaWQiKTsNCgl3aGlsZSAoJHJvdyA9IG5leHRSb3co JHJzKSkgew0KCQkkc21kX3RhZ3NbJHR5cF1bJHJvd1snaWQnXV0gPSBhcnJheSgndGFnX25h bWUnID0+ICRyb3dbJ25hbWUnXSwgJ3RhZ190aXRsZScgPT4gJHJvd1sndGl0bGUnXSwgJ3Rh Z19wYXJlbnQnID0+ICRyb3dbJ3BhcmVudCddLCAndGFnX2NvdW50JyA9PiAkcm93Wydjb3Vu dCddLCAndGFnX2NoaWxkcmVuJyA9PiAkcm93WydjaGlsZHJlbiddLCAndGFnX2xldmVsJyA9 PiAkcm93WydsZXZlbCddKTsNCgkJJHNtZF90YWdzWyR0eXBdWyd0YWdfbmFtZSddWyRyb3db J2lkJ11dID0gJHJvd1snbmFtZSddOw0KCQkkc21kX3RhZ3NbJHR5cF1bJ3RhZ190aXRsZSdd WyRyb3dbJ2lkJ11dID0gJHJvd1sndGl0bGUnXTsNCgkJJHNtZF90YWdzWyR0eXBdWyd0YWdf cGFyZW50J11bJHJvd1snaWQnXV0gPSAkcm93WydwYXJlbnQnXTsNCgkJJHNtZF90YWdzWyR0 eXBdWyd0YWdfY291bnQnXVskcm93WydpZCddXSA9ICRyb3dbJ2NvdW50J107DQoJCSRzbWRf dGFnc1skdHlwXVsndGFnX2NoaWxkcmVuJ11bJHJvd1snaWQnXV0gPSAkcm93WydjaGlsZHJl biddOw0KCQkkc21kX3RhZ3NbJHR5cF1bJ3RhZ19sZXZlbCddWyRyb3dbJ2lkJ11dID0gJHJv d1snbGV2ZWwnXTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8g QWRkIHRhZ3MgdG8gdGhlIGdsb2JhbCBzY29wZSwgZGVwZW5kaW5nIG9uIGNvbnRleHQuDQov LyBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbnRleHQNCmZ1bmN0aW9uIHNtZF90YWdzX2NvbnRl eHQoKSB7DQoJZ2xvYmFsICR0aGlzYXJ0aWNsZSwgJHRoaXNmaWxlLCAkdGhpc2xpbmssICR0 aGlzaW1hZ2UsICRzbWRfdGFnX3R5cGUsICRzbWRfdGFnX2l0ZW1zLCAkc21kX3RhZ3MsICRz bWRfdGhpc3RhZzsNCg0KCSRjdHh0ID0gJHNtZF90YWdfdHlwZTsNCgkkaWRzID0gYXJyYXko KTsNCgkkc2NwID0gaXNzZXQoJHNtZF90YWdzWyRjdHh0XSkgPyAkc21kX3RhZ3NbJGN0eHRd IDogYXJyYXkoKTsNCg0KCWlmIChlbXB0eSgkY3R4dCkpIHsNCgkJLy8gSW5kaXZpZHVhbCBh cnRpY2xlIG9yIGxpc3QNCgkJJGlkID0gJyc7DQoJCWlmICghZW1wdHkoJHRoaXNpbWFnZSkp IHsNCgkJCSRpZCA9ICR0aGlzaW1hZ2VbJ2lkJ107DQoJCQkkY3R4dCA9ICdpbWFnZSc7DQoJ CQkkc2NwID0gJHRoaXNpbWFnZTsNCgkJfSBlbHNlIGlmKCFlbXB0eSgkdGhpc2ZpbGUpKSB7 DQoJCQkkaWQgPSAkdGhpc2ZpbGVbJ2lkJ107DQoJCQkkY3R4dCA9ICdmaWxlJzsNCgkJCSRz Y3AgPSAkdGhpc2ZpbGU7DQoJCX0gZWxzZSBpZighZW1wdHkoJHRoaXNsaW5rKSkgew0KCQkJ JGlkID0gJHRoaXNsaW5rWydpZCddOw0KCQkJJGN0eHQgPSAnbGluayc7DQoJCQkkc2NwID0g JHRoaXNsaW5rOw0KCQl9IGVsc2UgaWYoIWVtcHR5KCR0aGlzYXJ0aWNsZSkpIHsNCgkJCSRp ZCA9ICR0aGlzYXJ0aWNsZVsndGhpc2lkJ107DQoJCQkkY3R4dCA9ICdhcnRpY2xlJzsNCgkJ CSRzY3AgPSAkdGhpc2FydGljbGU7DQoJCX0NCgkJaWYgKCRpZCkgew0KCQkJc21kX3RhZ3Nf c2V0KCRjdHh0LCAnJywgJGlkKTsNCgkJfQ0KCX0NCg0KCWlmKCFlbXB0eSgkc21kX3RhZ3Mp KSB7DQoJCWZvcmVhY2goJHNtZF90YWdzWyRjdHh0XSBhcyAkcmlkID0+ICRyb3cpIHsNCgkJ CWlmIChpc19pbnQoJHJpZCkpIHsNCgkJCQkkaWRzW10gPSAkcmlkOw0KCQkJfQ0KCQl9DQoJ fQ0KCS8vIFRPRE86IGlzIHRoaXMgbmVlZGVkIHRvIG92ZXJ3cml0ZSBpZiB0YWcgYWxyZWFk eSBzZXQ/DQoJaWYgKCFlbXB0eSgkc21kX3RoaXN0YWcpKSB7DQoJCSRpZHMgPSBhcnJheSgk c21kX3RoaXN0YWdbJ3RhZ19pZCddKTsNCgl9DQoNCglyZXR1cm4gYXJyYXkoJ2NvbnRleHQn ID0+ICRjdHh0LCAnc2NvcGUnID0+ICRzY3AsICdpZCcgPT4gJGlkcyk7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gTG9hZCBjdXJyZW50IHRhZyBpbnRvIGdsb2Jh bCBzY29wZQ0KZnVuY3Rpb24gc21kX3RhZ19wb3B1bGF0ZSgkcm93KSB7DQoJZ2xvYmFsICRz bWRfdGhpc3RhZzsNCgkkc21kX3RoaXN0YWdbJ3RhZ19pZCddID0gJHJvd1snaWQnXTsNCgkk c21kX3RoaXN0YWdbJ3RhZ19uYW1lJ10gPSAkcm93WyduYW1lJ107DQoJJHNtZF90aGlzdGFn Wyd0YWdfdHlwZSddID0gJHJvd1sndHlwZSddOw0KCSRzbWRfdGhpc3RhZ1sndGFnX3BhcmVu dCddID0gJHJvd1sncGFyZW50J107DQoJJHNtZF90aGlzdGFnWyd0YWdfdGl0bGUnXSA9ICRy b3dbJ3RpdGxlJ107DQoJJHNtZF90aGlzdGFnWyd0YWdfY2hpbGRyZW4nXSA9ICRyb3dbJ2No aWxkcmVuJ107DQoJJHNtZF90aGlzdGFnWyd0YWdfbGV2ZWwnXSA9ICRyb3dbJ2xldmVsJ107 DQoJJHNtZF90aGlzdGFnWyd0YWdfY291bnQnXSA9ICRyb3dbJ2NvdW50J107DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQWxsIHRhZ3MvY291bnRzDQpmdW5jdGlv biBzbWRfdGFnX2xpc3RfYWRtKCRhdHRzKSB7DQoJaW5jbHVkZV9vbmNlIHR4cGF0aC4nL3B1 Ymxpc2gvdGFnaGFuZGxlcnMucGhwJzsNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQkndHlw ZScgPT4gJ2FydGljbGUnLA0KCQknaW5kZW50JyA9PiAnJm5ic3A7Jm5ic3A7JywNCgkJJ2Nv dW50JyA9PiAxLA0KCQknbGFiZWwnID0+ICcnLA0KCQknbGFiZWx0YWcnID0+ICcnLA0KCQkn d3JhcHRhZycgPT4gJycsDQoJCSdicmVhaycgPT4gJycsDQoJCSdjbGFzcycgPT4gX19GVU5D VElPTl9fLA0KCQknYnJlYWtjbGFzcycgPT4gJycsDQoJKSwkYXR0cykpOw0KDQoJJHZhbGlk VHlwZXMgPSBhcnJheSgnbGlzdCcgPT4gJ2FydGljbGUnLCAnaW1hZ2UnID0+ICdpbWFnZScs ICdmaWxlJyA9PiAnZmlsZScsICdsaW5rJyA9PiAnbGluaycpOw0KCSRycyA9IGdldFRyZWUo J3Jvb3QnLCAkdHlwZSwgJzE9MScsIFNNRF9UQUcpOw0KCSRyc2MgPSBnZXRSb3dzKCJTRUxF Q1QgdHhsLnRhZ19pZCwgdHhjLm5hbWUNCgkJCUZST00gIi5QRlguU01EX1RBRy4iIEFTIHR4 dCwgIi5QRlguU01EX1RBR0MuIiBBUyB0eGwsICIuUEZYLiJ0eHBfY2F0ZWdvcnkgQVMgdHhj DQoJCQlXSEVSRSB0eHQudHlwZSA9ICckdHlwZScgQU5EIHR4dC5pZCA9IHR4bC50YWdfaWQg QU5EIHR4bC5jYXRfaWQgPSB0eGMuaWQiKTsNCgkkcnNjb3V0ID0gYXJyYXkoKTsNCglpZiAo JHJzYykgew0KCQlmb3JlYWNoICgkcnNjIGFzICRpZHggPT4gJHJvdykgew0KCQkJJHJzY291 dFskcm93Wyd0YWdfaWQnXV0gPSAkcm93WyduYW1lJ107DQoJCX0NCgl9DQoNCglpZiAoJHJz KSB7DQoJCSRvdXQgPSBhcnJheSgpOw0KCQkkdG90YWxzID0gYXJyYXkoKTsNCg0KCQkvLyBU YWxseSBlYWNoIHRhZydzIHVzYWdlDQoJCWlmICgkY291bnQpIHsNCgkJCSRyc3UgPSBzYWZl X3Jvd3Nfc3RhcnQoJ3RhZ19pZCwgY291bnQoKikgYXMgbnVtJywgU01EX1RBR1UsICJ0eXBl PSckdHlwZScgR1JPVVAgQlkgdGFnX2lkIik7DQoJCQl3aGlsZSAoJHJvdyA9IG5leHRSb3co JHJzdSkpIHsNCgkJCQkkdGFnaWQgPSAkcm93Wyd0YWdfaWQnXTsNCgkJCQkkbnVtID0gJHJv d1snbnVtJ107DQoJCQkJJGlkcyA9IHNhZmVfY29sdW1uKCdpdGVtX2lkJywgU01EX1RBR1Us ICJ0eXBlPSckdHlwZScgQU5EIHRhZ19pZD0nJHRhZ2lkJyIpOw0KCQkJCSR0b3RhbHNbJHRh Z2lkXSA9IGFycmF5KCRudW0sIGpvaW4oIiwiLCRpZHMpKTsNCgkJCX0NCgkJfQ0KDQoJCWZv cmVhY2ggKCRycyBhcyAkcm93KSB7DQoJCQlleHRyYWN0KCRyb3cpOw0KCQkJJHBhcmVudCA9 IChpc3NldCgkcGFyZW50KSkgPyAkcGFyZW50IDogJyc7IC8vIFBhcmVudCBtaWdodCBub3Qg YmUgZGVmaW5lZA0KCQkJJHJvd1sndHlwZSddID0gJHR5cGU7DQoJCQlpZiAoaXNzZXQoJHRv dGFsc1skaWRdKSkgew0KCQkJCSRyb3dbJ2NvdW50J10gPSAkdG90YWxzWyRpZF1bMF07DQoJ CQkJJGV2ID0gYXJyYXlfa2V5cygkdmFsaWRUeXBlcywkdHlwZSk7DQoJCQkJJHVybCA9ICdp bmRleC5waHA/ZXZlbnQ9Jy4kZXZbMF0uYS4nc2VhcmNoX21ldGhvZD1pZCcuYS4nY3JpdD0n LiR0b3RhbHNbJGlkXVsxXTsNCgkJCQkkY250b3AgPSAnICgnLiBocmVmKCR0b3RhbHNbJGlk XVswXSwgJHVybCkgLicpJzsNCgkJCX0gZWxzZSB7DQoJCQkJJHJvd1snY291bnQnXSA9IDA7 DQoJCQkJJGNudG9wID0gJyAoMCknOw0KCQkJfQ0KDQoJCQkkcm93ZGF0YSA9ICc8c3BhbiBu YW1lPSJzbWRfdGFnbmFtIiBjbGFzcz0ic21kX2hpZGRlbiI+Jy4kbmFtZQ0KCQkJCQkuJzwv c3Bhbj48c3BhbiBuYW1lPSJzbWRfdGFnaWQiIGNsYXNzPSJzbWRfaGlkZGVuIj4nLiRpZA0K CQkJCQkuJzwvc3Bhbj48c3BhbiBuYW1lPSJzbWRfdGFndHRsIiBjbGFzcz0ic21kX2hpZGRl biI+Jy4kdGl0bGUNCgkJCQkJLic8L3NwYW4+PHNwYW4gbmFtZT0ic21kX3RhZ3BhciIgY2xh c3M9InNtZF9oaWRkZW4iPicuJHBhcmVudA0KCQkJCQkuJzwvc3Bhbj48c3BhbiBuYW1lPSJz bWRfdGFnY2F0IiBjbGFzcz0ic21kX2hpZGRlbiI+Jy4oKGlzc2V0KCRyc2NvdXRbJGlkXSkp ID8gJHJzY291dFskaWRdIDogJycpDQoJCQkJCS4nPC9zcGFuPic7DQoJCQkkb3V0W10gPSAk cm93ZGF0YS5zdHJfcmVwZWF0KCRpbmRlbnQsICRsZXZlbCAqIDEpDQoJCQkJCS4kdGl0bGUN CgkJCQkJLigoJGNvdW50KSA/ICRjbnRvcCA6ICcnKS5uOw0KLy8JCQkkc21kX3RoaXN0YWcg PSBhcnJheSgpOw0KCQl9DQoNCgkJaWYgKCRvdXQpIHsNCgkJCSR3cmFwaXQgPSBkb19saXN0 KCR3cmFwdGFnLCAiOiIpOw0KDQoJCQkvLyBUYWJsZXMgYXJlIGEgc3BlY2lhbCBjYXNlDQoJ CQlpZiAoJHdyYXBpdFswXSA9PSAidGFibGUiKSB7DQoNCgkJCQkkdG90YWxJdGVtcyA9ICRy b3dzID0gY291bnQoJHJzKTsNCgkJCQkkc3RlcCA9IDE7DQoJCQkJJGNvbHMgPSAxOw0KCQkJ CSRudW1vcHRzID0gY291bnQoJHdyYXBpdCk7DQoJCQkJLy8gRWFjaCBzdWNjZXNzaXZlIGxl dmVsIG92ZXJyaWRlcyB0aGUgcHJldmlvdXMgc3RlcCBzbyBieSB0aGUgZW5kIG9mIHRoZSBp ZnMsDQoJCQkJLy8gMyB2YWx1ZXMgYXJlIHNldCB1cDogc3RlcCwgcm93cyBhbmQgY29scw0K CQkJCWlmICgkbnVtb3B0cyA+IDEpIHsNCgkJCQkJJGNvbHMgPSAkd3JhcGl0WzFdOw0KCQkJ CQkkcm93cyA9IGNlaWwoJHRvdGFsSXRlbXMvJGNvbHMpOw0KCQkJCX0NCgkJCQlpZiAoJG51 bW9wdHMgPiAyKSB7DQoJCQkJCWlmICgkd3JhcGl0WzJdID09ICJyb3dzIikgew0KCQkJCQkJ JHJvd3MgPSAkd3JhcGl0WzFdOw0KCQkJCQkJJGNvbHMgPSBjZWlsKCR0b3RhbEl0ZW1zLyRy b3dzKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoJG51bW9wdHMgPiAzKSB7DQoJCQkJCWlm ICgkd3JhcGl0WzNdID09ICJieWNvbCIpIHsNCgkJCQkJCSRzdGVwID0gKCR3cmFwaXRbMl09 PSJjb2xzIikgPyBjZWlsKCR0b3RhbEl0ZW1zLyRjb2xzKSA6ICRyb3dzOw0KCQkJCQkJaWYg KCR3cmFwaXRbMl09PSJjb2xzIikgew0KCQkJCQkJCSRyb3dzID0gJHN0ZXA7DQoJCQkJCQl9 IGVsc2Ugew0KCQkJCQkJCSRjb2xzID0gY2VpbCgkdG90YWxJdGVtcy8kcm93cyk7DQoJCQkJ CQl9DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQkvLyBHZW5lcmF0ZSB0YWJsZSBiYXNlZCBvbiBh Ym92ZSBydWxlcw0KCQkJCSR0YmxvdXQgPSBhcnJheSgpOw0KCQkJCSRjZWxsQ3RyID0gMDsN CgkJCQkkY2xhc3MgPSAoIWVtcHR5KCRjbGFzcykpID8gJyBjbGFzcz0iJy4kY2xhc3MuJyIn IDogJyc7DQoJCQkJJGJyZWFrY2xhc3MgPSAoIWVtcHR5KCRicmVha2NsYXNzKSkgPyAnIGNs YXNzPSInLiRicmVha2NsYXNzLiciJyA6ICcnOw0KDQoJCQkJZm9yICgkaWR4ID0gMDsgJGlk eCA8ICRyb3dzOyAkaWR4KyspIHsNCgkJCQkJJGJsZCA9IGFycmF5KCk7DQoJCQkJCWZvciAo JGpkeCA9IDA7ICRqZHggPCAkY29sczsgJGpkeCsrKSB7DQoJCQkJCQkkb2Zmc2V0ID0gKCR3 cmFwaXRbM109PSJieWNvbCIpID8gKCRqZHggKiAkc3RlcCkgKyAkaWR4IDogJGNlbGxDdHI7 DQoJCQkJCQkkYmxkW10gPSAoaXNzZXQoJG91dFskb2Zmc2V0XSkpID8gdGQoJG91dFskb2Zm c2V0XSkgOiB0ZCgnJyk7DQoJCQkJCQkkY2VsbEN0cisrOw0KCQkJCQl9DQoJCQkJCSR0Ymxv dXRbXSA9IHRyKGpvaW4oIiIsICRibGQpLCAkYnJlYWtjbGFzcyk7DQogICAgICAgICAgICB9 DQoNCgkJCQlyZXR1cm4gZG9MYWJlbCgkbGFiZWwsICRsYWJlbHRhZykudGFnKGpvaW4oIiIs JHRibG91dCksICR3cmFwaXRbMF0sICRjbGFzcyk7DQoJCQl9IGVsc2Ugew0KCQkJCXJldHVy biBkb0xhYmVsKCRsYWJlbCwgJGxhYmVsdGFnKS5kb1dyYXAoJG91dCwgJHdyYXBpdFswXSwg JGJyZWFrLCAkY2xhc3MsICRicmVha2NsYXNzKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJyc7 DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEZpbmQgc29tZSB2 YWx1ZSBpbiBhIHRyZWUgYW5kIHJldHVybiB0aGUgbWF0Y2hpbmcgZW50cmllcw0KZnVuY3Rp b24gc21kX3RhZ190cmVlX3NlYXJjaCgkdmFsLCAkdHJlZSwgJGxpbWl0PTAsICRmaWVsZD0n bmFtZScpIHsNCgkkY3RyID0gMDsNCgkkb3V0ID0gYXJyYXkoKTsNCglmb3JlYWNoICgkdHJl ZSBhcyAkaWR4ID0+ICRlbnRyeSkgew0KCQlpZiAoJGVudHJ5WyRmaWVsZF0gPT0gJHZhbCkg ew0KCQkJJG91dFtdID0gJHRyZWVbJGlkeF07DQoJCQkkY3RyKys7DQoJCX0NCgkJaWYgKCRs aW1pdCA+IDAgJiYgJGN0ciA9PSAkbGltaXQpIHsNCgkJCWJyZWFrOw0KCQl9DQoJfQ0KCXJl dHVybiAkb3V0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFBVQkxJ QyBUQUdTDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIENoZWNrIHRhZ3Mgb2Yg YSBwYXJ0aWN1bGFyIHR5cGUsIG9yIHRob3NlIHRoYXQgaGF2ZSBhIHNwZWNpZmljIHByb3Bl cnR5IGluIGNvbnRleHQuDQovL1RPRE86IFRoaW5rIGFib3V0IGNoZWNraW5nIGxvZ2ljLCBl ZywgbmFtZT0iYnVzaW5lc3N8cGxlYXN1cmUiIChPUikgbmFtZT0iYnVzaW5lc3MrcGxlYXN1 cmUiIChBTkQpDQpmdW5jdGlvbiBzbWRfaWZfdGFnICgkYXR0cywgJHRoaW5nKSB7DQoJZ2xv YmFsICRzbWRfdGFncywgJHNtZF90YWdfdHlwZSwgJHNtZF90aGlzdGFnOw0KDQoJaWYgKCFz bWRfdGFnc190YWJsZV9leGlzdCgpKSB7DQoJCXRyaWdnZXJfZXJyb3Ioc21kX3RhZ3NfZ1R4 dCgnbm90X2F2YWlsYWJsZScpKTsNCgkJcmV0dXJuOw0KCX0NCg0KCWV4dHJhY3QobEF0dHMo YXJyYXkoDQoJCSd0eXBlJyA9PiBOVUxMLA0KCQknaWQnID0+IE5VTEwsDQoJCSduYW1lJyA9 PiBOVUxMLA0KCQkndGl0bGUnID0+IE5VTEwsDQoJCSdwYXJlbnQnID0+IE5VTEwsDQoJCSdj b3VudCcgPT4gTlVMTCwNCgkJJ2NoaWxkcmVuJyA9PiBOVUxMLA0KCQknbGV2ZWwnID0+IE5V TEwsDQoJCSdkZWJ1ZycgPT4gJzAnLA0KCSksJGF0dHMpKTsNCg0KCS8vIFZhbGlkYXRlIGF0 dHMNCgkkdmFsaWRUeXBlcyA9IGFycmF5KCdhcnRpY2xlJywnaW1hZ2UnLCdmaWxlJywnbGlu aycpOw0KCSRjdHh0ID0gc21kX3RhZ3NfY29udGV4dCgpOw0KDQoJJHNjb3BlID0gJGN0eHRb J3Njb3BlJ107DQoJJGlkbGlzdCA9ICRjdHh0WydpZCddOw0KCSRjdHlwZSA9ICRjdHh0Wydj b250ZXh0J107DQoJJHR5cGUgPSAoaW5fYXJyYXkoJHR5cGUsICR2YWxpZFR5cGVzKSkgPyAk dHlwZSA6ICggKCRjdHh0Wydjb250ZXh0J10pID8gJGN0eHRbJ2NvbnRleHQnXSA6ICggKCRz bWRfdGFnX3R5cGUpID8gJHNtZF90YWdfdHlwZSA6ICAkdmFsaWRUeXBlc1swXSApICk7DQoN CgkkZXF0ZXN0ID0gYXJyYXkoKTsNCgkkbnV0ZXN0ID0gYXJyYXkoKTsNCgkkb3BSRSA9ICcv KFw+fFw+XD18XDx8XDxcPXxcISkoWzAtOWEtekEtWi0gXSspLyc7DQoNCgkkbnVtID0gcHJl Z19tYXRjaF9hbGwoJG9wUkUsICRpZCwgJHBhcnRzKTsNCgkkZXF0ZXN0WydpZCddID0gKCRu dW08PTApID8gJGlkIDogJyc7DQoJaWYgKCRudW0+MCkgJG51dGVzdFsnaWQnXSA9IGFycmF5 KCRwYXJ0c1sxXVswXSA9PiAkcGFydHNbMl1bMF0pOw0KCSRudW0gPSBwcmVnX21hdGNoX2Fs bCgkb3BSRSwgJG5hbWUsICRwYXJ0cyk7DQoJJGVxdGVzdFsnbmFtZSddID0gKCRudW08PTAp ID8gJG5hbWUgOiAnJzsNCglpZiAoJG51bT4wKSAkbnV0ZXN0WyduYW1lJ10gPSBhcnJheSgk cGFydHNbMV1bMF0gPT4gJHBhcnRzWzJdWzBdKTsNCgkkbnVtID0gcHJlZ19tYXRjaF9hbGwo JG9wUkUsICR0eXBlLCAkcGFydHMpOw0KCSRlcXRlc3RbJ3R5cGUnXSA9ICgkbnVtPD0wKSA/ ICR0eXBlIDogJyc7DQoJaWYgKCRudW0+MCkgJG51dGVzdFsndHlwZSddID0gYXJyYXkoJHBh cnRzWzFdWzBdID0+ICRwYXJ0c1syXVswXSk7DQoJJG51bSA9IHByZWdfbWF0Y2hfYWxsKCRv cFJFLCAkdGl0bGUsICRwYXJ0cyk7DQoJJGVxdGVzdFsndGl0bGUnXSA9ICgkbnVtPD0wKSA/ ICR0aXRsZSA6ICcnOw0KCWlmICgkbnVtPjApICRudXRlc3RbJ3RpdGxlJ10gPSBhcnJheSgk cGFydHNbMV1bMF0gPT4gJHBhcnRzWzJdWzBdKTsNCgkkbnVtID0gcHJlZ19tYXRjaF9hbGwo JG9wUkUsICRwYXJlbnQsICRwYXJ0cyk7DQoJJGVxdGVzdFsncGFyZW50J10gPSAoJG51bTw9 MCkgPyAkcGFyZW50IDogJyc7DQoJaWYgKCRudW0+MCkgJG51dGVzdFsncGFyZW50J10gPSBh cnJheSgkcGFydHNbMV1bMF0gPT4gJHBhcnRzWzJdWzBdKTsNCgkkbnVtID0gcHJlZ19tYXRj aF9hbGwoJG9wUkUsICRjb3VudCwgJHBhcnRzKTsNCgkkZXF0ZXN0Wydjb3VudCddID0gKCRu dW08PTApID8gJGNvdW50IDogJyc7DQoJaWYgKCRudW0+MCkgJG51dGVzdFsnY291bnQnXSA9 IGFycmF5KCRwYXJ0c1sxXVswXSA9PiAkcGFydHNbMl1bMF0pOw0KCSRudW0gPSBwcmVnX21h dGNoX2FsbCgkb3BSRSwgJGNoaWxkcmVuLCAkcGFydHMpOw0KCSRlcXRlc3RbJ2NoaWxkcmVu J10gPSAoJG51bTw9MCkgPyAkY2hpbGRyZW4gOiAnJzsNCglpZiAoJG51bT4wKSAkbnV0ZXN0 WydjaGlsZHJlbiddID0gYXJyYXkoJHBhcnRzWzFdWzBdID0+ICRwYXJ0c1syXVswXSk7DQoJ JG51bSA9IHByZWdfbWF0Y2hfYWxsKCRvcFJFLCAkbGV2ZWwsICRwYXJ0cyk7DQoJJGVxdGVz dFsnbGV2ZWwnXSA9ICgkbnVtPD0wKSA/ICRsZXZlbCA6ICcnOw0KCWlmICgkbnVtPjApICRu dXRlc3RbJ2xldmVsJ10gPSBhcnJheSgkcGFydHNbMV1bMF0gPT4gJHBhcnRzWzJdWzBdKTsN Cg0KCWlmICgkZGVidWcpIHsNCgkJZWNobyAiKysgSUZfVEFHIFRFU1RTICsrIjsNCgkJZG1w KCRlcXRlc3QsICRudXRlc3QpOw0KCX0NCg0KCS8vIEluaXQNCgkkb3V0ID0gJHJlc3VsdCA9 ICRudW1UZXN0cyA9IDA7DQoJaWYgKGVtcHR5KCRzbWRfdGFncykgJiYgZW1wdHkoJHNtZF90 aGlzdGFnKSkgew0KCQkvLyBub3QgaW4gc2NvcGUNCgl9IGVsc2Ugew0KCQkvLyBFcXVhbGl0 eSBjb21wYXJpc29ucw0KCQlmb3JlYWNoICgkZXF0ZXN0IGFzICR0bmFtZSA9PiAkdHZhbCkg ew0KCQkJaWYgKCFpc19udWxsKCR0dmFsKSkgew0KCQkJCSRudW1UZXN0cysrOw0KCQkJCWlm ICgkc21kX3RoaXN0YWcpIHsNCgkJCQkJLy8gTG9jYWwgc2NvcGUNCgkJCQkJaWYgKCRzbWRf dGhpc3RhZ1sndGFnXycuJHRuYW1lXSA9PSAkdHZhbCkgew0KCQkJCQkJJG91dCsrOw0KCQkJ CQl9DQoJCQkJfSBlbHNlIHsNCgkJCQkJLy8gR2xvYmFsIHNjb3BlDQoJCQkJCWlmICgkdG5h bWUgPT0gInR5cGUiKSB7DQoJCQkJCQlpZiAoJHNtZF90YWdfdHlwZSA9PSAkdHlwZSB8fCAk Y3R5cGUgPT0gJHR5cGUpIHsNCgkJCQkJCQkkb3V0Kys7DQoJCQkJCQl9DQoJCQkJCX0NCgkJ CQkJaWYgKGlzc2V0KCRzbWRfdGFnc1skdHlwZV1bJ3RhZ18nLiR0bmFtZV0pICYmIGluX2Fy cmF5KCR0dmFsLCAkc21kX3RhZ3NbJHR5cGVdWyd0YWdfJy4kdG5hbWVdLCBlbXB0eSgkdHZh bCkgJiYgJHR2YWwgIT09ICcwJykpIHsNCgkJCQkJCSRvdXQrKzsNCgkJCQkJfQ0KCQkJCX0N CgkJCX0NCgkJfQ0KCQkvLyBOdW1lcmljIGNvbXBhcmlzb25zDQoJCWZvcmVhY2ggKCRudXRl c3QgYXMgJHRuYW1lID0+ICR0dmFsKSB7DQoJCQkkbnVtVGVzdHMrKzsNCgkJCSRvcCA9IGN1 cnJlbnQoYXJyYXlfa2V5cygkdHZhbCkpOw0KCQkJJHZhbCA9IGN1cnJlbnQoJHR2YWwpOw0K CQkJaWYgKCRzbWRfdGhpc3RhZykgew0KCQkJCSRjb21wYXJpc29uID0gJHNtZF90aGlzdGFn Wyd0YWdfJy4kdG5hbWVdOw0KCQkJfSBlbHNlIHsNCgkJCQkkY29tcGFyaXNvbiA9ICRzbWRf dGFnc1skdHlwZV1bJ3RhZ18nLiR0bmFtZV07DQoJCQl9DQoJCQlzd2l0Y2ggKCRvcCkgew0K CQkJCWNhc2UgJz4nOg0KCQkJCQlpZiAoaXNzZXQoJGNvbXBhcmlzb24pICYmICRjb21wYXJp c29uID4gJHZhbCkgew0KCQkJCQkJJG91dCsrOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJ CWNhc2UgJz49JzoNCgkJCQkJaWYgKGlzc2V0KCRjb21wYXJpc29uKSAmJiAkY29tcGFyaXNv biA+PSAkdmFsKSB7DQoJCQkJCQkkb3V0Kys7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJ Y2FzZSAnPCc6DQoJCQkJCWlmIChpc3NldCgkY29tcGFyaXNvbikgJiYgJGNvbXBhcmlzb24g PCAkdmFsKSB7DQoJCQkJCQkkb3V0Kys7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2Fz ZSAnPD0nOg0KCQkJCQlpZiAoaXNzZXQoJGNvbXBhcmlzb24pICYmICRjb21wYXJpc29uIDw9 ICR2YWwpIHsNCgkJCQkJCSRvdXQrKzsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNl ICchJzoNCgkJCQkJaWYgKGlzc2V0KCRjb21wYXJpc29uKSAmJiAkY29tcGFyaXNvbiAhPSAk dmFsKSB7DQoJCQkJCQkkb3V0Kys7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQl9DQoJCQkJ CQl9DQoNCgkJLy8gQ291bnQgaG93IG1hbnkgc3VjY2Vzc2VzIHRoZXJlIHdlcmUNCgkJaWYg KCRkZWJ1Zykgew0KCQkJZWNobyAiKysgTlVNIFRFU1RTICYgUkVTVUxUKysiOw0KCQkJZG1w KCRudW1UZXN0cyk7DQoJCQlkbXAoJG91dCk7DQoJCX0NCgkJaWYgKCRudW1UZXN0cyA9PSAk b3V0KSB7DQoJCQkkcmVzdWx0ID0gMTsNCgkJfQ0KCX0NCg0KCXJldHVybiBwYXJzZShFdmFs RWxzZSgkdGhpbmcsICRyZXN1bHQpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfaWZfdGFnX2xpc3QgKCRhdHRzLCAkdGhpbmcpIHsNCglnbG9i YWwgJHNtZF90YWdfdHlwZTsNCglyZXR1cm4gcGFyc2UoRXZhbEVsc2UoJHRoaW5nLCAoIWVt cHR5KCRzbWRfdGFnX3R5cGUpKSkpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCi8vIFJldHVybiBuYW1lL3RpdGxlIG9mIGN1cnJlbnQgdGFnDQpmdW5jdGlvbiBzbWRf dGFnX25hbWUoJGF0dHMsICR0aGluZz0nJykgew0KCWdsb2JhbCAkc21kX3RoaXN0YWcsICRw ZXJtbGlua19tb2RlOw0KDQoJaWYgKCFzbWRfdGFnc190YWJsZV9leGlzdCgpKSB7DQoJCXRy aWdnZXJfZXJyb3Ioc21kX3RhZ3NfZ1R4dCgnbm90X2F2YWlsYWJsZScpKTsNCgkJcmV0dXJu Ow0KCX0NCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSd0aXRsZScgPT4gMCwNCgkJJ2xp bmsnID0+ICcnLA0KCQknc2VjdGlvbicgPT4gJycsDQoJCSdwYXJlbnQnID0+IDAsIC8vIG5v dCB1c2VmdWwgdG8gcHJpbnQgYnV0IGdvb2QgZm9yIFVSTHMgdG8gbmF2IGJhY2sgdXAgdGhl IHRyZWUNCgkJJ3BhcmVudGxhYmVsJyA9PiAnVXAgYSBsZXZlbCcsDQoJCSd3cmFwdGFnJyA9 PiAnJywNCgkJJ2NsYXNzJyA9PiBfX0ZVTkNUSU9OX18sDQoJCSdwYWRfc3RyJyA9PiAnJywN CgkJJ3BhZF9wb3MnID0+ICdsZWZ0JywgLy8gbGVmdC9yaWdodC9ib3RoIHdpdGggb3B0aW9u YWwgOmluIHN1ZmZpeCB0byBpbmRpY2F0ZSBpZiBpdCdzIHRvIGdvIGluc2lkZSB0aGUgbGlu aw0KCSksJGF0dHMpKTsNCg0KCSRzbWRwcmVmID0gc21kX3RhZ3NfcHJlZl9nZXQoYXJyYXko J3NtZF90YWdfdV9zZWMnLCAnc21kX3RhZ191X3BuYW0nLCAnc21kX3RhZ191X3B0eXAnKSwg MSk7DQoJJHNlY3Rpb24gPSAoJHNlY3Rpb24pID8gJHNlY3Rpb24gOiAkc21kcHJlZlsnc21k X3RhZ191X3NlYyddWyd2YWwnXTsNCgkkdXJsbmFtID0gJHNtZHByZWZbJ3NtZF90YWdfdV9w bmFtJ11bJ3ZhbCddOw0KCSR1cmx0eXAgPSAkc21kcHJlZlsnc21kX3RhZ191X3B0eXAnXVsn dmFsJ107DQoNCgkkbGFiZWwgPSAoJHBhcmVudCkgPyAkcGFyZW50bGFiZWwgOiAoKCR0aXRs ZSkgPyAkc21kX3RoaXN0YWdbJ3RhZ190aXRsZSddIDogJHNtZF90aGlzdGFnWyd0YWdfbmFt ZSddKTsNCgkkdG5hbWUgPSAoJHBhcmVudCkgPyAkc21kX3RoaXN0YWdbJ3RhZ19wYXJlbnQn XSA6ICRzbWRfdGhpc3RhZ1sndGFnX25hbWUnXTsNCgkkbGV2ZWwgPSAkc21kX3RoaXN0YWdb J3RhZ19sZXZlbCddOw0KCSRwYWRkaW5nID0gKCRwYWRfc3RyKSA/IHN0cl9yZXBlYXQoJHBh ZF9zdHIsICRsZXZlbCkgOiAnJzsNCgkkcGFkX3BvcyA9IGRvX2xpc3QoJHBhZF9wb3MsICc6 Jyk7DQoJJHBhZFsnbGluJ10gPSAoJHBhZGRpbmcgJiYgKGluX2FycmF5KCdsZWZ0JywgJHBh ZF9wb3MpICE9PSBmYWxzZSB8fCBpbl9hcnJheSgnYm90aCcsICRwYWRfcG9zKSAhPT0gZmFs c2UpICYmIGluX2FycmF5KCdpbicsICRwYWRfcG9zKSAhPT0gZmFsc2UpID8gJHBhZGRpbmcg OiAnJzsNCgkkcGFkWydyaW4nXSA9ICgkcGFkZGluZyAmJiAoaW5fYXJyYXkoJ3JpZ2h0Jywg JHBhZF9wb3MpICE9PSBmYWxzZSB8fCBpbl9hcnJheSgnYm90aCcsICRwYWRfcG9zKSAhPT0g ZmFsc2UpICYmIGluX2FycmF5KCdpbicsICRwYWRfcG9zKSAhPT0gZmFsc2UpID8gJHBhZGRp bmcgOiAnJzsNCgkkcGFkWydsJ10gPSAoJHBhZGRpbmcgJiYgKGluX2FycmF5KCdsZWZ0Jywg JHBhZF9wb3MpICE9PSBmYWxzZSB8fCBpbl9hcnJheSgnYm90aCcsICRwYWRfcG9zKSAhPT0g ZmFsc2UpICYmIChlbXB0eSgkcGFkWydsaW4nXSkgfHwgISRsaW5rKSkgPyAkcGFkZGluZyA6 ICcnOw0KCSRwYWRbJ3InXSA9ICgkcGFkZGluZyAmJiAoaW5fYXJyYXkoJ3JpZ2h0JywgJHBh ZF9wb3MpICE9PSBmYWxzZSB8fCBpbl9hcnJheSgnYm90aCcsICRwYWRfcG9zKSAhPT0gZmFs c2UpICYmIChlbXB0eSgkcGFkWydyaW4nXSkgfHwgISRsaW5rKSkgPyAkcGFkZGluZyA6ICcn Ow0KCSRkZXN0ID0gKCRwZXJtbGlua19tb2RlID09ICdtZXNzeScpDQoJCQkJPyBwYWdlbGlu a3VybChhcnJheSgncycgPT4gJHNlY3Rpb24sICR1cmxuYW0gPT4gJHRuYW1lLCAkdXJsdHlw ID0+ICRzbWRfdGhpc3RhZ1sndGFnX3R5cGUnXSkpDQoJCQkJOiAnLycuJHNlY3Rpb24uJy8n LiRzbWRfdGhpc3RhZ1sndGFnX3R5cGUnXS4nLycuJHRuYW1lOw0KCWlmICgkdGhpbmcpIHsN CgkJJG91dCA9ICc8YScuDQoJCQkoJHBlcm1saW5rX21vZGUgIT0gJ21lc3N5JyA/ICcgcmVs PSJ0YWciJyA6ICcnKS4NCgkJCSggKCRjbGFzcyBhbmQgISR3cmFwdGFnKSA/ICcgY2xhc3M9 IicuJGNsYXNzLiciJyA6ICcnICkuDQoJCQknIGhyZWY9IicuJGRlc3QuJyInLg0KCQkJKCR0 aXRsZSA/ICcgdGl0bGU9IicuJGxhYmVsLiciJyA6ICcnKS4NCgkJCSc+Jy5wYXJzZSgkdGhp bmcpLic8L2E+JzsNCgl9IGVsc2VpZiAoJGxpbmspIHsNCgkJJG91dCA9ICRwYWRbJ2wnXS4n PGEnLg0KCQkJKCRwZXJtbGlua19tb2RlICE9ICdtZXNzeScgPyAnIHJlbD0idGFnIicgOiAn JykuDQoJCQknIGhyZWY9IicuJGRlc3QuJyI+Jy4kcGFkWydsaW4nXS4kbGFiZWwuJHBhZFsn cmluJ10uJzwvYT4nLiRwYWRbJ3InXTsNCgl9IGVsc2Ugew0KCQkkb3V0ID0gJHBhZFsnbCdd LiRsYWJlbC4kcGFkWydyJ107DQoJfQ0KDQoJcmV0dXJuIGRvVGFnKCRvdXQsICR3cmFwdGFn LCAkY2xhc3MpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJldHVy biAjIG9mIGl0ZW1zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhZw0KLy9UT0RPOiB0aGluayBh Ym91dCBwZXItc2VjdGlvbiAvIHBlci1jYXRlZ29yeSBjb3VudHMNCmZ1bmN0aW9uIHNtZF90 YWdfY291bnQoJGF0dHMsICR0aGluZz0nJykgew0KCWdsb2JhbCAkc21kX3RoaXN0YWc7DQoN CglpZiAoIXNtZF90YWdzX3RhYmxlX2V4aXN0KCkpIHsNCgkJdHJpZ2dlcl9lcnJvcihzbWRf dGFnc19nVHh0KCdub3RfYXZhaWxhYmxlJykpOw0KCQlyZXR1cm47DQoJfQ0KDQoJZXh0cmFj dChsQXR0cyhhcnJheSgNCgkJJ2NsYXNzJyA9PiBfX0ZVTkNUSU9OX18sDQoJCSd3cmFwdGFn JyA9PiAnJywNCgkJJ3dyYXBjb3VudCcgPT4gJyAoOiknLA0KCQknc2hvd2VtcHR5JyA9PiAn MScsDQoJCSdwYXJhbWRlbGltJyA9PiAnOicsDQoJKSwkYXR0cykpOw0KDQoJJHdyYXBjb3Vu dCA9IGV4cGxvZGUoJHBhcmFtZGVsaW0sICR3cmFwY291bnQpOyAvLyBkb19saXN0IGRvZXMg YSB0cmltOiBkb24ndCB3YW50IHRoYXQNCglpZiAoY291bnQoJHdyYXBjb3VudCkgPT0gMSkg ew0KCQkkd3JhcGNvdW50WzFdID0gJHdyYXBjb3VudFswXTsNCgl9DQoNCgkkb3V0ID0gJHNt ZF90aGlzdGFnWyd0YWdfY291bnQnXTsNCgkkb3V0ID0gKCRvdXQgPT0gMCAmJiAhJHNob3dl bXB0eSkgPyAnJyA6ICR3cmFwY291bnRbMF0uJG91dC4kd3JhcGNvdW50WzFdOw0KDQoJcmV0 dXJuIGRvVGFnKCRvdXQsICR3cmFwdGFnLCAkY2xhc3MpOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIFJldHVybiBvdGhlciBpbmZvIGFib3V0IHRoZSBjdXJyZW50 IHRhZw0KZnVuY3Rpb24gc21kX3RhZ19pbmZvKCRhdHRzLCAkdGhpbmc9JycpIHsNCglnbG9i YWwgJHNtZF90aGlzdGFnOw0KDQoJaWYgKCFzbWRfdGFnc190YWJsZV9leGlzdCgpKSB7DQoJ CXRyaWdnZXJfZXJyb3Ioc21kX3RhZ3NfZ1R4dCgnbm90X2F2YWlsYWJsZScpKTsNCgkJcmV0 dXJuOw0KCX0NCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSdpdGVtJyA9PiAnbmFtZScs DQoJCSd3cmFwdGFnJyA9PiAnJywNCgkJJ2JyZWFrJyA9PiAnYnInLA0KCQknY2xhc3MnID0+ IF9fRlVOQ1RJT05fXywNCgkJJ2JyZWFrY2xhc3MnID0+ICcnLA0KCSksJGF0dHMpKTsNCg0K CSRvdXQgPSBhcnJheSgpOw0KCSRhdmFpbGFibGVJdGVtcyA9IGFycmF5KCdpZCcsJ25hbWUn LCd0aXRsZScsJ3R5cGUnLCdwYXJlbnQnLCdjaGlsZHJlbicsJ2xldmVsJywnY291bnQnKTsN CgkkaXRlbXMgPSBkb19saXN0KCRpdGVtKTsNCglmb3JlYWNoICgkaXRlbXMgYXMgJHdoYXRu b3QpIHsNCgkJaWYgKGluX2FycmF5KCR3aGF0bm90LCAkYXZhaWxhYmxlSXRlbXMpKSB7DQoJ CQkkb3V0W10gPSAkc21kX3RoaXN0YWdbJ3RhZ18nLiR3aGF0bm90XTsNCgkJfQ0KCX0NCgly ZXR1cm4gZG9XcmFwKCRvdXQsICR3cmFwdGFnLCAkYnJlYWssICRjbGFzcywgJGJyZWFrY2xh c3MpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJlbGF0ZWQgYXJ0 aWNsZXMvaW1hZ2VzL2ZpbGVzL2xpbmtzIGJ5IHRhZw0KZnVuY3Rpb24gc21kX3JlbGF0ZWRf dGFncygkYXR0cywgJHRoaW5nPScnKSB7DQoJZ2xvYmFsICR0aGlzYXJ0aWNsZSwgJHRoaXNm aWxlLCAkdGhpc2xpbmssICR0aGlzaW1hZ2UsICRwcmV0ZXh0LCAkcHJlZnMsICRzbWRfdGFn cywgJHNtZF90aGlzdGFnOw0KDQoJaWYgKCFzbWRfdGFnc190YWJsZV9leGlzdCgpKSB7DQoJ CXRyaWdnZXJfZXJyb3Ioc21kX3RhZ3NfZ1R4dCgnbm90X2F2YWlsYWJsZScpKTsNCgkJcmV0 dXJuOw0KCX0NCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSd0eXBlJyA9PiAnJywNCgkJ J3NlY3Rpb24nID0+ICRwcmV0ZXh0WydzJ10sDQoJCSdzdGF0dXMnID0+ICc0JywNCgkJJ2xp bWl0JwkgPT4gOTk5OTksDQoJCSdvZmZzZXQnCT0+IDAsDQoJCSdmb3JtJwk9PiAnJywNCgkJ J21hdGNoJyA9PiAndGFnX25hbWUnLA0KCQknbWF0Y2hfc2VsZicgPT4gMCwNCgkJJ25vX3dp ZG93JyA9PiBAJHByZWZzWyd0aXRsZV9ub193aWRvdyddLA0KCQknc29ydCcgPT4gJycsDQoJ CSdsYWJlbCcgPT4gJycsDQoJCSdsYWJlbHRhZycgPT4gJycsDQoJCSd3cmFwdGFnJyA9PiAn JywNCgkJJ2JyZWFrJyA9PiAnYnInLA0KCQknY2xhc3MnID0+IF9fRlVOQ1RJT05fXywNCgkJ J2RlbGltJyA9PiAnLCcsDQoJCSdwYXJhbWRlbGltJyA9PiAnOicsDQoJCSdkZWJ1ZycgPT4g JzAnLA0KCSksJGF0dHMpKTsNCg0KCS8vIFZhbGlkYXRlIGF0dHMNCgkkdmFsaWRUeXBlcyA9 IGFycmF5KCdhcnRpY2xlJywnaW1hZ2UnLCdmaWxlJywnbGluaycpOw0KCSRjdHh0ID0gc21k X3RhZ3NfY29udGV4dCgpOw0KDQoJJHNjb3BlID0gJGN0eHRbJ3Njb3BlJ107DQoJJGlkbGlz dCA9ICRjdHh0WydpZCddOw0KCSRjdHlwZSA9ICRjdHh0Wydjb250ZXh0J107DQoJJHR5cGUg PSAoaW5fYXJyYXkoJHR5cGUsICR2YWxpZFR5cGVzKSkgPyAkdHlwZSA6ICgoJGN0eHRbJ2Nv bnRleHQnXSkgPyAkY3R4dFsnY29udGV4dCddIDogJHZhbGlkVHlwZXNbMF0pOw0KDQoJJHNl Y3Rpb25DbGF1c2UgPSAoJHNlY3Rpb24pID8gIiBBTkQgdHhwLlNlY3Rpb24gSU4gKCciLmpv aW4oIicsJyIsIGRvU2xhc2goZG9fbGlzdCgkc2VjdGlvbikpKS4iJykiIDogJyc7DQoJJHN0 YXR1cyA9IGRvX2xpc3QoJHN0YXR1cyk7DQoJJHN0YXRpID0gYXJyYXkoKTsNCglmb3JlYWNo ICgkc3RhdHVzIGFzICRzdGF0KSB7DQoJCWlmIChlbXB0eSgkc3RhdCkpIHsNCgkJCWNvbnRp bnVlOw0KCQl9IGVsc2UgaWYgKGlzX251bWVyaWMoJHN0YXQpKSB7DQoJCQkkc3RhdGlbXSA9 ICRzdGF0Ow0KCQl9IGVsc2Ugew0KCQkJJHN0YXRpW10gPSBnZXRTdGF0dXNOdW0oJHN0YXQp Ow0KCQl9DQoJfQ0KCSRzdGF0U1FMID0gJyBBTkQgdHhwLlN0YXR1cyBJTiAoJy5qb2luKCcs JywgJHN0YXRpKS4nKSc7DQoNCgkkb3V0ID0gYXJyYXkoKTsNCg0KCWlmICghJHNvcnQpIHsN CgkJc3dpdGNoICgkdHlwZSkgew0KCQkJY2FzZSAiYXJ0aWNsZSI6DQoJCQkJJHNvcnQgPSAi UG9zdGVkIGRlc2MiOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAiaW1hZ2UiOg0KDQoJCQljYXNl ICJsaW5rIjoNCgkJCQkkc29ydCA9ICJkYXRlIGRlc2MiOw0KCQkJCWJyZWFrOw0KCQkJY2Fz ZSAiZmlsZSI6DQoJCQkJJHNvcnQgPSAiY3JlYXRlZCBkZXNjIjsNCgkJCQlicmVhazsNCgkJ fQ0KCX0NCg0KCS8vIExvb2t1cCB0YWJsZSBmb3IgbWFraW5nIFNRTCBxdWVyaWVzDQoJJHNx bFN0dWJzID0gYXJyYXkoDQoJCSJhcnRpY2xlIiA9PiBhcnJheSgNCgkJCSJzZWxlY3QiID0+ ICIqLHVuaXhfdGltZXN0YW1wKFBvc3RlZCkgYXMgdVBvc3RlZCwgdW5peF90aW1lc3RhbXAo TGFzdE1vZCkgYXMgdUxhc3RNb2QsIHVuaXhfdGltZXN0YW1wKEV4cGlyZXMpIGFzIHVFeHBp cmVzIiwNCgkJCSJ0YWJsZSIgPT4gInRleHRwYXR0ZXJuIiwNCgkJCSJndGFncyIgPT4gJHRo aXNhcnRpY2xlLA0KCQkJImdpZCIgPT4gInRoaXNpZCIsDQoJCSksDQoJCSJpbWFnZSIgPT4g YXJyYXkoDQoJCQkic2VsZWN0IiA9PiAiKiIsDQoJCQkidGFibGUiID0+ICJ0eHBfaW1hZ2Ui LA0KCQkJImd0YWdzIiA9PiAkdGhpc2ltYWdlLA0KCQkJImdpZCIgPT4gImlkIiwNCgkJKSwN CgkJImZpbGUiID0+IGFycmF5KA0KCQkJInNlbGVjdCIgPT4gIioiLA0KCQkJInRhYmxlIiA9 PiAidHhwX2ZpbGUiLA0KCQkJImd0YWdzIiA9PiAkdGhpc2ZpbGUsDQoJCQkiZ2lkIiA9PiAi aWQiLA0KCQkpLA0KCQkibGluayIgPT4gYXJyYXkoDQoJCQkic2VsZWN0IiA9PiAiKiIsDQoJ CQkidGFibGUiID0+ICJ0eHBfbGluayIsDQoJCQkiZ3RhZ3MiID0+ICR0aGlzbGluaywNCgkJ CSJnaWQiID0+ICJpZCIsDQoJCSksDQoJKTsNCg0KCS8vIEV4dHJhY3Qgc3R1ZmYgdG8gbWF0 Y2ggJiBtYWtlIHVwIHF1ZXJ5IHJlcGxhY2VtZW50IHZhcmlhYmxlcw0KCSRtYXRjaCA9IGRv X2xpc3QoJG1hdGNoLCAkcGFyYW1kZWxpbSk7DQoJJG1hdGNoVHlwZSA9IGFycmF5X3NoaWZ0 KCRtYXRjaCk7DQoJaWYgKGNvdW50KCRtYXRjaCkgPT0gMCkgew0KCQkvLyBBc3N1bWUgY3Vy cmVudCB0eXBlIHVubGVzcyBhIHRhZyBpcyBiZWluZyBtYXRjaGVkIChpbiB3aGljaCBjYXNl LCB1c2UgJGN0eXBlKQ0KCQkkbWF0Y2hXaXRoID0gYXJyYXkoJG1hdGNoVHlwZSk7DQoJCSRt YXRjaFR5cGUgPSAoc3RycG9zKCRtYXRjaFdpdGhbMF0sICd0YWdfJykgIT09IGZhbHNlKSA/ ICRjdHlwZSA6ICR0eXBlOw0KCX0gZWxzZSB7DQoJCSRtYXRjaFdpdGggPSAkbWF0Y2g7DQoJ fQ0KLy9kbXAoJG1hdGNoVHlwZSk7DQoJJG1hdGNoZXMgPSBhcnJheSgpOw0KCWZvcmVhY2gg KCRtYXRjaFdpdGggYXMgJG1hdGNoSXRlbSkgew0KCQlpZiAoc3RycG9zKCRtYXRjaEl0ZW0s ICd0YWdfJykgIT09IGZhbHNlKSB7DQoJCQkkbG9va2luID0gJHNtZF90YWdzWyRtYXRjaFR5 cGVdOw0KCQl9IGVsc2Ugew0KCQkJJGxvb2tpbiA9ICRzcWxTdHVic1skbWF0Y2hUeXBlXVsi Z3RhZ3MiXTsNCgkJfQ0KCQlpZiAoaXNzZXQoJGxvb2tpblskbWF0Y2hJdGVtXSkpIHsNCgkJ CSR0aGlzbWF0Y2ggPSAkbG9va2luWyRtYXRjaEl0ZW1dOw0KCQkJaWYgKGlzX2FycmF5KCR0 aGlzbWF0Y2gpKSB7DQoJCQkJZm9yZWFjaCAoJHRoaXNtYXRjaCBhcyAkc3ViSUQgPT4gJHN1 Ykl0ZW0pIHsNCgkJCQkJaWYgKGluX2FycmF5KCRzdWJJRCwgJGlkbGlzdCkpIHsNCgkJCQkJ CSRtYXRjaGVzW10gPSAkc3ViSXRlbTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJ CQkJJG1hdGNoZXNbXSA9ICR0aGlzbWF0Y2g7DQoJCQl9DQoJCX0NCgl9DQoJJG1hdGNoZXMg PSBhcnJheV91bmlxdWUoJG1hdGNoZXMpOw0KCWlmICgkZGVidWcpIHsNCgkJZWNobyAiKysg TUFUQ0hFUyArKyAiOw0KCQlkbXAoJG1hdGNoZXMpOw0KCX0NCg0KCS8vIENvbnZlcnQgYWJv dmUgb3B0cyB0byBTUUwgcXVlcnkgY2xhdXNlcw0KCSRleGNsdWRlQ2xhdXNlID0gKCRtYXRj aF9zZWxmKSA/ICcnIDogJyBBTkQgdHhwLmlkIT0iJy4kc3FsU3R1YnNbJHR5cGVdWyJndGFn cyJdWyRzcWxTdHVic1skdHlwZV1bImdpZCJdXS4nIic7DQoJJG1hdGNoQ2xhdXNlID0gIiBB TkQgIiAuKCgkbWF0Y2hlcykgPyAic210Lm5hbWUgSU4gKCIgLmpvaW4oIiwiLCBkb0FycmF5 KCRtYXRjaGVzLCAnZG9RdW90ZScpKS4gIikiIDogInNtdC5uYW1lID0gJyciKTsNCgkkb3Jk ZXJCeSA9ICIgT1JERVIgQlkgIiAuJHNvcnQuICIgTElNSVQgIiAuJG9mZnNldC4gIiwiIC4k bGltaXQ7DQoNCglzd2l0Y2ggKCR0eXBlKSB7DQoJCWNhc2UgImFydGljbGUiOg0KCQkJJHJz ID0gZ2V0Um93cygiU0VMRUNUICIuJHNxbFN0dWJzWyR0eXBlXVsic2VsZWN0Il0uIiBGUk9N ICIuc2FmZV9wZngoJHNxbFN0dWJzWyR0eXBlXVsidGFibGUiXSkuIiBBUyB0eHANCgkJCQlM RUZUIEpPSU4gIi5QRlguU01EX1RBR1UuICIgQVMgdHUgT04gdHhwLmlkID0gdHUuaXRlbV9p ZA0KCQkJCUxFRlQgSk9JTiAiLlBGWC5TTURfVEFHLiAiIEFTIHNtdCBPTiB0dS50YWdfaWQg PSBzbXQuaWQNCgkJCQlXSEVSRSB0dS50eXBlPSdhcnRpY2xlJyIgLiAkc3RhdFNRTCAuICRl eGNsdWRlQ2xhdXNlIC4gJHNlY3Rpb25DbGF1c2UgLiAkbWF0Y2hDbGF1c2UgLiAkb3JkZXJC eSwgJGRlYnVnKTsNCgkJCWlmICgkcnMpIHsNCgkJCQlpZiAoJGRlYnVnID4gMSkgew0KCQkJ CQllY2hvICIrKyBSRUNPUkQgU0VUICsrIjsNCgkJCQkJZG1wKCRycyk7DQoJCQkJfQ0KCQkJ CSR1bmlxcnMgPSBhcnJheSgpOw0KCQkJCWZvcmVhY2ggKCRycyBhcyAkcm93KSB7DQoJCQkJ CWlmICghaW5fYXJyYXkoJHJvd1snSUQnXSwgJHVuaXFycykpIHsNCgkJCQkJCXBvcHVsYXRl QXJ0aWNsZURhdGEoJHJvdyk7DQoJCQkJCQkkcm93WydUaXRsZSddID0gKCRub193aWRvdykg PyBub1dpZG93KGVzY2FwZV90aXRsZSgkcm93WydUaXRsZSddKSkgOiBlc2NhcGVfdGl0bGUo JHJvd1snVGl0bGUnXSk7DQoJCQkJCQkkb3V0W10gPSAoJGZvcm0pID8gcGFyc2VfZm9ybSgk Zm9ybSkgOiAoKCR0aGluZykgPyBwYXJzZSgkdGhpbmcpIDogaHJlZigkcm93WydUaXRsZSdd LCBwZXJtbGlua3VybCgkcm93KSkpOw0KCQkJCQkJJHVuaXFyc1tdID0gJHJvd1snSUQnXTsN CgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJpbWFnZSI6DQoJCQkk cnMgPSBnZXRSb3dzKCINCgkJCQlTRUxFQ1QgdHhwLmlkLCB0eHAubmFtZSwgdHhwLmNhdGVn b3J5LCB0eHAuZXh0LCB0eHAudywgdHhwLmgsIHR4cC5hbHQsIHR4cC5jYXB0aW9uLCB0eHAu ZGF0ZSwgdHhwLmF1dGhvciwgdHhwLnRodW1ibmFpbCwgdHUuaXRlbV9pZCwgdHUudGFnX2lk LCBzbXQuaWQgQVMgc210aWQsIHNtdC5uYW1lIEFTIHNtdG5hbWUsIHNtdC50eXBlLCBzbXQu cGFyZW50LCBzbXQubGZ0LCBzbXQucmd0LCBzbXQudGl0bGUNCgkJCQlGUk9NICIuc2FmZV9w ZngoJ3R4cF9pbWFnZScpLiIgQVMgdHhwDQoJCQkJTEVGVCBKT0lOICIuUEZYLlNNRF9UQUdV LiAiIEFTIHR1IE9OIHR4cC5pZCA9IHR1Lml0ZW1faWQNCgkJCQlMRUZUIEpPSU4gIi5QRlgu U01EX1RBRy4gIiBBUyBzbXQgT04gdHUudGFnX2lkID0gc210LmlkDQoJCQkJV0hFUkUgdHUu dHlwZT0naW1hZ2UnIiAuICRleGNsdWRlQ2xhdXNlIC4gJG1hdGNoQ2xhdXNlIC4gJG9yZGVy QnksICRkZWJ1Zyk7DQoJCQlpZiAoJHJzKSB7DQoJCQkJaWYgKCRkZWJ1ZyA+IDEpIHsNCgkJ CQkJZWNobyAiKysgUkVDT1JEIFNFVCArKyI7DQoJCQkJCWRtcCgkcnMpOw0KCQkJCX0NCgkJ CQkkdW5pcXJzID0gYXJyYXkoKTsNCgkJCQlmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkJ CQlpZiAoIWluX2FycmF5KCRyb3dbJ2lkJ10sICR1bmlxcnMpKSB7DQoJCQkJCQkkdGhpc2lt YWdlID0gaW1hZ2VfZm9ybWF0X2luZm8oJHJvdyk7DQoJCQkJCQkkb3V0W10gPSAoJGZvcm0p ID8gcGFyc2VfZm9ybSgkZm9ybSkgOiAoKCR0aGluZykgPyBwYXJzZSgkdGhpbmcpIDogaW1h Z2UoYXJyYXkoJ2lkJyA9PiAkcm93WydpZCddKSkpOw0KCQkJCQkJJHRoaXNpbWFnZSA9ICcn Ow0KCQkJCQkJJHVuaXFyc1tdID0gJHJvd1snaWQnXTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0N CgkJCWJyZWFrOw0KCQljYXNlICJmaWxlIjoNCgkJCSRycyA9IGdldFJvd3MoIg0KCQkJCVNF TEVDVCB0eHAuaWQsIHR4cC5maWxlbmFtZSwgdHhwLmNhdGVnb3J5LCB0eHAucGVybWlzc2lv bnMsIHR4cC5kZXNjcmlwdGlvbiwgdHhwLmRvd25sb2FkcywgdHhwLnN0YXR1cywgdHhwLm1v ZGlmaWVkLCB0eHAuY3JlYXRlZCwgdHhwLnNpemUsIHR1Lml0ZW1faWQsIHR1LnRhZ19pZCwg c210LmlkIEFTIHNtdGlkLCBzbXQubmFtZSBBUyBzbXRuYW1lLCBzbXQudHlwZSwgc210LnBh cmVudCwgc210LmxmdCwgc210LnJndCwgc210LnRpdGxlDQoJCQkJRlJPTSAiLnNhZmVfcGZ4 KCd0eHBfZmlsZScpLiIgQVMgdHhwDQoJCQkJTEVGVCBKT0lOICIuUEZYLlNNRF9UQUdVLiAi IEFTIHR1IE9OIHR4cC5pZCA9IHR1Lml0ZW1faWQNCgkJCQlMRUZUIEpPSU4gIi5QRlguU01E X1RBRy4gIiBBUyBzbXQgT04gdHUudGFnX2lkID0gc210LmlkDQoJCQkJV0hFUkUgdHUudHlw ZT0nZmlsZSciIC4gJHN0YXRTUUwgLiAkZXhjbHVkZUNsYXVzZSAuICRtYXRjaENsYXVzZSAu ICRvcmRlckJ5LCAkZGVidWcpOw0KCQkJaWYgKCRycykgew0KCQkJCWlmICgkZGVidWcgPiAx KSB7DQoJCQkJCWVjaG8gIisrIFJFQ09SRCBTRVQgKysiOw0KCQkJCQlkbXAoJHJzKTsNCgkJ CQl9DQoJCQkJJHVuaXFycyA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHJzIGFzICRyb3cp IHsNCgkJCQkJaWYgKCFpbl9hcnJheSgkcm93WydpZCddLCAkdW5pcXJzKSkgew0KCQkJCQkJ JHRoaXNmaWxlID0gZmlsZV9kb3dubG9hZF9mb3JtYXRfaW5mbygkcm93KTsNCgkJCQkJCSRv dXRbXSA9ICgkZm9ybSkgPyBwYXJzZV9mb3JtKCRmb3JtKSA6ICgoJHRoaW5nKSA/IHBhcnNl KCR0aGluZykgOiBmaWxlX2Rvd25sb2FkX2xpbmsoYXJyYXkoJ2ZpbGVuYW1lJyA9PiAkcm93 WydmaWxlbmFtZSddKSwgJHJvd1snZmlsZW5hbWUnXSkpOw0KCQkJCQkJJHRoaXNmaWxlID0g Jyc7DQoJCQkJCQkkdW5pcXJzW10gPSAkcm93WydpZCddOw0KCQkJCQl9DQoJCQkJfQ0KCQkJ fQ0KCQkJYnJlYWs7DQoJCWNhc2UgImxpbmsiOg0KCQkJJHJzID0gZ2V0Um93cygiDQoJCQkJ U0VMRUNUIHR4cC5pZCwgdHhwLmRhdGUsIHR4cC5jYXRlZ29yeSwgdHhwLnVybCwgdHhwLmxp bmtuYW1lLCB0eHAubGlua3NvcnQsIHR4cC5kZXNjcmlwdGlvbiwgdHUuaXRlbV9pZCwgdHUu dGFnX2lkLCBzbXQuaWQgQVMgc210aWQsIHNtdC5uYW1lIEFTIHNtdG5hbWUsIHNtdC50eXBl LCBzbXQucGFyZW50LCBzbXQubGZ0LCBzbXQucmd0LCBzbXQudGl0bGUNCgkJCQlGUk9NICIu c2FmZV9wZngoJ3R4cF9saW5rJykuIiBBUyB0eHANCgkJCQlMRUZUIEpPSU4gIi5QRlguU01E X1RBR1UuICIgQVMgdHUgT04gdHhwLmlkID0gdHUuaXRlbV9pZA0KCQkJCUxFRlQgSk9JTiAi LlBGWC5TTURfVEFHLiAiIEFTIHNtdCBPTiB0dS50YWdfaWQgPSBzbXQuaWQNCgkJCQlXSEVS RSB0dS50eXBlPSdsaW5rJyIgLiAkZXhjbHVkZUNsYXVzZSAuICRtYXRjaENsYXVzZSAuICRv cmRlckJ5LCAkZGVidWcpOw0KCQkJaWYgKCRycykgew0KCQkJCWlmICgkZGVidWcgPiAxKSB7 DQoJCQkJCWVjaG8gIisrIFJFQ09SRCBTRVQgKysiOw0KCQkJCQlkbXAoJHJzKTsNCgkJCQl9 DQoJCQkJJHVuaXFycyA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsN CgkJCQkJaWYgKCFpbl9hcnJheSgkcm93WydpZCddLCAkdW5pcXJzKSkgew0KCQkJCQkJJHRo aXNsaW5rID0gYXJyYXkoDQoJCQkJCQkJJ2lkJyAgICAgICAgICA9PiAkcm93WydpZCddLA0K CQkJCQkJCSdsaW5rbmFtZScgICAgPT4gJHJvd1snbGlua25hbWUnXSwNCgkJCQkJCQkndXJs JyAgICAgICAgID0+ICRyb3dbJ3VybCddLA0KCQkJCQkJCSdkZXNjcmlwdGlvbicgPT4gJHJv d1snZGVzY3JpcHRpb24nXSwNCgkJCQkJCQknZGF0ZScgICAgICAgID0+ICRyb3dbJ2RhdGUn XSwNCgkJCQkJCQknY2F0ZWdvcnknICAgID0+ICRyb3dbJ2NhdGVnb3J5J10sDQoJCQkJCQkp Ow0KCQkJCQkJJG91dFtdID0gKCRmb3JtKSA/IHBhcnNlX2Zvcm0oJGZvcm0pIDogKCgkdGhp bmcpID8gcGFyc2UoJHRoaW5nKSA6IGhyZWYoJHJvd1snbGlua25hbWUnXSwgJHJvd1sndXJs J10pKTsNCgkJCQkJCSR0aGlzbGluayA9ICcnOw0KCQkJCQkJJHVuaXFyc1tdID0gJHJvd1sn aWQnXTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWJyZWFrOw0KCX0NCg0KCWlmICgkb3V0 KSB7DQoJCXJldHVybiBkb0xhYmVsKCRsYWJlbCwgJGxhYmVsdGFnKS5kb1dyYXAoJG91dCwg JHdyYXB0YWcsICRicmVhaywgJGNsYXNzKTsNCgl9DQoJcmV0dXJuICcnOw0KfQ0KDQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gTGlzdCB0YWdzIGZyb20gY3VycmVudCBj b250ZXh0LCBvciBnaXZlbiB0eXBlDQpmdW5jdGlvbiBzbWRfdGFnX2xpc3QoJGF0dHMsICR0 aGluZz0nJykgew0KCWdsb2JhbCAkc21kX3RhZ3MsICRzbWRfdGhpc3RhZzsNCg0KCWlmICgh c21kX3RhZ3NfdGFibGVfZXhpc3QoKSkgew0KCQl0cmlnZ2VyX2Vycm9yKHNtZF90YWdzX2dU eHQoJ25vdF9hdmFpbGFibGUnKSk7DQoJCXJldHVybjsNCgl9DQoNCglleHRyYWN0KGxBdHRz KGFycmF5KA0KCQkndHlwZScgPT4gJycsDQoJCSdpZCcgPT4gJycsDQoJCSduYW1lJyA9PiAn JywNCgkJJ2V4Y2x1ZGUnID0+ICcnLA0KCQkncGFyZW50JyA9PiAnJywgLy8gU3RhcnQgbGlz dCBmcm9tIGhlcmUNCgkJJ3N1YmxldmVsJyA9PiAnJywgLy8gR2V0IHRhZ3MgZnJvbSB0aGlz IHN1Yi1sZXZlbCBvbmx5ICgwPXRvcCBsZXZlbCwgMS1sZXZlbCAxLCAuLi4sIGFsbD1ldmVy eXRoaW5nKQ0KCQknb2Zmc2V0JyA9PiAwLA0KCQknbGltaXQnID0+IDk5OTk5LA0KCQknZm9y bScgPT4gJycsDQoJCSdpbmRlbnQnID0+ICcmbmJzcDsmbmJzcDsnLA0KCQknc2VjdGlvbl9s aW5rJyA9PiAnJywNCgkJJ3NodWZmbGUnID0+IDAsDQoJCSdsYWJlbCcgPT4gJycsDQoJCSds YWJlbHRhZycgPT4gJycsDQoJCSd3cmFwdGFnJyA9PiAndWwnLA0KCQknYnJlYWsnID0+ICds aScsDQoJCSdjbGFzcycgPT4gX19GVU5DVElPTl9fLA0KCQknYWN0aXZlX2NsYXNzJyA9PiAn JywgLy8gVE9ETw0KCQknYnJlYWtjbGFzcycgPT4gJycsDQoJCSdkZWJ1ZycgPT4gMCwNCgkp LCRhdHRzKSk7DQoNCgkvLyBWYWxpZGF0ZSBjbGllbnQgc2lkZSBhdHRzDQoJJHZhbGlkVHlw ZXMgPSBhcnJheSgnYXJ0aWNsZScsJ2ltYWdlJywnZmlsZScsJ2xpbmsnKTsNCgkkaWRzID0g Jyc7DQoJJHdoZXJlID0gYXJyYXkoKTsNCgkkY3R4dCA9IHNtZF90YWdzX2NvbnRleHQoKTsN Ci8vZG1wKCRjdHh0KTsNCgkkYXR0ZW1wdE1hdGNoID0gKGVtcHR5KCRuYW1lKSAmJiBlbXB0 eSgkaWQpICYmIGVtcHR5KCRleGNsdWRlKSAmJiAhZW1wdHkoJGN0eHRbJ2lkJ10pKSA/IGZh bHNlIDogdHJ1ZTsNCgkkdHlwZSA9IChpbl9hcnJheSgkdHlwZSwgJHZhbGlkVHlwZXMpKSA/ ICR0eXBlIDogKCgkY3R4dFsnY29udGV4dCddKSA/ICRjdHh0Wydjb250ZXh0J10gOiAkdmFs aWRUeXBlc1swXSk7DQoJJGlkcyA9ICgkaWQpID8gZG9fbGlzdCgkaWQpIDogKCgkY3R4dFsn aWQnXSkgPyAkY3R4dFsnaWQnXSA6ICcnKTsNCg0KCWlmICgkbmFtZSkgew0KCQkkbmFtZSA9 ICJuYW1lIElOICgiIC5qb2luKCcsJywgcXVvdGVfbGlzdChkb19saXN0KCRuYW1lKSkpLiAi KSI7DQoJCSR3aGVyZVtdID0gJG5hbWU7DQoJCSRpZHMgPSAnJzsgLy8gbmFtZSB0cnVtcHMg aWQ7IFRPRE86IG1heWJlIG9mZmVyIGEgd2F5IG9mIGNvbWJpbmluZyB0aGVtPw0KCX0NCglp ZiAoJGlkcykgew0KCQkkaWRzID0gImlkIElOICgiIC5qb2luKCcsJywgcXVvdGVfbGlzdCgk aWRzKSkuICIpIjsNCgkJJHdoZXJlW10gPSAkaWRzOw0KCX0NCg0KCWlmICgkZXhjbHVkZSkg ew0KCQkkZXhjbHVkZSA9ICJuYW1lIE5PVCBJTiAoIiAuam9pbignLCcsIHF1b3RlX2xpc3Qo ZG9fbGlzdCgkZXhjbHVkZSkpKS4gIikiOw0KCQkkd2hlcmVbXSA9ICRleGNsdWRlOw0KCX0N Cg0KCSR3aGVyZSA9IGpvaW4oJyBBTkQgJywgJHdoZXJlKTsNCglpZiAoISR3aGVyZSAmJiAh ZW1wdHkoJHNtZF90YWdzKSkgew0KCQkvLyBVc2UgZ2xvYmFsIHRhZ3MNCgkJJHJzID0gJHNt ZF90YWdzWyRjdHh0XTsNCgl9IGVsc2Ugew0KCQkkd2hlcmUgPSAoJHdoZXJlKSA/ICR3aGVy ZSA6ICcxPTEnOw0KCQlpZiAoJHdoZXJlID09ICIxPTEiICYmICRhdHRlbXB0TWF0Y2gpIHsN CgkgIAkJJHdoZXJlID0gJ25hbWUgPSAic21kXycgLm10X3JhbmQoKS4gJyInOw0KCQl9DQoJ CWlmICgkZGVidWcpIHsNCgkJCWRtcCgkd2hlcmUpOw0KCQl9DQoNCgkJJHJzID0gZ2V0VHJl ZSgoKCRwYXJlbnQpID8gJHBhcmVudCA6ICdyb290JyksICR0eXBlLCAkd2hlcmUsIFNNRF9U QUcpOw0KCQkkc3VibGV2ZWwgPSAoJHBhcmVudCAmJiAkc3VibGV2ZWw9PScnKSA/ICgoc21k X3RhZ190cmVlX3NlYXJjaCgkcGFyZW50LCAkcnMsIDEpKSA/ICc+PTEnIDogJz49MCcpIDog JHN1YmxldmVsOw0KCQlwcmVnX21hdGNoKCcvKFs9PD5dKyk/KFtcZF0rfGFsbCkvJywgJHN1 YmxldmVsLCAkbWF0Y2hlcyk7DQoJCWlmKCRtYXRjaGVzKSB7DQoJCQkkb3BlciA9ICgkbWF0 Y2hlc1sxXSAmJiBpbl9saXN0KCRtYXRjaGVzWzFdLCAnPiwgPCwgPj0sIDw9JykpID8gJG1h dGNoZXNbMV0gOiAnPT0nOw0KCQkJJHN1YmxldmVsPSRtYXRjaGVzWzJdOw0KCQl9IGVsc2Ug ew0KCQkJJG9wZXIgPSAnPT0nOw0KCQl9DQoJfQ0KCWlmICgkZGVidWcpIHsNCgkJZWNobyAi KysgVFJFRSAvIExFVkVMIElORk8rKyI7DQoJCWRtcCgkcnMpOw0KCQlkbXAoJHN1YmxldmVs LCAkb3BlciwgJG1hdGNoZXMpOw0KCX0NCg0KCWlmICgkcnMpIHsNCgkJJG91dCA9IGFycmF5 KCk7DQoJCSR0b3RhbHMgPSBhcnJheSgpOw0KDQoJCSRvdXRzdWIgPSBhcnJheSgpOw0KCQl3 aGlsZSAobGlzdCgka2V5LCAkcm93KSA9IGVhY2goJHJzKSkgew0KCQkJLy8gT25seSBhZGQg dGhlIHJvdyBpZiBvbmUgb2Y6DQoJCQkvLyAxKSBzdWJsZXZlbCA9ICdhbGwnDQoJCQkvLyAy KSBubyBwYXJlbnQgc3BlY2lmaWVkDQoJCQkvLyAzKSBzdWJsZXZlbCBpcyBlcXVhbC9ncmVh dGVyL2xlc3MgdGhhbiB0aGUgcm93J3MgbGV2ZWwNCgkJCWlmIChzdHJ0b2xvd2VyKCRzdWJs ZXZlbCkgPT0gImFsbCIgfHwgISRwYXJlbnQgfHwgKCRvcGVyPT0nPT0nPyAkcm93WydsZXZl bCddID09ICRzdWJsZXZlbCA6ICgoJG9wZXI9PSc+PScpID8gJHJvd1snbGV2ZWwnXSA+PSAk c3VibGV2ZWwgOiAoKCRvcGVyPT0nPD0nKSA/ICRyb3dbJ2xldmVsJ10gPD0gJHN1YmxldmVs IDogKCgkb3Blcj09Jz4nKSA/ICRyb3dbJ2xldmVsJ10gPiAkc3VibGV2ZWwgOiAkcm93Wyds ZXZlbCddIDwgJHN1YmxldmVsKSApICkgKSApIHsNCgkJCQkkb3V0c3ViW10gPSAkcm93Ow0K CQkJfQ0KCQl9DQoJCSRycyA9ICRvdXRzdWI7DQoJCWlmICgkZGVidWcpIHsNCgkJCWVjaG8g IisrIFNVQkxFVkVMIFJFQ09SRFMgKysiOw0KCQkJZG1wKCRycyk7DQoJCX0NCgkJaWYgKCRz aHVmZmxlKSB7DQoJCQlzaHVmZmxlKCRycyk7DQoJCX0NCgkJJHJzID0gYXJyYXlfc2xpY2Uo JHJzLCAkb2Zmc2V0LCAkbGltaXQpOw0KCQlpZiAoJGRlYnVnKSB7DQoJCQllY2hvICIrKyBQ T1NULUZJTFRFUiBSRUNPUkRTICsrIjsNCgkJCWRtcCgkcnMpOw0KCQl9DQoNCgkJZm9yZWFj aCAoJHJzIGFzICRyb3cpIHsNCgkJCWV4dHJhY3QoJHJvdyk7DQoJCQkkcm93Wyd0eXBlJ10g PSAkdHlwZTsNCgkJCSRyb3dbJ2NvdW50J10gPSBzYWZlX2NvdW50KFNNRF9UQUdVLCAidHlw ZT0nJHR5cGUnIEFORCB0YWdfaWQ9JyRpZCciKTsNCgkJCXNtZF90YWdfcG9wdWxhdGUoJHJv dyk7DQoJCQkkb3V0W10gPSAoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykgOiAoKCRmb3JtKSA/ IHBhcnNlX2Zvcm0oJGZvcm0pIDoNCgkJCQkJc3RyX3JlcGVhdCgkaW5kZW50LCAkbGV2ZWwg KiAxKQ0KCQkJCQkuc21kX3RhZ19uYW1lKGFycmF5KCd0aXRsZScgPT4gMSwgJ3NlY3Rpb24n ID0+ICRzZWN0aW9uX2xpbmspKQ0KCQkJCQkuc21kX3RhZ19jb3VudChhcnJheSgpKSk7DQoJ CQkkc21kX3RoaXN0YWcgPSBhcnJheSgpOw0KCQl9DQoNCgkJaWYgKCRvdXQpIHsNCgkJCXJl dHVybiBkb0xhYmVsKCRsYWJlbCwgJGxhYmVsdGFnKS5kb1dyYXAoJG91dCwgJHdyYXB0YWcs ICRicmVhaywgJGNsYXNzLCAkYnJlYWtjbGFzcyk7DQoJCX0NCgl9DQoJcmV0dXJuICcnOw0K fQ0KDQovLyBDbG91ZCBjYWxjdWxhdGlvbnMgZnJvbSBSYW4gQXJvdXNzaSdzIHR4cF90YWdz IHBsdWdpbg0KLy9UT0RPOiBUaGlzIGlzIGEgbW9yZSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHNt ZF90YWdfbGlzdC4gVXNlIHRoYXQgZW5naW5lIGFuZCB0aGlzIGNsb3VkIGxvZ2ljIChtYXli ZSBhICdjbG91ZCcgYXR0cmliIHRvIHNtZF90YWdfbGlzdCkNCmZ1bmN0aW9uIHNtZF90YWdf Y2xvdWQoJGF0dHMpIHsNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQknc2VjdGlvbicgPT4g JycsDQoJCSd0aW1lJyA9PiAncGFzdCcsDQoJCSdsaW1pdCcJID0+IDk5OSwNCgkJJ3BhcmVu dCcgPT4gJycsDQoJCSdsaW5rdG9zZWN0aW9uJyA9PiAnYXJ0aWNsZScsDQoJCSd1c2VtZXNz eScgPT4gMCwNCgkJJ2Nsb3Vkd3JhcHRhZycgID0+ICdkaXYnLA0KCQknYnJlYWsnCT0+ICcs ICcsDQoJCSd3cmFwdGFnJyAgPT4gJ3AnLA0KCQknbGFiZWwnCT0+ICcnLA0KCQknbGFiZWx0 YWcnID0+ICcnLA0KCQknY2xhc3MnCSAgID0+ICcnLA0KCQknYnJlYWtjbGFzcycgID0+ICcn LA0KCQknc29ydGRpcicgPT4gJ2FzYycNCgkpLCRhdHRzKSk7DQoNCgkkc2VjdGlvbnM9cnNz QnVpbGRTY3RTcWwoJHNlY3Rpb24pOw0KCSR0aW1lID0gcnNzQnVpbGRUaW1lU3FsKCR0aW1l KTsNCg0KCSRwcm50ID0gKCRwYXJlbnQpID8gIiBXSEVSRSBwYXJlbnQgPSAnJHBhcmVudCcg IiA6ICIiOw0KCSRyc2MgPSBnZXRSb3dzKCJTRUxFQ1QgZGlzdGluY3QgYy5pZCwgYy5uYW1l LCBjLnRpdGxlIEZST00gIi5QRlguInRleHRwYXR0ZXJuX2NhdGVnb3J5IGFzIHRjIExFRlQg Sk9JTiAgIi5QRlguInR4cF9jYXRlZ29yeSBhcyBjIE9OIHRjLmNhdGVnb3J5X2lkID0gYy5p ZCAiLiRwcm50LiJPUkRFUiBCWSBjLm5hbWUgIiAuJHNvcnRkaXIpOw0KDQoJaWYgKCRyc2Mp IHsNCgkJJHJzdCA9IGdldFJvd3MoIlNFTEVDVCAqIEZST00gIi5QRlguInRleHRwYXR0ZXJu X2NhdGVnb3J5Iik7DQoJCSRhbGwgPSBjb3VudCgkcnN0KTsNCg0KCQkkYWxsY2F0cz0iIjsN CgkJZm9yZWFjaCgkcnN0IGFzICRhKSB7DQoJCQkkYWxsY2F0cy49ICAkYVsnY2F0ZWdvcnlf aWQnXS4iICI7DQoJCX0NCgkJJGNhdGFyciA9IGV4cGxvZGUoIiAiLCBzdWJzdHIoJGFsbGNh dHMsIDAsIC0xKSk7DQoJCSRjYXRjb3VudHMgPSBhcnJheV9jb3VudF92YWx1ZXMoJGNhdGFy cik7DQoJCWlmICgkbGltaXQgIT0gOTk5KSBhcnNvcnQoJGNhdGNvdW50cyk7DQoNCgkJJG1h eCA9IG1heCgkY2F0Y291bnRzKTsNCgkJJG1pbiA9IG1pbigkY2F0Y291bnRzKTsNCgkJJHgg PSAyMDA7ICR5ID0gMTAwOyAvLyAyMDAlLCAxMDAlDQoJCSRzdGVwdmFsdWUgPSAoJG1heCAt ICRtaW4gIT0gMCkgPyAoJG1heCAtICRtaW4pIC8gKCR4IC0gJHkpIDogMTsNCg0KCQkvLyBy ZWtleSBhcnJheSBieSBudW1iZXIgb2YgcG9zdHMgcGVyIGNhdGVnb3J5DQoJCSRyZW9yZGVy ID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAoJHJzYyBhcyAkYT0+JGIpIHsNCgkJCSRyZW9yZGVy WyRiWydpZCddXSA9ICRiOw0KCQl9DQoNCgkJJGkgPSAwOw0KCQkkcm93ID0gYXJyYXkoKTsN CgkJZm9yZWFjaCAoJGNhdGNvdW50cyBhcyAkYT0+JGIpIHsNCgkJCWlmICgkaSA8ICRsaW1p dCkgew0KCQkJCSRhcT0gIlNFTEVDVCAqIEZST00gIi5QRlguInRleHRwYXR0ZXJuIGFzIHQg TEVGVCBKT0lOICIuUEZYLiJ0ZXh0cGF0dGVybl9jYXRlZ29yeSBhcyBjIE9OIHQuSUQgPSBj LmFydGljbGVfaWQgV0hFUkUgIi4kc2VjdGlvbnMuIiBjLmNhdGVnb3J5X2lkID0gJyIuJHJl b3JkZXJbJGFdWydpZCddLiInIGFuZCB0LlN0YXR1cyA9IDQgIi4kdGltZTsNCgkJCQkkcnNh ID0gZ2V0Um93cygkYXEpOw0KCQkJCWlmICgkcnNhKSB7DQoJCQkJCSRudW0gPSBjb3VudCgk cnNhKTsNCgkJCQkJJHNpemUgPSAoKCRudW0gLyAkYWxsKSAqIDEwMCkgKyAxMDA7DQoJCQkJ CSR3ZWlnaHQgPSAkeSArIHJvdW5kKCgkbnVtLSRtaW4pIC8gJHN0ZXB2YWx1ZSk7DQoJCQkJ CSRzdHlsZSA9ICgkd2VpZ2h0ID4gJHkpID8gJyBzdHlsZT0iZm9udC1zaXplOicuICR3ZWln aHQgLiAnJTsiJyA6ICcnOw0KDQoJCQkJCSRwYXRoID0gKCR1c2VtZXNzeSkgPyBodS4iP3M9 Ii4kbGlua3Rvc2VjdGlvbi4iJmFtcDtjPSIuc3RydG9sb3dlcigkcmVvcmRlclskYV1bJ25h bWUnXSkgOiBodS4kbGlua3Rvc2VjdGlvbi4iLyIuc3RydG9sb3dlcigkcmVvcmRlclskYV1b J25hbWUnXSk7DQoJCQkJCSRyb3dbXT10YWcoaHRtbHNwZWNpYWxjaGFycygkcmVvcmRlclsk YV1bJ3RpdGxlJ10pLCdhJywnIGhyZWY9IicuJHBhdGguJyInLiRzdHlsZS4nIHRpdGxlPSIn Lmh0bWxzcGVjaWFsY2hhcnMoJHJlb3JkZXJbJGFdWyd0aXRsZSddKS4nIicpLm47DQoJCQkJ fQ0KCQkJJGkrKzsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZG9UYWcoZG9MYWJlbCgkbGFiZWws ICRsYWJlbHRhZykuZG9XcmFwKCRyb3csICR3cmFwdGFnLCAkYnJlYWssICRjbGFzcywgJGJy ZWFrY2xhc3MpLCAkY2xvdWR3cmFwdGFnKS5uOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAt IGxvY2FsaXNlIGFzIHJlcXVpcmVkDQpmdW5jdGlvbiBzbWRfdGFnc19nVHh0KCR3aGF0LCAk YXR0cyA9IGFycmF5KCkpIHsNCgkkbGFuZyA9IGFycmF5KA0KCQknYWNfc3RkJyA9PiAnU3Rh bmRhcmQnLA0KCQknYWNfc3RyJyA9PiAnU3RyaWN0JywNCgkJJ2J5X2NvbHVtbicgPT4gJ0Nv bHVtbicsDQoJCSdieV9yb3cnID0+ICdSb3cnLA0KCQknY2xlYXInID0+ICdjbHInLA0KCQkn Y2xpbmtfbGJsJyA9PiAnTGlua2VkIGNhdCcsDQoJCSdjb250cm9sJyA9PiAnUGx1Z2luIGNv bnRyb2wnLA0KCQknY3JlYXRlZCcgPT4gJ3t0eXBlfSB0YWcgIntuYW1lfSIgY3JlYXRlZCcs DQoJCSdjaGlsZHJlbl9hbmQnID0+ICcgYW5kIGl0cyBjaGlsZHJlbicsDQoJCSdjaGlsZHJl bl9kZWwnID0+ICdEZWxldGUgY2hpbGRyZW4nLA0KCQknY2hpbGRyZW5fcHJvJyA9PiAnUHJv bW90ZSBjaGlsZHJlbicsDQoJCSdkZWxldGVkJyA9PiAne3R5cGV9IHRhZyAie25hbWV9IiBk ZWxldGVkJywNCgkJJ2V4aXN0cycgPT4gJ3t0eXBlfSB0YWcgIntuYW1lfSIgYWxyZWFkeSBl eGlzdHMnLA0KCQknZmlsdGVyJyA9PiAnRmlsdGVyJywNCgkJJ2luX3VzZScgPT4gJ3t0eXBl fSB0YWcgIntuYW1lfSIgaXMgaW4gdXNlJywNCgkJJ21hbmFnZV9sYmwnID0+ICdNYW5hZ2Ug dGFncycsDQoJCSdub19uYW1lJyA9PiAne3R5cGV9IHRhZyBOT1QgY3JlYXRlZDogbmVlZHMg YSBuYW1lJywNCgkJJ25vX3BhcmVudCcgPT4gJ05vIHBhcmVudCB0YWdzJywNCgkJJ25vdF9h dmFpbGFibGUnID0+ICdzbWRfdGFncyB0YWJsZXMgYXJlIG5vdCBpbnN0YWxsZWQnLA0KCQkn bm90X2NyZWF0ZWQnID0+ICd7dHlwZX0gdGFnICJ7bmFtZX0iIE5PVCBjcmVhdGVkJywNCgkJ J25vdF9kZWxldGVkJyA9PiAne3R5cGV9IHRhZyAie25hbWV9IiBOT1QgZGVsZXRlZCcsDQoJ CSdub3RfdXBkYXRlZCcgPT4gJ3t0eXBlfSB0YWcgIntuYW1lfSIgTk9UIHVwZGF0ZWQnLA0K CQkncHJlZl9pbnN0YWxsX2xibCcgPT4gJ0luc3RhbGwgcHJlZnMnLA0KCQkncHJlZl9yZW1v dmVfbGJsJyA9PiAnUmVtb3ZlIHByZWZzJywNCgkJJ3ByZWZfc2hvd19sYmwnID0+ICdQcmVm ZXJlbmNlcycsDQoJCSdwcmVmc19pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBpbnN0YWxs ZWQnLA0KCQkncHJlZnNfbm90X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIG5vdCBpbnN0 YWxsZWQuJywNCgkJJ3ByZWZzX3BhbmUnID0+ICdQcmVmcycsDQoJCSdwcmVmc19yZW1vdmVk JyA9PiAnUHJlZmVyZW5jZXMgcmVtb3ZlZCcsDQoJCSdwcmVmc19zb21lJyA9PiAnTm90IGFs bCBwcmVmZXJlbmNlcyBhdmFpbGFibGUuJywNCgkJJ3ByZWZzX3NvbWVfZXhwbGFpbicgPT4g J1RoaXMgaXMgZWl0aGVyIGEgbmV3IGluc3RhbGxhdGlvbiBvciBhIGRpZmZlcmVudCB2ZXJz aW9uJy5ici4nb2YgdGhlIHBsdWdpbiB0byBvbmUgeW91IGhhZCBiZWZvcmUuJywNCgkJJ3By ZWZzX3NvbWVfb3B0czEnID0+ICdDaG9vc2UgIlJlbW92ZSBwcmVmcyIgdG8gcmVtb3ZlIHRo ZW0gYWxsIG9yICJJbnN0YWxsIHByZWZzIiB0byBhZGQnLmJyLidhbnkgbmV3IG9uZXMsIGxl YXZpbmcgYWxsIGV4aXN0aW5nIHByZWZzIHVudG91Y2hlZC4nLA0KCQkncHJlZnNfc29tZV9v cHRzMicgPT4gJ0NsaWNrICJJbnN0YWxsIHRhYmxlcyIgdG8gYWRkIG9yIHVwZGF0ZSB0aGUg dGFibGVzJy5ici4nbGVhdmluZyBhbGwgZXhpc3RpbmcgZGF0YSB1bnRvdWNoZWQuJywNCgkJ J3ByZWZzX3NvbWVfdGJsJyA9PiAnTm90IGFsbCB0YWJsZSBpbmZvIGF2YWlsYWJsZS4nLA0K CQkncHJlZnNfdGl0bGUnID0+ICdzbWRfdGFncyBwcmVmZXJlbmNlcycsDQoJCSdzZWxfbGlz dCcgPT4gJ1NlbGVjdCBsaXN0JywNCgkJJ3ByZWZzX3AnID0+ICdJbnRlcmZhY2Ugc2V0dGlu Z3MnLA0KCQkncHJlZnNfdCcgPT4gJ1RhZyBtYW5hZ2VtZW50JywNCgkJJ3ByZWZzX3UnID0+ ICdVUkwgbWFuYWdlbWVudCcsDQoJCSdzbWRfdGFncycgPT4gJ3NtZF90YWdzJywNCgkJJ3Nt ZF90YWdfcF9lbmFibGUnID0+ICdFbmFibGUgdGFncyBpbicsDQoJCSdzbWRfdGFnX3BfZmly c3QnID0+ICdJbml0aWFsIHBhbmUnLA0KCQknc21kX3RhZ19wX2lucHV0JyA9PiAnRW50ZXIg dGFncyB1c2luZycsDQoJCSdzbWRfdGFnX3BfbGlua2NhdCcgPT4gJ0xpbmsgdGFncyB0byBj YXRlZ29yaWVzJywNCgkJJ3NtZF90YWdfcF9xdGFnJyA9PiAnUXVpY2sgdGFnICg8YSBocmVm PSJodHRwOi8vcGx1Z2lucy5qcXVlcnkuY29tL3Byb2plY3QvYXV0b2NvbXBsZXRleCI+cmVx dWlyZXMgcGx1Z2luPC9hPiknLA0KCQknc21kX3RhZ19wX3F0cGF0aCcgPT4gJ0pTIHBsdWdp biBkaXInLA0KCQknc21kX3RhZ19wX3F0c3R5bCcgPT4gJ0pTIHN0eWxlIGRpcicsDQoJCSdz bWRfdGFnX3Bfc2l6ZScgPT4gJ1NlbGVjdC90ZXh0YXJlYSByb3dzJywNCgkJJ3NtZF90YWdf dF9hdXRvJyA9PiAnQXV0byBuYW1lJywNCgkJJ3NtZF90YWdfdF9jb2xzJyA9PiAnVGFnIGNv bHVtbnMnLA0KCQknc21kX3RhZ190X2NvbHNvcmQnID0+ICdPcmRlciB0YWdzIGJ5JywNCgkJ J3NtZF90YWdfdF9jb3VudCcgPT4gJ1Nob3cgdGFnIHVzYWdlIGNvdW50cycsDQoJCSdzbWRf dGFnX3RfZGVsdHJlZScgPT4gJ1doZW4gZGVsZXRpbmcgYSBwYXJlbnQnLA0KCQknc21kX3Rh Z190X2RlbHVzZWQnID0+ICdBbGxvdyBkZWxldGlvbiBvZiB1c2VkIHRhZ3MnLA0KCQknc21k X3RhZ190X2hpbGl0ZScgPT4gJ0NsaWNrZWQgUkdCIGNvbG91cicsDQoJCSdzbWRfdGFnX3Rf aG92ZXInID0+ICdNb3VzZS1vdmVyIFJHQiBjb2xvdXInLA0KCQknc21kX3RhZ190X2luZGVu dCcgPT4gJ1N1Yi10YWcgbGV2ZWwgaW5kaWNhdG9yJywNCgkJJ3NtZF90YWdfdV9wbmFtJyA9 PiAnVVJMIG5hbWUgcGFyYW1ldGVyJywNCgkJJ3NtZF90YWdfdV9wdHlwJyA9PiAnVVJMIHR5 cGUgcGFyYW1ldGVyJywNCgkJJ3NtZF90YWdfdV9zZWMnID0+ICdEZWZhdWx0IHNlY3Rpb24g Zm9yIHRhZ3MnLA0KCQkndGV4dGJveCcgPT4gJ1RleHQgYXJlYScsDQoJCSd0ZXh0Ym94cGx1 cycgPT4gJ1RleHQgYXJlYSsnLA0KCQkndGV4dGxpc3QnID0+ICdUZXh0IGxpc3QnLA0KCQkn dGJsX2luc3RhbGxfbGJsJyA9PiAnSW5zdGFsbCB0YWJsZXMnLA0KCQkndGJsX2luc3RhbGxl ZCcgPT4gJ1RhZyB0YWJsZXMgaW5zdGFsbGVkLiAnLA0KCQkndGJsX25vdF9pbnN0YWxsZWQn ID0+ICdUYWcgdGFibGVzIE5PVCBpbnN0YWxsZWQuICcsDQoJCSd0Ymxfbm90X3JlbW92ZWQn ID0+ICdUYWcgdGFibGVzIE5PVCByZW1vdmVkLiAnLA0KCQkndGJsX3JlbW92ZV9sYmwnID0+ ICdSZW1vdmUgdGFibGVzJywNCgkJJ3RibF9yZW1vdmVkJyA9PiAnVGFnIHRhYmxlcyByZW1v dmVkLiAnLA0KCQkndGFnc19wYW5lJyA9PiAnTWFuYWdlIHRhZ3MnLA0KCQkndGl0bGUnID0+ ICdUYWdzJywNCgkJJ3RvZ2dsZScgPT4gJ3RvZycsDQoJCSd1cGRhdGVkJyA9PiAne3R5cGV9 IHRhZyAie25hbWV9IiB1cGRhdGVkJywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1skd2hh dF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjU6Im9yZGVyIjtzOjE6IjUi O3M6NToiZmxhZ3MiO3M6MToiMyI7czo0OiJoZWxwIjtzOjM0NDE2OiI8ZGl2IGlkPSJzbWRf aGVscCI+CgoJPGgxPnNtZF90YWdzPC9oMT4KCgk8cD5UYWcgYXJ0aWNsZXMsIGltYWdlcywg ZmlsZXMgYW5kIGxpbmtzIHdpdGggc3R1ZmYsIHRoZW4gdXNlIHRoZSBwdWJsaWMtc2lkZSB0 YWdzIHRvIGRpc3BsYXkgdGhlIGxpc3RzLCBmaWx0ZXIgb3IgZmluZCByZWxhdGVkIGNvbnRl bnQuPC9wPgoKCTxoMiBjbGFzcz0iZmVhdHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8cD5BZG1p bi1zaWRlOjwvcD4KCgk8dWw+CgkJPGxpPlVubGltaXRlZCB0YWdzIGZvciBhcnRpY2xlcywg aW1hZ2VzLCBmaWxlcyBhbmQgbGlua3M8L2xpPgoJCTxsaT5GYXN0IHRhZ2dpbmcgc3lzdGVt IGZvciBjb3B5aW5nLCBhdXRvLW5hbWluZywgYW5kIG9wdGlvbmFsIGF1dG8tY29tcGxldGlv bjwvbGk+CgkJPGxpPk5lc3Rpbmcgb2YgdGFnczwvbGk+CgkJPGxpPk9wdGlvbmFsbHkgbGlu ayB0YWdzIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGNhdGVnb3JpZXMgc28g Y2xpZW50cyBjYW4gb25seSBjaG9vc2UgZnJvbSBhIGxpbWl0ZWQgc2V0IG9mIHRhZ3M8L2xp PgoJCTxsaT5Bc3NpZ24gdGFncyB2aWEgYSBkcm9wZG93biBzZWxlY3QgbGlzdCwgYSB0ZXh0 IGFyZWEgb3IgYSBsaXN0IG9mIGNsaWNrYWJsZSB0YWdzPC9saT4KCQk8bGk+U2V0IHVwIGFu IChvcHRpb25hbCkgZGVkaWNhdGVkIHNlY3Rpb24gdG8gYWxsb3cgdGFnIGZpbHRlcmluZzwv bGk+Cgk8L3VsPgoKCTxwPkNsaWVudC1zaWRlOjwvcD4KCgk8dWw+CgkJPGxpPkxpc3QgLyBm aWx0ZXIgdGFncyBieSB0eXBlIGFuZCBuYW1lPC9saT4KCQk8bGk+U2hvdyByZWxhdGVkIGNv bnRlbnQ6Cgk8dWw+CgkJPGxpPmJ5IHRhZyA8ZW0+YmV0d2VlbiB0eXBlczwvZW0+LiBlLmcu IGlmIHlvdSBoYXZlIHNldCB1cCBjb21tb24gdGFncyBmb3IgYm90aCBhcnRpY2xlcyBhbmQg ZmlsZXMsIHdoZW4gdmlld2luZyBhbiBhcnRpY2xlIHlvdSBjYW4gYXNrIHRoZSBwbHVnaW4g d2hhdCBmaWxlcyBhcmUgcmVsYXRlZCAob3IgdmljZSB2ZXJzYTogd2hhdCBhcnRpY2xlcyBh cmUgcmVsYXRlZCB0byB0aGUgY3VycmVudCBmaWxlISk8L2xpPgoJCTxsaT5iZXR3ZWVuIG90 aGVyIGNvbnRlbnQsIGUuZy4gYXNrIGl0IHRvIG1hdGNoIHRoZSB0YWdzIGZyb20gdGhlIGN1 cnJlbnQgZmlsZSB3aXRoIHRoZSBhcnRpY2xlIGNhdGVnb3J5IG9yIGEgY3VzdG9tIGZpZWxk PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+VGFnIGNvbmRpdGlvbmFscyBhbmQgY291bnRzPC9s aT4KCTwvdWw+CgoJPHA+VG8gRG86PC9wPgoKCTx1bD4KCQk8bGk+Rml4IGZvciBmb3JlaWdu IGNoYXJhY3RlciBhdXRvdGFnIGR1bWJkb3duPC9saT4KCQk8bGk+TXVsdGktdGFnIGZpbHRl cmluZzwvbGk+Cgk8L3VsPgoKCTxwPlBvc3NpYmx5IGluIHRoZSBwaXBlbGluZTo8L3A+CgoJ PHVsPgoJCTxsaT5JbXBvcnQgYXJ0aWNsZSB0YWdzIGZyb20gdHJ1X3RhZ3MgYW5kIHJzc191 bmxpbWl0ZWRfY2F0ZWdvcmllczwvbGk+CgkJPGxpPkxpc3QgdGFncyBieSBsaW5rZWQgY2F0 ZWdvcnk8L2xpPgoJCTxsaT5HbG9iYWwgdGFnczwvbGk+CgkJPGxpPlRhZyBjbG91ZDwvbGk+ CgkJPGxpPlRhZyBhbmQgYXJ0aWNsZSBwYWdpbmcgc3VwcG9ydDogbmV4dC9wcmV2L29sZGVy L25ld2VyPC9saT4KCTwvdWw+CgoJPGgyIGNsYXNzPSJhdXRob3IiPkF1dGhvcjwvaDI+CgoJ PHA+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29u PC9hPjwvcD4KCgk8aDIgY2xhc3M9Imluc3RhbGwiPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFs bGF0aW9uPC9oMj4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPlJlcXVpcmVzIFRleHRwYXR0ZXJu IDQuMi4wKy48L3A+CgoJPHAgY2xhc3M9InJlcXVpcmVkIj5Gb3IgY2xpZW50LXNpZGUgaW1h Z2UgdGFnZ2luZyB0byB3b3JrLCByZXF1aXJlcyBsYXRlc3QgPHNwYW4gY2xhc3M9ImNhcHMi PlNWTjwvc3Bhbj4gaW5zdGFsbC48L3A+CgoJPHAgY2xhc3M9InJlcXVpcmVkIj5JZiB1cGdy YWRpbmcgZnJvbSB2MC4yIG9yIGVhcmxpZXI6IGRlbGV0ZSBzbWRfdGFnc19jbGllbnQgYW5k IHNtZF90YWdzX2FkbWluIHBsdWdpbnMgZmlyc3QsIHRoZW4gaW5zdGFsbCBhbmQgYWN0aXZh dGUgdGhpcyBwbHVnaW4uIFlvdXIgcHJlZnMgYW5kIHRhZ3Mgd2lsbCBiZSByZXRhaW5lZC48 L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRw Oi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTAyNi9zbWRfdGFncyI+dGV4dHBhdHRlcm4u b3JnPC9hPiBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0 d2FyZSBwYWdlPC9hPi4gUGFzdGUgaW50byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gQWRtaW4gLSZndDsgUGx1Z2lucyBwYW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhl IHBsdWdpbi48L3A+CgoJPHA+VmlzaXQgdGhlIEV4dGVuc2lvbnMgLSZndDsgc21kX3RhZ3Mg dGFiLiBJZiBpdCBoYXMgbm90IGFscmVhZHkgYmVlbiBkb25lIGF1dG9tYXRpY2FsbHkgZm9y IHlvdSwgY2xpY2sgdGhlIEluc3RhbGwgdGFibGVzIGJ1dHRvbi4gVGhlIG5lY2Vzc2FyeSB0 YWJsZXMgYW5kIHByZWZlcmVuY2VzIHdpbGwgYmUgaW5zdGFsbGVkLiBGcm9tIHRoaXMgcGFn ZSB5b3UgY2FuIEluc3RhbGwsIERlbGV0ZSBhbmQgU2F2ZSB0aGUgcGx1Z2luIHByZWZlcmVu Y2VzIG9yIHJlbW92ZSB0aGUgcGx1Z2luJiM4MjE3O3MgdGFibGVzIHRvIGVtcHR5IHlvdXIg dGFncyBlbnRpcmVseSBhbmQgc3RhcnQgYWdhaW4uPC9wPgoKCTxwPlRvIHJlbW92ZSBzbWRf dGFncywgdmlzaXQgdGhlIHNtZF90YWdzIFByZWZlcmVuY2VzIHBhZ2UgYWdhaW4sIGhpdCAm IzgyMTY7UmVtb3ZlIHRhYmxlcyYjODIxNzsgdG8gcmVtb3ZlIHRoZSBwcmVmZXJlbmNlcyBh bmQgdGFnIHRhYmxlcyBmcm9tIHRoZSBkYXRhYmFzZSwgdGhlbiBzaW1wbHkgZGVsZXRlIHRo ZSBwbHVnaW4gYXMgbm9ybWFsIGZyb20gdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFnZS48 L3A+CgoJPHA+VmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5j b20vdmlld3RvcGljLnBocD9pZD0yODYyMSI+Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBp bmZvIGFuZCB0byByZXBvcnQgdGhlIHN1Y2Nlc3MgKG9yIG90aGVyd2lzZSkgb2YgdGhpcyBw bHVnaW4uPC9wPgoKCTxoMiBpZD0iYXN1c2FnZSI+VXNhZ2UgKEFkbWluIHNpZGUpPC9oMj4K Cgk8aDM+VGhlIGJ1dHRvbnM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PlJlbW92ZSBwcmVmczwvc3Bhbj4gOiBkZWxldGUgdGhlIHByZWZlcmVuY2VzIG9ubHk7IHVz ZWZ1bCBpZiB5b3VyIHByZWZzIGhhdmUgYmVjb21lIGNvcnJ1cHRlZCBvciB5b3Ugc2ltcGx5 IHdhbnQgdG8gcmV0dXJuIHRvICYjODIyMDtkZWZhdWx0JiM4MjIxOyBvcGVyYXRpb248L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+UmVtb3ZlIHRhYmxlczwvc3Bhbj4gOiBkZWxl dGUgdGhlIHRhZ3MgdGFibGVzLiBUaGlzIHdpbGwgcGVybWFuZW50bHkgZXJhc2UgYWxsIHRh Z3MgYWdhaW5zdCBhbGwgYXJ0aWNsZXMsIGltYWdlcywgZmlsZXMgYW5kIGxpbmtzLiBCZSB2 ZXJ5IHN1cmUgeW91IG1lYW4gaXQgYmVmb3JlIGNsaWNraW5nIHRoaXM8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+TWFuYWdlIHRhZ3M8L3NwYW4+IDogU3dpdGNoIHRvIHRoZSB0 YWcgbWFuYWdlbWVudCBwYWdlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlByZWZl cmVuY2VzPC9zcGFuPiA6IFN3aXRjaCB0byB0aGUgcHJlZmVyZW5jZXMgcGFnZTwvbGk+Cgk8 L3VsPgoKCTxoMz5UaGUgcHJlZmVyZW5jZXM8L2gzPgoKCTxoND5JbnRlcmZhY2Ugc2V0dGlu Z3M8L2g0PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkVuYWJsZSB0YWdzIGlu PC9zcGFuPiA6IGEgdGFnIGVudHJ5IG1lY2hhbmlzbSBpcyBhZGRlZCB0byB0aGUgYWRtaW4g c2lkZSBvZiBlYWNoIG9mIHRoZSBjaGVja2VkIHBhZ2VzPC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPkluaXRpYWwgcGFuZTwvc3Bhbj4gOiB3aGVuIHlvdSBjbGljayBFeHRlbnNp b25zIC0mZ3Q7IHNtZF90YWdzLCBzaG93IGVpdGhlciB0aGUgcHJlZmVyZW5jZXMgcGFnZSBv ciB0aGUgdGFnIG1hbmFnZW1lbnQgcGFnZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5FbnRlciB0YWdzIHVzaW5nPC9zcGFuPiA6IHRoZSBtZWNoYW5pc20geW91IHdpc2ggdG8g dXNlIHRvIGFzc2lnbiB0YWdzLiA8Y29kZT5UZXh0IGFyZWErPC9jb2RlPiBhbGxvd3MgbmV3 IHRhZ3MgdG8gYmUgYWRkZWQgb24gdGhlIGZseSB2aWEgY29udHJpYnV0b3JzIChhIGJpdCBs aWtlIHRydV90YWdzKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5MaW5rIHRhZ3Mg dG8gY2F0ZWdvcmllczwvc3Bhbj4gOiBhbGxvdyB0YWdzIHRvIGJlIGFzc29jaWF0ZWQgd2l0 aCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBjYXRlZ29yaWVzLiBJZiB0aGlzIGlz IG9uIGFuZCA8Y29kZT5UZXh0IGFyZWErPC9jb2RlPiBpcyBiZWluZyB1c2VkLCBhbnkgbmV3 IHRhZ3MgYWRkZWQgdmlhIHRoZSBhcnRpY2xlLCBpbWFnZSwgZmlsZSBvciBsaW5rIHNjcmVl bnMgd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjYXRl Z29yeSAob3IgY2F0ZWdvcnkxIGluIHRoZSBjYXNlIG9mIGFydGljbGVzKTwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5RdWljayB0YWc8L3NwYW4+IDogaWYgdXNpbmcgYSB0ZXh0 YXJlYSBhbmQgeW91IGluc3RhbGwgdGhlIGpRdWVyeSBhdXRvY29tcGxldGUgcGx1Z2luLCB0 aGlzIGRldGVybWluZXMgd2hpY2ggbWV0aG9kIG9mIGF1dG8tY29tcGxldGUgdG8gdXNlOiA8 Y29kZT5zdHJpY3Q8L2NvZGU+IHByZXZlbnRzIHRhZ3MgYmVpbmcgc3VibWl0dGVkIHRoYXQg YXJlIGRpc2FsbG93ZWQgYnkgdGhlIGN1cnJlbnQgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gY2F0ZWdvcnk7IDxjb2RlPnN0YW5kYXJkPC9jb2RlPiBhbGxvd3MgbmV3IHRhZ3Mg dG8gYmUgZW50ZXJlZC4gTm90ZSB0aGF0IHlvdSA8c3Ryb25nPm1heSBub3QgZW50ZXIgbmV3 IHRhZ3MgYXQgYWxsPC9zdHJvbmc+IGlmIFF1aWNrIHRhZ3MgaXMgaW4gPGNvZGU+c3RyaWN0 PC9jb2RlPiBtb2RlOiBpdCBvdmVycmlkZXMgPGNvZGU+VGV4dCBhcmVhKzwvY29kZT48L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+anMgcGx1Z2luIGRpcjwvc3Bhbj4gOiB0aGUg ZGlyZWN0b3J5IGluIHdoaWNoIHlvdXIgYXV0by1jb21wbGV0ZSBwbHVnaW4gcmVzaWRlcyAo dGhlIGZpbGVuYW1lIGl0IGV4cGVjdHMgaXMgPGNvZGU+anF1ZXJ5LmF1dG9jb21wbGV0ZS5w YWNrLmpzPC9jb2RlPikuIElmIHlvdSBiZWdpbiB0aGUgZGlyZWN0b3J5IG5hbWUgd2l0aCBh IDxjb2RlPi88L2NvZGU+IHRoZSBwYXRoIHdpbGwgYmUgcmVsYXRpdmUgdG8geW91ciBzaXRl IHJvb3QuIFdpdGhvdXQgYSBwcmVjZWRpbmcgJiM4MjE2Oy8mIzgyMTc7IGl0IGlzIHJlbGF0 aXZlIHRvIHRoZSAmIzgyMTY7dGV4dHBhdHRlcm4mIzgyMTc7IGRpcmVjdG9yeS4gVGhlIHRy YWlsaW5nIHNsYXNoIGlzIG9wdGlvbmFsIGFuZCB3aWxsIGJlIGFkZGVkIGludGVybmFsbHkg aWYgeW91IG9taXQgaXQuIFRoaXMgZ2l2ZXMgeW91IHRoZSBmcmVlZG9tIHRvIHB1dCB0aGUg ZmlsZXMgd2hlcmV2ZXIgaXQgc3VpdHMgeW91IGFuZCByZWZlcmVuY2UgdGhlbSBsaWtlIHRo aXM6Cgk8dWw+CgkJPGxpPnVzZSA8Y29kZT5teV9qczwvY29kZT4gZm9yICYjODIxNjt0ZXh0 cGF0dGVybi9teV9qcy9qcXVlcnkuYXV0b2NvbXBsZXRlLnBhY2suanMmIzgyMTc7PC9saT4K CQk8bGk+dXNlIGVpdGhlciA8Y29kZT4uLi9teV9zY3JpcHRzPC9jb2RlPiAgb3IgPGNvZGU+ L215X3NjcmlwdHM8L2NvZGU+IGZvciAmIzgyMTY7c2l0ZV9yb290L215X3NjcmlwdHMvanF1 ZXJ5LmF1dG9jb21wbGV0ZS5wYWNrLmpzJiM4MjE3OzwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5qcyBzdHlsZSBkaXI8L3NwYW4+IDogdGhlIGRpcmVjdG9y eSBpbiB3aGljaCB5b3VyIGF1dG8tY29tcGxldGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwv c3Bhbj4gZmlsZXMgcmVzaWRlICh0aGUgZmlsZSBuYW1lIGl0IGV4cGVjdHMgaXMgPGNvZGU+ anF1ZXJ5LmF1dG9jb21wbGV0ZS5jc3M8L2NvZGU+KS4gVGhlIHNhbWUgY29tbWVudHMgaG9s ZCB0cnVlIGFib3V0IHRoZSBwYXRoIGFzIGFib3ZlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPlNlbGVjdC90ZXh0YXJlYSByb3dzPC9zcGFuPiA6IG51bWJlciBvZiByb3dzIGlu IHRoZSBzZWxlY3QgbGlzdCBvciB0ZXh0YXJlYS4gSWYgc2V0IHRvIDxjb2RlPjE8L2NvZGU+ IGEgc2VsZWN0IGxpc3Qgd2lsbCBiZWNvbWUgbm9uLW11bHRpcGxlIGFuZCB5b3UgY2FuIHRo ZW4gb25seSBjaG9vc2UgMSB0YWcuIFNldCB0byA8Y29kZT4wPC9jb2RlPiB0byBzaG93IGEg bXVsdGlwbGUgc2VsZWN0IGxpc3QgY29udGFpbmluZyBhbGwgdGFncy4gT3RoZXIgdmFsdWVz IHNob3cgYSBtdWx0aXBsZSBzZWxlY3QgbGlzdCB3aXRoIHRoZSBnaXZlbiBudW1iZXIgb2Yg cm93cyBidXQgYmUgYXdhcmUgdGhpcyBtYXkgdHVybiBvdXQgdG8gYmUgYSBndWlkZSBhcyBj ZXJ0YWluIGJyb3dzZXIgZmFjdG9ycyBtYXkgb3ZlcnJpZGUgdGhlIHZhbHVlLiBGb3IgZXhh bXBsZSwgaW4gRmlyZWZveCBpZiB5b3UgY2hvb3NlIGEgc2VsZWN0IGxpc3QgdmFsdWUgb2Yg PGNvZGU+MjwvY29kZT4geW91IGNhbm5vdCBzZWUgdGhlIHdob2xlIGxpc3QgYmVjYXVzZSB0 aGUgaW5wdXQgaXMgbm90IGJpZyBlbm91Z2ggdG8gc2hvdyB0aGUgc2Nyb2xsYmFyICh5b3Ug Z2V0IGEgc2Nyb2xsYmFyIGZyb20gYSB2YWx1ZSBvZiA8Y29kZT4zPC9jb2RlPiBvciBtb3Jl KS4gQWxzbywgaWYgeW91IGFyZSB1c2luZyBhdXRvY29tcGxldGUgZm9yIHRoZSB0ZXh0IGFy ZWEgeW91IG1heSBub3QgZ2V0IHRoZSBudW1iZXIgb2Ygcm93cyB5b3UgZXhwZWN0IGR1ZSB0 byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gdGhhdCBjb21lcyB3aXRoIHRo ZSBhdXRvY29tcGxldGUgcGx1Z2luPC9saT4KCTwvdWw+CgoJPGg0PlRhZyBtYW5hZ2VtZW50 PC9oND4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5BdXRvIG5hbWU8L3NwYW4+ IDogaGVscHMgc3BlZWQgdGFnIGNyZWF0aW9uIGJ5IGF1dG9tYXRpY2FsbHkgbmFtaW5nIHRo ZW0gYmFzZWQgb24gdGhlIHRpdGxlIHlvdSB1c2U8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+VGFnIGNvbHVtbnM8L3NwYW4+IDogdGhlIG51bWJlciBvZiBjb2x1bW5zIG9mIHRh Z3MgdG8gZGlzcGxheSBpbiB0aGUgbWFuYWdlbWVudCBwYWdlPC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPk9yZGVyIHRhZ3MgYnk8L3NwYW4+IDogJiM4MjE2O2NvbHVtbiYjODIx NzsgdG8gaGF2ZSB0aGUgdGFncyB3b3JrIGRvd24gdGhlIHBhZ2UgZmlyc3Q7ICYjODIxNjty b3cmIzgyMTc7IHRvIHdvcmsgYWNyb3NzIHRoZSBwYWdlPC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPlNob3cgdGFnIHVzYWdlIGNvdW50czwvc3Bhbj4gOiB3aGV0aGVyIHRvIGlu ZGljYXRlIHRoZSBudW1iZXIgb2YgaXRlbXMgZm9yIHdoaWNoIGEgdGFnIGlzIHVzZWQ8L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+V2hlbiBkZWxldGluZyBhIHBhcmVudDwvc3Bh bj4gOiBjaG9vc2Ugd2hldGhlciBhbnkgY2hpbGQgdGFncyB3aWxsIGJlIHByb21vdGVkIHRv IHRoZSBzYW1lIGxldmVsIGFzIHRoZSB0YWcgeW91IGp1c3QgZGVsZXRlZCwgb3IgdGhlIGVu dGlyZSB0cmVlIGJlbG93IHRoZSBkZWxldGVkIHRhZyB3aWxsIGJlIHJlbW92ZWQgYXMgd2Vs bDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5BbGxvdyBkZWxldGlvbiBvZiB1c2Vk IHRhZ3M8L3NwYW4+IDogd2hlbiAmIzgyMTY7bm8mIzgyMTc7LCBpZiBhIHRhZyBoYXMgYmVl biB1c2VkIGJ5IGFuIGFydGljbGUvaW1hZ2UvZmlsZS9saW5rIGl0IGNhbm5vdCBiZSBkZWxl dGVkPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkNsaWNrZWQgPHNwYW4gY2xhc3M9 ImNhcHMiPlJHQjwvc3Bhbj4gY29sb3VyPC9zcGFuPiA6IHRoZSA8c3BhbiBjbGFzcz0iY2Fw cyI+Q1NTPC9zcGFuPiBiYWNrZ3JvdW5kIGNvbG91ciBmb3IgdGhlIGN1cnJlbnRseSBlZGl0 ZWQgdGFnOyBmb3IgdGhvc2UgdGhhdCBkb24mIzgyMTc7dCBsaWtlIHllbGxvdyA7LSk8L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TW91c2Utb3ZlciA8c3BhbiBjbGFzcz0iY2Fw cyI+UkdCPC9zcGFuPiBjb2xvdXI8L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5D U1M8L3NwYW4+IGJhY2tncm91bmQgY29sb3VyIGFzIHlvdSBtb3ZlIG92ZXIgZWFjaCBpdGVt IGluIHRoZSBsaXN0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlN1Yi10YWcgbGV2 ZWwgaW5kaWNhdG9yPC9zcGFuPiA6IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bh bj4gZW50aXR5IG9yIHRleHQgeW91IHdpc2ggdG8gcHJlY2VkZSBlYWNoIHN1Yi10YWcgd2l0 aC4gTGV2ZWwgMSB0YWdzIGhhdmUgb25lIG9mIHRoZXNlIHN5bWJvbHMgYWRkZWQsIGxldmVs IDIgdGFncyBoYXZlIHR3byBhZGRlZCwgYW5kIHNvIG9uPC9saT4KCTwvdWw+CgoJPGg0Pjxz cGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IG1hbmFnZW1lbnQ8L2g0PgoKCTx1bD4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPjxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IG5h bWUgcGFyYW1ldGVyPC9zcGFuPiA6IFdoZW4gZmlsdGVyaW5nIGJ5IHRhZyBuYW1lLCB0aGlz IGlzIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBzdHJpbmcgdXNlZCB0byBp bmRpY2F0ZSBhIHRhZzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj48c3BhbiBjbGFz cz0iY2FwcyI+VVJMPC9zcGFuPiB0eXBlIHBhcmFtZXRlcjwvc3Bhbj4gOiBXaGVuIGZpbHRl cmluZyBieSB0YWcgdHlwZSwgdGhpcyBpcyB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwv c3Bhbj4gc3RyaW5nIHVzZWQgdG8gaW5kaWNhdGUgYSB0YWcgdHlwZTwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5EZWZhdWx0IHNlY3Rpb24gZm9yIHRhZ3M8L3NwYW4+IDogQW55 IGxpbmtzIGZyb20gdGhlIGNsaWVudC1zaWRlIHRhZ3Mgd2lsbCBiZSBzZW50IHRvIHRoaXMg c2VjdGlvbiBmb3IgZGlzcGxheS4gQ2FuIGJlIG92ZXJyaWRkZW4gb24gYSB0YWctYnktdGFn IGJhc2lzIHdpdGggdGhlIDxjb2RlPnNlY3Rpb25fbGluazwvY29kZT4gYXR0cmlidXRlPC9s aT4KCTwvdWw+CgoJPGgzPlRoZSBtYW5hZ2VtZW50IHBhbmU8L2gzPgoKCTxwPkRpc3BsYXlz IGEgbGlzdCBvZiBhbGwgZGVmaW5lZCB0YWdzLiBJbiBjb250cmFzdCB0byB0aGUgYnVpbHQt aW4gY2F0ZWdvcmllcywgb25seSBvbmUgdHlwZSBpcyBzaG93biBhdCBhIHRpbWU7IHN3aXRj aCBiZXR3ZWVuIHRoZW0gd2l0aCB0aGUgcmFkaW8gYnV0dG9ucyBpbiB0aGUgJiM4MjE2O0Zp bHRlciYjODIxNzsgcm93LjwvcD4KCgk8cD5UaGUgaW5wdXQgcm93IGF0IHRoZSB0b3AgaGFz IHRocmVlIG9yIGZvdXIgZmllbGRzIGluIGl0LCBkZXBlbmRpbmcgaWYgeW91IGhhdmUgY2hv c2VuIHRvIGxpbmsgdGFncyB0byBjYXRlZ29yaWVzOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5UaXRsZTwvc3Bhbj4gOiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSB0 YWcgb24gdGhlIHB1YmxpYyBzaWRlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlBh cmVudDwvc3Bhbj4gOiBXaGV0aGVyIHRoZSB0YWcgaXMgaW4gYSBzdWItY2F0ZWdvcnkuIFRo ZSBlbXB0eSBpdGVtIGlzIGNvbnNpZGVyZWQgJiM4MjE2O3Jvb3QmIzgyMTc7ICh0b3AgbGV2 ZWwpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkxpbmtlZCBjYXQ8L3NwYW4+IDog KG9wdGlvbmFsKSBXaGV0aGVyIHRoZSB0YWcgaXMgYXNzb2NpYXRlZCB3aXRoIGEgPHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gY2F0ZWdvcnkuIEFueSBzdWItdGFncyBhcmUgYXV0 b21hdGljYWxseSBhc3NpZ25lZCB0byB0aGUgY2hvc2VuIGNhdGVnb3J5IGFzIHdlbGw8L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TmFtZTwvc3Bhbj4gOiBUaGUgJiM4MjE2O2lu dGVybmFsJiM4MjE3OyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB0YWcgbmFtZS4g UHJvYmFibHkgc2hvdWxkbiYjODIxNzt0IGNvbnRhaW4gc3BhY2VzIG9yIHdlaXJkIGNoYXJh Y3RlcnMsIGFsdGhvdWdoIHlvdSBjYW4gcHV0IHRoZW0gaW4gaWYgeW91IGtub3cgd2hhdCB5 b3UmIzgyMTc7cmUgZG9pbmc8L2xpPgoJPC91bD4KCgk8cD5XaXRoIHRoZSBhdXRvLW5hbWUg ZmVhdHVyZSBlbmFibGVkLCB3aGF0ZXZlciB5b3UgdHlwZSBpbiB0aGUgVGl0bGUgZmllbGQg d2lsbCBiZSBtaW1pY2tlZCBpbiB0aGUgTmFtZSBmaWVsZCwgYnV0IHdpdGggb25seSBsb3dl ciBjYXNlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiBTcGFjZXMgd2lsbCBiZSBjb252ZXJ0 ZWQgdG8gZGFzaGVzLiBbIE5vdGUgdGhhdCBhdCBwcmVzZW50LCBmb3JlaWduIGNoYXJhY3Rl cnMgYXJlIG5vdCAmIzgyMTY7ZHVtYmVkIGRvd24mIzgyMTc7IHRvIDxzcGFuIGNsYXNzPSJj YXBzIj5BU0NJSTwvc3Bhbj4uIFRoaXMgZmVhdHVyZSBpcyBwbGFubmVkIF08L3A+CgoJPHA+ SGl0IFNhdmUgKG9yIENyZWF0ZSkgdG8gZGVmaW5lIHRoZSB0YWcsIG9yIHVzZSB0aGUgRW50 ZXIga2V5IHdoZW4gaW4gYW55IGlucHV0IGZpZWxkIGFzIGEgc2hvcnRjdXQgZm9yIENyZWF0 ZS4gVGhlIHRhZyB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0 eXBlIChhcnRpY2xlLCBpbWFnZSwgZmlsZSBvciBsaW5rKSBidXQgd2lsbCByZW1haW4gJiM4 MjE2O3NlbGVjdGVkJiM4MjE3OyBhZnRlciBjcmVhdGlvbiBhbmQgd2lsbCBhbHNvIHN0YXkg YXZhaWxhYmxlIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gdHlwZXMuIFRoaXMgYWxsb3dzIGZv ciByYXBpZCBjcmVhdGlvbiBvZiBzaW1pbGFyLW5hbWVkIHRhZ3Mgb3IgZm9yIHZlcnkgcXVp Y2tseSAmIzgyMTY7Y29weWluZyYjODIxNzsgdGFncyBmcm9tIG9uZSB0eXBlIHRvIGFub3Ro ZXIuPC9wPgoKCTxwPllvdSBjYW4gZWRpdCBhbnkgdGFnIGJ5IGNsaWNraW5nIG9uIGl0IGlu IHRoZSBsaXN0IHRvIHB1bGwgaXQgaW50byB0aGUgZWRpdCBsaW5lIGF0IHRoZSB0b3AuIE1h a2UgYW55IGNoYW5nZXMgYW5kIGhpdCBTYXZlIHRvIG92ZXJ3cml0ZSB0aGUgZXhpc3Rpbmcg dGFnIG9yIENyZWF0ZSB0byBtYWtlIGEgbmV3IG9uZS4gVXNlIHRoZSAmIzgyMTY7eCYjODIx NzsgYnV0dG9uIHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgdGFnOyBub3RlIHRoZXJlIGlzIG5v IGNvbmZpcm1hdGlvbiBzdGVwLCBzaW5jZSB0aGUgYWN0IG9mIGNsaWNraW5nIHRoZSB0YWcg aXMgdGhlIGNvbmZpcm1hdGlvbiBpdHNlbGYhIFdoZW4geW91IHN3aXRjaCBiZXR3ZWVuIHR5 cGVzLCBpZiB0aGUgY3VycmVudGx5IGVkaXRlZCB0YWcgZXhpc3RzIGluIGFub3RoZXIgdHlw ZSwgaXQgd2lsbCBiZSBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IHVwb24gc3dpdGNoaW5nLjwv cD4KCgk8cD5JZiB0aGUgb3B0aW9uIHRvIGRpc3BsYXkgY291bnRzIGlzIHNlbGVjdGVkIHRo ZSBudW1iZXIgb2YgYXJ0aWNsZXMgLyBpbWFnZXMgLyBmaWxlcyAvIGxpbmtzIHdpbGwgYmUg c2hvd24gaW4gYnJhY2tldHMgYWxvbmdzaWRlIGVhY2ggdGFnLiBJZiB0aGUgdmFsdWUgaXMg Z3JlYXRlciB0aGFuIDAgdGhlIG51bWJlciBjYW4gYmUgY2xpY2tlZCB0byB2aWV3IHRoZSBs aXN0IG9mIGl0ZW1zIGNvbnRhaW5pbmcgdGhhdCB0YWcuPC9wPgoKCTxwPk5vdGVzOjwvcD4K Cgk8dWw+CgkJPGxpPklmIHlvdSBFZGl0IGEgdGFnIGFuZCB0cnkgdG8gU2F2ZSBpdCB3aGVu IGl0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIHRhZywgeW91IHdpbGwgcmVj ZWl2ZSBhIHdhcm5pbmcgbWVzc2FnZTwvbGk+CgkJPGxpPklmIHlvdSB0cnkgdG8gZGVsZXRl IGEgdGFnIHRoYXQgaXMgaW4gdXNlIGFuZCB0aGUgcHJlZmVyZW5jZSAmIzgyMTY7QWxsb3cg ZGVsZXRpb24gb2YgdXNlZCB0YWdzJiM4MjE3OyBpcyBzZXQgdG8gJiM4MjE2O25vJiM4MjE3 OywgaXQgd2lsbCBiZSBmb3JiaWRkZW48L2xpPgoJCTxsaT5UaGUgcGFyZW50IGxpc3QgaXMg cG9wdWxhdGVkIHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+QUpBWDwvc3Bhbj4gZnJvbSB0aGUg ZGF0YWJhc2UgZWFjaCB0aW1lIHlvdSBjbGljayBhIHRhZywgYW5kIHRoZSBMaW5rZWQgY2F0 IGxpc3QgaXMgcG9wdWxhdGVkIGVhY2ggdGltZSB5b3UgY2hhbmdlIHR5cGUuIFRoaXMgaXMg dW5mb3J0dW5hdGVseSB1bmF2b2lkYWJsZS4gVGhlIGxpc3RzIHdpbGwgZmFkZSBvdXQgd2hp bGUgdGhlIHJlcXVlc3QgaXMgdGFraW5nIHBsYWNlLiBPY2Nhc2lvbmFsbHkgaXQgbWF5IGdl dCAmIzgyMjA7c3R1Y2smIzgyMjE7IGlmIHlvdSBjbGljayB0b28gcXVpY2tseSBiZXR3ZWVu IHRhZ3Mgb3IgdGhlIHNlcnZlciBpcyBzbG93IHRvIHJlc3BvbmQuIEluIHRoZXNlIGNpcmN1 bXN0YW5jZXMsIHJlZnJlc2hpbmcgdGhlIHBhZ2UgYnkgY2xpY2tpbmcgdGhlIHNtZF90YWdz IHRhYiB3aWxsIHJlc3RvcmUgdGhpbmdzPC9saT4KCQk8bGk+V2hlbiB1c2luZyB0aGUgYXV0 by1uYW1lIGZlYXR1cmUsIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgTmFtZSBmaWVsZCwg ZG8gaXQgPGVtPmFmdGVyPC9lbT4geW91IGhhdmUgZmluaXNoZWQgdHlwaW5nIGluIHRoZSBU aXRsZSBmaWVsZDsgYW55IHN1YnNlcXVlbnQgY2hhbmdlcyB0byB0aGUgVGl0bGUgZmllbGQg d2lsbCBvdmVyd3JpdGUgYW55dGhpbmcgaW4gdGhlIE5hbWUgZmllbGQ8L2xpPgoJCTxsaT5E ZWxldGluZyBhIHRhZyB3aWxsIHJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBpdCBzbyBiZSBj YXJlZnVsPC9saT4KCTwvdWw+CgoJPGgzPkVkaXRpbmcgYXJ0aWNsZXMgLyBpbWFnZXMgLyBm aWxlcyAvIGxpbmtzPC9oMz4KCgk8cD5PbiBlYWNoIG9mIHRoZSBmb3VyIHBhZ2VzIHRoYXQg aGF2ZSBjaGVja2JveGVzIHNldCBpbiB0aGUgc21kX3RhZ3MgcHJlZmVyZW5jZXMsIHlvdXIg Y2hvc2VuIGlucHV0IG1lY2hhbmlzbSB3aWxsIGFwcGVhciBiZW5lYXRoIHRoZSBjYXRlZ29y eSBhc3NpZ25tZW50LiBUaGlzIGFsbG93cyB5b3UgdG8gdGFnIGEgcGFydGljdWxhciBhcnRp Y2xlLCBpbWFnZSwgZmlsZSBvciBsaW5rIHdpdGggYW55IG51bWJlciBvZiBpdGVtcy4gT25j ZSB5b3UgaGF2ZSBzZWxlY3RlZCB5b3VyIHRhZ3MsIHRoZSB1c3VhbCBTYXZlIGJ1dHRvbiBv biB0aGUgc2NyZWVuIHdpbGwgY29tbWl0IHRoZSBjaGFuZ2VzLjwvcD4KCgk8cD5UaGUgPGNv ZGU+W0VkaXRdPC9jb2RlPiBsaW5rIHRha2VzIHlvdSB0byB0aGUgVGFnIE1hbmFnZW1lbnQg cGFnZSB0aGF0IGFsbG93cyB5b3UgdG8gY3JlYXRlIG5ldyB0YWdzLiBJZiB1c2luZyBhIHNl bGVjdCBsaXN0LCB0d28gb3RoZXIgYnV0dG9ucyBhcmUgYXZhaWxhYmxlOiA8Y29kZT5bQ2xy XTwvY29kZT4gZGVzZWxlY3RzIGFsbCB0YWdzIGFuZCA8Y29kZT5bVG9nXTwvY29kZT4gdG9n Z2xlcyBhbGwgdGFncyBzbyBpZiB0aGV5IHdlcmUgJiM4MjE2O29uJiM4MjE3OyB0aGV5IGJl Y29tZSAmIzgyMTY7b2ZmJiM4MjE3OywgYW5kIHZpY2UgdmVyc2EuPC9wPgoKCTxwPk5vdGVz IG9uIHRoZSBUZXh0IGFyZWEgZW50cnkgbWVjaGFuaXNtczo8L3A+CgoJPHVsPgoJCTxsaT5U YWdzIGFyZSBjYXNlIHNlbnNpdGl2ZS4gQXV0by1jb21wbGV0ZSBpcyBzdHJvbmdseSByZWNv bW1lbmRlZDwvbGk+CgkJPGxpPk5ldyB0YWdzIGNhbiA8ZW0+b25seTwvZW0+IGJlIGFkZGVk IGlmIHRoZSA8Y29kZT5UZXh0IGFyZWErPC9jb2RlPiBpbnB1dCBtZXRob2QgaXMgY2hvc2Vu IGFuZCBRdWljayB0YWcgaXMgPHN0cm9uZz5ub3Q8L3N0cm9uZz4gc3RyaWN0PC9saT4KCQk8 bGk+TmV3IHRhZ3MgYXJlIG5vcm1hbGx5IGFzc2lnbmVkIGF0IHRoZSByb290IGxldmVsOyBp ZiB5b3Ugd2lzaCB0byBzdWItdGFnIHRoZW0gYXQgdGhpcyBwb2ludCwgd3JpdGUgdGhlIHRh ZyBsaWtlIHRoaXM6IDxjb2RlPnBhcmVudF90YWctLSZndDtuZXdfdGFnPC9jb2RlPi4gQW55 dGhpbmcgdG8gdGhlIGxlZnQgb2YgdGhlIGh5cGhlbi1oeXBoZW4tYXJyb3cgaXMgZmlyc3Qg Y2hlY2tlZCB0byBzZWUgaWYgaXQgZXhpc3RzIGFzIGEgdGFnIGFuZCwgaWYgaXQgZG9lcywg dGhlIG5ld190YWcgaXMgbWFkZSBhIHN1Yi10YWcgb2YgaXQuIElmIHRoZSBwYXJlbnRfdGFn IGRvZXNuJiM4MjE3O3QgZXhpc3QsIG5ld190YWcgaXMgYXNzaWduZWQgdG8gcm9vdDwvbGk+ CgkJPGxpPk5ldyB0YWdzIGJlY29tZSBUYWcgVGl0bGVzLiBDb3JyZXNwb25kaW5nIHRhZyBu YW1lcyBhcmUgc3ViamVjdCB0byB0aGUgdXN1YWwgbG93ZXIgY2FzZS9kdW1iaW5nIGRvd248 L2xpPgoJCTxsaT5JZiA8Y29kZT5MaW5rIHRhZ3MgdG8gY2F0ZWdvcmllczwvY29kZT4gaXMg c2V0LCBhbmQgbm8gY2F0ZWdvcnkgaXMgY2hvc2VuIGF0IHRoZSB0aW1lIG9mIHNhdmluZywg bmV3IHRhZ3Mgd2lsbCA8ZW0+bm90PC9lbT4gYmUgYXNzaWduZWQgYSBjYXRlZ29yeTwvbGk+ Cgk8L3VsPgoKCTxoMiBpZD0iY3N1c2FnZSI+UHVibGljIHNpZGUgdGFnczwvaDI+CgoJPGgy IGNsYXNzPSJ0YWciPnNtZF90YWdfbGlzdDwvaDI+CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5 Ij5EaXNwbGF5IGEgbGlzdCBvZiB0YWdzIG1hdGNoaW5nIGNlcnRhaW4gY3JpdGVyaWEsIGZy b20gdGhlIGN1cnJlbnQgY29udGV4dCAoZ2xvYmFsLCBhcnRpY2xlLCBmaWxlLCBsaW5rLCBv ciBpbWFnZSkuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRyaWJ1dGVzIj5BdHRy aWJ1dGVzPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50eXBlPC9zcGFu PiA6IG9uZSBvZiA8Y29kZT5hcnRpY2xlPC9jb2RlPiwgPGNvZGU+aW1hZ2U8L2NvZGU+LCA8 Y29kZT5maWxlPC9jb2RlPiBvciA8Y29kZT5saW5rPC9jb2RlPi4gSWYgb21pdHRlZCB0aGUg YmVzdCBtYXRjaCBpcyB1c2VkIGJhc2VkIG9uIHdoZXJlIHRoZSB0YWcgYXBwZWFycy4gRm9y IGV4YW1wbGUsIGlmIGl0IGlzIGluIHRoZSA8Y29kZT5wbGFpbmxpbmtzPC9jb2RlPiBmb3Jt IHRoZSB0eXBlIHdvdWxkIGRlZmF1bHQgdG8gPGNvZGU+bGlua3M8L2NvZGU+LiBJZiBhIGJl c3QgbWF0Y2ggY2Fubm90IGJlIGZvdW5kLCBpdCB1c2VzIDxjb2RlPmFydGljbGU8L2NvZGU+ PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmlkPC9zcGFuPiA6IGxpc3Qgb2YgdGFn IElEcyB0byBzaG93LiBJZiBvbWl0dGVkIGFuZCB5b3Ugd2VyZSB2aWV3aW5nIGFuIGFydGlj bGUgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSB0YWdzIGZyb20gdGhlIGN1cnJlbnQgYXJ0aWNs ZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5uYW1lPC9zcGFuPiA6IGZpeGVkIGxp c3Qgb2YgdGFnIG5hbWVzIHRvIHNob3cuIElmIHVzZWQsIHRoZXkgdHJ1bXAgdGhlIDxjb2Rl PmlkPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5leGNsdWRlPC9zcGFu PiA6IGEgbGlzdCBvZiB0YWcgbmFtZXMgeW91IHdpc2ggdG8gb21pdCBmcm9tIHRoZSBsaXN0 PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnBhcmVudDwvc3Bhbj4gOiBzdGFydCB0 aGUgbGlzdCBmcm9tIHRoaXMgcGFyZW50IHRhZy4gRGVmYXVsdCBpcyBlbXB0eSAoaS5lLiB0 aGUgJiM4MjE2O3Jvb3QmIzgyMTc7IG5vZGUgb2YgdGhpcyBwYXJ0aWN1bGFyIHR5cGUpPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnN1YmxldmVsPC9zcGFuPiA6IG9ubHkgc2hv dyB0YWdzIG1hdGNoaW5nIHRoaXMgbnVtYmVyIGxldmVsLiBZb3UgY2FuIGVpdGhlciBzcGVj aWZ5IDxjb2RlPmFsbDwvY29kZT4gd2hpY2ggc2hvd3MgYWxsIHRhZ3MgZnJvbSBhbGwgbGV2 ZWxzIG9yIGEgbnVtYmVyIHRvIG1hdGNoIG9ubHkgdGFncyBmcm9tIHRoYXQgbGV2ZWwuIFlv dSBtYXkgYWxzbyBwcmVmaXggdGhlIG51bWJlciB3aXRoIGEgY29tcGFyaXNvbiBvcGVyYXRv ciAoZS5nLiA8Y29kZT5zdWJsZXZlbD0mcXVvdDsmZ3Q7PTEmcXVvdDs8L2NvZGU+KSB3aGlj aCB3b3VsZCBvbmx5IHNob3cgdGFncyBmcm9tIGxldmVsIDEgYW5kIGl0cyBkZXNjZW5kZW50 cy4gVmFsaWQgb3BlcmF0b3JzIGFyZSA8Y29kZT4mZ3Q7PC9jb2RlPiwgPGNvZGU+Jmx0Ozwv Y29kZT4sIDxjb2RlPiZndDs9PC9jb2RlPiBvciA8Y29kZT4mbHQ7PTwvY29kZT4uIElmIGFu eXRoaW5nIGVsc2UsIGVxdWFsaXR5IGlzIGFzc3VtZWQ8ZGl2IGNsYXNzPSJicmVhayI+Tm90 ZSB0aGF0IGlmIHlvdSBzcGVjaWZ5IGEgcGFyZW50LCBhbmQgdGhhdCBwYXJlbnQgaXMgaW4g dGhlIGN1cnJlbnQgdGFnIGxpc3QsIGl0cyBsZXZlbCBpcyAwIGFuZCB0aGUgY2hpbGRyZW4g YmVuZWF0aCBpdCBzdGFydCBhdCBsZXZlbCAxLiBJZiwgaG93ZXZlciwgeW91ciBjaG9zZW4g cGFyZW50IGlzIG5vdCBpbiB0aGUgY3VycmVudCB0YWcgbGlzdCwgPGVtPnRoZSBjaGlsZHJl biB3aWxsIGJlIGF0IGxldmVsIDAgYW5kIGFueSBzdWItY2hpbGRyZW4gd2lsbCBzdGFydCBm cm9tIGxldmVsIDE8L2VtPi4gVG8gaGVscCBtYW5hZ2UgdGhpcywgaWYgeW91IGxlYXZlIDxj b2RlPnN1YmxldmVsPC9jb2RlPiBlbXB0eSB0aGUgcGx1Z2luIGZpZ3VyZXMgb3V0IHRoZSBh cHByb3ByaWF0ZSBsZXZlbCBhdXRvbWF0aWNhbGx5IGFuZCBvbmx5IHNob3dzIHRhZ3MgYmVs b3cgdGhlIGdpdmVuIHBhcmVudDwvZGl2PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5vZmZzZXQ8L3NwYW4+IDogc2tpcCBvdmVyIHRoaXMgbnVtYmVyIG9mIHRhZ3MgYmVmb3Jl IHN0YXJ0aW5nIHRvIGRpc3BsYXkgdGhlbTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5saW1pdDwvc3Bhbj4gOiB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGFncyB0byBzaG93LiBE ZWZhdWx0IGlzIDk5OTk5IChpLmUuIGVmZmV0Y2l2ZWx5IHVubGltaXRlZCk8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+Zm9ybTwvc3Bhbj4gOiBwYXNzIGNvbnRyb2wgdG8gdGhp cyBmb3JtIHRvIGRpc3BsYXkgdGhlIHRhZyBsaXN0LiBZb3UgbWF5IGFsc28gdXNlIHRoZSB0 YWcgYXMgYSBjb250YWluZXIuIFdpdGhvdXQgZm9ybSBvciBjb250YWluZXIsIHRoZSB0YWcg bmFtZSBhbmQgaXRzIGNvdW50IHdpbGwgYmUgb3V0cHV0PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPmluZGVudDwvc3Bhbj4gOiBjaGFyYWN0ZXIgc2VxdWVuY2UgdG8gdXNlIHRv IGluZGljYXRlIHRoYXQgYSB0YWcgaXMgYSBzdWItdGFnIG9mIGEgcGFyZW50LiBEZWZhdWx0 cyB0byB0d28gbm9uLWJyZWFraW5nIHNwYWNlczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5zZWN0aW9uX2xpbms8L3NwYW4+IDogaWYgeW91IHdhbnQgdGhlIHRhZ3MgdG8gYmUg Y2xpY2thYmxlIHNvIHRoZXkgY2FuIGxlYWQgdG8gYW5vdGhlciBwYWdlIG9mIHRhZyBkZXRh aWxzLCB0aGlzIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSAmIzgyMTY7bGFuZGluZyBw YWdlJiM4MjE3OyB0aGV5IHdpbGwgYXBwZWFyIG9uLiBJdCBpcyB1c3VhbGx5IG5vdCBzZXQs IHdoaWNoIG1lYW5zIGl0JiM4MjE3O2xsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPkRl ZmF1bHQgc2VjdGlvbiBmb3IgdGFnczwvY29kZT4gcHJlZmVyZW5jZTwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5zaHVmZmxlPC9zcGFuPiA6IHJhbmRvbWx5IHNvcnQgdGhlIHRh Z3M8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFiZWw8L3NwYW4+IDogbGFiZWwg dGhlIHRvcCBvZiB0aGUgbGlzdCB3aXRoIHRoaXMgaGVhZGluZzwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5sYWJlbHRhZzwvc3Bhbj4gOiB3cmFwIHRoZSBsYWJlbCB3aXRoIHRo aXMgKFgpSFRNTCB0YWcgKGUuZy4gPGNvZGU+bGFiZWx0YWc9JnF1b3Q7ZGl2JnF1b3Q7PC9j b2RlPikuIERlZmF1bHQgaXMgZW1wdHk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ d3JhcHRhZzwvc3Bhbj4gOiB3cmFwIHRoZSB0YWcgbGlzdCB3aXRoIHRoaXMgKFgpSFRNTCB0 YWcuIERlZmF1bHQgaXMgPGNvZGU+dWw8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPmJyZWFrPC9zcGFuPiA6IHdyYXAgZWFjaCB0YWcgd2l0aCB0aGlzIChYKUhUTUwg dGFnLiBEZWZhdWx0IGlzIDxjb2RlPmxpPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5jbGFzczwvc3Bhbj4gOiBhcHBseSB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5D U1M8L3NwYW4+IGNsYXNzIHRvIHRoZSB0YWcgbGlzdC4gRGVmYXVsdCBpcyA8Y29kZT5zbWRf dGFnX2xpc3Q8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmJyZWFrY2xh c3M8L3NwYW4+IDogYXBwbHkgdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBj bGFzcyB0byBlYWNoIHRhZy4gRGVmYXVsdCBpcyB1bnNldDwvbGk+Cgk8L3VsPgoKCTxoMiBj bGFzcz0idGFnIj5zbWRfdGFnX25hbWU8L2gyPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+ RGlzcGxheSB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCB0YWcuIFVzdXNhbGx5IHVzZWQgaW5z aWRlIGFuIHNtZF90YWdfbGlzdCBjb250YWluZXIuIENhbiBiYSBhIGNvbnRhaW5lciB0byBh ZGQgZXh0cmEgZm9ybWF0dGluZyBhcm91bmQgdGhlIG5hbWUgaWYgeW91IHdpc2guPC9wPgoK CTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRyaWJ1dGVzIj5BdHRyaWJ1dGVzPC9oMz4KCgk8 dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50aXRsZTwvc3Bhbj4gOiB3aGV0aGVyIHRv IHNob3cgdGhlIHRhZyBuYW1lICgwKSBvciBpdHMgdGl0bGUgKDEpLiBEZWZhdWx0OiAwPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxpbms8L3NwYW4+IDogbWFrZXMgdGhlIG5h bWUgY2xpY2thYmxlIHRvIHRha2UgdmlzaXRvcnMgdG8gYSB0YWcgcGFnZSBhYm91dCB0aGF0 IHBhcnRpY3VsYXIgdGFnPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNlY3Rpb248 L3NwYW4+IDogdGhlIHNlY3Rpb24gbmFtZSB0byBsaW5rIHRvLiBEZWZhdWx0cyB0byB0aGUg PGNvZGU+RGVmYXVsdCBzZWN0aW9uIGZvciB0YWdzPC9jb2RlPiBwcmVmZXJlbmNlPC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnBhcmVudDwvc3Bhbj4gOiBub3QgdmVyeSB1c2Vm dWwgdG8gcHJpbnQsIGJ1dCBjYW4gYmUgdXNlZnVsIHRvIG9mZmVyIHRyZWUtYnJvd3Npbmcg b2YgdGFncy4gRGVmYXVsdDogPGNvZGU+MDwvY29kZT4gYnV0IHNldCB0byA8Y29kZT4xPC9j b2RlPiB0byB0dXJuIHRoaXMgZmVhdHVyZSBvbjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5wYXJlbnRsYWJlbDwvc3Bhbj4gOiB0aGUgbGFiZWwgdG8gdXNlIGZvciBhbnkgcGFy ZW50IGxpbmtzLiBEZWZhdWx0OiAmIzgyMTY7VXAgYSBsZXZlbCYjODIxNzs8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+d3JhcHRhZzwvc3Bhbj4gOiB3cmFwIHRoZSB0YWcgd2l0 aCB0aGlzIChYKUhUTUwgdGFnLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5jbGFzczwvc3Bhbj4gOiBhcHBseSB0aGlzIDxzcGFuIGNsYXNzPSJjYXBz Ij5DU1M8L3NwYW4+IGNsYXNzIHRvIHRoZSB0YWcuIERlZmF1bHQgaXMgPGNvZGU+c21kX3Rh Z19uYW1lPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5wYWRfc3RyPC9z cGFuPiA6IHB1dCB0aGlzIHN0cmluZyBhZGphY2VudCB0byB0aGUgbGFiZWwgdG8gaW5kaWNh dGUgaXRzIGxldmVsIGluIHRoZSBoaWVyYXJjaHkuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnBhZF9wb3M8L3NwYW4+IDogd2hlcmUgdG8gcHV0IHRo ZSBwYWRkaW5nICg8Y29kZT5sZWZ0PC9jb2RlPiwgPGNvZGU+cmlnaHQ8L2NvZGU+IG9yIDxj b2RlPmJvdGg8L2NvZGU+KS4gSWYgdXNpbmcgPGNvZGU+bGluazwvY29kZT4geW91IG1heSBh ZGQgPGNvZGU+OmluPC9jb2RlPiB0byB0aGUgcGFkX3BvcyB2YWx1ZSB0byBpbmRpY2F0ZSBp ZiB5b3Ugd2FudCB0aGUgc3RyaW5nIHRvIGJlIGluY2x1ZGVkIGluc2lkZSB0aGUgYW5jaG9y IChieSBkZWZhdWx0IGl0IHdpbGwgYmUgb3V0c2lkZSk8L2xpPgoJPC91bD4KCgk8aDIgY2xh c3M9InRhZyI+c21kX3RhZ19jb3VudDwvaDI+CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5E aXNwbGF5IHRoZSBudW1iZXIgb2YgYXJ0aWNsZXMsIGZpbGVzLCBpbWFnZXMgb3IgbGlua3Mg dGhhdCB1c2UgdGhlIGN1cnJlbnQgdGFnLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0i YXR0cmlidXRlcyI+QXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+c2hvd2VtcHR5PC9zcGFuPiA6IGRldGVybWluZXMgd2l0aGVyIHRvIGRpc3BsYXkg Y291bnRzIHRoYXQgaGF2ZSB6ZXJvIGl0ZW1zLiBEZWZhdWx0IGlzIDxjb2RlPjE8L2NvZGU+ OiBzaG93IGFsbCB2YWx1ZXMsIHdoZXRoZXIgemVybyBvciBub3Q8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+d3JhcHRhZzwvc3Bhbj4gOiB3cmFwIHRoZSBjb3VudCB3aXRoIHRo aXMgKFgpSFRNTCB0YWcuIERlZmF1bHQgaXMgdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+Y2xhc3M8L3NwYW4+IDogYXBwbHkgdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+ Q1NTPC9zcGFuPiBjbGFzcyB0byB0aGUgY291bnQuIERlZmF1bHQgaXMgPGNvZGU+c21kX3Rh Z19jb3VudDwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+d3JhcGNvdW50 PC9zcGFuPiA6IGNoYXJhY3RlcnMgdG8gd3JhcCBhcm91bmQgdGhlIGNvdW50IGl0c2VsZi4g U3BlY2lmeSB1cCB0byB0d28gaXRlbXMsIHNlcGFyYXRlZCBieSBhIGNvbG9uLiBJZiB5b3Ug dXNlIGp1c3Qgb25lIGl0ZW0gaXQgd2lsbCBhcHBlYXIgb24gYm90aCBzaWRlcyBvZiB0aGUg Y291bnQuIERlZmF1bHQgaXMgJiM4MjE2OyZuYnNwOyg6KSYjODIxNzsgd2l0aCBhIHNwYWNl IGF0IHRoZSBzdGFydDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5wYXJhbWRlbGlt PC9zcGFuPiA6IGlmIHlvdSBkb24mIzgyMTc7dCBsaWtlIHRoZSBkZWZhdWx0IGNvbG9uIDxj b2RlPjo8L2NvZGU+IGFzIGEgc2VwYXJhdG9yIGZvciB0aGUgPGNvZGU+d3JhcGNvdW50PC9j b2RlPiBhdHRyaWJ1dGUsIGNoYW5nZSBpdDwvbGk+Cgk8L3VsPgoKCTxoMz5FeGFtcGxlOiBk aXNwbGF5IHRhZ3MvY291bnRzIGZyb20gdGhlIGN1cnJlbnQgYXJ0aWNsZTwvaDM+CgoJPHA+ SGVyZSYjODIxNztzIGFuIGV4YW1wbGUsIHVzaW5nIHRoZSBsYXN0IHRocmVlIHRhZ3MuIElu IHlvdXIgZGVmYXVsdCBhcnRpY2xlIGZvcm0sIGFkZCB0aGlzIHRvIHNob3cgYSBsaXN0IG9m IGNsaWNrYWJsZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBhcnRpY2xlOjwv cD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPkZpbGVkIGluOiAm bHQ7dHhwOnNtZF90YWdfbGlzdCB3cmFwdGFnPSZxdW90OyZxdW90OyBicmVhaz0mcXVvdDsg fCAmcXVvdDsKICAgICBzaHVmZmxlPSZxdW90OzEmcXVvdDsgaW5kZW50PSZxdW90OyZxdW90 OyZndDsKICAmbHQ7dHhwOnNtZF90YWdfbmFtZSBsaW5rPSZxdW90OzEmcXVvdDsgLyZndDsK ICAmbHQ7dHhwOnNtZF90YWdfY291bnQgd3JhcGNvdW50PSZxdW90Oy8mcXVvdDsgLyZndDsK Jmx0Oy90eHA6c21kX3RhZ19saXN0Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+VGhhdCBtaWdo dCBkaXNwbGF5OjwvcD4KCjxwcmU+PGNvZGU+RmlsZWQgaW46IFVLIC84LyB8IHBvbGl0aWNz IC8xLyB8IG1lZGlhIC8xNC8gfCBtb25leSAvOS8gfCBiYW5rcyAvMy8KPC9jb2RlPjwvcHJl PgoKCTxoMiBjbGFzcz0idGFnIj5zbWRfdGFnX2luZm88L2gyPgoKCTxwIGNsYXNzPSJ0YWct c3VtbWFyeSI+Rm9yIGFsbCBvdGhlciBwaWVjZXMgb2YgaW5mb3JtYXRpb24gYWJvdXQgYSB0 YWcsIHVzZSB0aGlzLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0cmlidXRlcyI+ QXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aXRlbTwv c3Bhbj4gOiBsaXN0IG9mIG9uZSBvciBtb3JlIHRoaW5ncyB0byBkaXNwbGF5LiBDYW4gYmUg YW55IG9mIDxjb2RlPmlkPC9jb2RlPiwgPGNvZGU+bmFtZTwvY29kZT4sIDxjb2RlPnRpdGxl PC9jb2RlPiwgPGNvZGU+dHlwZTwvY29kZT4sIDxjb2RlPnBhcmVudDwvY29kZT4sIDxjb2Rl PmNoaWxkcmVuPC9jb2RlPiwgPGNvZGU+bGV2ZWw8L2NvZGU+LCA8Y29kZT5jb3VudDwvY29k ZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+d3JhcHRhZzwvc3Bhbj4gOiB3cmFw IHRoZSB0YWcgaXRlbXMgd2l0aCB0aGlzIChYKUhUTUwgdGFnLiBEZWZhdWx0IGlzIHVuc2V0 PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFuPiA6IGFwcGx5IHRo aXMgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgdG8gdGhlIHRhZyBpdGVt cy4gRGVmYXVsdCBpcyA8Y29kZT5zbWRfdGFnX2luZm88L2NvZGU+PC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPmJyZWFrPC9zcGFuPiA6IHdyYXAgZWFjaCB0YWcgaXRlbSB3aXRo IHRoaXMgKFgpSFRNTCB0YWcuIERlZmF1bHQgaXMgPGNvZGU+YnI8L2NvZGU+PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmJyZWFrY2xhc3M8L3NwYW4+IDogYXBwbHkgdGhpcyA8 c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyB0byBlYWNoIHRhZyBpdGVtLiBE ZWZhdWx0IGlzIHVuc2V0PC9saT4KCTwvdWw+CgoJPGgzPkV4YW1wbGU6IGV4dGVuZGVkIHRh ZyBpbmZvcm1hdGlvbjwvaDM+CgoJPHA+SW5zaWRlIGFuIHNtZF90YWdfbGlzdCwgcHV0IHRo aXMgdG8gZGlzcGxheSBzb21lIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggdGFnOjwvcD4KCjxw cmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX3RhZ19p bmZvIGl0ZW09JnF1b3Q7aWQmcXVvdDsgLyZndDs6CiAmbHQ7cCZndDtwYXJlbnQgfCAjY2hp bGRyZW4gfCBsZXZlbCZsdDticiAvJmd0OwogJmx0O3R4cDpzbWRfdGFnX2luZm8gaXRlbT0m cXVvdDtwYXJlbnQsIGNoaWxkcmVuLCBsZXZlbCZxdW90OwogICAgICBicmVhaz0mcXVvdDsg fCAmcXVvdDsgLyZndDsmbHQ7L3AmZ3Q7CjwvY29kZT48L3ByZT4KCgk8aDIgY2xhc3M9InRh ZyI+c21kX2lmX3RhZ19saXN0PC9oMj4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPkNvbmRp dGlvbmFsIHRhZyB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBzY29wZSBpcyBh IGdsb2JhbCB0YWcgbGlzdC4gVXNlZnVsIGZvciBkZXRlY3RpbmcgaWYgYSB0YWcgaGFzIGJl ZW4gY2xpY2tlZCBhbmQgcmVkaXJlY3RlZCB0byBhIGxhbmRpbmcgcGFnZSBzbyB5b3UgY2Fu IHRha2Ugc29tZSBhY3Rpb24gb24gdGhhdCBwYWdlLjwvcD4KCgk8aDIgY2xhc3M9InRhZyI+ c21kX2lmX3RhZzwvaDI+CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5SdWRpbWVudGFyeSBj b25kaXRpb25hbCB0byBjaGVjayBhIHRhZyBmb3IgY2VydGFpbiBwYXJhbWV0ZXJzIGFuZCBl eGVjdXRlIHRoZSBjb250YWluZWQgY29udGVudCBpZiBpdCBtYXRjaGVzLiBFdmVyeSBhdHRy aWJ1dGUgeW91IHNwZWNpZnkgbXVzdCBtYXRjaCBmb3IgdGhlIGNvbmRpdGlvbmFsIGNvbnRl bnQgdG8gYmUgZXhlY3V0ZWQsIG90aGVyd2lzZSBhbnkgPGNvZGU+Jmx0O3R4cDplbHNlIC8m Z3Q7PC9jb2RlPiBicmFuY2ggd2lsbCBiZSBmb2xsb3dlZC48L3A+CgoJPGgzIGNsYXNzPSJh dHRzICIgaWQ9ImF0dHJpYnV0ZXMiPkF0dHJpYnV0ZXM8L2gzPgoKCTx1bD4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+IDogZXhlY3V0ZXMgdGhlIGNvbnRhaW5lZCBz dGF0ZW1lbnRzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIG9uZSBnaXZlbi4gVGFrZXMgb25l IG9mIDxjb2RlPmFydGljbGU8L2NvZGU+LCA8Y29kZT5pbWFnZTwvY29kZT4sIDxjb2RlPmxp bms8L2NvZGU+IG9yIDxjb2RlPmZpbGU8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPmlkPC9zcGFuPiA6IGNoZWNrcyBpZiB0aGUgdGFnIElEIG1hdGNoZXMgdGhlIG9u ZSBnaXZlbjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5uYW1lPC9zcGFuPiA6IGNo ZWNrcyBpZiB0aGUgdGFnIG5hbWUgbWF0Y2hlcyB0aGUgb25lIGdpdmVuPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPnRpdGxlPC9zcGFuPiA6IGNoZWNrcyBpZiB0aGUgdGFnIHRp dGxlIG1hdGNoZXMgdGhlIG9uZSBnaXZlbjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5wYXJlbnQ8L3NwYW4+IDogY2hlY2tzIGlmIHRoZSB0YWcgcGFyZW50IG1hdGNoZXMgdGhl IG9uZSBnaXZlbjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jb3VudDwvc3Bhbj4g OiBjaGVja3MgaWYgdGhlIHRhZyBjb3VudCBtYXRjaGVzIHRoZSBudW1iZXIgZ2l2ZW48L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2hpbGRyZW48L3NwYW4+IDogY2hlY2tzIGlm IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gdGhlIHRhZyBoYXMgbWF0Y2hlcyB0aGUgbnVtYmVy IGdpdmVuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxldmVsPC9zcGFuPiA6IGNo ZWNrcyBpZiB0aGUgdGFnIGlzIGF0IGEgc3BlY2lmaWMgbGV2ZWwgaW4gdGhlIGhpZXJhcmNo eTwvbGk+Cgk8L3VsPgoKCTxwPkVhY2ggaXRlbSBtYXkgdGFrZSBhbiBleGFjdCB2YWx1ZS9z dHJpbmcgdG8gbWF0Y2ggb3IgYSBtb2RpZmllZCBzeW50YXg6IHlvdSBtYXkgcHJlY2VkZSB0 aGUgdmFsdWUgd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyBzeW1ib2xzIHRvIHBlcmZvcm0g YSBtYXRoZW1hdGljYWwvYm9vbGVhbiBjb21wYXJpc29uOjwvcD4KCgk8dWw+CgkJPGxpPjxj b2RlPiZsdDs8L2NvZGU+IDogbGVzcyB0aGFuPC9saT4KCQk8bGk+PGNvZGU+Jmx0Oz08L2Nv ZGU+IDogbGVzcyB0aGFuIG9yIGVxdWFsIHRvPC9saT4KCQk8bGk+PGNvZGU+Jmd0OzwvY29k ZT4gOiBncmVhdGVyIHRoYW48L2xpPgoJCTxsaT48Y29kZT4mZ3Q7PTwvY29kZT4gOiBncmVh dGVyIHRoYW4gb3IgZXF1YWwgdG88L2xpPgoJCTxsaT48Y29kZT4hPC9jb2RlPiA6IG5vdCBl cXVhbCB0bzwvbGk+Cgk8L3VsPgoKCTxwPkZvciBleGFtcGxlOjwvcD4KCjxwcmUgY2xhc3M9 ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2lmX3RhZyBwYXJlbnQ9 JnF1b3Q7IXJvb3QmcXVvdDsgY291bnQ9JnF1b3Q7Jmd0OzgmcXVvdDsmZ3Q7Ci8vIEN1cnJl bnQgdGFnIGlzIG5vdCBhIHRvcC1sZXZlbCB0YWcgYW5kIGhhcwovLyBtb3JlIHRoYW4gOCBp dGVtcyBhc3NvY2lhdGVkIHdpdGggaXQKJmx0Oy90eHA6c21kX2lmX3RhZyZndDsKPC9jb2Rl PjwvcHJlPgoKCTxwPkZvciBtb3JlIGZpbmUtZ3JhaW5lZCBjb250cm9sIG9yIG1vcmUgZGV0 YWlsZWQgY29uZGl0aW9uYWwgYnJhbmNoaW5nLCBjb25zaWRlciB0aGUgc21kX2lmIHBsdWdp bi48L3A+CgoJPGgyIGNsYXNzPSJ0YWciPnNtZF9yZWxhdGVkX3RhZ3M8L2gyPgoKCTxwIGNs YXNzPSJ0YWctc3VtbWFyeSI+VGhlIGJpZyBvbmUhIFRoaXMgdGFnIGFsbG93cyB5b3UgdG8g ZmluZCBhbmQgZGlzcGxheSBhbnkgY29udGVudCB0aGF0IG1hdGNoZXMgc29tZSBmYWNldCBv ZiB0aGUgY3VycmVudCBjb250ZW50LiBJdCBkZWZhdWx0cyB0byBtYXRjaGluZyB0YWcgbmFt ZXMuIEZvciBleGFtcGxlLCBpZiB0aGUgdGFnIGFwcGVhcmVkIG9uIGl0cyBvd24gb24gYW4g YXJ0aWNsZSBwYWdlLCBpdCB3b3VsZCBmaW5kIGFsbCAmIzgyMTY7cmVsYXRlZCYjODIxNzsg YXJ0aWNsZXMgdGhhdCBjb250YWluZWQgdGhlIHNhbWUgdGFncyBhcyB0aGUgb25lcyBpbiB0 aGUgY3VycmVudCBhcnRpY2xlLjwvcD4KCgk8cD5CdXQgaXQgaXMgbm90IHJlc3RyaWN0ZWQg dG8gc2VhcmNoaW5nIHdpdGhpbiBpdHMgb3duIHR5cGUuIFlvdSBjb3VsZCBmaW5kIGFsbCB0 aGUgbWF0Y2hpbmcgaW1hZ2VzIG9yIGxpbmtzIHRoYXQgc2hhcmVkIGEgdGFnIHdpdGggdGhl IGN1cnJlbnQgYXJ0aWNsZS4gT3IgaWYgc2hvd2luZyBhIGxpc3Qgb2YgbGlua3MsIGRpc3Bs YXkgYWxsIGFydGljbGVzIHRoYXQgc2hhcmUgdGFncyB3aXRoIHRoZSBjdXJyZW50IGxpbmsu PC9wPgoKCTxwPkZpbmFsbHksIHlvdSBjYW4gYWxzbyBtYXRjaCBvdGhlciBzdHVmZiBzdWNo IGFzIGltYWdlLCBmaWxlLCBsaW5rIG9yIGFydGljbGUgY2F0ZWdvcmllcywgY3VzdG9tIGZp ZWxkcywgYW5kIHNvIG9uLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0cmlidXRl cyI+QXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+dHlw ZTwvc3Bhbj4gOiB0aGUgdHlwZSBvZiBpbmZvcm1hdGlvbiB5b3Ugd2FudCB0byA8ZW0+Zmlu ZDwvZW0+LiBEZWZhdWx0cyB0byB0aGUgc2FtZSB0eXBlIGFzIHRoZSBjdXJyZW50IGNvbnRl eHQgKGkuZS4gaWYgaW4gYW4gYXJ0aWNsZSwgd2lsbCBsb29rIGZvciBvdGhlciBhcnRpY2xl cykuIENhbiBiZSBvbmUgb2YgPGNvZGU+YXJ0aWNsZTwvY29kZT4sIDxjb2RlPmZpbGU8L2Nv ZGU+LCA8Y29kZT5saW5rPC9jb2RlPiwgb3IgPGNvZGU+aW1hZ2U8L2NvZGU+PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm1hdGNoPC9zcGFuPiA6IHRoZSBpbmZvcm1hdGlvbiB5 b3Ugd2FudCB0byA8ZW0+Y29tcGFyZTwvZW0+LiBEZWZhdWx0cyB0byA8Y29kZT50YWdfbmFt ZTwvY29kZT4gYnV0IGNhbiBiZToKCTx1bD4KCQk8bGk+dGFnX2lkPC9saT4KCQk8bGk+dGFn X3RpdGxlPC9saT4KCQk8bGk+dGFnX3BhcmVudDwvbGk+CgkJPGxpPnRhZ19jb3VudDwvbGk+ CgkJPGxpPnRhZ19jaGlsZHJlbjwvbGk+CgkJPGxpPnRhZ19sZXZlbDwvbGk+CgkJPGxpPnNv bWUgZmllbGQgbmFtZSBzdWNoIGFzIDxjb2RlPmNhdGVnb3J5PC9jb2RlPiBvciA8Y29kZT5j dXN0b20xPC9jb2RlPjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5tYXRjaF9zZWxmPC9zcGFuPiA6IHdoZXRoZXIgdG8gaW5jbHVkZSBhIHJlZmVyZW5jZSB0 byB0aGUgY3VycmVudCBpdGVtLiBVc3VhbGx5IHlvdSB3b24mIzgyMTc7dCB3YW50IHRoaXMg c28gaXQgaXMgb2ZmICg8Y29kZT4wPC9jb2RlPikgYW5kIGluIGZhY3QsIHNldHRpbmcgaXQg dG8gMSBjYW4gc29tZXRpbWVzIGNhdXNlIGVycm9yczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5mb3JtPC9zcGFuPiA6IHBhc3MgY29udHJvbCB0byB0aGUgZ2l2ZW4gZm9ybSBm b3IgcmVuZGVyaW5nIHRoZSB0YWcgb3V0cHV0LiBDYW4gYWxzbyBiZSB1c2VkIGFzIGEgY29u dGFpbmVyLiBJZiB5b3UgZG9uJiM4MjE3O3Qgc3BlY2lmeSBlaXRoZXIgYSA8Y29kZT5mb3Jt PC9jb2RlPiBvciBhIGNvbnRhaW5lciwgaXQgb3V0cHV0cyBzb21lIHNlbnNpYmxlIGRlZmF1 bHQgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dCAoaS5lLiB0aGUgcGVybWxpbmtlZCBh cnRpY2xlIHRpdGxlIGluIHRoZSA8Y29kZT5hcnRpY2xlPC9jb2RlPiBjb250ZXh0LCB0aGUg ZmlsZSBkb3dubG9hZCBsaW5rIGluIHRoZSA8Y29kZT5maWxlPC9jb2RlPiBjb250ZXh0LCBl dGMpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNlY3Rpb248L3NwYW4+IDogb25s eSBvZiB1c2UgZm9yIGFydGljbGVzLCB0aGlzIGxpbWl0cyB0aGUgc2VhcmNoIHRvIGFydGlj bGVzIGluIGEgcGFydGljdWxhciBzZWN0aW9uLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCBz ZWN0aW9uIGJ1dCBjaGVjayB0aGUgY2F2ZWF0cyBiZWxvdyBmb3IgYSBzaWRlLWVmZmVjdCBv ZiB0aGlzIGF0dHJpYnV0ZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5vZmZzZXQ8 L3NwYW4+IDogc2tpcCB0aGlzIG51bWJlciBvZiBtYXRjaGVkIGl0ZW1zIGJlZm9yZSBzdGFy dGluZyB0byBkaXNwbGF5IHRoZW08L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGlt aXQ8L3NwYW4+IDogdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIGRpc3BsYXkuIERl ZmF1bHRzIHRvIDk5OTk5IChpLmUuIHZpcnR1YWxseSB1bmxpbWl0ZWQpPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPm5vX3dpZG93PC9zcGFuPiA6IFdoZW4gZGlzcGxheWluZyBh cnRpY2xlIHRpdGxlcywgcHJldmVudCBsb25lIHdvcmRzIG9uIHRoZSAybmQgbGluZS4gRGVm YXVsdHMgdG8gdGhlIEFkbWluIHByZWZlcmVuY2Ugb2YgdGhlIHNhbWUgbmFtZTwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zb3J0PC9zcGFuPiA6IFJlb3JkZXIgdGhlIGl0ZW1z IGJ5IHNvbWUgZmllbGQuIERlZmF1bHRzIHRvIDxjb2RlPlBvc3RlZCBkZXNjPC9jb2RlPiBm b3IgYXJ0aWNsZXMgYW5kIGRlc2NlbmRpbmcgZGF0ZSBmb3IgZXZlcnl0aGluZyBlbHNlPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxhYmVsPC9zcGFuPiA6IGRpc3BsYXkgdGhp cyBsYWJlbCBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0IG9mIGl0ZW1zPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPmxhYmVsdGFnPC9zcGFuPiA6IHdyYXAgdGhpcyAoWClIVE1MIHRh ZyBhcm91bmQgdGhlIGxhYmVsLiBEZWZhdWx0IGlzIHVuc2V0PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPndyYXB0YWc8L3NwYW4+IDogd3JhcCB0aGlzIChYKUhUTUwgdGFnIGFy b3VuZCB0aGUgaXRlbXMuIERlZmF1bHQgaXMgdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+YnJlYWs8L3NwYW4+IDogd3JhcCBlYWNoIGl0ZW0gd2l0aCB0aGlzIChYKUhU TUwgdGFnLiBEZWZhdWx0IGlzIDxjb2RlPmJyPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5jbGFzczwvc3Bhbj4gOiBhcHBseSB0aGUgZ2l2ZW4gPHNwYW4gY2xhc3M9 ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgdG8gdGhlIGl0ZW0gbGlzdC4gRGVmYXVsdCBpcyA8 Y29kZT5zbWRfcmVsYXRlZF90YWdzPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5kZWxpbTwvc3Bhbj4gOiBpZiB5b3UgcHJlZmVyIHNvbWV0aGluZyBvdGhlciB0aGFu IHRoZSBkZWZhdWx0IGNvbW1hIDxjb2RlPiw8L2NvZGU+IHRvIHNwZWNpZnkgbGlzdHMgb2Yg aXRlbXMgaW4gdGhlIHRhZyBhdHRyaWJ1dGVzLCBjaGFuZ2UgaXQ8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+cGFyYW1kZWxpbTwvc3Bhbj4gOiBpZiB5b3UgcHJlZmVyIHNvbWV0 aGluZyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IGNvbG9uIDxjb2RlPjo8L2NvZGU+IHRvIHNl cGFyYXRlIHBhcmFtZXRlcnMgaW5zaWRlIGF0dHJpYnV0ZXMsIGNoYW5nZSBpdDwvbGk+Cgk8 L3VsPgoKCTxwPldoZW4gc3BlY2lmeWluZyBpdGVtcyB0byA8Y29kZT5tYXRjaDwvY29kZT4g eW91IGFyZSBub3QgcmVzdHJpY3RlZCB0byBzZWFyY2hpbmcgdGhlIGN1cnJlbnQgY29udGV4 dC4gRm9yIGV4YW1wbGUsIHNheSB5b3UgaGFkIGEgbGlzdCBvZiBmaWxlIGRvd25sb2FkcyBh bmQgIG5leHQgdG8gZWFjaCBmaWxlIHlvdSB3YW50ZWQgdG8gc2hvdyB0aGUgYXJ0aWNsZXMg dGhhdCBtYXRjaGVkIHRoZSBmaWxlJiM4MjE3O3MgY2F0ZWdvcnkuIFlvdSBtaWdodCBkbyB0 aGlzIGluIHlvdXIgPGNvZGU+ZmlsZXM8L2NvZGU+IGZvcm06PC9wPgoKPHByZSBjbGFzcz0i YmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpmaWxlX2Rvd25sb2FkX2xpbmsm Z3Q7CiAgJmx0O3R4cDpmaWxlX2Rvd25sb2FkX25hbWUgLyZndDsKJmx0Oy90eHA6ZmlsZV9k b3dubG9hZF9saW5rJmd0OwombHQ7dHhwOnNtZF9yZWxhdGVkX3RhZ3MgdHlwZT0mcXVvdDth cnRpY2xlJnF1b3Q7CiAgICAgbGFiZWw9JnF1b3Q7WW91IG1pZ2h0IGFsc28gbGlrZSZxdW90 OyBsYWJlbHRhZz0mcXVvdDtwJnF1b3Q7CiAgICAgbWF0Y2g9JnF1b3Q7ZmlsZTpjYXRlZ29y eSZxdW90OyB3cmFwdGFnPSZxdW90O3VsJnF1b3Q7CiAgICAgYnJlYWs9JnF1b3Q7bGkmcXVv dDsgLyZndDsKPC9jb2RlPjwvcHJlPgoKCTxoMz5DYXZlYXQ8L2gzPgoKCTxwPkJlIGNhcmVm dWwgd2l0aCB0aGUgPGNvZGU+c2VjdGlvbjwvY29kZT4gYXR0cmlidXRlOiBvbiBhIGdsb2Jh bCB0YWcgbGlzdCwgPGVtPmFsbDwvZW0+IGl0ZW1zIG9mIGEgZ2l2ZW4gdHlwZSBhcmUgY29u c2lkZXJlZCBpcnJlc3BlY3RpdmUgb2Ygc2VjdGlvbi4gVGh1cyBpZiB5b3UgZGlkOjwvcD4K CjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2lm X3RhZ19saXN0Jmd0OwogICZsdDtoMiZndDtUYWdzIGxpc3QmbHQ7L2gyJmd0OwogICZsdDt0 eHA6c21kX3RhZ19saXN0Jmd0OwogICAgJmx0O3R4cDpzbWRfdGFnX25hbWUgdGl0bGU9JnF1 b3Q7MSZxdW90OyBsaW5rPSZxdW90OzEmcXVvdDsgLyZndDsKICAgICZsdDt0eHA6c21kX3Rh Z19jb3VudCAvJmd0OwogICAgJmx0O3R4cDpzbWRfcmVsYXRlZF90YWdzIHNlY3Rpb249JnF1 b3Q7YXJjaGl2ZSZxdW90OyB3cmFwdGFnPSZxdW90O3VsJnF1b3Q7IGJyZWFrPSZxdW90O2xp JnF1b3Q7IC8mZ3Q7CiAgJmx0Oy90eHA6c21kX3RhZ19saXN0Jmd0OwombHQ7L3R4cDpzbWRf aWZfdGFnX2xpc3QmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5Zb3UgbWlnaHQgc2VlIGEgdGFn IG5hbWUgd2l0aCBhIGNvdW50IG9mIDEyIGJ1dCBvbmx5IDcgYXJ0aWNsZXMgbGlzdGVkIHVu ZGVyIGl0LCBpZiBmaXZlIG9mIHlvdXIgYXJ0aWNsZXMgdGhhdCB1c2VkIHRoYXQgcGFydGlj dWxhciB0YWcgd2VyZSBmcm9tIGFub3RoZXIgc2VjdGlvbi4gVG8gYmUgc3VyZSwgb25seSB1 c2UgdGhlIDxjb2RlPnNlY3Rpb248L2NvZGU+IGF0dHJpYnV0ZSBvbiBpbmRpdmlkdWFsIGFy dGljbGUgcGFnZXMuPC9wPgoKCTxoMiBjbGFzcz0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gy PgoKCTxwPkJldGE6PC9wPgoKCTx1bD4KCQk8bGk+MTUgT2N0IDA4IHwgMC4xIHwgSW5pdGlh bCByZWxlYXNlPC9saT4KCQk8bGk+MTYgT2N0IDA4IHwgMC4xMSB8IEltcHJvdmVkIGhlbHAg ZXhhbXBsZXMgc3Vycm91bmRpbmcgdGhlIGF1dG9jb21wbGV0ZSBwbHVnaW4gKHRoYW5rcyB0 aGVib21ic2l0ZSkgOyBmaXhlZCByZW1vdmVfdGFibGVzLCB1c2Ugb2YgPHNwYW4gY2xhc3M9 ImNhcHMiPlBGWDwvc3Bhbj4gYW5kIGFkZGVkIGRlYnVnIHRvIGluc3RhbGxhdGlvbiBwcm9j ZWR1cmUgKHRoYW5rcyBqcGR1cG9udCk8L2xpPgoJCTxsaT4xNiBBcHIgMDkgfCAwLjIgfCBh ZGRlZCBUZXh0IGFyZWErIDsgc2VsZWN0IGxpc3Qgc2l6ZSBvZiAxIGNvbnZlcnRzIHRhZyBp bnB1dCB0byBhIHNpbmdsZS1lbnRyeSBkcm9wZG93biAodGhhbmtzIHRoZWJvbWJzaXRlKSA7 IGZpeGVkIHdpZHRoIG9mIHRhZyBsaXN0IGluIGxpbmsgcGFuZSA7IGZpeGVkIHBvdGVudGlh bCBjb250ZXh0IGFycmF5IHdhcm5pbmcgOyBub24tbWVzc3kgPHNwYW4gY2xhc3M9ImNhcHMi PlVSTDwvc3Bhbj4gcmV3cml0aW5nIGZpeGVkIDsgYmVnYW4gd29yayBvbiBtdWx0aS1maWx0 ZXJpbmcgOyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA0LjAuNysgZGF0YWJhc2Ug d2FybmluZ3MgZml4ZWQgOyBub24tbWVzc3kgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bh bj4gcmV3cml0aW5nIGZpeGVkIDsgYWRkZWQgc21kX3JlbGF0ZWRfdGFncyA8Y29kZT5zdGF0 dXM8L2NvZGU+IGF0dHJpYnV0ZSAodGhhbmtzIGpvaG5zdGVwaGVucykgOyBzbWRfaWZfdGFn OiBub3cgY29ycmVjdGx5IHdvcmtzIG91dHNpZGUgc21kX3RhZ19saXN0IGNvbnRleHQgKHRo YW5rcyBkYW53b29kd2FyZCk8L2xpPgoJCTxsaT4yMyBNYXIgMTAgfCAwLjMgfCBSZXF1aXJl cyA0LjIuMCsgOyBjb25zb2xpZGF0ZWQgYWRtaW4gYW5kIGNsaWVudCBwbHVnaW5zIDsgYWRk ZWQgcGx1Z2luIGxpZmVjeWNsZSBhbmQgcHJlZnMgZXZlbnRzIDsgZml4ZWQgdGV4dGFyZWEv dGV4dGFyZWErIGpRdWVyeSAmIzgyMTY7QCYjODIxNzsgYnVnIGFuZCBub24tc2F2ZXMgKHRo YW5rcyBaYW56YSkgOyBmaXhlZCBtaWRkb3QgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3Nw YW4+IGVudGl0eSA7IGFkZGVkIHRhYmxlIHByZWZpeCB0byBzbWRfcmVsYXRlZF90YWdzICh0 aGFua3MgTWF0dEQpPC9saT4KCQk8bGk+MTMgQXByIDEwIHwgMC4zMSB8IEZpeGVkIGFkbWlu IHNpZGUgYnVncyB3aGVuIHByaXZzIGxlc3MgdGhhbiBNYW5hZ2luZyBFZGl0b3IgOyBmaXhl ZCBzbG93IHJlc3BvbnNlIHdoZW4gc2F2aW5nIHRhZ3MgOyBmaXhlZCB0YWcgY2F0ZWdvcnkg bGlzdCB3aGVuIG5vIGNhdChzKSBzZWxlY3RlZCA7IHdhcm5pbmcgbWVzc2FnZXMgbm93IGJs aW5rIDsgdGlkaWVkIFRhZyBNYW5hZ2VyIGxheW91dCA7IGZpeGVkIHBhcmVudCAvIHN1Ymxl dmVsIGhhbmRsaW5nIGluIHNtZF90YWdfbGlzdCBhbmQgYWxsb3dlZCBncmVhdGVyIGNvbnRy b2wgb3ZlciBsZXZlbCBvdXRwdXQgKHRoYW5rcyB3b29mKSA7IGFkZGVkIDxjb2RlPnBhZF9z dHI8L2NvZGU+IGFuZCA8Y29kZT5wYWRfcG9zPC9jb2RlPiB0byBzbWRfdGFnX25hbWUgOyBm aXhlZCBzbWRfaWZfdGFnIHNvIGl0IGNvbXBhcmVzIGVtcHR5IHN0cmluZ3MgY29ycmVjdGx5 ICh0aGFua3Mgam9obnN0ZXBoZW5zKTwvbGk+Cgk8L3VsPgoKPC9kaXY+CjwhLS0gKioqIEJF R0lOIFBMVUdJTiBDU1MgKioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hl bHAgeyBsaW5lLWhlaWdodDoxLjUgO30KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpi b2xkOyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNl OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30KI3NtZF9oZWxwIGNvZGUuYmxvY2sgeyBm b250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGJhY2tncm91bmQt Y29sb3I6ICNmMGU2OGM7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsg cGFkZGluZzoxMHB4OyB9CiNzbWRfaGVscCBhOmxpbmssICNzbWRfaGVscCBhOnZpc2l0ZWQg eyBjb2xvcjogIzAwYzsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAx cHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI3NtZF9oZWxwIGE6aG92ZXIs ICNzbWRfaGVscCBhOmFjdGl2ZSB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5v bmU7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7 fQojc21kX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5z LXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQojc21kX2hlbHAgaDIg eyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGNv bG9yOiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI3NtZF9oZWxw IGgzIHsgY29sb3I6ICMwNzk7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fucy1zZXJpZjsg bGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDt0ZXh0LXRyYW5zZm9ybTog dXBwZXJjYXNlOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30KI3NtZF9oZWxwIGg0IHsg Zm9udDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4 OyBtYXJnaW46IDEwcHggMCAwIDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9CiNzbWRf aGVscCAuYXRubSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOiMzM2Q7IH0KI3NtZF9oZWxw IC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNz bWRfaGVscCB0YWJsZSB7d2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1i b3R0b206MWVtO30KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGgge2JvcmRlcjoxcHggc29s aWQgIzk5OTsgcGFkZGluZzouNWVtIDA7fQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5 cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAucmVxdWlyZWQge2NvbG9yOnJlZDt9CiNzbWRfaGVs cCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFrIHsg bWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1MgKioq IC0tPgoiO3M6MzoibWQ1IjtzOjMyOiJiMzFhODI3NjljNDA4Y2U4OGZhNjc2M2FjMjg2YmM1 OCI7fQ==