# Name: smd_gallery v0.33 # Type: Client side plugin # A(nother) thumbnail gallery/slideshow creator with unreal flexibility # Author: Stef Dawson # URL: http://stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTE6InNtZF9nYWxsZXJ5IjtzOjY6ImF1dGhvciI7czoxMToi U3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3c29u LmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjMzIjtzOjExOiJkZXNjcmlwdGlvbiI7czo2 OToiQShub3RoZXIpIHRodW1ibmFpbCBnYWxsZXJ5L3NsaWRlc2hvdyBjcmVhdG9yIHdpdGgg dW5yZWFsIGZsZXhpYmlsaXR5IjtzOjQ6ImNvZGUiO3M6MjQ1NDE6ImZ1bmN0aW9uIHNtZF9n YWxsZXJ5KCRhdHRzLCAkdGhpbmc9JycpIHsNCglnbG9iYWwgJHByZXRleHQsICR0aGlzYXJ0 aWNsZSwgJGltZ19kaXI7DQoNCgkvLyAqKiBMT09LVVAgVEFCTEUNCgkvLyBIb2xkcyBkYXRh YmFzZSBmaWVsZCBhcyBrZXkgaW5kZXggYW5kIHBsdWdpbiBvcHRpb24gbmFtZXMgYXMgdmFs dWUuDQoJLy8gVXNlIGFycmF5X3NlYXJjaCB0byBmaW5kIGlmIHZhbHVlIGV4aXN0cyBhbmQg cmV0dXJuIGNvcnJlY3Qga2V5IGZvciB1c2UgaW4gZGIgY2FsbHMvYXJyYXkgcmVmcy4NCgkk ZmllbGRNYXAgPSBhcnJheSgNCgkJInR4cF9pbWFnZS5uYW1lIiA9PiAibmFtZSIsDQoJCSJ0 eHBfaW1hZ2UuaWQiID0+ICJpZCIsDQoJCSJ0eHBfaW1hZ2UuYWx0IiA9PiAiYWx0IiwNCgkJ InR4cF9pbWFnZS5jYXB0aW9uIiA9PiAiY2FwdGlvbiIsDQoJCSJ0eHBfaW1hZ2UuY2F0ZWdv cnkiID0+ICJjYXRlZ29yeSIsDQoJCSJ0eHBfaW1hZ2UuYXV0aG9yIiA9PiAiYXV0aG9yIiwN CgkJInR4cF9pbWFnZS5kYXRlIiA9PiAiZGF0ZSIsDQoJCSJ0eHBfaW1hZ2UuZXh0IiA9PiAi ZXh0IiwNCgkJInR4cF9pbWFnZS53IiA9PiAid2lkdGgiLA0KCQkidHhwX2ltYWdlLmgiID0+ ICJoZWlnaHQiLA0KCQkidHhwX2ltYWdlLnRodW1ibmFpbCIgPT4gImhhc3RodW1iIiwNCgkp Ow0KDQoJLy8gUGx1Z2luIG9wdGlvbnMNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQkndHlw ZScgPT4gJ2ltYWdlJywNCgkJJ2RlbGltJyA9PiAnLCcsDQoJCSdwYXJhbWRlbGltJyA9PiAn OicsDQoJCSdmb3JtJyA9PiAnJywNCgkJJ2lkJyA9PiAnJywNCgkJJ2NhdGVnb3J5JyA9PiAn JywNCgkJJ2RpcmVjdG9yeScgPT4gJycsDQoJCSdtYXRjaCcgPT4gJycsDQoJCSdzdWJsZXZl bCcgPT4gJzAnLA0KCQknc29ydCcgPT4gJ2NhdGVnb3J5JywNCgkJJ29mZnNldCcgPT4gJzAn LA0KCQknbGltaXQnID0+ICcwJywNCgkJJ21heGxpbWl0JyA9PiAnOTk5OTknLA0KCQkndGh1 bWJsaW1pdCcgPT4gJzk5OTk5JywNCgkJJ3RodW1ib2Zmc2V0JyA9PiAnMCcsDQoJCSd0aHVt YicgPT4gJzAnLA0KCQkndGh1bWJzaXplJyA9PiAnJywNCgkJJ3RleHQnID0+ICcnLA0KCQkn Y29sbGF0ZScgPT4gJycsDQoJCSdjb21ibycgPT4gJycsDQoJCSdwYWdlZm9ybScgPT4gJycs DQoJCSduYXZ3cmFwdGFnJyA9PiAndWwnLA0KCQknbmF2YnJlYWsnID0+ICdsaScsDQoJCSdu YXZjbGFzcycgPT4gJ3NtZF9nYWxsZXJ5X25hdicsDQoJCSdnYWxsZXJ5aWQnID0+ICc/NDo2 JywNCgkJJ3dyYXB0YWcnID0+ICcnLA0KCQknYnJlYWsnID0+ICcnLA0KCQknY2xhc3MnID0+ ICcnLA0KCQknZGVidWcnID0+ICcwJywNCgkpLCAkYXR0cykpOw0KDQoJLy8gQ2F0ZWdvcnkg cmVsaWVzIG9uIHdoZXRoZXIgaWQgaGFzIGJlZW4gc3BlY2lmaWVkIG9yIG5vdC4NCgkvLyBs QXR0cygpIHdvbid0IGxldCB1cyBoYW5kbGUgdGhpcyBsb2dpYyBzbyBpdCBoYXMgdG8gYmUg ZG9uZSBtYW51YWxseQ0KCSRhdHRlbXB0TWF0Y2ggPSAoZW1wdHkoJGNhdGVnb3J5KSAmJiBl bXB0eSgkaWQpKSA/IGZhbHNlIDogdHJ1ZTsNCgkkY2F0ZWdvcnkgPSBpc3NldCgkY2F0ZWdv cnkpID8gZG9TbGFzaCgkY2F0ZWdvcnkpIDogKCgkaWQ9PScnKSA/ICRwcmV0ZXh0WydjJ106 ICcnKTsNCg0KCS8vIEhhbmRsZSBmb3JtcyBhbmQgc2V0IGEgZGVmYXVsdCB0YWcgaWYgbm9u ZSBzcGVjaWZpZWQNCgkkdGhpbmcgPSAoZW1wdHkoJGZvcm0pKSA/ICR0aGluZyA6IGZldGNo X2Zvcm0oJGZvcm0pOw0KCSR0aGluZyA9IChlbXB0eSgkdGhpbmcpKSA/ICc8YSBocmVmPSJ7 dXJsfSIgYWx0PSJ7YWx0fSI+PHR4cDppbWFnZSBpZD0ie2lkfSIgLz48L2E+JyA6ICR0aGlu ZzsNCg0KCS8vIFBhZ2luZyBpbml0DQoJJHBhZ2luZyA9IDA7DQoJaWYgKCRwYWdlZm9ybSkg ew0KCQkkcGFnaW5nID0gMTsNCgkJJHBhZ2Vmb3JtID0gZmV0Y2hfZm9ybSgkcGFnZWZvcm0p Ow0KCX0NCg0KCS8vIFRoZSBnYWxsZXJ5IGlkZW50aWZpZXIgaXMgdXNlZCBmb3Iga2VlcGlu ZyB0cmFjayBvZiBuZXh0L3ByZXYgdGh1bWJuYWlsIHBhZ2UgbGlua3MNCgkkZ2FsbElEID0g Jyc7DQoJaWYgKCRnYWxsZXJ5aWQgPT0gJycgfHwgc3Vic3RyKCRnYWxsZXJ5aWQsMCwxKSA9 PSAiPyIpIHsNCgkJLy8gR2VuZXJhdGUgYSAoZmFpcmx5IGxpa2VseSkgdW5pcXVlIElEIGZv ciB0aGlzIGdhbGxlcnkgaW5zdGFuY2UNCgkJJGdhbGxUbXAgPSBtZDUoJGNhdGVnb3J5LiRp ZC4kZGlyZWN0b3J5LiRtYXRjaC4kc3VibGV2ZWwuJHNvcnQuJGxpbWl0LiRtYXhsaW1pdCk7 DQoJCWxpc3QoJGdhbGxMZW4sICRnYWxsU2tpcCkgPSBleHBsb2RlKCI6Iiwgc3Vic3RyKCRn YWxsZXJ5aWQsMSkpOw0KCQkkZ2FsbExlbiA9ICAoZW1wdHkoJGdhbGxMZW4pKSA/ICI0IiA6 ICRnYWxsTGVuOw0KCQkkZ2FsbFNraXAgPSAgKGVtcHR5KCRnYWxsU2tpcCkpID8gIjEiIDog JGdhbGxTa2lwOw0KCQlmb3IgKCRpZHggPSAwLCAkY250ID0gMDsgJGNudCA8ICRnYWxsTGVu OyAkY250KyssICRpZHggPSAoKCRpZHgrJGdhbGxTa2lwKSAlIHN0cmxlbigkZ2FsbFRtcCkp KSB7DQoJCQkkZ2FsbElEIC49ICRnYWxsVG1wWyRpZHhdOw0KCQl9DQoJfSBlbHNlIHsNCgkJ JGdhbGxJRCA9ICRnYWxsZXJ5aWQ7DQoJfQ0KCSRnYWxsSUQgPSAic21kX2dscnlfIi4kZ2Fs bElEOyAvLyBBdm9pZCAoYWxyZWFkeSBpbmNyZWRpYmx5IHVubGlrZWx5KSBuYW1lc3BhY2Ug Y2xhc2hlcw0KDQoJLy8gVGhlIG1hbm5lciBvZiBvYnRhaW5pbmcgZmlsZXMgZGlmZmVycyBp ZiB1c2luZyBkaXJlY3RvcnkgdnMgY2F0ZWdvcnkvaWQNCglpZiAoJGRpcmVjdG9yeSkgew0K CQkkcnMgPSBhcnJheSgpOw0KCQkkcnNhbGwgPSBzbWRfZG9EaXJlY3RvcnkoJGRpcmVjdG9y eSwgMCwgJHN1YmxldmVsLCAkbWF0Y2gsICRkZWxpbSk7DQoJCWxpc3QoJG51bVBhZ2VzLCAk dGh1bVBhZ2UsICRvZmZzZXQpID0gc21kX2dldFBhZ2UoJHJzYWxsLCAkZ2FsbElELCAkbGlt aXQsICRvZmZzZXQsICRwYWdpbmcpOw0KCQkkZGlybGltaXQgPSAoJGxpbWl0PT0wKSA/ICRt YXhsaW1pdCA6ICRsaW1pdDsNCgkJJHJzID0gYXJyYXlfc2xpY2UoJHJzYWxsLCAkb2Zmc2V0 LCAkZGlybGltaXQpOw0KCQkkcG9zdE9yZGVyID0gYXJyYXkoKTsNCgkJJGZpeGVkT3JkZXIg PSAwOw0KCQkkcmFuZHNvcnQgPSBmYWxzZTsNCgl9IGVsc2Ugew0KCQkvLyBQcm9jZXNzIGNh dGVnb3JpZXMvSURzIGFuZCBtYWtlIHVwIHRoZSBjcnV4IG9mIHRoZSB3aGVyZSBjbGF1c2Uu DQoJCS8vIENsYXVzZSBvcmRlciA9IElEcyBPUiBjYXRzIEFORCAhY2F0cyBBTkQgIUlEcw0K CQkkY2xhdXNlW10gPSAnMT0xJzsNCgkJJGNsYXVzZU9SID0gYXJyYXkoKTsNCg0KCQkvLyBT dXJyb3VuZCBlYWNoIGVudHJ5IGluIHRoZSBJRCBsaXN0IHdpdGggcXVvdGVzIGFuZCBtYWtl IGFuIFNRTCAiaW4iIGxpc3QNCgkJJHN1YmluZm8gPSAoJHN1YmxldmVsKSA/ICJpbWFnZToi LiRzdWJsZXZlbCA6ICcnOw0KCQlsaXN0KCRpZGluYywgJGlkZXhjKSA9IHNtZF9kb0xpc3Qo JGlkLCB0cnVlLCAnJywgdHJ1ZSwgJGRlbGltKTsNCgkJbGlzdCgkY2F0aW5jLCAkY2F0ZXhj KSA9IHNtZF9kb0xpc3QoJGNhdGVnb3J5LCBmYWxzZSwgJHN1YmluZm8sIHRydWUsICRkZWxp bSk7DQoJCWlmICgkaWRpbmMpIHsNCgkJCSRjbGF1c2VPUltdID0gJ3R4cF9pbWFnZS5pZCBJ TiAoJy5pbXBsb2RlKCIsIiwgJGlkaW5jKS4nKSc7DQoJCX0NCgkJaWYgKCRjYXRpbmMpIHsN CgkJCSRjbGF1c2VPUltdID0gJ3R4cF9pbWFnZS5jYXRlZ29yeSBJTiAoJy5pbXBsb2RlKCIs IiwgJGNhdGluYykuJyknOw0KCQl9DQoJCWlmICghZW1wdHkoJGNsYXVzZU9SKSkgew0KCQkJ JGNsYXVzZVtdID0gaW1wbG9kZSgiIE9SICIsICRjbGF1c2VPUik7DQoJCX0NCg0KCQkkY2xh dXNlID0gaW1wbG9kZSgiIEFORCAiLCAkY2xhdXNlKTsNCgkJJGNsYXVzZSAuPSAoJGNhdGV4 YykgPyAnIEFORCB0eHBfaW1hZ2UuY2F0ZWdvcnkgTk9UIElOICgnLmltcGxvZGUoIiwiLCAk Y2F0ZXhjKS4nKScgOiAnJzsNCgkJJGNsYXVzZSAuPSAoJGlkZXhjKSA/ICcgQU5EIHR4cF9p bWFnZS5pZCBOT1QgSU4gKCcuaW1wbG9kZSgiLCIsICRpZGV4YykuJyknIDogJyc7DQoNCgkJ Ly8gSWYgYSBjYXRlZ29yeS9pZCBvcHRpb24gd2FzIGNob3NlbiBhbmQgdGhleSBtYXRjaGVk IG5vdGhpbmcsIHVzZSBhIGJvZ3VzIGNhdGVnb3J5IHRoYXQgc2hvdWxkIG5vdCBleGlzdC4N CgkJLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHBsdWdpbiBkb2VzIHRoZSBleHBlY3RlZCB0 aGluZyBvZiBtYXRjaGluZyBub3RoaW5nIGluIHRoZSBldmVudCBpdCBmaW5kcyBub3RoaW5n Lg0KCQlpZiAoJGNsYXVzZSA9PSAiMT0xIiAmJiAkYXR0ZW1wdE1hdGNoKSB7DQoJICAJCSRj bGF1c2UgPSAndHhwX2ltYWdlLmNhdGVnb3J5ID0gInNtZF8nIC5tdF9yYW5kKCkuICciJzsN CgkJfQ0KDQoJCWlmICgkZGVidWcgPiAxKSB7DQoJCQllY2hvICIrKyBJTkNMVURFRC9FWENM VURFRCBJRHMgQU5EIENBVHMgKysiOw0KCQkJZG1wKCRpZGluYyk7DQoJCQlkbXAoJGlkZXhj KTsNCgkJCWRtcCgkY2F0aW5jKTsNCgkJCWRtcCgkY2F0ZXhjKTsNCgkJfQ0KDQoJCS8vIENv bnZlcnQgdGhlIHNvcnQgaW50byBhIHZhbGlkIHNvcnRpbmcgaGllcmFyY2h5Lg0KCQkvLyBO b3RlIHRoYXQgcmFuZG9tIGlzIGEgc3BlY2lhbCBjYXNlIGFuZCB0aGUgZm9sbG93aW5nIHJ1 bGVzIGFwcGx5Og0KCQkvLyAgMSkgQW55dGhpbmcgYXBwZWFyaW5nIGJlZm9yZSByYW5kb20g aXMgcGFzc2VkIHRvIHRoZSBkYXRhYmFzZSBxdWVyeSBmb3Igb3JkZXJpbmcNCgkJLy8gIDIp IEFzIHNvb24gYXMgcmFuZG9tIGlzIGVuY291bnRlcmVkLCB0aGUgcmVzdCBvZiB0aGUgc29y dCBzdHJpbmcgaXMgaWdub3JlZC4NCgkJLy8gICAgIFRoZSByZXN1bHRzZXQgd2lsbCBiZSBz b3J0ZWQgcmFuZG9tbHkgaW5zdGVhZA0KCQkvLyAgMykgSWYgcmFuZG9tIGFwcGVhcnMgZmly c3QgaW4gdGhlIGxpc3QsIHRoZSBkYXRhIGlzIHJldHJpZXZlZCByYW5kb21seSB0aGVuIHRo ZQ0KCQkvLyAgICAgcmVtYWluaW5nIG9wdGlvbnMgc29ydCB0aGUgcmVzdWx0c2V0DQoJCSRj bGF1c2VTb3J0ID0gYXJyYXkoKTsNCgkJJHBvc3RPcmRlciA9IGFycmF5KCk7DQoJCSRydWxl ID0gInNxbCI7DQoJCSRwb3N0UHJlZml4ID0gIlNPUlRfIjsNCgkJJGZpeGVkT3JkZXIgPSAk cmFuZHNvcnQgPSBmYWxzZTsNCgkJJHNvcnQgPSBkb19saXN0KCRzb3J0LCAkZGVsaW0pOw0K CQlmb3IgKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJHNvcnQpOyAkaWR4KyspIHsNCgkJCSRz b3J0X2RpciA9IGV4cGxvZGUoJyAnLCAkc29ydFskaWR4XSk7DQoJCQkkZGlyZWN0aW9uID0g JGNvbFJlZiA9ICcnOw0KCQkJaWYgKGNvdW50KCRzb3J0X2RpcikgPD0gMSkgew0KCQkJCSRz b3J0X2RpclsxXSA9ICJhc2MiOw0KCQkJfQ0KCQkJaWYgKCRydWxlID09ICJzcWwiKSB7DQoJ CQkJJGRpcmVjdGlvbiA9ICgkc29ydF9kaXJbMV0gPT0gImRlc2MiKSA/ICcgZGVzYycgOiAn IGFzYyc7DQoJCQl9IGVsc2Ugew0KCQkJCSRkaXJlY3Rpb24gPSAoJHNvcnRfZGlyWzFdID09 ICJkZXNjIikgPyAkcG9zdFByZWZpeC4nREVTQycgOiAkcG9zdFByZWZpeC4nQVNDJzsNCgkJ CX0NCg0KCQkJc3dpdGNoICgkc29ydF9kaXJbMF0pIHsNCgkJCQljYXNlICdyYW5kb20nOg0K CQkJCQkkcnVsZSA9ICJwb3N0IjsNCgkJCQkJaWYgKCRpZHggPT0gMCkgew0KCQkJCQkJJGNs YXVzZVNvcnRbXSA9ICdyYW5kKCknOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJHJhbmRzb3J0 ID0gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICdmaXhlZCc6DQoJCQkJ CS8vICdmaXhlZCcgb25seSB3b3JrcyBvbiBpZHMNCgkJCQkJJGZpeGVkT3JkZXIgPSAoJGlk ID09ICcnKSA/IGZhbHNlIDogdHJ1ZTsNCgkJCQkJYnJlYWs7DQoJCQkJZGVmYXVsdDoNCgkJ CQkJJGNvbFJlZiA9IGFycmF5X3NlYXJjaCgkc29ydF9kaXJbMF0sICRmaWVsZE1hcCk7DQoJ CQkJCWJyZWFrOw0KCQkJfQ0KCQkJaWYgKCRydWxlID09ICJzcWwiKSB7DQoJCQkJaWYgKCRj b2xSZWYgIT0gJycpIHsNCgkJCQkJJGNsYXVzZVNvcnRbXSA9ICRjb2xSZWYuJGRpcmVjdGlv bjsNCgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJCWlmICghJHJhbmRzb3J0KSB7DQoJCQkJCWlm ICgkY29sUmVmICE9ICcnKSB7DQoJCQkJCQkkcG9zdE9yZGVyW10gPSBhcnJheSgiY29sIiA9 PiAkY29sUmVmLCAic29ydCIgPT4gJGRpcmVjdGlvbik7DQoJCQkJCX0NCgkJCQl9DQoJCQl9 DQoJCX0NCg0KCQlpZiAoY291bnQoJGNsYXVzZVNvcnQpID4gMCkgew0KCQkJJGNsYXVzZSAu PSAnIE9SREVSIEJZICcgLiBpbXBsb2RlKCIsIiwkY2xhdXNlU29ydCk7DQoJCX0NCgkJaWYg KCRkZWJ1ZyA+IDApIHsNCgkJCWVjaG8gIisrIFdIRVJFIENMQVVTRSArKyI7DQoJCQlkbXAo JGNsYXVzZSk7DQoJCX0NCgkJLy8gVGhlIGRhdGFiYXNlIGZpZWxkcyByZXF1aXJlZA0KCQkk ZmllbGRzID0gaW1wbG9kZSgiLCIsIGFycmF5X2tleXMoJGZpZWxkTWFwKSk7DQoNCgkJLy8g VGltZSB0byBncmFiIHRoZSBtYXRjaGluZyByb3dzIGZyb20gdGhlIGRhdGFiYXNlDQoJCSRy c2FsbCA9IHNhZmVfcm93cygkZmllbGRzLCAndHhwX2ltYWdlJywgJGNsYXVzZSAuJyBMSU1J VCAnLiRvZmZzZXQuJywnLiRtYXhsaW1pdCk7DQoJCWxpc3QoJG51bVBhZ2VzLCAkdGh1bVBh Z2UsICRvZmZzZXQpID0gc21kX2dldFBhZ2UoJHJzYWxsLCAkZ2FsbElELCAkbGltaXQsICRv ZmZzZXQsICRwYWdpbmcpOw0KCQkkcnMgPSBzYWZlX3Jvd3MoJGZpZWxkcy4nLCB0eHBfY2F0 ZWdvcnkudGl0bGUgQVMgY2F0X3RpdGxlJywgJ3R4cF9pbWFnZSwgdHhwX2NhdGVnb3J5Jywg J3R4cF9jYXRlZ29yeS5uYW1lID0gdHhwX2ltYWdlLmNhdGVnb3J5IEFORCB0eHBfY2F0ZWdv cnkudHlwZT0iaW1hZ2UiIEFORCAnIC4kY2xhdXNlIC4nIExJTUlUICcgLiRvZmZzZXQuICcs Jy4gKCgkbGltaXQ9PTApID8gJG1heGxpbWl0IDogJGxpbWl0KSk7DQoJfQ0KDQoJLy8gSXMg cG9zdC1vcmRlcmluZyByZXF1aXJlZD8gRG8gaXQNCglpZiAoJHJhbmRzb3J0KSB7DQoJCXNo dWZmbGUoJHJzKTsNCgl9IGVsc2UgaWYgKGNvdW50KCRwb3N0T3JkZXIpID4gMCkgew0KCQkv LyBUcmFuc2xhdGUgdGhlIHJvd3MgaW50byBjb2x1bW5zIHRoYXQgY2FuIGJlIHNvcnRlZA0K CQlmb3JlYWNoKCRycyBhcyAka2V5ID0+ICRyb3cpIHsNCgkJCSRjb2xfaWRbJGtleV0gPSAk cm93WydpZCddOw0KCQkJJGNvbF9uYW1lWyRrZXldID0gJHJvd1snbmFtZSddOw0KCQkJJGNv bF9jYXB0aW9uWyRrZXldID0gJHJvd1snY2FwdGlvbiddOw0KCQkJJGNvbF9hbHRbJGtleV0g PSAkcm93WydhbHQnXTsNCgkJCSRjb2xfY2F0ZWdvcnlbJGtleV0gPSAkcm93WydjYXRlZ29y eSddOw0KCQkJJGNvbF9kYXRlWyRrZXldID0gJHJvd1snZGF0ZSddOw0KCQkJJGNvbF9leHRb JGtleV0gPSAkcm93WydleHQnXTsNCgkJCSRjb2xfYXV0aG9yWyRrZXldID0gJHJvd1snYXV0 aG9yJ107DQoJCQkkY29sX3dbJGtleV0gPSAkcm93Wyd3J107DQoJCQkkY29sX2hbJGtleV0g PSAkcm93WydoJ107DQoJCQkkY29sX3RodW1ibmFpbFska2V5XSA9ICRyb3dbJ3RodW1ibmFp bCddOw0KCQl9DQoJCS8vIE1ha2UgdXAgYW4gYXJyYXlfbXVsdGlzb3J0IGFyZyBsaXN0IGFu ZCBleGVjdXRlIGl0DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkcG9zdE9yZGVy KTsgJGlkeCsrKSB7DQoJCQkkc29ydGFyZ3NbXSA9ICckY29sXycuJHBvc3RPcmRlclskaWR4 XVsnY29sJ107DQoJCQkkc29ydGFyZ3NbXSA9ICRwb3N0T3JkZXJbJGlkeF1bJ3NvcnQnXTsN CgkJfQ0KCQkkc29ydGl0ID0gJ2FycmF5X211bHRpc29ydCgnLmltcGxvZGUoIiwgIiwkc29y dGFyZ3MpLicsICRycyk7JzsNCgkJZXZhbCgkc29ydGl0KTsNCgl9DQoNCgkvLyBJcyBmaXhl ZC1vcmRlciBvdXRwdXQgZGVzaXJlZD8gSWYgc28sIHJlLW9yZGVyIHRoZSAkcnMNCglpZiAo JGZpeGVkT3JkZXIpIHsNCgkJJG9yZGVyZWRSUyA9IEFycmF5KCk7DQoJCSRpZ25vcmVMaXN0 ID0gQXJyYXkoKTsNCgkJJHJlbWFpbmluZ1JTID0gQXJyYXkoKTsNCgkJLy8gU3VjayBvdXQg dGhlIGZpeGVkIGl0ZW1zIGZpcnN0DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgk aWRpbmMpOyAkaWR4KyspIHsNCgkJCWZvcmVhY2goJHJzIGFzICRyb3cpIHsNCgkJCQlpZiAo IiciLiRyb3dbJ2lkJ10uIiciID09ICRpZGluY1skaWR4XSkgew0KCQkJCQkkb3JkZXJlZFJT W10gPSAkcm93Ow0KCQkJCQkkaWdub3JlTGlzdFtdID0gJHJvd1snaWQnXTsNCgkJCQl9DQoJ CQl9DQoJCX0NCgkJLy8gVGFjayBvbiB0aGUgcmVtYWluaW5nIHJvd3MNCgkJZm9yZWFjaCgk cnMgYXMgJHJvdykgew0KCQkJaWYgKCFpbl9hcnJheSgkcm93WydpZCddLCAkaWdub3JlTGlz dCkpIHsNCgkJCQkkcmVtYWluaW5nUlNbXSA9ICRyb3c7DQoJCQl9DQoJCX0NCgkJJHJzID0g YXJyYXlfbWVyZ2UoJG9yZGVyZWRSUywgJHJlbWFpbmluZ1JTKTsNCgl9DQoNCgkvLyBIYW5k bGUgdGh1bWJzaXplIC0gb2YgbGltaXRlZCB1c2Ugbm93IGJ1dCBzdGlsbCBhdmFpbGFibGUN CgkkdGh1bWJXaWR0aCA9ICR0aHVtYkhlaWdodCA9ICcnOw0KCSR0aHVtYldVbml0cyA9ICR0 aHVtYkhVbml0cyA9ICcnOw0KCWlmICgkdGh1bWJzaXplKSB7DQoJCSR0aHVtYlNpemVzID0g ZG9fbGlzdCgkdGh1bWJzaXplLCAkZGVsaW0pOw0KCQlpZiAoY291bnQoJHRodW1iU2l6ZXMp ID09IDEpIHsNCgkJCSR0aHVtYldpZHRoID0gJHRodW1iSGVpZ2h0ID0gZXJlZ19yZXBsYWNl KCJbXjAtOV0iLCAnJywgJHRodW1iU2l6ZXNbMF0pOw0KCQkJJHVuaXRzID0gZXJlZ19yZXBs YWNlKCJbMC05XSIsICcnLCAkdGh1bWJTaXplc1swXSk7DQoJCQkkdGh1bWJXVW5pdHMgPSAk dGh1bWJIVW5pdHMgPSAoJHVuaXRzID09ICcnKSA/ICR0aHVtYldVbml0cyA6ICR1bml0czsN CgkJfSBlbHNlIHsNCgkJCSR0aHVtYldpZHRoID0gZXJlZ19yZXBsYWNlKCJbXjAtOV0iLCAn JywgJHRodW1iU2l6ZXNbMF0pOw0KCQkJJHRodW1iSGVpZ2h0ID0gZXJlZ19yZXBsYWNlKCJb XjAtOV0iLCAnJywgJHRodW1iU2l6ZXNbMV0pOw0KCQkJJHVuaXRzID0gZXJlZ19yZXBsYWNl KCJbMC05XSIsICcnLCAkdGh1bWJTaXplc1swXSk7DQoJCQkkdGh1bWJXVW5pdHMgPSAoJHVu aXRzID09ICcnICYmICR0aHVtYldpZHRoICE9ICcnKSA/ICR0aHVtYldVbml0cyA6ICR1bml0 czsNCgkJCSR1bml0cyA9IGVyZWdfcmVwbGFjZSgiWzAtOV0iLCAnJywgJHRodW1iU2l6ZXNb MV0pOw0KCQkJJHRodW1iSFVuaXRzID0gKCR1bml0cyA9PSAnJyAmJiAkdGh1bWJIZWlnaHQg IT0gJycpID8gJHRodW1iSFVuaXRzIDogJHVuaXRzOw0KCQl9DQoJfQ0KDQoJLy8gQ29sbGF0 aW9uIGRlZmVycyBwYXJzaW5nIHRoZSBmb3JtIGZvciBlYWNoIHJldHVybmVkIGl0ZW0uDQoJ Ly8gSW5zdGVhZCBpdCBvdXRwdXRzIHRoZSBkYXRhIGFzIGEgbGlzdCBhdCB0aGUgZW5kIChp dGVtcyBtYXkgYmUgaW5kaXZpZHVhbGx5IHF1b3RlZCBvciBleHRyYWN0ZWQgaWYgcmVxdWly ZWQpDQoJLy9UT0RPIDogQWRkIEFMV0FZUyBzd2l0Y2ggYXMgYSBzaG9ydGN1dCB0byBzcGVj aWZ5IHRoYXQgYWxsIG1hdGNoaW5nIGl0ZW1zIChyZWdhcmRsZXNzIG9mICMxLCAjMiwgIzMg ZXRjKSBhcmUgdG8gYmUgcXVvdGVkDQoJaWYgKCRjb2xsYXRlKSB7DQoJCSRkYmxRdW90ZSA9 ICRzZ2xRdW90ZSA9IGFycmF5KCdTTUROT05FJyk7DQoJCSRjb2xsYXRlT3B0cyA9IGRvX2xp c3QoJGNvbGxhdGUsICRkZWxpbSk7DQoJCWZvcmVhY2ggKCRjb2xsYXRlT3B0cyBhcyAkb3B0 aW9uKSB7DQoJCQkkaW5kZXhlcyA9IGRvX2xpc3QoJG9wdGlvbiwgJHBhcmFtZGVsaW0pOw0K CQkJJGNvbFR5cGUgPSBhcnJheV9zaGlmdCgkaW5kZXhlcyk7DQoJCQkvLyBTdXBwbHlpbmcg J3F1b3RlJyBvbiBpdHMgb3duIHdpbGwgZW1wdHkgdGhlIHJlbGV2YW50IGFycmF5LCBpbXBs eWluZyAiQUxMIiBmaWVsZHMgYXJlIHRvIGJlIHF1b3RlZA0KCQkJc3dpdGNoICgkY29sVHlw ZSkgew0KCQkJCWNhc2UgInNnbHF1b3RlIjoNCgkJCQkJJHNnbFF1b3RlID0gJGluZGV4ZXM7 DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgImRibHF1b3RlIjoNCgkJCQljYXNlICJxdW90ZSI6 DQoJCQkJCSRkYmxRdW90ZSA9ICRpbmRleGVzOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0K CX0NCg0KCS8vIENvbWJvcyBhcmUgdXNlci1kZWZpbmVkIGNvbWJpbmF0aW9ucyBvZiByZXBs YWNlbWVudCBtb2RpZmllcnMgKGUuZy4gaWRleHQ6IHtpZH17ZXh0fSwgLi4uDQoJJGNvbWJv cyA9IGFycmF5KCk7DQoJaWYgKCRjb21ibykgew0KCQkkY29tYm8gPSBkb19saXN0KCRjb21i bywgJGRlbGltKTsNCgkJZm9yZWFjaCAoJGNvbWJvIGFzICRuZXdEZWYpIHsNCgkJCWxpc3Qo JGRlZlBhcnRzLCAkdW53YW50ZWQpID0gc21kX2RvTGlzdCgkbmV3RGVmLCBmYWxzZSwgJycs IGZhbHNlLCAkcGFyYW1kZWxpbSk7DQoJCQkkZGVmTmFtZSA9ICJ7Ii5hcnJheV9zaGlmdCgk ZGVmUGFydHMpLiJ9IjsNCgkJCSRjb21ib3NbJGRlZk5hbWVdID0gJGRlZlBhcnRzWzBdOw0K CQl9DQoJfQ0KCWlmICgkZGVidWcgPiAxKSB7DQoJCWVjaG8gIisrIENPTUJPcyArKyI7DQoJ CWRtcCgkY29tYm9zKTsNCgl9DQoJLy8gQ29uc3RydWN0IHRoZSBvdXRwdXQNCgkkb3V0ID0g YXJyYXkoKTsNCgkkY29sbGF0aW9ucyA9IGFycmF5KCk7DQoJaWYgKCRkZWJ1ZyA+IDIpIHsN CgkJZWNobyAiKysgUkVDT1JEIFNFVCArKyI7DQoJCWRtcCgkcnMpOw0KCX0NCglpZiAoJGRl YnVnID4gMykgew0KCQllY2hvICIrKyBBVkFJTEFCTEUgJz8nIFZBUlMgKysiOw0KCQlkbXAo JHByZXRleHQpOw0KCQlkbXAoJHRoaXNhcnRpY2xlKTsNCgl9DQoNCglpZigkcnMpIHsNCgkJ JGlkeCA9IDA7DQoJCSRjdHIgPSAxOw0KCQkkbnVtSW1hZ2VzID0gY291bnQoJHJzKTsNCgkJ Zm9yZWFjaCgkcnMgYXMgJHJvdykgew0KCQkJaWYgKCRkaXJlY3RvcnkpIHsNCgkJCQkkdXJs UGF0aCA9ICRyb3dbJ3BhdGgnXS5EUzsNCgkJCX0gZWxzZSB7DQoJCQkJJHVybFBhdGggPSBo dS4kaW1nX2Rpci5EUzsNCgkJCX0NCgkJCSR0aGVUaHVtYiA9ICR1cmxQYXRoIC4gJHJvd1sn aWQnXSAuICd0JyAuICRyb3dbJ2V4dCddOw0KCQkJJGZ1bGxTaXplID0gJHVybFBhdGggLiAk cm93WydpZCddIC4gKCgkdGh1bWIpID8gInQiIDogJycpIC4kcm93WydleHQnXTsNCg0KCQkJ Ly8gSXMgYSB0aHVtYi90ZXh0IG9iamVjdCByZXF1aXJlZCB0aGlzIHRpbWU/DQoJCQkkb2Jq ZWN0ID0gJyc7DQoJCQlpZiAoJGlkeCA+PSAkdGh1bWJvZmZzZXQgJiYgJGlkeCA8ICR0aHVt Ym9mZnNldCskdGh1bWJsaW1pdCkgew0KCQkJCXN3aXRjaCAoJHR5cGUpIHsNCgkJCQkJY2Fz ZSAnaW1hZ2UnOg0KCQkJCQkJJG9iamVjdCA9ICgkdGV4dCkgPyAkdGV4dCA6ICc8aW1nIHNy Yz0iJy4kdGhlVGh1bWIuJyInIC4oKCRyb3dbJ2FsdCddKSA/ICcgYWx0PSInLiRyb3dbJ2Fs dCddLiciJyA6ICcnKSAuKCgkdGh1bWJXaWR0aCkgPyAnIHdpZHRoPSInLiR0aHVtYldpZHRo LiR0aHVtYldVbml0cy4nIicgOiAnJykgLigoJHRodW1iSGVpZ2h0KSA/ICcgaGVpZ2h0PSIn LiR0aHVtYkhlaWdodC4kdGh1bWJIVW5pdHMuJyInIDogJycpIC4nIC8+JzsNCgkJCQkJCWJy ZWFrOw0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gQ29uc3RydWN0IHRoZSByZXBsYWNlbWVudCBh cnJheQ0KCQkJJHJlcGxhY2VtZW50cyA9IGFycmF5KA0KCQkJCQkne2lkfScgPT4gJHJvd1sn aWQnXSwNCgkJCQkJJ3tuYW1lfScgPT4gJHJvd1snbmFtZSddLA0KCQkJCQkne2V4dH0nID0+ ICRyb3dbJ2V4dCddLA0KCQkJCQkne2NhdGVnb3J5fScgPT4gJHJvd1snY2F0ZWdvcnknXSwN CgkJCQkJJ3tjYXRlZ29yeV90aXRsZX0nID0+ICRyb3dbJ2NhdF90aXRsZSddLA0KCQkJCQkn e2F1dGhvcn0nID0+ICRyb3dbJ2F1dGhvciddLA0KCQkJCQkne2hhc3RodW1ifScgPT4gJHJv d1sndGh1bWJuYWlsJ10sDQoJCQkJCSd7dXJsfScgPT4gJGZ1bGxTaXplLA0KCQkJCQkne3Ro dW1idXJsfScgPT4gJHRoZVRodW1iLA0KCQkJCQkne2ltYWdlcGF0aH0nID0+ICR1cmxQYXRo LA0KCQkJCQkne2ltYWdlZGVmfScgPT4gYmFzZW5hbWUoJGZ1bGxTaXplKSwNCgkJCQkJJ3t0 aHVtYmRlZn0nID0+IGJhc2VuYW1lKCR0aGVUaHVtYiksDQoJCQkJCSd7YWx0fScgPT4gJHJv d1snYWx0J10sDQoJCQkJCSd7dGl0bGV9JyA9PiAkcm93WydjYXB0aW9uJ10sDQoJCQkJCSd7 dGh1bWJ3aWR0aH0nID0+ICR0aHVtYldpZHRoLA0KCQkJCQkne3RodW1iaGVpZ2h0fScgPT4g JHRodW1iSGVpZ2h0LA0KCQkJCQkne3RodW1id3VuaXRzfScgPT4gJHRodW1iV1VuaXRzLA0K CQkJCQkne3RodW1iaHVuaXRzfScgPT4gJHRodW1iSFVuaXRzLA0KCQkJCQkne3dpZHRofScg PT4gJHJvd1sndyddLA0KCQkJCQkne2hlaWdodH0nID0+ICRyb3dbJ2gnXSwNCgkJCQkJJ3tk YXRlfScgPT4gJHJvd1snZGF0ZSddLA0KCQkJCQkne29iamVjdH0nID0+ICRvYmplY3QsDQoJ CQkJCSd7Z2FsbGVyeWlkfScgPT4gJGdhbGxJRCwNCgkJCQkJJ3tpbmRleH0nID0+ICRpZHgs DQoJCQkJCSd7Y291bnRlcn0nID0+ICRjdHIsDQoJCQkJCSd7dG90YWxpbWFnZXN9JyA9PiAk bnVtSW1hZ2VzLA0KCQkJCSk7DQoNCgkJCS8vIEFwcGVuZCBhbnkgY29tYm9zDQoJCQlmb3Jl YWNoICgkY29tYm9zIGFzICRkZWZOYW1lID0+ICRuZXdEZWYpIHsNCgkJCQlpZiAoIWFycmF5 X2tleV9leGlzdHMoJGRlZk5hbWUsICRyZXBsYWNlbWVudHMpKSB7DQoJCQkJCSRyZXBsYWNl bWVudHNbJGRlZk5hbWVdID0gc3RydHIoJG5ld0RlZiwgJHJlcGxhY2VtZW50cyk7DQoJCQkJ fQ0KCQkJfQ0KDQoJCQkvLyBTb2xvcyBhcmUgaXRlbXMgaW4gdGhlIG91dHB1dCBmb3JtIHRo YXQgcmVxdWlyZSBkZXRhaWxzIGZyb20gYSBzcGVjaWZpYyByb3cuIFVzZWZ1bCBvbmx5IGlu IGNvbGxhdGlvbg0KCQkJLy8gbW9kZSwgdGhleSBhcmUgYWRkZWQgdG8gdGhlIHJlcGxhY2Vt ZW50cyBhcnJheSBvbiBhbiBhcy1uZWVkZWQgYmFzaXMgdG8gc2F2ZSBzcGFjZS90aW1lDQoJ CQkkc29sb1JFID0gJy9ceyhbYS16MC05XSspIycuJGN0ci4nXH0vJzsNCgkJCSRudW1Tb2xv cyA9IHByZWdfbWF0Y2hfYWxsKCRzb2xvUkUsICR0aGluZywgJHNvbG9zKTsNCgkJCWZvciAo JHNvbG9DdHIgPSAwOyAkc29sb0N0ciA8ICRudW1Tb2xvczsgJHNvbG9DdHIrKykgew0KCQkJ CSRmaWVsZG5hbWUgPSAneycuJHNvbG9zWzFdWyRzb2xvQ3RyXS4nIycuJGN0ci4nfSc7DQoJ CQkJJGdyYWJmaWVsZCA9ICd7Jy4kc29sb3NbMV1bJHNvbG9DdHJdLid9JzsNCgkJCQkkcmVw bGFjZW1lbnRzWyRmaWVsZG5hbWVdID0gJHJlcGxhY2VtZW50c1skZ3JhYmZpZWxkXTsNCgkJ CX0NCg0KCQkJaWYgKCRkZWJ1ZyA+IDApIHsNCgkJCQllY2hvICIrKyBSRVBMQUNFTUVOVFMg OiBJTUFHRSAiLiRjdHIuIiArKyI7DQoJCQkJZG1wKCRyZXBsYWNlbWVudHMpOw0KCQkJfQ0K DQoJCQkvLyBJbiBjb2xsYXRlIG1vZGUgdGhlIGZvcm0gaXMgb25seSBwYXJzZWQgYXQgdGhl IGVuZDogYnVpbGQgYSBjb2xsb3NhbCBtdWx0aS1kaW1lbnNpb24gYXJyYXkgb2YgYWxsIGl0 ZW1zIGhlcmUNCgkJCWlmICgkY29sbGF0ZSkgew0KCQkJCWZvcmVhY2ggKCRyZXBsYWNlbWVu dHMgYXMgJGRlZk5hbWUgPT4gJGRlZlZhbCkgew0KCQkJCQkkY29sbGF0aW9uc1skZGVmTmFt ZV1bXSA9ICRkZWZWYWw7DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkkb3V0W10gPSBwYXJz ZShzdHJ0cigkdGhpbmcsICRyZXBsYWNlbWVudHMpKTsNCgkJCX0NCg0KCQkJJGlkeCsrOw0K CQkJJGN0cisrOw0KCQl9DQoJCWlmICgkY29sbGF0ZSkgew0KCQkJZm9yZWFjaCAoJGNvbGxh dGlvbnMgYXMgJGl0ZW0gPT4gJGxpc3QpIHsNCgkJCQkvLyBRdW90ZSB0aGUgbGlzdHMgaWYg cmVxdWlyZWQNCgkJCQkkbGlzdCA9IChlbXB0eSgkZGJsUXVvdGUpIHx8IGluX2FycmF5KCRp dGVtLCAkZGJsUXVvdGUpKSA/IGRvQXJyYXkoJGxpc3QsICdzbWRfZG9EYmxRdW90ZScpIDog JGxpc3Q7DQoJCQkJJGxpc3QgPSAoZW1wdHkoJHNnbFF1b3RlKSB8fCBpbl9hcnJheSgkaXRl bSwgJHNnbFF1b3RlKSkgPyBkb0FycmF5KCRsaXN0LCAnZG9RdW90ZScpIDogJGxpc3Q7DQoJ CQkJJGNvbGxhdGlvbnNbJGl0ZW1dID0gaW1wbG9kZSgkZGVsaW0sICRsaXN0KTsNCgkJCX0N CgkJCWlmICgkZGVidWcgPiAwKSB7DQoJCQkJZWNobyAiKysgQ09MTEFUSU9OUyArKyI7DQoJ CQkJZG1wKCRjb2xsYXRpb25zKTsNCgkJCX0NCgkJCSRvdXRbXSA9IHBhcnNlKHN0cnRyKCR0 aGluZywgJGNvbGxhdGlvbnMpKTsNCgkJfQ0KDQoJCS8vIEFkZCB0aGUgcGFnaW5nIGZlYXR1 cmVzIGlmIHJlcXVpcmVkDQoJCWlmICgoJGxpbWl0ID4gMCkgJiYgJHBhZ2luZykgew0KCQkJ JG5hdm91dCA9IGFycmF5KCk7DQoJCQkkbmV4dCA9ICgkbnVtUGFnZXMgPiAxICYmICR0aHVt UGFnZSAhPSAkbnVtUGFnZXMpOw0KCQkJJHByZXYgPSAoJG51bVBhZ2VzID4gMSAmJiAkdGh1 bVBhZ2UgPiAxKTsNCg0KCQkJLy8gUmVwbGFjZSBhbnkgcGFnaW5nIGluZm8gaW4gdGhlIHF1 ZXJ5IHN0cmluZw0KCQkJJHByZXZQYWdlID0gc21kX2FkZFFTVmFyKCRwcmV0ZXh0WydyZXF1 ZXN0X3VyaSddLCAkZ2FsbElELCAkdGh1bVBhZ2UtMSk7DQoJCQkkbmV4dFBhZ2UgPSBzbWRf YWRkUVNWYXIoJHByZXRleHRbJ3JlcXVlc3RfdXJpJ10sICRnYWxsSUQsICR0aHVtUGFnZSsx KTsNCgkJCSR0aGlzUGFnZSA9IHNtZF9hZGRRU1ZhcigkcHJldGV4dFsncmVxdWVzdF91cmkn XSwgJGdhbGxJRCwgJHRodW1QYWdlKTsNCgkJCSRmaXJzdFBhZ2UgPSBzbWRfYWRkUVNWYXIo JHByZXRleHRbJ3JlcXVlc3RfdXJpJ10sICRnYWxsSUQsIDEpOw0KCQkJJGxhc3RQYWdlID0g c21kX2FkZFFTVmFyKCRwcmV0ZXh0WydyZXF1ZXN0X3VyaSddLCAkZ2FsbElELCAkbnVtUGFn ZXMpOw0KDQoJCQkvLyBMYWJlbHMgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgcmVwbGFjZW1l bnQgdGFnIGFmdGVyIGEgcGFyYW1kZWxpbS4NCgkJCS8vICdlYXJsaWVyJyBhbmQgJ2xhdGVy JyBkb24ndCBoYXZlIGxhYmVscy4gQW55dGhpbmcgc3BlY2lmaWVkIGFmdGVyIHBhcmFtZGVs aW0gaXMgdGhlIG1heCBudW1iZXIgb2YgcGFnZXMgdG8gc2hvdzsgZW1wdHkgPSBhbGwgcGFn ZXMNCgkJCSRsYWJlbCA9IGFycmF5KA0KCQkJCQkne25hdmZpcnN0fScgPT4gJ0ZpcnN0JywN CgkJCQkJJ3tuYXZwcmV2fScgPT4gJyZsYXF1bzsnLA0KCQkJCQkne25hdmVhcmxpZXJ9JyA9 PiAnJywNCgkJCQkJJ3tuYXZ0aGlzfScgPT4gJHRodW1QYWdlLA0KCQkJCQkne25hdnRoaXN1 cmx9JyA9PiAkdGh1bVBhZ2UsDQoJCQkJCSd7bmF2bGF0ZXJ9JyA9PiAnJywNCgkJCQkJJ3tu YXZuZXh0fScgPT4gJyZyYXF1bzsnLA0KCQkJCQkne25hdmxhc3R9JyA9PiAnTGFzdCcsDQoJ CQkJKTsNCg0KCQkJJGxhYmVsUkUgPSAnL1x7KG5hdlthLXpdKyknLiRwYXJhbWRlbGltLico Lis/KVx9Lyc7DQoJCQkkbnVtTGFiZWxzID0gcHJlZ19tYXRjaF9hbGwoJGxhYmVsUkUsICRw YWdlZm9ybSwgJGxhYmVscyk7DQoNCgkJCWZvciAoJGxhYmVsQ3RyID0gMDsgJGxhYmVsQ3Ry IDwgJG51bUxhYmVsczsgJGxhYmVsQ3RyKyspIHsNCgkJCQkkZmllbGRuYW1lID0gJ3snLiRs YWJlbHNbMV1bJGxhYmVsQ3RyXS4nfSc7DQoJCQkJJGxhYmVsWyRmaWVsZG5hbWVdID0gJGxh YmVsc1syXVskbGFiZWxDdHJdOw0KCQkJCSRwYWdlZm9ybSA9IHN0cl9yZXBsYWNlKCRsYWJl bHNbMF1bJGxhYmVsQ3RyXSwgJ3snLiRsYWJlbHNbMV1bJGxhYmVsQ3RyXS4nfScsICRwYWdl Zm9ybSk7DQoJCQl9DQoNCgkJCWlmICgkZGVidWcgPiAxKSB7DQoJCQkJZWNobyAiKysgUEFH SU5HIExBQkVMUyArKyI7DQoJCQkJZG1wKCRsYWJlbCk7DQoJCQl9DQoNCgkJCS8vIEdlbmVy YXRlICdlYXJsaWVyJyBhbmQgJ2xhdGVyJyBsaXN0cw0KCQkJJG51bUVhcmxpZXIgPSBpbnR2 YWwoJGxhYmVsWyd7bmF2ZWFybGllcn0nXSk7DQoJCQkkbnVtTGF0ZXIgPSBpbnR2YWwoJGxh YmVsWyd7bmF2bGF0ZXJ9J10pOw0KCQkJJG51bUVhcmxpZXIgPSAoJG51bUVhcmxpZXIgJiYg KCR0aHVtUGFnZS0kbnVtRWFybGllciA+IDEpKSA/ICRudW1FYXJsaWVyIDogJHRodW1QYWdl LTE7DQoJCQkkbnVtTGF0ZXIgPSAoJG51bUxhdGVyICYmICgkdGh1bVBhZ2UrJG51bUxhdGVy IDwgJG51bVBhZ2VzKSkgPyAkbnVtTGF0ZXIgOiAkbnVtUGFnZXMtJHRodW1QYWdlOw0KCQkJ JG5hdkVhcmxpZXIgPSAkbmF2TGF0ZXIgPSBhcnJheSgpOw0KCQkJZm9yICgkaWR4ID0gJHRo dW1QYWdlLSRudW1FYXJsaWVyOyAkaWR4IDwgJHRodW1QYWdlOyAkaWR4KyspIHsNCgkJCQkk bmF2RWFybGllcltdID0gJzxhIGhyZWY9Iicuc21kX2FkZFFTVmFyKCRwcmV0ZXh0WydyZXF1 ZXN0X3VyaSddLCAkZ2FsbElELCAkaWR4KS4nIj4nLiRpZHguJzwvYT4nOw0KCQkJfQ0KCQkJ Zm9yICgkaWR4ID0gJHRodW1QYWdlKzE7ICRpZHggPD0gJHRodW1QYWdlKyRudW1MYXRlcjsg JGlkeCsrKSB7DQoJCQkJJG5hdkxhdGVyW10gPSAnPGEgaHJlZj0iJy5zbWRfYWRkUVNWYXIo JHByZXRleHRbJ3JlcXVlc3RfdXJpJ10sICRnYWxsSUQsICRpZHgpLiciPicuJGlkeC4nPC9h Pic7DQoJCQl9DQoJCQkkbmF2RWFybGllciA9IGRvV3JhcCgkbmF2RWFybGllciwgJycsICRu YXZicmVhaywgJycpOw0KCQkJJG5hdkxhdGVyID0gZG9XcmFwKCRuYXZMYXRlciwgJycsICRu YXZicmVhaywgJycpOw0KDQoJCQkvLyBNYWtlIHVwIHRoZSByZXBsYWNlbWVudHMgYXJyYXkg Zm9yIHBhZ2Vmb3JtDQoJCQkkcmVwbGFjZW1lbnRzID0gYXJyYXkoDQoJCQkJCSd7bmF2Zmly c3R9JyA9PiAoKCRwcmV2KSA/IGRvVGFnKCc8YSBocmVmPSInLiRmaXJzdFBhZ2UuJyI+Jy4k bGFiZWxbJ3tuYXZmaXJzdH0nXS4nPC9hPicsICRuYXZicmVhaykgOiBkb1RhZygkbGFiZWxb J3tuYXZmaXJzdH0nXSwgJG5hdmJyZWFrKSksDQoJCQkJCSd7bmF2cHJldn0nID0+ICgoJHBy ZXYpID8gZG9UYWcoJzxhIGhyZWY9IicuJHByZXZQYWdlLiciPicuJGxhYmVsWyd7bmF2cHJl dn0nXS4nPC9hPicsICRuYXZicmVhaykgOiBkb1RhZygkbGFiZWxbJ3tuYXZwcmV2fSddLCAk bmF2YnJlYWspKSwNCgkJCQkJJ3tuYXZlYXJsaWVyfScgPT4gJG5hdkVhcmxpZXIsDQoJCQkJ CSd7bmF2dGhpc30nID0+IGRvVGFnKCRsYWJlbFsne25hdnRoaXN9J10sICRuYXZicmVhaywg J2N1cnJlbnQnKSwNCgkJCQkJJ3tuYXZ0aGlzdXJsfScgPT4gZG9UYWcoJzxhIGhyZWY9Iicu JHRoaXNQYWdlLiciPicuJGxhYmVsWyd7bmF2dGhpc3VybH0nXS4nPC9hPicsICRuYXZicmVh aywgJ2N1cnJlbnQnKSwNCgkJCQkJJ3tuYXZsYXRlcn0nID0+ICRuYXZMYXRlciwNCgkJCQkJ J3tuYXZuZXh0fScgPT4gKCgkbmV4dCkgPyBkb1RhZygnPGEgaHJlZj0iJy4kbmV4dFBhZ2Uu JyI+Jy4kbGFiZWxbJ3tuYXZuZXh0fSddLic8L2E+JywgJG5hdmJyZWFrKSA6IGRvVGFnKCRs YWJlbFsne25hdm5leHR9J10sICRuYXZicmVhaykpLA0KCQkJCQkne25hdmxhc3R9JyA9PiAo KCRuZXh0KSA/IGRvVGFnKCc8YSBocmVmPSInLiRsYXN0UGFnZS4nIj4nLiRsYWJlbFsne25h dmxhc3R9J10uJzwvYT4nLCAkbmF2YnJlYWspIDogZG9UYWcoJGxhYmVsWyd7bmF2bGFzdH0n XSwgJG5hdmJyZWFrKSksDQoJCQkJCSd7dG90YWxpbWFnZXN9JyA9PiAkbnVtSW1hZ2VzLA0K CQkJCQkne3RvdGFscGFnZXN9JyA9PiAkbnVtUGFnZXMsDQoJCQkJKTsNCg0KCQkJaWYgKCRk ZWJ1ZyA+IDApIHsNCgkJCQllY2hvICIrKyBQQUdJTkcgUkVQTEFDRU1FTlRTICsrIjsNCgkJ CQlkbXAoJHJlcGxhY2VtZW50cyk7DQoJCQl9DQoJCQkvLyBQZXJmb3JtIGFsbCBzdWJzdGl0 dXRpb25zIGFuZCB3cmFwIHRoZSBlbnRpcmUgbG90IGlmIHJlcXVpcmVkDQoJCQkkbmF2b3V0 W10gPSBwYXJzZShzdHJ0cigkcGFnZWZvcm0sICRyZXBsYWNlbWVudHMpKTsNCgkJCSRvdXRb XSA9IGRvV3JhcCgkbmF2b3V0LCAkbmF2d3JhcHRhZywgJycsICRuYXZjbGFzcyk7DQoJCX0N CgkJaWYgKCRkZWJ1ZyA+IDIpIHsNCgkJCWVjaG8gIisrIEZJTkFMIE9VVFBVVCArKyI7DQoJ CQlkbXAoJG91dCk7DQoJCX0NCgl9DQoNCglyZXR1cm4gZG9XcmFwKCRvdXQsICR3cmFwdGFn LCAkYnJlYWssICRjbGFzcyk7DQp9DQoNCi8vIFJldHVybiBhbiBleHBhbmRlZCBsaXN0IG9m IGl0ZW1zOg0KLy8gMSkgQW55dGhpbmcgY29udGFpbmluZyAnPycgb3IgJyEnIGlzIGNoZWNr ZWQgZm9yIGEgbWF0Y2ggd2l0aCBhIFRYUCBmaWVsZA0KLy8gMikgQW55IHJhbmdlcyBvZiBp dGVtcyBhcmUgZXhwYW5kZWQgKGUuZy4gNC03ID0gNCw1LDYsNykNCi8vIDMpIFRYUCBmaWVs ZHMgbWF5IHRoZW1zZWx2ZXMgYmUgbGlzdHMgb3IgcmFuZ2VzDQovLyA0KSBBbnl0aGluZyB0 aGF0IGlzIG5vdCBhIFRYUCBmaWVsZCBpcyB1c2VkIHZlcmJhdGltDQovLyA1KSBUaGUgaXRl bXMgYXJlIHJldHVybmVkIGFzIDIgbGlzdHM7IGluY2x1c2lvbiBhbmQgZXhjbHVzaW9uDQov LyBBcmdzOg0KLy8gIGxzdCA9IHRoZSBsaXN0IGFzIGEgZGVsaW1pdGVkIHN0cmluZw0KLy8g IHJuZyA9IHdoZXRoZXIgdG8gYWxsb3cgcmFuZ2VzIG9yIG5vdCAoYm9vbCkNCi8vICBzdWIg PSB0aGUgdHlwZSBvZiBzdWJjYXRlZ29yeSB0byB0cmF2ZXJzZSAoaW1hZ2UsIGZpbGUsIGxp bmssIGFydGljbGUsIG5vbmU9IiIpIGFuZCBob3cgbWFueSBsZXZlbHMgdG8gZ28gZG93biAo ZS5nLiBpbWFnZToyKQ0KLy8gIHF0ZSA9IHdoZXRoZXIgdG8gcXVvdGUgZWFjaCBpdGVtIGlu IHRoZSBhcnJheSBvciBub3QgKGJvb2wpDQovLyAgZGxtID0gdGhlIGRlbGltaXRlciAoc3Ry aW5nKQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInNtZF9kb0xpc3QiKSkgew0KZnVuY3Rpb24g c21kX2RvTGlzdCgkbHN0LCAkcm5nPXRydWUsICRzdWI9IiIsICRxdGU9dHJ1ZSwgJGRsbT0i LCIpIHsNCglnbG9iYWwgJHRoaXNhcnRpY2xlLCAkcHJldGV4dDsNCg0KCSRpbmMgPSAkZXhj ID0gYXJyYXkoKTsNCgkkbHN0ID0gZG9fbGlzdCgkbHN0LCAkZGxtKTsNCgkkbW9kUkUgPSAn LyhcP3xcISkoW0EtWmEtejAtOV9cLSBdKykvJzsNCglmb3JlYWNoICgkbHN0IGFzICRpdGVt KSB7DQoJCSRtb2QgPSAwOyAvLyAwID0gaW5jbHVkZSwgMSA9IGV4Y2x1ZGUNCgkJJG51bU1v ZHMgPSBwcmVnX21hdGNoX2FsbCgkbW9kUkUsICRpdGVtLCAkbW9kcyk7DQoNCgkJZm9yICgk bW9kQ3RyID0gMDsgJG1vZEN0ciA8ICRudW1Nb2RzOyAkbW9kQ3RyKyspIHsNCgkJCS8vIG1v ZCAidHlwZSIgaXMgZ292ZXJuZWQgYnkgdGhlIGZpcnN0IG9uZSBmb3VuZCBvbmx5LiBpLmUu IGlmICJhcnRpY2xlLT9jIXMiIHdhcyB1c2VkIGluIG9uZSBmaWVsZA0KCQkJLy8gaXQgd291 bGQgYmUgYW4gImluY2x1ZGUiIG9mIHRoZSB3b3JkICJhcnRpY2xlLSIgcGx1cyB0aGUgY2F0 ZWdvcnkgYW5kIHNlY3Rpb24gY29uY2F0ZW5hdGVkDQoJCQkkbW9kID0gKCRtb2RzWzFdWzBd ID09PSAiISIpID8gMSA6IDA7DQoJCQkkbW9kQ2hhciA9ICRtb2RzWzFdWyRtb2RDdHJdOw0K CQkJJG1vZEl0ZW0gPSB0cmltKCRtb2RzWzJdWyRtb2RDdHJdKTsNCgkJCSRsb3dpdGVtID0g c3RydG9sb3dlcigkbW9kSXRlbSk7DQoJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkbG93aXRl bSwgJHByZXRleHQpKSB7DQoJCQkJJGl0ZW0gPSBzdHJfcmVwbGFjZSgkbW9kQ2hhci4kbW9k SXRlbSwgJHByZXRleHRbJGxvd2l0ZW1dLCAkaXRlbSk7DQoJCQl9IGVsc2UgaWYgKGlzc2V0 KCR0aGlzYXJ0aWNsZVskbG93aXRlbV0pKSB7DQoJCQkJJGl0ZW0gPSBzdHJfcmVwbGFjZSgk bW9kQ2hhci4kbW9kSXRlbSwgJHRoaXNhcnRpY2xlWyRsb3dpdGVtXSwgJGl0ZW0pOw0KCQkJ fSBlbHNlIHsNCgkJCQkkaXRlbSA9IHN0cl9yZXBsYWNlKCRtb2RDaGFyLiRtb2RJdGVtLCAk bW9kSXRlbSwgJGl0ZW0pOw0KCQkJfQ0KCQl9DQoNCgkJLy8gSGFuZGxlIHJhbmdlcyBvZiB2 YWx1ZXMNCgkJaWYgKCRybmcgJiYgcHJlZ19tYXRjaCgnL14oXGQrKVwtKFxkKykkLycsICRp dGVtKSkgew0KCQkJbGlzdCgkbG8sICRoaSkgPSBleHBsb2RlKCItIiwgJGl0ZW0sIDIpOw0K CQkJJGl0ZW0gPSBpbXBsb2RlKCRkbG0sIHJhbmdlKCRsbywgJGhpKSk7DQoJCX0NCg0KCQkv LyBJdGVtIG1heSBiZSBlbXB0eTsgaWdub3JlIGl0IGlmIHNvDQoJCWlmICgkaXRlbSkgew0K CQkJJGl0ZW0gPSBkb19saXN0KCRpdGVtLCAkZGxtKTsNCgkJCS8vIEhhbmRsZSBzdWItY2F0 ZWdvcmllcw0KCQkJaWYgKCRzdWIpIHsNCgkJCQlsaXN0KCRzdWJ0eXBlLCAkbGV2ZWwpID0g ZXhwbG9kZSgiOiIsICRzdWIpOw0KCQkJCSRsZXZlbCA9IChlbXB0eSgkbGV2ZWwpKSA/IDAg OiAkbGV2ZWw7DQoJCQkJJGxldmVsID0gKHN0cnRvbG93ZXIoJGxldmVsKT09ImFsbCIpID8g OTk5OTkgOiAkbGV2ZWw7DQoJCQkJZm9yZWFjaCAoJGl0ZW0gYXMgJGNhdCkgew0KCQkJCQkk Y2F0cyA9IGdldFRyZWUoZG9zbGFzaCgkY2F0KSwgJHN1YnR5cGUpOw0KCQkJCQlmb3JlYWNo ICgkY2F0cyBhcyAkamR4ID0+ICR2YWwpIHsNCgkJCQkJCWlmICgkY2F0c1skamR4XVsnbGV2 ZWwnXSA8PSAkbGV2ZWwpIHsNCgkJCQkJCQkkaXRlbVtdID0gJGNhdHNbJGpkeF1bJ25hbWUn XTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gUXVvdGUgaWYgYXNr ZWQNCgkJCSRpdGVtID0gKCRxdGUpID8gZG9BcnJheSgkaXRlbSwgJ2RvUXVvdGUnKSA6ICRp dGVtOw0KCQkJaWYgKCRtb2QgPT09IDApIHsNCgkJCQkkaW5jID0gYXJyYXlfdW5pcXVlKGFy cmF5X21lcmdlKCRpbmMsICRpdGVtKSk7DQoJCQl9IGVsc2Ugew0KCQkJCSRleGMgPSBhcnJh eV91bmlxdWUoYXJyYXlfbWVyZ2UoJGV4YywgJGl0ZW0pKTsNCgkJCX0NCgkJfQ0KCX0NCgly ZXR1cm4gYXJyYXkoJGluYywgJGV4Yyk7DQp9DQp9DQoNCi8vIEFsdGVybmF0aXZlIHRvIHRo ZSBjb3JlJ3MgZG9RdW90ZSgpLiBUaGlzIG9uZSBkYmwtcXVvdGVzIGluc3RlYWQgb2Ygc2ds LXF1b3Rlcw0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInNtZF9kb0RibFF1b3RlIikpIHsNCmZ1 bmN0aW9uIHNtZF9kb0RibFF1b3RlKCR2YWwpIHsNCglyZXR1cm4gJyInLiR2YWwuJyInOw0K fQ0KfQ0KDQovLyBXb3JrIG91dCB3aGljaCBwYWdlIHRoaXMgZ2FsbGVyeSBpcyBvbiBhbmQg cmV0dXJuIHRoZSByZWxldmFudCBpbmZvDQpmdW5jdGlvbiBzbWRfZ2V0UGFnZSgkcnMsICRn YWxsSUQsICRsaW1pdCwgJG9mZnNldCwgJHBhZ2luZykgew0KCWlmICgoJGxpbWl0ID4gMCkg JiYgJHBhZ2luZykgew0KCQkkbnVtVGh1bXMgPSBjb3VudCgkcnMpOw0KCQkkbnVtUGFnZXMg PSAoJG51bVRodW1zID4gMCkgPyBjZWlsKCRudW1UaHVtcy8kbGltaXQpIDogMTsNCgkJJHRo dW1QYWdlID0gKCFncHMoJGdhbGxJRCkpID8gMSA6IGdwcygkZ2FsbElEKTsNCgkJJG9mZnNl dCA9ICgkdGh1bVBhZ2UgLSAxKSAqICRsaW1pdDsNCgl9IGVsc2Ugew0KCQkvLyBObyBwYWdp bmcgcmVxdWlyZWQNCgkJJG51bVBhZ2VzID0gMTsNCgkJJHRodW1QYWdlID0gMTsNCgl9DQoJ cmV0dXJuIGFycmF5KCRudW1QYWdlcywgJHRodW1QYWdlLCAkb2Zmc2V0KTsNCn0NCg0KLy8g UmVhZCB0aGUgZ2l2ZW4gZGVsaW1pdGVkIGRpcmVjdG9yaWVzIGFuZCBnZXQgYWxsIGZpbGVz IHRoYXQgbWF0Y2guDQovLyBHbyBkb3duIGFzIG1hbnkgc3ViZGlyIGxldmVscyBhcyBnaXZl biBpbiB0aGUgJHN1YiBwYXJhbWV0ZXINCmZ1bmN0aW9uIHNtZF9kb0RpcmVjdG9yeSgkbHN0 LCAkbHZsPTAsICRzdWI9MCwgJG1hdGNoPSIiLCAkZGxtPSIsIiwgJGN0cj0wKSB7DQoJbGlz dCgkZGlyaW5jLCAkZGlyZXhjKSA9IHNtZF9kb0xpc3QoJGxzdCwgZmFsc2UsICRzdWIsIGZh bHNlLCAkZGxtKTsNCglsaXN0KCRtYXRjaGluYywgJG1hdGNoZXhjKSA9IHNtZF9kb0xpc3Qo JG1hdGNoLCBmYWxzZSwgJycsIGZhbHNlLCAkZGxtKTsNCgkkbWF0Y2hpbmMgPSAiLioiIC4o KCRtYXRjaGluYykgPyAiKCIgLmltcGxvZGUoInwiLCRtYXRjaGluYykuIikrLioiIDogIiIp Ow0KCSRtYXRjaGV4YyA9ICgkbWF0Y2hleGMpID8gIi4qKCIgLmltcGxvZGUoInwiLCRtYXRj aGV4YykuIikrLioiIDogInNtZF9nbHJ5XyIubXRfcmFuZCgpOw0KDQoJJHN1YiA9IChlbXB0 eSgkc3ViKSkgPyAwIDogJHN1YjsNCgkkc3ViID0gKHN0cnRvbG93ZXIoJHN1Yik9PSJhbGwi KSA/IDk5OTk5IDogJHN1YjsNCgkkZmlsZUxpc3QgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRk aXJpbmMgYXMgJGRpcikgew0KCQlpZiAoJGhhbmRsZSA9IEBvcGVuZGlyKCRkaXIpKSB7DQoJ CQl3aGlsZSAoKCRmaWxlID0gQHJlYWRkaXIoJGhhbmRsZSkpICE9PSBmYWxzZSkgew0KCQkJ CSRmdWxscGF0aCA9ICRkaXIuRFMuJGZpbGU7DQoJCQkJaWYgKHByZWdfbWF0Y2goIi8iLiRt YXRjaGluYy4iLyIsICRmdWxscGF0aCkgJiYgIXByZWdfbWF0Y2goIi8iLiRtYXRjaGV4Yy4i LyIsICRmdWxscGF0aCkpIHsNCgkJCQkJaWYgKGlzX2RpcigkZnVsbHBhdGgpKSB7DQoJCQkJ CQlpZiAoKCRmaWxlID09ICIuIikgfHwgKCRmaWxlPT0gIi4uIikgfHwgKGluX2FycmF5KCRm aWxlLCAkZGlyZXhjKSkgfHwgKCRsdmwgPj0gJHN1YikpIHsNCgkJCQkJCQljb250aW51ZTsN CgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJLy8gUmVjdXJzZSB0aGUgc3ViZGlyLiBOb3RlIHRo YXQgdGhlICchJyBpcyB0ZW1wb3JhcmlseSBhZGRlZCBiYWNrIHRvIGVhY2ggZGlyZXhjIGl0 ZW0NCgkJCQkJCQkkdG1wID0gJGRpcmV4YzsgLy8gRG9uJ3Qgb3ZlcndyaXRlIHRoZSBvcmln aW5hbCBhcnJheQ0KCQkJCQkJCWFycmF5X3Vuc2hpZnQoJHRtcCwgJGZ1bGxwYXRoKTsNCgkJ CQkJCQkkc3ViRmlsZXMgPSBzbWRfZG9EaXJlY3RvcnkoaW1wbG9kZSgkZGxtLiIhIiwgJHRt cCksICRsdmwrMSwgJHN1YiwgJG1hdGNoLCAkZGxtLCAkY3RyKTsNCgkJCQkJCQkkZmlsZUxp c3QgPSBhcnJheV9tZXJnZSgkZmlsZUxpc3QsICRzdWJGaWxlcyk7DQoJCQkJCQkJJGN0ciAr PSBjb3VudCgkc3ViRmlsZXMpOw0KCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJfQ0KCQkJCQl9 IGVsc2Ugew0KCQkJCQkJJGZpbGVzdGF0ID0gc3RhdCgkZnVsbHBhdGgpOw0KCQkJCQkJJGlt Z3NpemUgPSBnZXRpbWFnZXNpemUoJGZ1bGxwYXRoKTsNCgkJCQkJCSRmaWxlTGlzdFskY3Ry XVsncGF0aCddID0gJGRpcjsNCgkJCQkJCSRmaWxlTGlzdFskY3RyXVsnbmFtZSddID0gYmFz ZW5hbWUoJGZ1bGxwYXRoKTsNCgkJCQkJCSRmaWxlTGlzdFskY3RyXVsnaWQnXSA9IHByZWdf cmVwbGFjZSgnL1wuLiskLycsICcnLCAkZmlsZSk7DQoJCQkJCQkkZmlsZUxpc3RbJGN0cl1b J2FsdCddID0gJyc7DQoJCQkJCQkkZmlsZUxpc3RbJGN0cl1bJ2NhcHRpb24nXSA9ICcnOw0K CQkJCQkJJHBhcnRzID0gZXhwbG9kZShEUywgJGRpcik7DQoJCQkJCQkkZmlsZUxpc3RbJGN0 cl1bJ2NhdGVnb3J5J10gPSAoY291bnQoJHBhcnRzKSA+IDEpID8gZW5kKCRwYXJ0cykgOiAn JzsNCgkJCQkJCSRmaWxlTGlzdFskY3RyXVsnYXV0aG9yJ10gPSBzdHJ2YWwoJGZpbGVzdGF0 Wyd1aWQnXSk7DQoJCQkJCQkkZmlsZUxpc3RbJGN0cl1bJ2RhdGUnXSA9IHN0cmZ0aW1lKCIl WS0lbS0lZCAlSDolTTolUyIsICRmaWxlc3RhdFsnY3RpbWUnXSk7DQoJCQkJCQkkcGFydHMg PSBleHBsb2RlKCIuIiwgJGZpbGUpOw0KCQkJCQkJJGZpbGVMaXN0WyRjdHJdWydleHQnXSA9 IChjb3VudCgkcGFydHMpID4gMSkgPyAiLiIuZW5kKCRwYXJ0cykgOiAnJzsNCgkJCQkJCSRm aWxlTGlzdFskY3RyXVsndyddID0gKGlzX2FycmF5KCRpbWdzaXplKSkgPyBzdHJ2YWwoJGlt Z3NpemVbMF0pIDogJyc7DQoJCQkJCQkkZmlsZUxpc3RbJGN0cl1bJ2gnXSA9IChpc19hcnJh eSgkaW1nc2l6ZSkpID8gc3RydmFsKCRpbWdzaXplWzFdKSA6ICcnOw0KCQkJCQl9DQoJCQkJ CSRjdHIrKzsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJaWYgKCRoYW5kbGUpIHsNCgkJCUBjbG9z ZWRpcigkaGFuZGxlKTsNCgkJfQ0KCX0NCglyZXR1cm4gJGZpbGVMaXN0Ow0KfQ0KDQppZiAo IWZ1bmN0aW9uX2V4aXN0cygic21kX3JlbW92ZVFTVmFyIikpIHsNCmZ1bmN0aW9uIHNtZF9y ZW1vdmVRU1ZhcigkdXJsLCAka2V5KSB7DQoJJHVybCA9IHByZWdfcmVwbGFjZSgnLyguKiko XD98JiknIC4gJGtleSAuICc9W14mXSs/KCYpKC4qKS9pJywgJyQxJDIkNCcsICR1cmwgLiAn JicpOw0KCSR1cmwgPSBzdWJzdHIoJHVybCwgMCwgLTEpOw0KCXJldHVybiAoJHVybCk7DQp9 DQp9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCJzbWRfYWRkUVNWYXIiKSkgew0KZnVuY3Rp b24gc21kX2FkZFFTVmFyKCR1cmwsICRrZXksICR2YWx1ZSkgew0KCSR1cmwgPSBzbWRfcmVt b3ZlUVNWYXIoJHVybCwgJGtleSk7DQoJaWYgKHN0cnBvcygkdXJsLCAnPycpID09PSBmYWxz ZSkgew0KCQlyZXR1cm4gKCR1cmwgLiAnPycgLiAka2V5IC4gJz0nIC4gJHZhbHVlKTsNCgl9 IGVsc2Ugew0KCQlyZXR1cm4gKCR1cmwgLiAnJicgLiAka2V5IC4gJz0nIC4gJHZhbHVlKTsN Cgl9DQp9DQp9DQoiO3M6NDoidHlwZSI7czoxOiIwIjtzOjQ6ImhlbHAiO3M6MzcxMTE6Igk8 cD48ZGl2IGlkPSJzbWRfaGVscCI+PC9wPgoKCTxoMSBpZD0idG9wIj5zbWRfZ2FsbGVyeTwv aDE+CgoJPGgyIGlkPSJjb250ZW50cyI+Q29udGVudHM8L2gyPgoKCTx1bD4KCQk8bGk+PGEg aHJlZj0iI2ZlYXR1cmVzIj5GZWF0dXJlczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjYXV0 aG9yIj5BdXRob3I8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2luc3RhbGwiPkluc3RhbGxh dGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiN1c2FnZSI+ VGFnIHVzYWdlPC9hPgoJPHVsPgoJCTxsaT48YSBocmVmPSIjc21kX2dhbGxlcnkiPnNtZF9n YWxsZXJ5PC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNnYWxsZXJ5X2Zvcm0iPkdhbGxlcnkg Zm9ybTwvYT4KCTx1bD4KCQk8bGk+PGEgaHJlZj0iI3JlcF9nYWxsZXJ5Ij5SZXBsYWNlbWVu dCB0YWdzPC9hPjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNwYWdpbmdfZm9y bSI+UGFnaW5nIGZvcm08L2E+Cgk8dWw+CgkJPGxpPjxhIGhyZWY9IiNyZXBfcGFnaW5nIj5S ZXBsYWNlbWVudCB0YWdzPC9hPjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNj b21ib3MiPkNvbWJvczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjY29sbGF0ZV9tb2RlIj5D b2xsYXRlIG1vZGU8L2E+PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2V4YW1w bGVzIj5FeGFtcGxlczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjY2hhbmdlbG9nIj5DaGFu Z2Vsb2c8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2NyZWRpdHMiPkNyZWRpdHM8L2E+PC9s aT4KCTwvdWw+CgoJPGgyIGlkPSJmZWF0dXJlcyI+RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8 bGk+U3VwcG9ydHMgYWxsIGN1cnJlbnQgYW5kIChwcm9iYWJseSkgZnV0dXJlIGdhbGxlcnkg c2NyaXB0cyBpbmNsdWRpbmcgdGh1bWJwb3AsIHJvbGxvdmVyLCB0b29sdGlwLCBsaWdodGJv eCwgbGl0ZWJveCwgc2xpbWJveCwgbW9vbmJveCwgdGhpY2tib3gsIHNsaWRlc2hvdywgZmFu Y3l6b29tLCBldGM8L2xpPgoJCTxsaT5QdWxsIGltYWdlcyBmcm9tIHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+VFhQPC9zcGFuPiBkYXRhYmFzZSAob3Igb3B0aW9uYWxseSBhIGxpc3Qgb2Yg ZGlyZWN0b3JpZXMpIHRoYXQgbWF0Y2ggY2F0ZWdvcmllcyBvciBJRHM8L2xpPgoJCTxsaT5V c2UgYXJ0aWNsZSBmaWVsZHMgdG8gaG9sZCBsaXN0cyBvZiBpbWFnZSBjYXRlZ29yaWVzL0lE cyBmb3IgYXJ0aWNsZS1zcGVjaWZpYyBnYWxsZXJpZXM8L2xpPgoJCTxsaT5NdWx0aS1sZXZl bCBzdWItY2F0ZWdvcnkgc3VwcG9ydDwvbGk+CgkJPGxpPkdhbGxlcnkgbGF5b3V0IGlzIGRl ZmluZWQgaW4gYSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBmb3JtPC9saT4KCQk8 bGk+RGlyZWN0LWFjY2VzcyBwYWdpbmF0aW9uIGlzIHN1cHBvcnRlZCBhbmQgdGhlIGxheW91 dCBvZiBwYWdpbmcgZmVhdHVyZXMgaXMgY29udHJvbGxlZCBieSBhIHNlY29uZCBmb3JtPC9s aT4KCQk8bGk+VXNlcyBhIHRhZy1yZXBsYWNlbWVudCBzeXN0ZW0gbGlrZSB0aGUgd2V0X2Zv cl9lYWNoX2ltYWdlIHBsdWdpbjwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iYXV0aG9yIj5BdXRo b3I8L2gyPgoKCTxwPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb21tZW50Rm9y bSI+U3RlZiBEYXdzb248L2E+LiBGb3Igb3RoZXIgc29mdHdhcmUgYnkgbWUsIG9yIHRvIG1h a2UgYSBkb25hdGlvbiwgc2VlIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20v c3ciPnNvZnR3YXJlIHBhZ2U8L2E+LjwvcD4KCgk8aDIgaWQ9Imluc3RhbGwiPkluc3RhbGxh dGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZy b20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy85NTcv c21kX2dhbGxlcnkiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRw Oi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29k ZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQ bHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBWaXNpdCB0aGUg PGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lk PTI2NDgyIj5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9u IHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4KCgk8cD5UbyBy ZW1vdmUgdGhlIHBsdWdpbiwgc2ltcGx5IGRlbGV0ZSBpdCBmcm9tIHRoZSBBZG1pbi0mZ3Q7 UGx1Z2lucyB0YWIuPC9wPgoKCTxoMiBpZD0idXNhZ2UiPlVzYWdlPC9oMj4KCgk8cD5Gb3Ig c29tZSBpZGVhcyBvbiB1c2FnZSBzY2VuYXJpb3MsIHNlZSB0aGUgPGEgaHJlZj0iI2V4YW1w bGVzIj5leGFtcGxlczwvYT4uPC9wPgoKCTxwPlRoZSBnZW5lcmFsIGlkZWEgaXMgdGhhdCB0 aGlzIHBsdWdpbiBhY3RzIGFzIGEgZmxleGlibGUgaW1hZ2UgZmlsdGVyOyBub3RoaW5nIG1v cmUuIFRoZSBwbHVnaW4gb3B0aW9ucyBnb3Zlcm4gd2hhdCBpbWFnZXMgYXJlIHB1bGxlZCBv dXQgb2YgdGhlIGRhdGFiYXNlIGFuZCB0aGV5IGFyZSBzb3J0ZWQgaW50byB3aGF0ZXZlciBv cmRlciB5b3UgbGlrZS48L3A+CgoJPHA+QWZ0ZXIgdGhhdCwgZWFjaCBpbWFnZSAmIzgyMTI7 IG9uZSBieSBvbmUgJiM4MjEyOyBoYXMgYWxsIGl0cyBhdHRyaWJ1dGVzIHBhc3NlZCB0byB0 aGUgPGNvZGU+Zm9ybTwvY29kZT4gb2YgeW91ciBjaG9pY2U7IHlvdSBzaW1wbHkgY2hvb3Nl IHRvIGRpc3BsYXkgd2hpY2hldmVyIGltYWdlIGF0dHJpYnV0ZXMgeW91IGxpa2UgaW4gdGhp cyBmb3JtLiBUaGlzIG1lYW5zIGFueSBpbWFnZSBhdHRyaWJ1dGVzIGNhbiBiZSAmIzgyMjA7 aW5qZWN0ZWQmIzgyMjE7IGRpcmVjdGx5IGludG8gYW55IG1hcmt1cDsgaXQgY291bGQgYmUg PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGFncywgaXQgY291bGQgYmUgY29udGVu dCwgaXQgY291bGQgYmUgamF2YXNjcmlwdCwgb3IgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwv c3Bhbj47IGFueXRoaW5nLiBQYWdpbmF0aW9uIHdvcmtzIHRoZSBzYW1lIHdheSwgYWxsb3dp bmcgeW91IHRvIHNwZWNpZnkgaG93IHVzZXJzIGNhbiBzdGVwIHRocm91Z2ggeW91ciBpbWFn ZSBnYWxsZXJpZXMuPC9wPgoKCTxwPlRoZXJlIGlzIGFsc28gYSBzcGVjaWFsIG1vZGUgY2Fs bGVkICYjODIyMDtjb2xsYXRlJiM4MjIxOyB0aGF0IGFsbG93cyB5b3UgdG8gY29sbGVjdCBh bGwgaW1hZ2UgYXR0cmlidXRlcyB0b2dldGhlciBpbnRvIGEgc2VyaWVzIG9mIGJpZyBsb25n IGxpc3RzIDxlbT53aXRob3V0PC9lbT4gY2FsbGluZyB0aGUgZm9ybSBldmVyeSB0aW1lLiBU aGUgZm9ybSBpcyB0aGVuIG9ubHkgcHJvY2Vzc2VkIG9uY2UgYXQgdGhlIGVuZC48L3A+CgoJ PHA+QmV0d2VlbiB0aGVzZSB0d28gbW9kZXMgeW91IDxlbT5zaG91bGQ8L2VtPiBiZSBhYmxl IHRvIHJlYWxpc2UgYW55IGdhbGxlcnlpbmcgc29sdXRpb247IG5vdyBhbmQgaW4gZnV0dXJl LjwvcD4KCgk8aDMgY2xhc3M9InRhZyAiIGlkPSJzbWRfZ2FsbGVyeSI+c21kX2dhbGxlcnk8 L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+UGxhY2Ugb25lIG9yIG1vcmUgc21kX2dh bGxlcnkgdGFncyBpbiBhbnkgYXJ0aWNsZSwgcGFnZSBvciBmb3JtLCBzdXBwbHkgYW55IG9m IHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0byBjb25maWd1cmUgaXQgYW5kIHVzZSBhIGZvcm0g dG8gZGVmaW5lIGhvdyB0aGUgZ2FsbGVyeSBpcyBkaXNwbGF5ZWQuPC9wPgoKCTxoNCBjbGFz cz0iYXR0cyAiIGlkPSJhdHRyaWJ1dGVzIj5BdHRyaWJ1dGVzPC9oND4KCgk8dWwgY2xhc3M9 ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmlkPC9zcGFuPiA6IGxpc3Qg b2YgaW1hZ2UgSURzIGZvciBpbmNsdXNpb24gaW4gdGhlIGdhbGxlcnkuIE1heSBiZSBpbnRl Z2VycyBvciByYW5nZXMsIGZvciBleGFtcGxlIDxjb2RlPmlkPSZxdW90OzUsIDQyLCA4LTEx JnF1b3Q7PC9jb2RlPiB3b3VsZCBncmFiIGltYWdlcyA1LCA4LCA5LCAxMCwgMTEgYW5kIDQy LiBVc2UgYW4gZXhjbGFtYXRpb24gbWFyayBpbiBmcm9udCBvZiBhIG51bWJlciBvciByYW5n ZSB0byBleGNsdWRlIHRob3NlIGltYWdlczwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRz Ij4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5jYXRlZ29yeTwvc3Bhbj4gOiBsaXN0 IG9mIGltYWdlIGNhdGVnb3JpZXMgZm9yIGluY2x1c2lvbiBpbiB0aGUgZ2FsbGVyeS4gWW91 IG1heSBzcGVjaWZ5IGZpeGVkLW5hbWUgY2F0ZWdvcmllcyAoZS5nLiAmIzgyMjA7YW5pbWFs cyYjODIyMTspIG9yIGEgcXVlc3Rpb24gbWFyayBmb2xsb3dlZCBieSBhbiBhcnRpY2xlIGZp ZWxkIG5hbWUuIGUuZy4gPGNvZGU+Y2F0ZWdvcnk9JnF1b3Q7YW5pbWFscywgYXJ0LT9pZCZx dW90OzwvY29kZT4gd291bGQgZ3JhYiBhbGwgaW1hZ2VzIGZyb20gdGhlIGNhdGVnb3JpZXMg Y2FsbGVkICYjODIyMDthbmltYWxzJiM4MjIxOyBhbmQgdGhlIGNhdGVnb3J5IGNhbGxlZCAm IzgyMjA7YXJ0LTQyJiM4MjIxOyAoYXNzdW1pbmcgdGhlIGN1cnJlbnQgYXJ0aWNsZSBoYXMg YW4gaWQgb2YgNDIgb2YgY291cnNlKS4gVXNlIGFuIGV4Y2xhbWF0aW9uIG1hcmsgdG8gZXhj bHVkZSB0aGUgZ2l2ZW4gY2F0ZWdvcnkgb3IgZmllbGQuIEZpZWxkcyBtYXkgdGhlbXNlbHZl cyBjb250YWluIGxpc3RzIG9mIGNhdGVnb3JpZXMuIFRoZSA/IGZpZWxkIG5hbWVzIG1heSBi ZSBjb21iaW5lZCAoZS5nLiA/cy0/YXJ0aWNsZV9pbWFnZSkgYnV0IGJlIGF3YXJlIHRoYXQg ZmllbGQgbmFtZXMgbWF5IGNvbnRhaW4gc3BhY2VzPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9 ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnN1YmxldmVsPC9zcGFuPiA6 IGFuIGludGVnZXIgdGhhdCBzcGVjaWZpZXMgaG93IG1hbnkgJiM4MjE2O2xldmVscyYjODIx NzsgZG93biB0byB0cmF2ZXJzZSBlYWNoIG1hdGNoaW5nIGNhdGVnb3J5LiBzdWJsZXZlbD0m IzgyMjA7MCYjODIyMTsgKHRoZSBkZWZhdWx0KSBpcyBvbmx5IHRoZSB0b3AtbGV2ZWw7IDEg PSB0b3AtbGV2ZWwgcGx1cyB0aGUgMXN0IHN1Yi1jYXQ7IDIgPSB0b3AtbGV2ZWwgcGx1cyB0 aGUgbmV4dCAyIHN1Yi1jYXRzLCBhbmQgc28gb24uIHN1YmxldmVsPSYjODIyMDthbGwmIzgy MjE7IGlzIGFsbCBzdWItY2F0ZWdvcmllczwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRz Ij4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5zb3J0PC9zcGFuPiA6IHJlLW9yZGVy IHRoZSBpbWFnZXMgYnkgPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+ICh0aGUgZGVmYXVsdCksIDxj b2RlPm5hbWU8L2NvZGU+LCA8Y29kZT5kYXRlPC9jb2RlPiwgPGNvZGU+aWQ8L2NvZGU+LCBm aWxlIDxjb2RlPmV4dDwvY29kZT5lbnNpb24sIDxjb2RlPmFsdDwvY29kZT4sIDxjb2RlPmNh cHRpb248L2NvZGU+LCA8Y29kZT5hdXRob3I8L2NvZGU+LCA8Y29kZT53aWR0aDwvY29kZT4s IDxjb2RlPmhlaWdodDwvY29kZT4sIDxjb2RlPmhhc3RodW1iPC9jb2RlPiBpbiBlaXRoZXIg PGNvZGU+YXNjPC9jb2RlPmVuZGluZyBvciA8Y29kZT5kZXNjPC9jb2RlPmVuZGluZyBvcmRl ci4gVHdvIHNwZWNpYWwgY2FzZXMgZXhpc3Q6IDxjb2RlPmZpeGVkPC9jb2RlPiBtYWludGFp bnMgdGhlIG9yZGVyIHlvdSBzcGVjaWZpZWQgaW4gdGhlIGlkIGF0dHJpYnV0ZSwgd2hpbGUg PGNvZGU+cmFuZG9tPC9jb2RlPiBzaHVmZmxlcyB0aGUgb3JkZXIuIE5vdGUgdGhhdCBpZiA8 Y29kZT5yYW5kb208L2NvZGU+IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxp c3QsIHJhbmRvbSBpbWFnZXMgd2lsbCBiZSBwdWxsZWQgZnJvbSB0aGUgZGF0YWJhc2UgYW5k IHRoZXkgd2lsbCB0aGVuIGJlIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyIGxpc3Rl ZCBhZnRlciBpdC4gSWYgPGNvZGU+cmFuZG9tPC9jb2RlPiBhcHBlYXJzIGFueXdoZXJlIGVs c2UgaW4gdGhlIGxpc3QsIGFueSBzb3J0IGl0ZW1zIGJlZm9yZSBpdCB3aWxsIGRldGVybWlu ZSB0aGUgb3JkZXIgb2YgZGF0YSBwdWxsZWQgZnJvbSB0aGUgZGF0YWJhc2UsIGFuZCB0aGUg cmVzdWx0cyB3aWxsIHRoZW4gYmUgb3JkZXJlZCByYW5kb21seSAoaW4gdGhhdCBjYXNlLCBh bnkgaXRlbXMgbGlzdGVkIGFmdGVyIHJhbmRvbSB3aWxsIGJlIGlnbm9yZWQuIDxjb2RlPmZp eGVkPC9jb2RlPiBpcywgaG93ZXZlciwgc3RpbGwgaG9ub3VyZWQpPC9saT4KCTwvdWw+Cgk8 dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmxpbWl0PC9z cGFuPiA6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbWFnZXMgdG8gc2hvdyA8ZW0+cGVyIHBh Z2U8L2VtPi4gMCBvciBvbWl0dGVkID0gdW5saW1pdGVkPC9saT4KCTwvdWw+Cgk8dWwgY2xh c3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPm1heGxpbWl0PC9zcGFu PiA6IHRoZSBhYnNvbHV0ZSBtYXhpbXVtIG51bWJlciBvZiB0aHVtYm5haWxzIHRvIHB1bGwg ZnJvbSB0aGUgZGF0YWJhc2UuIDAgb3Igb21pdHRlZCA9IHVubGltaXRlZDwvbGk+Cgk8L3Vs PgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5vZmZz ZXQ8L3NwYW4+IDogc2tpcCB0aGlzIG1hbnkgaW1hZ2VzIGFuZCBzdGFydCBjb3VudGluZyB0 aGVyZWFmdGVyPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBj bGFzcz0iYXR0LW5hbWUiPnRodW1ibGltaXQ8L3NwYW4+IDogdGhlIG1heGltdW0gbnVtYmVy IG9mIHRodW1ibmFpbHMgdG8gc2hvdy4gMCBvciBvbWl0dGVkID0gYWxsIHRodW1icy4gTm90 ZSB0aGF0IHRoaXMgZGlmZmVycyBmcm9tIGxpbWl0OyB5b3UgY2FuIGxhdW5jaCBhIDIwLWlt YWdlIGdhbGxlcnkgYnV0IG9ubHkgc2hvdyAxIHRodW1ibmFpbCBvbiB0aGUgcGFnZTwvbGk+ Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1l Ij50aHVtYm9mZnNldDwvc3Bhbj4gOiBza2lwIHRoaXMgbWFueSB0aHVtYnMgYmVmb3JlIGRp c3BsYXlpbmcgPGNvZGU+dGh1bWJsaW1pdDwvY29kZT4gdGh1bWJuYWlsczwvbGk+Cgk8L3Vs PgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj50ZXh0 PC9zcGFuPiA6IGRpc3BsYXkgdGhlIGdpdmVuIHRleHQgaW5zdGVhZCBvZiB0aHVtYm5haWxz LiBUaGUgdGV4dCBjYW4gY29udGFpbiA/IGFydGljbGUgZmllbGRzIGxpa2UgPGNvZGU+Y2F0 ZWdvcnk8L2NvZGU+PC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3Bh biBjbGFzcz0iYXR0LW5hbWUiPnRodW1iPC9zcGFuPiA6IGRpc3BsYXlzIHRoZSBmdWxsc2l6 ZSBwaWMgYXMgYSB0aHVtYm5haWwgaW5zdGVhZCBvZiBhIGZ1bGxzaXplIHBpYyghKTwvbGk+ Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1l Ij50aHVtYnNpemU8L3NwYW4+IDogdGFrZXMgb25lIG9yIHR3byBjb21tYS1zZXBhcmF0ZWQg cGFyYW1ldGVycyB0byBzcGVjaWZ5IHdpZHRoIGFuZC9vciBoZWlnaHQgb2YgYWxsIHlvdXIg Z2FsbGVyeSB0aHVtYm5haWxzLiBUaGUgZGVmYXVsdCBpcyBpbiBwaXhlbHMgaWYgeW91IGRv biYjODIxNzt0IHNwZWNpZnkgdW5pdHMuIE1pc3Npbmcgb3V0IG9uZSBvciB0aGUgb3RoZXIg cGFyYW1ldGVyIChpLmUuIGhhdmluZyBhbiAmIzgyMjA7ZW1wdHkmIzgyMjE7IHBhcmFtZXRl ciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNvbW1hKSB3aWxsIG9ubHkgc2V0IG9uZSBvZiB0aGUg ZGltZW5zaW9ucy4gVXNpbmcgb25seSBvbmUgdmFsdWUsIGJvdGggd2lkdGggYW5kIGhlaWdo dCB3aWxsIGJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNz PSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5mb3JtPC9zcGFuPiA6IHRo ZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBmb3JtIHVzZWQgdG8gbGF5b3V0IHlv dXIgbWF0Y2hpbmcgaW1hZ2VzPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxs aT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnBhZ2Vmb3JtPC9zcGFuPiA6IHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBmb3JtIHVzZWQgdG8gc3BlY2lmeSB0aGUgbGF5b3V0 IG9mIHlvdXIgcGFnaW5nIG5hdmlnYXRpb248L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0 cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+Z2FsbGVyeWlkPC9zcGFuPiA6IHVu ZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzIHlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0aGlzLiBF YWNoIGdhbGxlcnkgaXMgYXNzaWduZWQgYSB1bmlxdWUgSUQgYmFzZWQgb24gdGhlIGF0dHJp YnV0ZXMgeW91IHN1cHBseS4gSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgdHdvIGlkZW50 aWNhbCBJRHMgYXJlIGdlbmVyYXRlZCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBJRCBmb3IgYSBn YWxsZXJ5IHdpdGggdGhpcyBhdHRyaWJ1dGUuIFdoYXQgdGhlIHBsdWdpbiBkb2VzIChpbnRl cm5hbGx5KSBpcyBnZW5lcmF0ZSBhIDMyLWNoYXJhY3RlciBoYXNoIHN0cmluZyBmb3IgZWFj aCB0YWcsIHRoZW4gcGlja3MgYSA0LWNoYXIgY29kZSBmcm9tIHRoaXMgc3RyaW5nIChpdCB0 YWtlcyBldmVyeSA2dGggY2hhcmFjdGVyIGJ5IGRlZmF1bHQpLiBZb3UgY2FuIHN1cHBseSBh IHVuaXF1ZSBmaXhlZCBzdHJpbmcgKGUuZy4gPGNvZGU+Z2FsbGVyeWlkPSZxdW90O1RoZUdh bGxlcnkyJnF1b3Q7PC9jb2RlPikgb3IgZ2l2ZSBpdCBhIHF1ZXN0aW9uIG1hcmsgYW5kIDIg bnVtYmVycyBzZXBhcmF0ZWQgYnkgYSBjb2xvbiAoZS5nLiA8c3ViPmdhbGxlcnlpZD0mIzgy MjE7PzU6NCYjODIyMTs8L3N1Yj4pLiBUaGUgZmlyc3QgbnVtYmVyIGlzIHRoZSBsZW5ndGgg b2YgdGhlIGZpbmFsIHN0cmluZyB0byBnZW5lcmF0ZSwgdGhlIHNlY29uZCBudW1iZXIgaXMg aG93IG1hbnkgY2hhcmFjdGVycyB0byBza2lwIG92ZXIgaW4gdGhlIGZ1bGwgMzItY2hhciBz dHJpbmcgZWFjaCB0aW1lIGl0IHBpY2tzIG9uZS4gU28gaW4gdGhpcyBjYXNlLCBpdCBnZW5l cmF0ZXMgYSA1LWNoYXJhY3RlciBzdHJpbmcgZnJvbSB0aGUgY2hhcmFjdGVycyBpdCBmaW5k cyBhdCBwb3NpdGlvbnMgMSw1LDksMTMsIGFuZCAxNy4gSWYgeW91IG9taXQgdGhlIDJuZCBu dW1iZXIgKGUuZy4gPGNvZGU+Z2FsbGVyeWlkPSZxdW90Oz82JnF1b3Q7PC9jb2RlPikgaXQg d2lsbCBhc3N1bWUgaXQmIzgyMTc7cyBhbiBpbmNyZW1lbnQgb2YgMSwgc28gaW4gdGhpcyBj YXNlIGl0JiM4MjE3O2xsIHVzZSB0aGUgMXN0IDYgY2hhcmFjdGVyczwvbGk+Cgk8L3VsPgoJ PHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj53cmFwdGFn PC9zcGFuPiA6IHRoZSAoWClIVE1MIHRhZyB0byBzdXJyb3VuZCB0aGUgZW50aXJlIGdhbGxl cnkuIFNwZWNpZnkgaXQgd2l0aG91dCBhbmdsZSBicmFja2V0cywgZS5nLiA8Y29kZT53cmFw dGFnPSZxdW90O2RpdiZxdW90OzwvY29kZT4uIERlZmF1bHQgaXMgdW5zZXQgKGkuZS4gbm8g dGFnKTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0dC1uYW1lIj5icmVhazwvc3Bhbj4gOiB0aGUgKFgpSFRNTCB0YWcgdG8gc3Vycm91bmQg ZWFjaCB0aHVtYm5haWwuIERlZmF1bHQgaXMgdW5zZXQgKGkuZS4gbm8gdGFncyk8L2xpPgoJ PC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ Y2xhc3M8L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNz IG5hbWUgdG8gYXBwbHkgdG8gdGhlIGVudGlyZSBnYWxsZXJ5LiBEZWZhdWx0IGlzIHVuc2V0 IChpLmUuIG5vIGNsYXNzKTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5uYXZ3cmFwdGFnPC9zcGFuPiA6IHRoZSAoWClIVE1M IHRhZyB0byBzdXJyb3VuZCB0aGUgZW50aXJlIDxjb2RlPnBhZ2Vmb3JtPC9jb2RlPi4gU3Bl Y2lmeSBpdCB3aXRob3V0IGFuZ2xlIGJyYWNrZXRzLCBlLmcuIDxjb2RlPndyYXB0YWc9JnF1 b3Q7ZGl2JnF1b3Q7PC9jb2RlPi4gRGVmYXVsdCBpcyAmIzgyMjA7dWwmIzgyMjE7PC9saT4K CTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUi Pm5hdmJyZWFrPC9zcGFuPiA6IHRoZSAoWClIVE1MIHRhZyB0byBzdXJyb3VuZCBlYWNoIGl0 ZW0gd2l0aGluIHRoZSA8Y29kZT5wYWdlZm9ybTwvY29kZT4uIERlZmF1bHQgaXMgJiM4MjIw O2xpJiM4MjIxOzwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0dC1uYW1lIj5uYXZjbGFzczwvc3Bhbj4gOiB0aGUgPHNwYW4gY2xhc3M9ImNh cHMiPkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSB0byBhcHBseSB0byB0aGUgbmF2aWdhdGlvbiB3 cmFwdGFnLiBEZWZhdWx0IGlzICYjODIyMDtzbWRfZ2FsbGVyeV9uYXYmIzgyMjE7PC9saT4K CTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUi PmRlbGltPC9zcGFuPiA6IGNoYW5nZSB0aGUgZGVsaW1pdGVyIGZvciBzcGVjaWZ5aW5nIGF0 dHJpYnV0ZSBsaXN0cy4gRGVmYXVsdCBpcyBjb21tYSAoLCk8L2xpPgoJPC91bD4KCTx1bCBj bGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+cGFyYW1kZWxpbTwv c3Bhbj4gOiBjaGFuZ2UgdGhlIGRlbGltaXRlciBmb3Igc3BlY2lmeWluZyBpbnRlci1wYXJh bWV0ZXIgYXR0cmlidXRlcy4gRGVmYXVsdCBpcyBjb2xvbiAoOik8L2xpPgoJPC91bD4KCTx1 bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+Y29sbGF0ZTwv c3Bhbj4gOiBzd2l0Y2ggdGhlIHBsdWdpbiBpbnRvIDxhIGhyZWY9IiNjb2xsYXRlX21vZGUi PmNvbGxhdGUgbW9kZTwvYT48L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+Y29tYm88L3NwYW4+IDogc3BlY2lmeSB5b3VyIG93 biA8YSBocmVmPSIjcmVwX2dhbGxlcnkiPnJlcGxhY2VtZW50IHRhZ3M8L2E+PC9saT4KCTwv dWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmRp cmVjdG9yeTwvc3Bhbj4gOiByZWFkIGltYWdlcyBmcm9tIGEgbGlzdCBvZiBkaXJlY3Rvcmll cyAob3IgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zKSBpbnN0ZWFkIG9mIHRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBkYXRhYmFzZTwvbGk+Cgk8L3VsPgoJPHVs IGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5tYXRjaDwvc3Bh bj4gOiBsaW1pdCB0aGUgaW1hZ2VzIGFuZCBkaXJlY3RvcmllcyBjaG9zZW4gaW4gZGlyZWN0 b3J5IG1vZGUuIEdpdmUgaXQgYSBsaXN0IG9mIHdvcmRzIHRvIGluY2x1ZGUgb3IgIWV4Y2x1 ZGUgYW5kIGFueSBtYXRjaGluZyBmaWxlcyBvciBkaXJlY3RvcmllcyB3aWxsIGJlIGNob3Nl biBvciBpZ25vcmVkLCByZXNwZWN0aXZlbHkuIFRoZSBtYXRjaCB0ZXJtcyBhcmUgYXV0b21h dGljYWxseSBhc3N1bWVkIHRvIGJlICYjODIyMDt3aWxkJiM4MjIxOyBzbyBhbnkgcGFydCBv ZiB0aGUgZmlsZSBuYW1lIC8gcGF0aCB3aWxsIHRyaWdnZXIgdGhlIG1hdGNoPC9saT4KCTwv dWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmRl YnVnPC9zcGFuPiA6IHR1cm4gb24gZGlhZ25vc3RpY3MuIFZhcnlpbmcgbGV2ZWxzIG9mIHZl cmJvc2l0eSBmcm9tIDAgKG5vbmUpIHRvIDQgKGEgbG90KTwvbGk+Cgk8L3VsPgoKCTxoMyBp ZD0iZ2FsbGVyeV9mb3JtIj5HYWxsZXJ5IGZvcm08L2gzPgoKCTxwPlRoZSA8Y29kZT5mb3Jt PC9jb2RlPiBpcyB3aGVyZSB5b3UgZGVzaWduIHdoYXQgZXZlcnkgdGh1bWJuYWlsIHdpbGwg bG9vayBsaWtlIG9uIHRoZSBzY3JlZW4uIFlvdSBkbyB0aGlzIGJ5IHNwZWNpZnlpbmcgbWFy a3VwIG9yIHRhZ3MgYXMgbm9ybWFsLiBJbiBrZXkgcGxhY2VzIHdoZXJlIHlvdSB3YW50LCBz YXksIGFuIGltYWdlIElEIG9yIGFsdCB0YWcgb3IgaW1hZ2Ugd2lkdGggdG8gYmUgZGlzcGxh eWVkLCB5b3Ugc3BlY2lmeSBzcGVjaWFsIDxhIGhyZWY9IiNyZXBfZ2FsbGVyeSI+cmVwbGFj ZW1lbnQgdGFnczwvYT4uIFRoZXNlIGFyZSByZXBsYWNlZCBmb3IgZWFjaCBpbWFnZSBpbiB0 dXJuLCB0aHVzIGJ1aWxkaW5nIHVwIHRoZSBnYWxsZXJ5LjwvcD4KCgk8cD5JbiBjb2xsYXRl IG1vZGUsIHRoZSBpbWFnZSBkZXRhaWxzIGFyZSBpbnN0ZWFkIG1hZGUgaW50byBsaXN0cy4g VGhlIGZvcm0gaXMgb25seSBwcm9jZXNzZWQgb25jZSBhbmQgdGhlIHJlcGxhY2VtZW50IHRh Z3Mgb3V0cHV0IHRoZSBlbnRpcmUgbGlzdC48L3A+CgoJPGg0IGNsYXNzPSJhdHRzICIgaWQ9 InJlcF9nYWxsZXJ5Ij5SZXBsYWNlbWVudCB0YWdzOiBnYWxsZXJ5PC9oND4KCgk8dWwgY2xh c3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntpZH08L3NwYW4+IDog dGhlIGltYWdlIElEIChvciwgaW4gZGlyZWN0b3J5IG1vZGUsIHRoZSBmaWxlbmFtZSB3aXRo b3V0IGl0cyBleHRlbnNpb24pPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxs aT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntuYW1lfTwvc3Bhbj4gOiB0aGUgZnVsbCBpbWFn ZSBmaWxlbmFtZSBhcyBkZWZpbmVkIGluIHRoZSBkYXRhYmFzZSwgdXN1YWxseSBpbmNsdWRp bmcgZXh0ZW5zaW9uPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3Bh biBjbGFzcz0iYXR0LW5hbWUiPntleHR9PC9zcGFuPiA6IHRoZSBmaWxlIGV4dGVuc2lvbiBp bmNsdWRpbmcgcGVyaW9kPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntjYXRlZ29yeX08L3NwYW4+IDogdGhlIGltYWdlIGNh dGVnb3J5IG5hbWU8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdHQtbmFtZSI+e2NhdGVnb3J5X3RpdGxlfTwvc3Bhbj4gOiB0aGUgaW1hZ2Ug Y2F0ZWdvcnkgdGl0bGU8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdHQtbmFtZSI+e2F1dGhvcn08L3NwYW4+IDogd2hvIHVwbG9hZGVkIHRo ZSBpbWFnZTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0dC1uYW1lIj57dXJsfTwvc3Bhbj4gOiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVS TDwvc3Bhbj4gb2YgdGhlIGZ1bGxzaXplIGltYWdlPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9 ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnt0aHVtYnVybH08L3NwYW4+ IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IG9mIHRoZSB0aHVtYm5haWw8 L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQt bmFtZSI+e2ltYWdlcGF0aH08L3NwYW4+IDogdGhlIGRpcmVjdG9yeSB0aGUgaW1hZ2UgaXMg aW48L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dHQtbmFtZSI+e2ltYWdlZGVmfTwvc3Bhbj4gOiBqdXN0IHRoZSBmaWxlIG5hbWUgcGFydCBv ZiB0aGUgaW1hZ2UgKGUuZy4gNS5qcGcpPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMi PgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnt0aHVtYmRlZn08L3NwYW4+IDoganVz dCB0aGUgZmlsZSBuYW1lIHBhcnQgb2YgdGhlIHRodW1ibmFpbCAoZS5nLiA1dC5qcGcpPC9s aT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5h bWUiPnthbHR9PC9zcGFuPiA6IHRoZSBhbHQgdGV4dDwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNz PSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57dGl0bGV9PC9zcGFuPiA6 IHRoZSBjYXB0aW9uPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3Bh biBjbGFzcz0iYXR0LW5hbWUiPntkYXRlfTwvc3Bhbj4gOiBpbWFnZSB1cGxvYWQgZGF0ZTwv bGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1u YW1lIj57d2lkdGh9PC9zcGFuPiA6IGltYWdlIHdpZHRoPC9saT4KCTwvdWw+Cgk8dWwgY2xh c3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntoZWlnaHR9PC9zcGFu PiA6IGltYWdlIGhlaWdodDwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57dGh1bWJ3aWR0aH08L3NwYW4+IDogdGh1bWJuYWls IHdpZHRoIChpZiBkZWZpbmVkOiBzZWUgdGhlIDxjb2RlPnRodW1ic2l6ZTwvY29kZT4gYXR0 cmlidXRlKTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0dC1uYW1lIj57dGh1bWhlaWdodH08L3NwYW4+IDogdGh1bWJuYWlsIGhlaWdodCAo ZGl0dG8pPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFz cz0iYXR0LW5hbWUiPnt0aHVtYnd1bml0c308L3NwYW4+IDogdGh1bWJuYWlsIHdpZHRoIHVu aXRzIChlLmcuIHB4LCAlLCBlbSBldGMuIE9ubHkgaWYgZGVmaW5lZCB2aWEgPGNvZGU+dGh1 bWJzaXplPC9jb2RlPik8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdHQtbmFtZSI+e3RodW1iaHVuaXRzfTwvc3Bhbj4gOiB0aHVtYm5haWwg aGVpZ2h0IHVuaXRzIChkaXR0byk8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e2hhc3RodW1ifTwvc3Bhbj4gOiBpZiB0aGUg aW1hZ2UgaGFzIGFuIGFzc29jaWF0ZWQgdGh1bWJuYWlsIG9yIG5vdCAocHJvYmFibHkgbm90 IG11Y2ggdXNlKTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0dC1uYW1lIj57Z2FsbGVyeWlkfTwvc3Bhbj4gOiB0aGUgZ2FsbGVyeSBpZCB5 b3Ugb3IgdGhlIHBsdWdpbiBhc3NpZ25lZDwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRz Ij4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57b2JqZWN0fTwvc3Bhbj4gOiBhIHNw ZWNpYWwgaXRlbSBjb250YWluaW5nIGVpdGhlciB0aGUgPGNvZGU+dGV4dDwvY29kZT4gT1Ig dGhlIGltYWdlIHRhZyBvZiB0aGUgY29ycmVzcG9uZGluZyB0aHVtYm5haWwgYnV0IG9ubHkg aWYgPGNvZGU+dGh1bWJsaW1pdDwvY29kZT4gYWxsb3dzIGl0LiBlLmcuIGlmIDxjb2RlPnRo dW1ibGltaXQ9JnF1b3Q7MSZxdW90OzwvY29kZT4gdGhpcyB2YXJpYWJsZSBpcyBvbmx5IHNl dCBmb3IgdGhlIGZpcnN0IHRodW1ibmFpbCBpbiB0aGUgbGlzdC4gRXZlcnkgb3RoZXIgdGlt ZSBpdCBpcyBlbXB0eTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0dC1uYW1lIj57Y291bnRlcn08L3NwYW4+IDogYW4gaW1hZ2UgY291bnRl ciwgc3RhcnRpbmcgZnJvbSAxIGFuZCBpbmNyZW1lbnRpbmcgZWFjaCB0aW1lPC9saT4KCTwv dWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntp bmRleH08L3NwYW4+IDogYW4gaW5kZXggY291bnRlciAoemVyby1iYXNlZCAmIzgyMTI7IHBy b2JhYmx5IG5vdCBtdWNoIHVzZSk8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e3RvdGFsaW1hZ2VzfTwvc3Bhbj4gOiB0aGUg dG90YWwgbnVtYmVyIG9mIGltYWdlcyBtYXRjaGVkPC9saT4KCTwvdWw+CgoJPHA+SWYgdGhv c2UgYXJlbiYjODIxNzt0IGVub3VnaCwgeW91IGNhbiA8YSBocmVmPSIjY29tYm9zIj5jcmVh dGUgeW91ciBvd248L2E+IGJ5IGdyb3VwaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgYWJvdmUs IG9wdGlvbmFsbHkgd2l0aCBhcnRpY2xlIHZhcmlhYmxlcyBzdWNoIGFzIDxjb2RlPj9leGNl cnB0PC9jb2RlPiwgPGNvZGU+P2tleXdvcmRzPC9jb2RlPiwgPGNvZGU+P2FydGljbGVfaW1h Z2U8L2NvZGU+LCBldGMuPC9wPgoKCTxoMyBpZD0icGFnaW5nX2Zvcm0iPlBhZ2luZyBmb3Jt PC9oMz4KCgk8cD5XaGVuIGFsbCB0aGUgdGh1bWJuYWlscyBoYXZlIGJlZW4gcHJvY2Vzc2Vk LCB0aGUgPGNvZGU+cGFnZWZvcm08L2NvZGU+IGlzIHByb2Nlc3NlZCBhbmQgZGlzcGxheWVk LiBJbiBhIHNpbWlsYXIgbWFubmVyIHRvIHRoZSB3YXkgdGhlIDxhIGhyZWY9IiNnYWxsZXJ5 X2Zvcm0iPmdhbGxlcnkgZm9ybTwvYT4gd29ya3MsIGEgc2VyaWVzIG9mIDxhIGhyZWY9IiNy ZXBfcGFnaW5nIj5SZXBsYWNlbWVudCBUYWdzPC9hPiBnb3Zlcm4gd2hpY2ggZ2FsbGVyeSBu YXZpZ2F0aW9uIGl0ZW1zIGFyZSBhdmFpbGFibGUuIEZvciBleGFtcGxlIHlvdSBjb3VsZCBj aG9vc2UgdG8gb25seSBzaG93IG5leHQvcHJldi4gT3IgcGVyaGFwcyAxc3QgcGFnZS9sYXN0 IHBhZ2UuIE9yIG51bWJlcmVkIHBhZ2UgbGlua3MuPC9wPgoKCTxoNCBjbGFzcz0iYXR0cyAi IGlkPSJyZXBfcGFnaW5nIj5SZXBsYWNlbWVudCB0YWdzOiBwYWdpbmc8L2g0PgoKCTx1bCBj bGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e25hdmZpcnN0fTwv c3Bhbj4gOiB0aGUgZmlyc3QgcGFnZSAoZGVmYXVsdCBsYWJlbDogJiM4MjIwO0ZpcnN0JiM4 MjIxOyk8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdHQtbmFtZSI+e25hdnByZXZ9PC9zcGFuPiA6IHRoZSBwcmV2aW91cyBwYWdlIChkZWZh dWx0IGxhYmVsOiAmIzgyMjA7JmxhcXVvOyYjODIyMTspPC9saT4KCTwvdWw+Cgk8dWwgY2xh c3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntuYXZlYXJsaWVyfTwv c3Bhbj4gOiBhbnkgcGFnZSBudW1iZXJzIGJlZm9yZSB0aGUgY3VycmVudCBwYWdlPC9saT4K CTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUi PntuYXZ0aGlzdXJsfTwvc3Bhbj4gOiB0aGUgY3VycmVudCBwYWdlIHdpdGggYSA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBsaW5rIHRvIGl0c2VsZjwvbGk+Cgk8L3VsPgoJPHVs IGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57bmF2dGhpc308 L3NwYW4+IDogdGhlIGN1cnJlbnQgcGFnZSB3aXRob3V0IGEgPHNwYW4gY2xhc3M9ImNhcHMi PlVSTDwvc3Bhbj4gbGluazwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57bmF2bGF0ZXJ9PC9zcGFuPiA6IGFueSBwYWdlIG51 bWJlcnMgYWZ0ZXIgdGhlIGN1cnJlbnQgcGFnZTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJh dHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57bmF2bmV4dH08L3NwYW4+IDog dGhlIHByZXZpb3VzIHBhZ2UgKGRlZmF1bHQgbGFiZWw6ICYjODIyMDsmcmFxdW87JiM4MjIx Oyk8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dHQtbmFtZSI+e25hdmxhc3R9PC9zcGFuPiA6IHRoZSBsYXN0IHBhZ2UgKGRlZmF1bHQgbGFi ZWw6ICYjODIyMDtMYXN0JiM4MjIxOyk8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e3RvdGFsaW1hZ2VzfTwvc3Bhbj4gOiB0 aGUgdG90YWwgbnVtYmVyIG9mIGltYWdlcyBtYXRjaGVkPC9saT4KCTwvdWw+Cgk8dWwgY2xh c3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnt0b3RhbHBhZ2VzfTwv c3Bhbj4gOiB0aGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzIGluIHRoaXMgY29sbGVjdGlvbjwv bGk+Cgk8L3VsPgoKCTxwPlRoZSBjdXJyZW50IHBhZ2UgaGFzIGEgZml4ZWQgY2xhc3Mgb2Yg JiM4MjE2O2N1cnJlbnQmIzgyMTc7IGFuZCBlYWNoIGl0ZW0gaXMsIGJ5IGRlZmF1bHQsIGEg PGNvZGU+Jmx0O2xpJmd0OzwvY29kZT4gZm9yIGVhc3kgc3R5bGluZy4gVG8gYXZvaWQgYSB6 aWxsaW9uIG9wdGlvbnMsIGN1c3RvbSBsYWJlbHMgYXJlIGRlZmluZWQgZGlyZWN0bHkgaW4g dGhlIGZvcm0gaXRzZWxmOjwvcD4KCgk8cD48Y29kZT57bmF2Zmlyc3Q6MXN0fTwvY29kZT48 L3A+CgoJPHA+V291bGQgbGFiZWwgdGhlIGxpbmsgdGhhdCB0YWtlcyB1c2VycyB0byB0aGUg Zmlyc3QgcGFnZSBvZiB0aGUgZ2FsbGVyeSBhcyAmIzgyMjA7MXN0JiM4MjIxOy4gVGhpcyBz eW50YXggYWxsb3dzIHlvdSB0byB1c2UgPHNwYW4gY2xhc3M9ImNhcHMiPk1MUDwvc3Bhbj4g c25pcHBldHMsIGUuZy46PC9wPgoKCTxwPjxjb2RlPntuYXZmaXJzdDojI2ZpcnN0TGFiZWwj I308L2NvZGU+PC9wPgoKCTxwPllvdSBjYW4gb3ZlcnJpZGUgdGhlIG51bWJlciBvZiBpdGVt cyBkaXNwbGF5ZWQgYnkgbmF2ZWFybGllciBhbmQgbmF2bGF0ZXIgYnkgc3BlY2lmeWluZyBh IGNvbG9uIGFuZCBhIG51bWJlci4gU28gdG8gb25seSBzaG93IDIgaXRlbXMgdG8gdGhlIGxl ZnQgb2YgdGhlIGN1cnJlbnQgcGFnZSBhbmQgMyBpdGVtcyB0byB0aGUgcmlnaHQsIHVzZSA8 Y29kZT57bmF2ZWFybGllcjoyfSB7bmF2bGF0ZXI6M308L2NvZGU+IGluIHlvdXIgZm9ybS4g Q3VycmVudGx5IDxjb2RlPntuYXZlYXJsaWVyfTwvY29kZT4gYW5kIDxjb2RlPntuYXZsYXRl cn08L2NvZGU+IG9ubHkgZGlzcGxheSBhcmFiaWMgbnVtZXJhbHMuIEFueSBpZGVhcyBvbiBo b3cgdG8gb2ZmZXIgb3RoZXIgY2hhcmFjdGVyIHNldHMgZ3JlYXRseSBhcHByZWNpYXRlZC48 L3A+CgoJPGgzIGlkPSJjb21ib3MiPkNvbWJvczwvaDM+CgoJPHA+SWYgdGhlIGJ1aWx0LWlu IDxhIGhyZWY9IiNyZXBfZ2FsbGVyeSI+cmVwbGFjZW1lbnQgdGFnczwvYT4gYXJlbiYjODIx Nzt0IGVub3VnaCBmb3IgeW91ciBuZWVkcyBvciB5b3UgZmluZCB5b3Vyc2VsZiByZXBlYXRp bmcgdGhlIHNhbWUgY29tYmluYXRpb24gYW5kIHdhbnQgdG8gc2F2ZSB5b3Vyc2VsZiBzb21l IHR5cGluZywgeW91IGNhbiBkZWZpbmUgeW91ciBvd24gcmVwbGFjZW1lbnQgdGFncy4gVGhl IHN5bnRheCBpczo8L3A+CgoJPHA+PGNvZGU+Y29tYm89JnF1b3Q7bmV3dGFnMTpkZWZpbml0 aW9uLCBuZXd0YWcyOmRlZmluaXRpb24sIC4uLiZxdW90OzwvY29kZT48L3A+CgoJPHA+JiM4 MjE2O2RlZmluaXRpb24mIzgyMTc7IGNhbiBiZSBhbnkgZml4ZWQgdGV4dCwgYW55IGV4aXN0 aW5nIHJlcGxhY2VtZW50IHRhZywgb3IgYW55IGFydGljbGUgdmFyaWFibGUgc28geW91IGNh biBnZXQgcmVhbGx5IHdpbGQgaGVyZTo8L3A+CgoJPHA+PGNvZGU+Y29tYm89JnF1b3Q7aW1n aW46Zm91bmQgaW4gP3MgW3RhZ2dlZCB3aXRoID9rZXl3b3Jkcy4gUGhvdG8gYnkge2F1dGhv cn1dJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD5zbyBub3cgPGNvZGU+e2ltZ2lufTwvY29kZT4g aXMgYXZhaWxhYmxlIHRvIHlvdXIgZm9ybSBhbmQgbWlnaHQgYmUgcmVwbGFjZWQgd2l0aCAm IzgyMjA7Zm91bmQgaW4gem9vIFt0YWdnZWQgd2l0aCB6ZWJyYSwgYWZyaWNhLCBzdHJpcGVz LiBQaG90byBieSBCbG9rZV0mIzgyMjE7LiAkcHJldGV4dCBpcyBhbHNvIGF2YWlsYWJsZSBm b3IgdGhvc2UgZ2Vla3Mgd2hvIGtub3cgd2hhdCYjODIxNztzIGluIGl0ICh1c2UgPGNvZGU+ ZGVidWc9JnF1b3Q7NCZxdW90OzwvY29kZT4gdG8gdmlldyBhbGwgYXZhaWxhYmxlIGFydGlj bGUgdmFyaWFibGVzKS48L3A+CgoJPHA+T25lIHRoaW5nIHRvIHdhdGNoIG91dCBmb3IgaXMg dGhhdCB0aGUgc3BhY2UgY2hhcmFjdGVyIGlzbiYjODIxNzt0IG5lY2Vzc2FyaWx5IGEgZGVs aW1pdGVyIGZvciA8Y29kZT4/PC9jb2RlPiB2YXJpYWJsZXMgKGJlY2F1c2UgY3VzdG9tIGZp ZWxkcyBjYW4gaGF2ZSBzcGFjZXMgaW4gdGhlbSkuIFNvIDxjb2RlPmNvbWJvPSZxdW90O2Rv ZXNub3R3b3JrOj9zIGluID9jYXRlZ29yeTEmcXVvdDs8L2NvZGU+IHdpbGwgbG9vayBmb3Ig YSB2YXJpYWJsZSBsYWJlbGxlZCAmIzgyMjA7cyBpbiYjODIyMTsgYW5kIG9uZSBjYWxsZWQg JiM4MjIwO2NhdGVnb3J5MSYjODIyMTsuIE9ubHkgb25lIG9mIHRob3NlIGV4aXN0cyEgQ2xl dmVyIHVzZSBvZiBwYXJlbnRoZXNlcyBvciBvdGhlciBwdW5jdHVhdGlvbiBjYW4gd29yayBy b3VuZCB0aGlzLjwvcD4KCgk8aDMgaWQ9ImNvbGxhdGVfbW9kZSI+Q29sbGF0ZSBtb2RlPC9o Mz4KCgk8cD5JZiB5b3Ugd2FudCB0byBnZXQgPGVtPnJlYWxseTwvZW0+IGZ1bmt5IHlvdSBj YW4gcHV0IHRoZSBwbHVnaW4gaW50byBhIDJuZCBtb2RlIGNhbGxlZCAmIzgyMjA7Y29sbGF0 aW9uIG1vZGUmIzgyMjE7LiBJbiB0aGlzIG1vZGUgeW91ciBjaG9zZW4gZm9ybSBpcyA8c3Ry b25nPm5vdDwvc3Ryb25nPiBleGVjdXRlZCBmb3IgZXZlcnkgaW1hZ2U7IGl0IGlzIG9ubHkg dXNlZCBvbmNlIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgbGlzdCwgYWZ0ZXIgYWxsIGltYWdl cyBoYXZlIGJlZW4gaW50ZXJuYWxseSAmIzgyMjA7Y29sbGVjdGVkJiM4MjIxOy4gSW4gZWZm ZWN0LCB0aGUgcGx1Z2luIGJ1aWxkcyB1cCBhIGdpYW50IGFycmF5IG9mIGFsbCBtYXRjaGlu ZyBpbWFnZXMgcmVhZHkgZm9yIHlvdSB0byBvdXRwdXQgdGhlbSBhbGwgaW4gb25lIGdvLiBU aGlzIGlzIHZlcnkgaGFuZHkgZm9yIGRvaW5nIHNsaWRlc2hvd3MgYW5kIGlzIGJlc3QgZXhw bGFpbmVkIGJ5IGV4YW1wbGU6PC9wPgoKCTxwPjxjb2RlPmNvbGxhdGU9JnF1b3Q7MSZxdW90 OzwvY29kZT48L3A+CgoJPHA+c3dpdGNoZXMgY29sbGF0aW9uIG1vZGUgb24uIElmIHRoZSBw bHVnaW4gbWF0Y2hlZCA0IGltYWdlcyBhbmQgeW91IHdlcmUgdG8gdXNlIHRoZSByZXBsYWNl bWVudCB0YWcgPGNvZGU+e25hbWV9PC9jb2RlPiBpbiB5b3VyIGZvcm0gbGlrZSB0aGlzOjwv cD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPlRoZSBtYXRjaGlu ZyBpbWFnZXM6IHtuYW1lfQo8L2NvZGU+PC9wcmU+CgoJPHA+eW91IG1pZ2h0IGdldCB0aGlz OjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPlRoZSBtYXRj aGluZyBpbWFnZXM6IGhlcm9uLmpwZyxwZW5ndWluLmpwZyxlbXUuanBnLHB1ZmZpbi5qcGcK PC9jb2RlPjwvcHJlPgoKCTxwPlNvbWV0aW1lcyBpdCYjODIxNztzIHVzZWZ1bCB0byBiZSBh YmxlIHRvIHB1dCBxdW90ZXMgYXJvdW5kIGVhY2ggaXRlbSBzbyB5b3UgY2FuIHRlbGwgY29s bGF0ZSBtb2RlIHRvIGRvIHRoYXQgaW5zdGVhZDo8L3A+CgoJPHA+PGNvZGU+Y29sbGF0ZT0m cXVvdDtxdW90ZTp7bmFtZX0mcXVvdDs8L2NvZGU+PC9wPgoKCTxwPllvdSB3b3VsZCB0aGVu IGdldDo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj5UaGUg bWF0Y2hpbmcgaW1hZ2VzOiAmcXVvdDtoZXJvbi5qcGcmcXVvdDssJnF1b3Q7cGVuZ3Vpbi5q cGcmcXVvdDssJnF1b3Q7ZW11LmpwZyZxdW90OywmcXVvdDtwdWZmaW4uanBnJnF1b3Q7Cjwv Y29kZT48L3ByZT4KCgk8cD5UaGUgZGVsaW1pdGVyIChhIGNvbW1hIGluIHRoaXMgY2FzZSkg Y2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgPGNvZGU+ZGVsaW08L2NvZGU+IGF0dHJpYnV0 ZS4gWW91IG1heSB1c2UgPGNvZGU+c2dscXVvdGU8L2NvZGU+IHRvIHdyYXAgc2luZ2xlIHF1 b3RlcyByb3VuZCB0aGUgaXRlbXMsIG9yICYjODIyMDtkYmxxdW90ZSYjODIyMTsgYXMgYSBz eW5vbnltIGZvciAmIzgyMjA7cXVvdGUmIzgyMjE7IGlmIHlvdSBwcmVmZXIuIFlvdSBjYW4g cXVvdGUgbW9yZSB0aGFuIG9uZSB0aGluZyBhdCBvbmNlIGJ5IHNwZWNpZnlpbmcgdGhlIGl0 ZW1zIGFzIGEgZGVsaW1pdGVkIGxpc3Q6PC9wPgoKCTxwPjxjb2RlPmNvbGxhdGU9JnF1b3Q7 cXVvdGU6e25hbWV9OnthbHR9OntpbWdpbn0mcXVvdDs8L2NvZGU+PC9wPgoKCTxwPlllcywg eW91IGNhbiB1c2UgY29tYm9zISBUaGUgZGVsaW1pdGVyIHVzZWQgYmV0d2VlbiBpdGVtcyBj YW4gYmUgb3ZlcnJpZGVuIHdpdGggdGhlIDxjb2RlPnBhcmFtZGVsaW08L2NvZGU+IGF0dHJp YnV0ZS48L3A+CgoJPHA+VGhlIHNlY29uZCBzcGVjaWFsIGZlYXR1cmUgb2YgY29sbGF0aW9u IG1vZGUgaXMgdGhhdCB5b3UgZG8gbm90IGhhdmUgdG8gYWx3YXlzIG91dHB1dCB0aGUgZW50 aXJlIGxpc3QuIFlvdSBjYW4gZ3JhYiBpbmRpdmlkdWFsIGVudGl0aWVzIGZyb20gd2l0aGlu IHRoZSBpbnRlcm5hbCBhcnJheSBieSB1c2luZyB0aGUgJiM4MjE2OyMmIzgyMTc7IG5vdGF0 aW9uIHRodXM6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+ e25hbWV9IG1pZ2h0IG91dHB1dCAmcXVvdDtoZXJvbi5qcGcmcXVvdDssJnF1b3Q7cGVuZ3Vp bi5qcGcmcXVvdDssJnF1b3Q7ZW11LmpwZyZxdW90OywmcXVvdDtwdWZmaW4uanBnJnF1b3Q7 IChhcyBiZWZvcmUpCihuYW1lIzF9IHdvdWxkIG9ubHkgb3V0cHV0IGhlcm9uLmpwZwoobmFt ZSMzfSB3b3VsZCBvbmx5IG91dHB1dCBlbXUuanBnCjwvY29kZT48L3ByZT4KCgk8cD5Ob3Rl IHRoYXQgd2hlbiBwdWxsaW5nIG91dCBpbmRpdmlkdWFsIGVudHJpZXMgdGhleSA8c3Ryb25n PmRvIG5vdDwvc3Ryb25nPiBnZXQgcXVvdGVzIGFkZGVkIHRvIHRoZW0sIHJlZ2FyZGxlc3Mg b2Ygd2hldGhlciB5b3UgdXNlZCA8Y29kZT5xdW90ZTwvY29kZT4gb3Igbm90LiBUaGlzIGlz IGJlY2F1c2UgaXQgaXMgYSBzaW5nbGUgaXRlbSBzbyB5b3UgY2FuIGVhc2lseSBwdXQgdGhl IHF1b3RlcyBpbiB0aGUgZm9ybSBpdHNlbGYgKHZpejogPGNvZGU+JnF1b3Q7e25hbWV9JnF1 b3Q7PC9jb2RlPik8L3A+CgoJPHA+TWVzc2luZyBhcm91bmQgd2l0aCBwdWxsaW5nIG91dCBp bmRpdmlkdWFsIGl0ZW1zIGFuZCBsaXN0cyBjYW4geWllbGQgc29tZSB2ZXJ5IGludGVyZXN0 aW5nIHJlc3VsdHMgYW5kIGFsbG93cyBzb21lIGNvbXBsZXRlbHkgd2Fja3kgZ2FsbGVyaWVz IHRvIGJlIGdlbmVyYXRlZC4gVHJ5IGNvbWJpbmluZyBzbWRfZ2FsbGVyeSB0YWdzIHdpdGgg PGNvZGU+Jmx0O3R4cDppZl9kaWZmZXJlbnQmZ3Q7PC9jb2RlPiBmb3IgYSByZWFsIG1pbmQg c2NyYW1ibGUgOi0pPC9wPgoKCTxoMyBpZD0iZXhhbXBsZXMiPkV4YW1wbGVzPC9oMz4KCgk8 cD5UaGUgZXhhbXBsZXMgYWxsIHVzZSB0aGUgY2xhc3NpYyB6b28gd2Vic2l0ZS4gTGV0JiM4 MjE3O3Mgc3BlY2lmeSBzb21lIHBpY3R1cmVzIHRvIHB1bGwgb3V0IG9mIHRoZSBkYXRhYmFz ZTo8L3A+CgoJPGg0IGlkPSJlZzEiPkV4YW1wbGUgMTogc2ltcGxlIC8gbGlnaHRib3hlZCBn YWxsZXJ5PC9oND4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZs dDt0eHA6c21kX2dhbGxlcnkgY2F0ZWdvcnk9JnF1b3Q7YW5pbWFscyZxdW90OyBzdWJsZXZl bD0mcXVvdDthbGwmcXVvdDsgZm9ybT0mcXVvdDtnYWxsZXJ5JnF1b3Q7IC8mZ3Q7CjwvY29k ZT48L3ByZT4KCgk8cD5UaGF0IHB1bGxzIG91dCBhbGwgcGljdHVyZXMgZnJvbSB0aGUgYW5p bWFscyBjYXRlZ29yeSwgaW5jbHVkaW5nIGFsbCBzdWItY2F0ZWdvcmllcywgYW5kIHBhc3Nl cyB0aGVtIHRvIHRoZSBmb3JtIGNhbGxlZCAmIzgyMTY7Z2FsbGVyeSYjODIxNzsgZm9yIHBy b2Nlc3NpbmcuIFRoZSBmb3JtIGNvdWxkIGp1c3QgYmUgdGhpczo8L3A+Cgo8cHJlIGNsYXNz PSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7aW1nIGNsYXNzPSZxdW90O2FuaW1h Z2UmcXVvdDsgc3JjPSZxdW90O3t1cmx9JnF1b3Q7IGFsdD0mcXVvdDt7YWx0fSZxdW90OyAv Jmd0OwombHQ7ZGl2IGNsYXNzPSZxdW90O2FjYXB0aW9uJnF1b3Q7Jmd0O3t0aXRsZX0mbHQ7 L2RpdiZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPlRoYXQgbWVhbnMsIGZvciBldmVyeSBtYXRj aGVkIGltYWdlLCBzdWJzdGl0dXRlIGl0cyA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu PiwgYWx0IGFuZCB0aXRsZSB0YWdzIGludG8gdGhlIHJlbGV2YW50IHBsYWNlcy4gVGh1cyB5 b3UgZ2V0IGEgc2VyaWVzIG9mIGltYWdlcyBvbiB0aGUgcGFnZSwgd2hpY2ggeW91IGNhbiBz dHlsZSBhY2NvcmRpbmdseS48L3A+CgoJPHA+Rm9yIGEgbW9yZSBmYW5jeSBvdXRwdXQgdXNp bmcsIHNheSwgc2xpbWJveCwgeW91IGNvdWxkIGxvYWQgdGhlIHJlbGV2YW50IGxpYnJhcmll cyBhbmQgc3R5bGVzIGluIHRoZSA8Y29kZT4mbHQ7aGVhZCZndDs8L2NvZGU+IG9mIHlvdXIg cGFnZTo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7 c2NyaXB0IHR5cGU9JnF1b3Q7dGV4dC9qYXZhc2NyaXB0JnF1b3Q7IHNyYz0mcXVvdDsvanMv bW9vdG9vbHMuanMmcXVvdDsmZ3Q7Jmx0Oy9zY3JpcHQmZ3Q7CiZsdDtzY3JpcHQgdHlwZT0m cXVvdDt0ZXh0L2phdmFzY3JpcHQmcXVvdDsgc3JjPSZxdW90Oy9qcy9zbGltYm94LmpzJnF1 b3Q7Jmd0OyZsdDsvc2NyaXB0Jmd0OwombHQ7bGluayByZWw9JnF1b3Q7c3R5bGVzaGVldCZx dW90OyB0eXBlPSZxdW90O3RleHQvY3NzJnF1b3Q7IGhyZWY9JnF1b3Q7L2Nzcy9zbGltYm94 LmNzcyZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+VGhlbiB5b3VyICYjODIxNjtn YWxsZXJ5JiM4MjE3OyBmb3JtIGNvdWxkIGJlOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48 Y29kZSBjbGFzcz0iYmxvY2siPiZsdDthIHJlbD0mcXVvdDtsaWdodGJveC17Y2F0ZWdvcnl9 JnF1b3Q7IGhyZWY9JnF1b3Q7e3VybH0mcXVvdDsgYWx0PSZxdW90O3thbHR9JnF1b3Q7CiAg ICAgdGl0bGU9JnF1b3Q7QSBwaWN0dXJlIG9mIHt0aXRsZX0mcXVvdDsgaGVpZ2h0PSZxdW90 O3toZWlnaHR9JnF1b3Q7IHdpZHRoPSZxdW90O3t3aWR0aH0mcXVvdDsmZ3Q7CiAmbHQ7dHhw OnRodW1ibmFpbCBpZD0mcXVvdDt7aWR9JnF1b3Q7IC8mZ3Q7CiZsdDsvYSZndDsKPC9jb2Rl PjwvcHJlPgoKCTxwPlZvaWxhISBVc2luZyB0aGUgc2FtZSBzbWRfZ2FsbGVyeSB0YWcgeW91 IGhhdmUgY2hhbmdlZCB0aGUgd2F5IHRoZSBnYWxsZXJ5IHJlbmRlcnMgZnJvbSBhIHNpbXBs ZSBsaXN0IHRvIGEgZnVsbC1mZWF0dXJlZCBzbGltYm94LiBXaXRoIHZpcnR1YWxseSB0aGUg c2FtZSBmb3JtIHlvdSBjYW4gc3dpdGNoIHRoZSBvdXRwdXQgdG8gdGhpY2tib3gsIGxpZ2h0 Ym94LCBsaXRlYm94LCBtb29uYm94IG9yIHdoYXRldmVyLXlvdS1saWtlLWJveCBkZXBlbmRp bmcgb24gd2hpY2ggbGlicmFyaWVzIHlvdSBsb2FkLiBGb2xsb3cgdGhlIGluc3RydWN0aW9u cyBmb3IgeW91ciBmYXZvdXJpdGUgZWZmZWN0IGFuZCBwbHVnIGl0IGludG8gc21kX2dhbGxl cnkuPC9wPgoKCTxoNCBpZD0iZWcyIj5FeGFtcGxlIDI6IGxhdW5jaCBmcm9tIG9uZSBpbWFn ZTwvaDQ+CgoJPHA+QSBjb21tb24gcmVxdWVzdCBpcyB0byBiZSBhYmxlIHRvICYjODIyMDts YXVuY2gmIzgyMjE7IGEgc2xpbWJveCBnYWxsZXJ5IGZyb20gYSBzaW5nbGUgaW1hZ2Ugb3Ig dGV4dCBsaW5rLiBVc2luZyBhIHNpbmdsZSBpbWFnZTo8L3A+Cgo8cHJlIGNsYXNzPSJibG9j ayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9nYWxsZXJ5IGNhdGVnb3J5PSZx dW90O2FuaW1hbHMmcXVvdDsKICAgICBpZD0mcXVvdDs/YXJ0aWNsZV9pbWFnZSZxdW90OyBz dWJsZXZlbD0mcXVvdDthbGwmcXVvdDsKICAgICBmb3JtPSZxdW90O2dhbGxlcnkmcXVvdDsg dGh1bWJsaW1pdD0mcXVvdDsxJnF1b3Q7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5Ob3Rl IHRoYXQgdGhpcyB0aW1lIHdlIGFyZSBhZGRpbmcgdG8gdGhlIGdhbGxlcnkgdGhlIGltYWdl KHMpIHB1bGxlZCBmcm9tIHRoZSBhcnRpY2xlLWltYWdlIGZpZWxkIG9mIHRoZSBjdXJyZW50 IGFydGljbGUuIFRoZSBmb3JtIHdpbGwgdXNlIHRoZSBzcGVjaWFsIDxjb2RlPntvYmplY3R9 PC9jb2RlPiByZXBsYWNlbWVudCB0YWcuIFRoZSBwbHVnaW4gb25seSBkaXNwbGF5cyB0aGlz IHBhcnQgaWYgdGhlIHZhbHVlIG9mIHRodW1ibGltaXQgaGFzIDxzdHJvbmc+bm90PC9zdHJv bmc+IGJlZW4gcmVhY2hlZDo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9 ImJsb2NrIj4mbHQ7YSByZWw9JnF1b3Q7bGlnaHRib3gtc21kJnF1b3Q7IGhyZWY9JnF1b3Q7 e3VybH0mcXVvdDsKICAgICB0aXRsZT0mcXVvdDtBIHBpY3R1cmUgb2Yge3RpdGxlfSZxdW90 OyZndDsKe29iamVjdH0KJmx0Oy9hJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+Q2hhbmdlIHRo ZSBzdGFydCBpbWFnZSBieSBzcGVjaWZ5aW5nIDxjb2RlPnRodW1ib2Zmc2V0PC9jb2RlPiAm IzgyMTI7IG5vdGUgdGhpcyB3aWxsIGFsc28gc3RhcnQgdGhlIGxpZ2h0Ym94IGVmZmVjdCBm cm9tIHRoZSBpbWFnZSB5b3UgY2hvb3NlLiBJZiB5b3Ugd2FudCB0byBzdGFydCBvbiBhIHNw ZWNpZmljIGltYWdlIGluIHBvc2l0aW9uIDEsIHVzZSB0aGUgPGNvZGU+aWQ8L2NvZGU+IGF0 dHJpYnV0ZSB0byBicmluZyBpdCB0byB0aGUgdG9wIG9mIHRoZSBsaXN0LCBvciBjaGFuZ2Ug dGhlIHNvcnQgb3JkZXIuPC9wPgoKCTxwPklmIHlvdSB3YW50ZWQgdG8gbGF1bmNoIHRoZSBn YWxsZXJ5IGZyb20gYSB0ZXh0IGxpbmssIG1vZGlmeSB0aGUgdGFnIGxpa2UgdGhpczo8L3A+ Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9n YWxsZXJ5IGNhdGVnb3J5PSZxdW90O2FuaW1hbHMmcXVvdDsKICAgICBpZD0mcXVvdDs/YXJ0 aWNsZV9pbWFnZSZxdW90OyBzdWJsZXZlbD0mcXVvdDthbGwmcXVvdDsKICAgICBmb3JtPSZx dW90O2dhbGxlcnkmcXVvdDsgdGh1bWJsaW1pdD0mcXVvdDsxJnF1b3Q7CiAgICAgdGV4dD0m cXVvdDtDbGljayB0byBzdGFydCBsaWdodGJveCZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+ CgoJPGg0IGlkPSJlZzMiPkV4YW1wbGUgMzogcG9wdXAgZ2FsbGVyeTwvaDQ+CgoJPHA+VG8g YWNoaWV2ZSBhbiBlZmZlY3Qgc2ltaWxhciB0byByc3NfdGh1bWJwb3AsIGFkZCBhbiBpbWFn ZSBhbmQgY2FwdGlvbiBwbGFjZWhvbGRlciBvdXRzaWRlIHRoZSBjYWxsIHRvIHNtZF9nYWxs ZXJ5LCB0aGVuIGluY2x1ZGUgeW91ciBzbWRfZ2FsbGVyeSB0YWcgYXMgdXN1YWwuIFRoaXMg dGltZSB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGFsbCB0aGUgcGljdHVyZXMgZnJvbSB0 aGUgY2F0ZWdvcmllcyB1cCB0byB0d28gbGV2ZWxzIGJlbG93IGJvdGggJiM4MjIwO2FuaW1h bHMmIzgyMjE7IGFuZCB3aGljaGV2ZXIgY2F0ZWdvcmllcyBhcmUgbGlzdGVkIGluIDxjb2Rl Pm15X2N1c3RvbV9maWVsZDwvY29kZT46PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2Rl IGNsYXNzPSJibG9jayI+Jmx0O2ltZyBpZD0mcXVvdDtmdWxsc2l6ZSZxdW90OyBzcmM9JnF1 b3Q7L2ltYWdlcy9lbXB0eS5qcGcmcXVvdDsgLyZndDsKJmx0O3NwYW4gaWQ9JnF1b3Q7ZnVs bGNhcHRpb24mcXVvdDsmZ3Q7Jmx0Oy9zcGFuJmd0OwombHQ7dHhwOnNtZF9nYWxsZXJ5IHN1 YmxldmVsPSZxdW90OzImcXVvdDsKICAgICBjYXRlZ29yeT0mcXVvdDthbmltYWxzLCA/bXlf Y3VzdG9tX2ZpZWxkJnF1b3Q7CiAgICAgZm9ybT0mcXVvdDtnYWxsZXJ5JnF1b3Q7IC8mZ3Q7 CjwvY29kZT48L3ByZT4KCgk8cD5UaGUgZ2FsbGVyeSBmb3JtIGxvb2tzIHNjYXJ5IGJ1dCBp cyBvbmx5IGEgdGh1bWJuYWlsIGltYWdlIHN1cnJvdW5kZWQgYnkgYSBzaW1wbGUgYW5jaG9y IHRhZyB3aXRoIHR3byBhY3Rpb25zIGFzc2lnbmVkIHRvIGl0OiBhIG1vdXNlb3ZlciB0byBj b3B5IHRoZSBwaWN0dXJlIGFuZCBjYXB0aW9uIGludG8gdGhlIHBsYWNlaG9sZGVyOyBhbmQg YSBtb3VzZW91dCB0byByZW1vdmUgdGhlbTo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNv ZGUgY2xhc3M9ImJsb2NrIj4mbHQ7YSBocmVmPSZxdW90O3t1cmx9JnF1b3Q7IHRpdGxlPSZx dW90O3t0aXRsZX0mcXVvdDsKICAgICBvbm1vdXNlb3Zlcj0mcXVvdDtkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgmIzM5O2Z1bGxzaXplJiMzOTspLnNyYyA9IHRoaXMuaHJlZjsKICAgICBk b2N1bWVudC5nZXRFbGVtZW50QnlJZCgmIzM5O2Z1bGxjYXB0aW9uJiMzOTspLmlubmVySFRN TCA9IHRoaXMudGl0bGU7IHJldHVybiBmYWxzZSZxdW90OwogICAgIG9ubW91c2VvdXQ9JnF1 b3Q7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJiMzOTtmdWxsc2l6ZSYjMzk7KS5zcmMgPSAm IzM5Oy9pbWFnZXMvMTcuanBnJiMzOTs7CiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo JiMzOTtmdWxsY2FwdGlvbiYjMzk7KS5pbm5lckhUTUwgPSAmIzM5OyYjMzk7OyByZXR1cm4g ZmFsc2U7JnF1b3Q7Jmd0OwogICZsdDtpbWcgc3JjPSZxdW90O3t0aHVtYnVybH0mcXVvdDsg YWx0PSZxdW90O3thbHR9JnF1b3Q7IC8mZ3Q7CiZsdDsvYSZndDsKPC9jb2RlPjwvcHJlPgoK CTxwPk5vdGUgdGhlcmUgYXJlIG11Y2ggbmVhdGVyIHdheXMgb2YgZG9pbmcgdGhpcyBhbmQg aXQmIzgyMTc7cyBub3QgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMgZm9ybSBpbiBhIGxpdmUg c2l0ZSwgYnV0IGl0IGdpdmVzIGEgZmxhdm91ciBvZiB3aGF0IGlzIHBvc3NpYmxlLjwvcD4K Cgk8aDQgaWQ9ImVnNCI+RXhhbXBsZSA0OiBzbGlkZXNob3c8L2g0PgoKCTxwPlRoaXMgb25l IHVzZXMgY29sbGF0ZSBtb2RlIGJ1dCBpcyBub3QgbXVjaCBtb3JlIGRpZmZpY3VsdCB0byB1 bmRlcnN0YW5kLiBJbiB5b3VyIDxjb2RlPiZsdDtoZWFkJmd0OzwvY29kZT4gc2VjdGlvbjo8 L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7c2NyaXB0 IHR5cGU9JnF1b3Q7dGV4dC9qYXZhc2NyaXB0JnF1b3Q7IHNyYz0mcXVvdDsvanMvbW9vdG9v bHMuanMmcXVvdDsmZ3Q7Jmx0Oy9zY3JpcHQmZ3Q7CiZsdDtzY3JpcHQgdHlwZT0mcXVvdDt0 ZXh0L2phdmFzY3JpcHQmcXVvdDsgc3JjPSZxdW90Oy9qcy9zbGlkZXNob3cuanMmcXVvdDsm Z3Q7Jmx0Oy9zY3JpcHQmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5UaGUgdGFnOjwvcD4KCjxw cmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2dhbGxl cnkKICBjYXRlZ29yeT0mcXVvdDtiaXJkcywgZmlzaCZxdW90OyBmb3JtPSZxdW90O2dhbGxl cnkmcXVvdDsKICBjb21ibz0mcXVvdDtpbWdsaXN0OntpZH17ZXh0fSZxdW90OwogIGNvbGxh dGU9JnF1b3Q7cXVvdGU6e2ltZ2xpc3R9OnthbHR9JnF1b3Q7IC8mZ3Q7CjwvY29kZT48L3By ZT4KCgk8cD5UaGF0IHB1bGxzIGFsbCBwaWN0dXJlcyBmcm9tIHRoZSBiaXJkcyBhbmQgZmlz aCBjYXRlZ29yaWVzLiBBbHRob3VnaCB0ZWNobmljYWxseSB1bm5lY2Vzc2FyeSwgYSBjb21i byBoYXMgYmVlbiBkZWZpbmVkIHRvIHNob3cgaG93IGl0IGNhbiBiZSB1c2VkLiBUaGlzIGNv bWJvIGlzIGNhbGxlZCA8Y29kZT5pbWdsaXN0PC9jb2RlPiBhbmQgaXMgZGVmaW5lZCBhcyB0 aGUgaW1hZ2UmIzgyMTc7cyBJRCBudW1iZXIgcGx1cyBpdHMgZXh0ZW5zaW9uLiBXZSB1c2Ug dGhpcyBpbiB0aGUgY29sbGF0ZSBhdHRyaWJ1dGUgYW5kIHRlbGwgaXQgdG8gcHV0IGRvdWJs ZSBxdW90ZXMgcm91bmQgZXZlcnkgaXRlbSBpbiAmIzgyMTY7aW1nbGlzdCYjODIxNzsgYW5k ICYjODIxNjthbHQmIzgyMTc7LiBUaGVuIHdlIGNhbiBwdXQgdGhlc2UgdmFsdWVzIGludG8g dGhlIG5lY2Vzc2FyeSBqYXZhc2NyaXB0IHRvIGdlbmVyYXRlIHRoZSBzbGlkZXNob3c6PC9w PgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O2RpdiBjbGFz cz0mcXVvdDtzbGlkZXNob3cmcXVvdDsgaWQ9JnF1b3Q7c2xpZGVzaG93MSZxdW90OyZndDsK ICZsdDtpbWcgc3JjPSZxdW90OyZsdDt0eHA6c2l0ZV91cmwgLyZndDtpbWFnZXMve2lkIzF9 LmpwZyZxdW90OwogICAgIGFsdD0mcXVvdDt7YWx0IzF9JnF1b3Q7IHdpZHRoPSZxdW90O3t3 aWR0aCMxfSZxdW90OyBoZWlnaHQ9JnF1b3Q7e2hlaWdodCMxfSZxdW90OyAvJmd0OwombHQ7 L2RpdiZndDsKPC9jb2RlPgo8Y29kZSBjbGFzcz0iYmxvY2siPiZsdDtzY3JpcHQgdHlwZT0m cXVvdDt0ZXh0L2phdmFzY3JpcHQmcXVvdDsmZ3Q7Cm15U2hvdzEgPSBuZXcgU2xpZGVzaG93 KCZxdW90O3NsaWRlc2hvdzEmcXVvdDssCiAgeyBodTogJnF1b3Q7Jmx0O3R4cDpzaXRlX3Vy bCAvJmd0O2ltYWdlcy8mcXVvdDssCiAgICBpbWFnZXM6IFt7aW1nbGlzdH1dLAogICAgY2Fw dGlvbnM6IFt7YWx0fV0sCiAgICBjbGFzc2VzOiBbJnF1b3Q7cHJldiZxdW90OywmcXVvdDtu ZXh0JnF1b3Q7LCZxdW90O2FjdGl2ZSZxdW90O10sCiAgICB0eXBlOiAmcXVvdDtmYWRlJnF1 b3Q7CiAgfSk7CiZsdDsvc2NyaXB0Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+Tm90ZSB0aGF0 IHRoZSBpbml0aWFsIHBvcnRpb24gKGluIHRoZSBkaXYgYW5kIGltZyB0YWdzKSB1c2VzIHRo ZSAmIzgyMTY7IyYjODIxNzsgbm90YXRpb24gYmVjYXVzZSB3ZSBvbmx5IHdhbnQgdG8gZGlz cGxheSBvbmUgaW1hZ2UgdG8gJiM4MjIwO3N0YXJ0JiM4MjIxOyB0aGUgc2xpZGVzaG93LiBJ biB0aGlzIGNhc2Ugd2UmIzgyMTc7cmUgdXNpbmcgdGhlIGZpcnN0IGltYWdlIGluIHRoZSBs aXN0LCBidXQgeW91IGNhbiBjaGFuZ2UgdGhlICMxIGZvciAjNDIgaWYgeW91IHdhbnRlZCB0 byBzaG93IHRoZSBmb3J0eS1zZWNvbmQgaW1hZ2UgaW5zdGVhZCEgVGhlIHBhcnQgaW4gdGhl IHNjcmlwdCB0YWcgdXNlcyB0aGUgZnVsbCwgcXVvdGVkIGxpc3RzIGJlY2F1c2UgdGhhdCYj ODIxNztzIHRoZSBmb3JtYXQgdGhlIGphdmFzY3JpcHQgcmVxdWlyZXMuPC9wPgoKCTxoNCBp ZD0iZWc1Ij5FeGFtcGxlIDU6IHBhZ2luYXRpb248L2g0PgoKCTxwPlRvIGFkZCBwYWdpbmcg dG8gYSBnYWxsZXJ5IHlvdSB1c2UgdGhlIDxjb2RlPmxpbWl0PC9jb2RlPiBhdHRyaWJ1dGUg dG8gc2hvdyBhIG51bWJlciBvZiB0aHVtYnMgcGVyIHBhZ2UuIEZvciBhIHBhZ2VkIHRodW1i cG9wIGdhbGxlcnkgdGhhdCBzaG93cyBmaXZlIHRodW1icyBwZXIgcGFnZTo8L3A+Cgo8cHJl IGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7aW1nIGlkPSZxdW90O2Z1 bGxzaXplJnF1b3Q7IHNyYz0mcXVvdDsvaW1hZ2VzL2VtcHR5LmpwZyZxdW90OyAvJmd0Owom bHQ7c3BhbiBpZD0mcXVvdDtmdWxsY2FwdGlvbiZxdW90OyZndDsmbHQ7L3NwYW4mZ3Q7CiZs dDt0eHA6c21kX2dhbGxlcnkgY2F0ZWdvcnk9JnF1b3Q7YW5pbWFscyZxdW90OwogIGZvcm09 JnF1b3Q7Z2FsbGVyeSZxdW90OyBwYWdlZm9ybT0mcXVvdDtnYWxsZXJ5X25hdiZxdW90Owog IGxpbWl0PSZxdW90OzUmcXVvdDsgLyZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPlRoZSAmIzgy MTY7Z2FsbGVyeSYjODIxNzsgZm9ybSBpcyBpZGVudGljYWwgdG8gdGhlIG9uZSBpbiA8YSBo cmVmPSIjZWc0Ij5leGFtcGxlIDQ8L2E+LCB3aGlsZSB5b3VyIGdhbGxlcnlfbmF2IGZvcm0g bWlnaHQgbG9vayBsaWtlIHRoaXM6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNs YXNzPSJibG9jayI+Jmx0O2RpdiBjbGFzcz0mcXVvdDt0b3RhbCZxdW90OyZndDsjIG9mIHBp Y3M6IHt0b3RhbGltYWdlc30mbHQ7L2RpdiZndDsKICAgICB7bmF2Zmlyc3R9IHtuYXZwcmV2 fQogICAgIHtuYXZlYXJsaWVyfSB7bmF2dGhpc30ge25hdmxhdGVyfQogICAgIHtuYXZuZXh0 fSB7bmF2bGFzdH0KPC9jb2RlPjwvcHJlPgoKCTxwPlRoYXQgbWlnaHQgcmVuZGVyIHNvbWV0 aGluZyBzaW1pbGFyIHRvIHRoaXMgYmVsb3cgdGhlIHRodW1iczo8L3A+Cgo8cHJlIGNsYXNz PSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4jIG9mIHBpY3M6IDM4CiAgICAgRmlyc3Qg Jmx0OyAxIDIgMyA0IDUgNiA3IDggJmd0OyBMYXN0CjwvY29kZT48L3ByZT4KCgk8cD5Ob3Rl czo8L3A+CgoJPHVsPgoJCTxsaT5Vc2Uge25hdnRoaXN1cmx9IGlmIHlvdSB3YW50IHRoZSBj dXJyZW50IHBhZ2UgaHlwZXJsaW5rZWQ8L2xpPgoJCTxsaT5UaGUgY3VycmVudCBpdGVtIGFs d2F5cyBoYXMgYSBjbGFzcyBvZiAmIzgyMjA7Y3VycmVudCYjODIyMTs8L2xpPgoJCTxsaT5V c2UgdGhlIDxjb2RlPm5hdndyYXB0YWc8L2NvZGU+LCA8Y29kZT5uYXZicmVhazwvY29kZT4s IGFuZCA8Y29kZT5uYXZjbGFzczwvY29kZT4gdGFnIGF0dHJpYnV0ZXMgdG8gc3BlY2lmeSBp dGVtcyB0byB3cmFwIGFyb3VuZCB0aGUgZW50aXJlIHBhZ2Vmb3JtLiBUaGUgZGVmYXVsdHMg YXJlOiA8Y29kZT51bDwvY29kZT4sIDxjb2RlPmxpPC9jb2RlPiwgYW5kIDxjb2RlPnNtZF9n YWxsZXJ5X25hdjwvY29kZT4gcmVzcGVjdGl2ZWx5PC9saT4KCQk8bGk+WW91IGNhbiBsYWJl bCBuYXZmaXJzdCwgbmF2bGFzdCwgbmF2cHJldiwgbmF2bmV4dCBhbmQgbmF2dGhpcyBieSBz cGVjaWZ5aW5nIHRoZW0gbGlrZSB0aGlzOiA8Y29kZT57bmF2cHJldjpQcmV2aW91c308L2Nv ZGU+ICh0aGUgJiM4MjE2OzomIzgyMTc7IGRlbGltaXRlciBpbiB0aGlzIGNhc2UgaXMgdGhl IGl0ZW0gc3BlY2lmaWVkIGJ5IHBhcmFtZGVsaW0pPC9saT4KCQk8bGk+bmF2ZWFybGllciBh bmQgbmF2bGF0ZXIgd2lsbCBieSBkZWZhdWx0IHNob3cgYWxsIHBhZ2VzIGJlZm9yZSBhbmQg YWZ0ZXIgdGhlIGN1cnJlbnQgb25lLiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkgc3BlY2lm eWluZyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHlvdSB3YW50IHRvIHNob3cgZWl0aGVyIHNpZGUu IGUuZy4gaWYgeW91IHdlcmUgb24gcGFnZSA5IG9mIDE1LCB7bmF2ZWFybGllcjo0fSB7bmF2 bGF0ZXI6M30gd291bGQgc2hvdyA8Y29kZT4mbHQ7Jmx0OyA1IDYgNyA4IDkgMTAgMTEgMTIg Jmd0OyZndDs8L2NvZGU+PC9saT4KCTwvdWw+CgoJPGgzIGlkPSJjaGFuZ2Vsb2ciPkNoYW5n ZWxvZzwvaDM+CgoJPHA+QWxsIGF2YWlsYWJsZSB2ZXJzaW9ucyBhbmQgY2hhbmdlcyBhcmUg bGlzdGVkIGhlcmUuPC9wPgoKCTxwPjxzdHJvbmc+QmV0YTwvc3Ryb25nPjwvcD4KCgk8dWw+ CgkJPGxpPjE0IEZlYiAwOCB8IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3du bG9hZHMvc21kX2dhbGxlcnlfdjAuMS50eHQiPjAuMTwvYT4gWyA8YSBocmVmPSJodHRwOi8v c3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL3NtZF9nYWxsZXJ5X3YwLjFfemlwLnR4dCI+Y29t cHJlc3NlZDwvYT4gXSB8IEluaXRpYWwgcmVsZWFzZSAmIzgyMTE7IEhhcHB5IFZhbGVudGlu ZXMgRGF5IDotKTwvbGk+CgkJPGxpPjE5IEZlYiAwOCB8IDxhIGhyZWY9Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS9kb3dubG9hZHMvc21kX2dhbGxlcnlfdjAuMi50eHQiPjAuMjwvYT4gWyA8 YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL3NtZF9nYWxsZXJ5X3Yw LjJfemlwLnR4dCI+Y29tcHJlc3NlZDwvYT4gXSB8IEFkZGVkIDxhIGhyZWY9Imh0dHA6Ly9m b3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9waWQ9MTcyNDU5I3AxNzI0NTki PntnYWxsZXJ5aWR9PC9hPiAodGhhbmtzIHJsb2FkZXJybykgYW5kIHNvbWUgc2tlbGV0b24g ZG9jczwvbGk+Cgk8L3VsPgoKCTxwPjxzdHJvbmc+T2ZmaWNpYWw8L3N0cm9uZz48L3A+CgoJ PHVsPgoJCTxsaT4xMSBNYXIgMDggfCA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20v ZG93bmxvYWRzL3NtZF9nYWxsZXJ5X3YwLjMudHh0Ij4wLjM8L2E+IFsgPGEgaHJlZj0iaHR0 cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9zbWRfZ2FsbGVyeV92MC4zX3ppcC50eHQi PmNvbXByZXNzZWQ8L2E+IF0gfCBPZmZpY2lhbCBwdWJsaWMgcmVsZWFzZS4gRml4ZWQgc2ls bHkgZW1wdHkgZmllbGQgYnVnOyBhZGRlZCB7Y291bnRlcn0sIHtpbmRleH0gYW5kIHRoZSB0 b3RhbHMgKGFsbCB0aGFua3MgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNv bS92aWV3dG9waWMucGhwP3BpZD0xNzM0OTAjcDE3MzQ5MCI+amFrb2I8L2E+KTwvbGk+CgkJ PGxpPjE1IE1hciAwOCB8IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9h ZHMvc21kX2dhbGxlcnlfdjAuMzEudHh0Ij4wLjMxPC9hPiBbIDxhIGhyZWY9Imh0dHA6Ly9z dGVmZGF3c29uLmNvbS9kb3dubG9hZHMvc21kX2dhbGxlcnlfdjAuMzFfemlwLnR4dCI+Y29t cHJlc3NlZDwvYT4gXSB8IEZpeGVkIGEgY291cGxlIG9mIHVuZGVmaW5lZCBpbmRleGVzIGFu ZCA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/ cGlkPTE3NDgxOCNwMTc0ODE4Ij5hZGRlZCB7Y2F0ZWdvcnlfdGl0bGV9PC9hPiAodGhhbmtz IDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9w aWQ9MTc0ODIwI3AxNzQ4MjAiPmpzdHViYnM8L2E+KTwvbGk+CgkJPGxpPjE3IE1hciAwOCB8 IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvc21kX2dhbGxlcnlf djAuMzIudHh0Ij4wLjMyPC9hPiBbIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9k b3dubG9hZHMvc21kX2dhbGxlcnlfdjAuMzJfemlwLnR4dCI+Y29tcHJlc3NlZDwvYT4gXSB8 IEZpeGVkIGFub3RoZXIgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92 aWV3dG9waWMucGhwP3BpZD0xNzQ5NDcjcDE3NDk0NyI+dW5kZWZpbmVkIGluZGV4PC9hPiBh bmQgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhw P3BpZD0xNzQ5NjEjcDE3NDk2MSI+cmVtb3ZlZCBib2d1cyBjYWxsIHRvIHNtZF9saWI8L2E+ IChib3RoIHRoYW5rcyBzZWN1bmRhcik8L2xpPgoJCTxsaT4yMSBNYXIgMDggfCA8YSBocmVm PSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL3NtZF9nYWxsZXJ5X3YwLjMzLnR4 dCI+MC4zMzwvYT4gWyA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRz L3NtZF9nYWxsZXJ5X3YwLjMzX3ppcC50eHQiPmNvbXByZXNzZWQ8L2E+IF0gfCBEaWQgdjAu MzEgcHJvcGVybHksIGluY2x1ZGluZyB0YWJsZSBwcmVmaXggKHRoYW5rcyA8YSBocmVmPSJo dHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/cGlkPTE3NTMwMiNw MTc1MzAyIj5uYXJkbzwvYT4pPC9saT4KCTwvdWw+CgoJPGgzIGlkPSJjcmVkaXRzIj5DcmVk aXRzPC9oMz4KCgk8cD5UaGlzIHBsdWdpbiB3b3VsZG4mIzgyMTc7dCBoYXZlIGV4aXN0ZWQg d2l0aG91dCB0aGUgYXdlc29tZSBtaW5kIG9mIFJvYmVydCBXZXR6bG1heXIuIEhpcyB3ZXRf Zm9yX2VhY2hfaW1hZ2UgcGx1Z2luIGlzIHRydWUgZ2VuaXVzOyB0aGlzIHNpbXBseSBzdGFu ZHMgb24gdGhlIHNob3VsZGVycyBvZiB0aGF0IGlkZWEgYW5kIHJvbGxzIGluIGEgc291cGVk IHVwIHZlcnNpb24gb2YgdGhlIHRodW1ibmFpbCBnZW5lcmF0aW9uIGVuZ2luZSBmcm9tIHNt ZF9zbGltYm94LiBUbyB0aGF0IGVuZCwgdGhlIHBsdWdpbiBpcyBhbHNvIGluZGVidGVkIHRv IGFueW9uZSB3aG8gaGFzIHBvc3RlZCBmZWF0dXJlcyBvciBidWcgcmVwb3J0cyB0byBtZSBv ciB0aGUgc21kX3NsaW1ib3ggdGhyZWFkLiBZb3UmIzgyMTc7cmUgYWxsIG1hcnZlbGxvdXMu PC9wPgoKCTxwPjwvZGl2PjwvcD4KPCEtLSAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0gLS0+ CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuMyA7 fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAi Q291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNG RkZGQ0M7fQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9y ZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxh eTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9o ZWxwIGE6bGluaywgI3NtZF9oZWxwIGE6dmlzaXRlZCB7IGNvbG9yOiBibHVlOyB0ZXh0LWRl Y29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibHVlOyBwYWRkaW5n LWJvdHRvbToxcHg7fQojc21kX2hlbHAgYTpob3ZlciwgI3NtZF9oZWxwIGE6YWN0aXZlIHsg Y29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMnB4 IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBoMSB7IGNvbG9y OiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4 dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBz b2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3cHgg R2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hlbHAgaDMgeyBjb2xvcjogIzY5MzsgZm9u dDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBt YXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7fQojc21kX2hlbHAg aDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5n OiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0K I3NtZF9oZWxwIC5hdHQtbmFtZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3NtZF9oZWxwIC5t YW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNzbWRf aGVscCB0YWJsZSB7d2lkdGg6MTAwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmctYm90 dG9tOjFlbTt9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRoIHtib3JkZXI6MXB4IHNvbGlk ICM5OTk7IHBhZGRpbmc6LjVlbSAwO30KPC9zdHlsZT4KPCEtLSAtLS0gRU5EIFBMVUdJTiBD U1MgLS0tIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiIxODc3ODRlMTJmOTgyMmFkMTE0NDgxZTYy ZGI1YTM0YyI7fQ==