# Name: smd_qr_code v0.10 # Type: Public side plugin # Create QR codes on the fly # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjExOiJzbWRfcXJfY29kZSI7czo2OiJhdXRob3IiO3M6MTE6 IlN0ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRhd3Nv bi5jb20vIjtzOjc6InZlcnNpb24iO3M6NDoiMC4xMCI7czoxMToiZGVzY3JpcHRpb24iO3M6 MjY6IkNyZWF0ZSBRUiBjb2RlcyBvbiB0aGUgZmx5IjtzOjQ6ImNvZGUiO3M6OTczNzoiZnVu Y3Rpb24gc21kX3FyX2NvZGUoJGF0dHMsICR0aGluZz1OVUxMKSB7DQoJZXh0cmFjdChsQXR0 cyhhcnJheSgNCgkJJ3R5cGUnICAgID0+ICd0ZXh0JywgLy8gdGV4dC9saW5rL2Jvb2ttYXJr L3Ntcy9waG9uZS9lbWFpbC9jb250YWN0L2dlby93aWZpDQoJCSdkYXRhJyAgICA9PiAnSGVs bG8gd29ybGQhJywNCgkJJ2RlbGltJyAgID0+ICd8JywNCgkJJ2Zvcm1hdCcgID0+ICd2aWV3 JywgLy8gdmlldy9kb3dubG9hZC9yYXcNCgkJJ3dpZHRoJyAgID0+ICcyMDAnLA0KCQknaGVp Z2h0JyAgPT4gJzIwMCcsDQoJCSdxdWFsaXR5JyA9PiAnTCcsIC8vIEwvTS9RL0gNCgkJJ21h cmdpbicgID0+ICc0JywNCgkJJ2JnY29sJyAgID0+ICcnLA0KCQknYWxwaGEnICAgPT4gJycs DQoJCSdlc2NhcGUnICA9PiAnJywNCgkJJ2NsYXNzJyAgID0+ICcnLA0KCQknaHRtbF9pZCcg PT4gJycsDQoJCSd3cmFwdGFnJyA9PiAnJywNCgkJJ2RlYnVnJyAgID0+IDAsDQoJKSwkYXR0 cykpOw0KDQoJLy8gQ29tbW9uIHJlZ2V4ZXMNCgkkcmVfdXJsID0gJ0BeW2h0dHA6Ly98aHR0 cHM6Ly98ZnRwOi8vXS4qQCc7DQoJJHJlX2VtYWlsID0gIjxeW2EtejAtOSEjJCUmJyorLz0/ Xl9ge3x9fi1dKyg/OlwuW2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKykqQCg/OlthLXow LTldKD86W2EtejAtOS1dKlthLXowLTldKT9cLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2Et ejAtOV0pPyQ+IjsNCgkkcmVfcGhvbmUgPSAnL15bMC05KClcLSsgXSskLyc7DQoJJHJlX21z ZyA9ICcvXi4rJC8nOw0KCSRyZV9nZW8gPSAnL15bMC05LlwtXSskLyc7DQoJJHJlX2RpZ2l0 cyA9ICcvXlswLTlcK1wtXSskLyc7DQoNCgkvLyBFYWNoIGVudHJ5IGxpbmtzIHRoZSAndHlw ZScgYXR0cmlidXRlIHdpdGggYW4gYXJyYXkgb2Y6DQoJLy8gIG1ldGhvZCBuYW1lIHRvIGNh bGwgdmlhICRxcmMtPiRtZXRob2QoKQ0KCS8vICBleHBlY3RlZCBwYXJhbXMgYXJyYXkgYW5k IHRoZWlyIGZvcm1hdCByZWdleA0KCS8vVE9ETzogaWFwcGxpICgiYXBwIikNCgkkYWxsb3dl ZF90eXBlcyA9IGFycmF5KA0KCQkndGV4dCcgPT4gYXJyYXkoJ3RleHQnID0+IGFycmF5KCd0 ZXh0JyA9PiAkcmVfbXNnKSksDQoJCSdsaW5rJyA9PiBhcnJheSgnbGluaycgPT4gYXJyYXko J3VybCcgPT4gJHJlX3VybCkpLA0KCQknYm9va21hcmsnID0+IGFycmF5KCdib29rbWFyaycg PT4gYXJyYXkoJ3RpdGxlJyA9PiAkcmVfbXNnLCAndXJsJyA9PiAkcmVfdXJsKSksDQoJCSdz bXMnID0+IGFycmF5KCdzbXMnID0+IGFycmF5KCdwaG9uZScgPT4gJHJlX3Bob25lLCAndGV4 dCcgPT4gJHJlX21zZykpLA0KCQkncGhvbmUnID0+IGFycmF5KCdwaG9uZV9udW1iZXInID0+ IGFycmF5KCdwaG9uZScgPT4gJHJlX3Bob25lKSksDQoJCSdjb250YWN0JyA9PiBhcnJheSgn Y29udGFjdF9pbmZvJyA9PiBhcnJheSgnbmFtZScgPT4gJHJlX21zZywgJ2FkZHJlc3MnID0+ ICRyZV9tc2csICdwaG9uZScgPT4gJHJlX3Bob25lLCAnZW1haWwnID0+ICRyZV9lbWFpbCkp LA0KCQknZW1haWwnID0+IGFycmF5KCdlbWFpbCcgPT4gYXJyYXkoJ2VtYWlsJyA9PiAkcmVf ZW1haWwsICdzdWJqZWN0JyA9PiAkcmVfbXNnLCAnbWVzc2FnZScgPT4gJHJlX21zZykpLA0K CQknZ2VvJyA9PiBhcnJheSgnZ2VvJyA9PiBhcnJheSgnbGF0JyA9PiAkcmVfZ2VvLCAnbG9u JyA9PiAkcmVfZ2VvLCAnaGVpZ2h0JyA9PiAkcmVfZGlnaXRzKSksDQoJCSd3aWZpJyA9PiBh cnJheSgnd2lmaScgPT4gYXJyYXkoJ3R5cGUnID0+ICdeW1dFUHxXUEFdJCcsICdzc2lkJyA9 PiAkcmVfbXNnLCAncGFzcycgPT4gJHJlX21zZykpLA0KCSk7DQoNCglpZiAoYXJyYXlfa2V5 X2V4aXN0cygkdHlwZSwgJGFsbG93ZWRfdHlwZXMpKSB7DQoJCSRxcmMgPSBuZXcgc21kX3Fy Y29kZSgkd2lkdGgsICRoZWlnaHQsICRxdWFsaXR5LCAkbWFyZ2luLCAkYmdjb2wsICRhbHBo YSwgJGVzY2FwZSk7DQoNCgkJJGVudHJ5ID0gJGFsbG93ZWRfdHlwZXNbJHR5cGVdOw0KCQkv LyBPbmx5IGV2ZXIgb25lICJlbnRyeSIgYnV0IGl0J3MgdGhlIHNpbXBsZXN0IHdheSB0byBz cGxpdCBrZXk9PnZhbHVlDQoJCWZvcmVhY2ggKCRlbnRyeSBhcyAkbWV0aG9kID0+ICRhdHRy aWJzKSB7DQoJCQkkcGFyYW1zID0gc21kX3FyY29kZV9leHRyYWN0KCRhdHRyaWJzLCAkZGF0 YSwgJGRlbGltLCAkbWV0aG9kLCAkZGVidWcpOw0KCQl9DQoNCgkJaWYgKCRwYXJhbXMgPT09 IGZhbHNlKSB7DQoJCQlyZXR1cm4gJyc7DQoJCX0gZWxzZSB7DQoJCQkvLyBSdW4gdGhlIGZ1 bmN0aW9uIHRoYXQgcHJlcGFyZXMgdGhlIGRhdGEgb2JqZWN0DQoJCQkkcXJjLT4kbWV0aG9k KCRwYXJhbXMpOw0KCQl9DQoNCgkJaWYgKCRmb3JtYXQgPT0gJ3ZpZXcnKSB7DQoJCQkkdHJp YnMgPSAnJzsNCgkJCWlmICghJHdyYXB0YWcpIHsNCgkJCQkkdHJpYnMgLj0gKCRjbGFzcykg PyAnIGNsYXNzPSInLiRjbGFzcy4nIicgOiAnJzsNCgkJCQkkdHJpYnMgLj0gKCRodG1sX2lk KSA/ICcgaWQ9IicuJGh0bWxfaWQuJyInIDogJyc7DQoJCQl9DQoNCgkJCSRjb250ZW50ID0g JzxpbWcgc3JjPSInIC4gJHFyYy0+Z2V0X2xpbmsoKSAuICciJy4kdHJpYnMuJyBhbHQ9IlFS IGNvZGUiIC8+JzsNCg0KCQkJcmV0dXJuICgkd3JhcHRhZykgPyBkb1RhZygkY29udGVudCwg JHdyYXB0YWcsICRjbGFzcywgJycsICRodG1sX2lkKSA6ICRjb250ZW50Ow0KDQoJCX0gZWxz ZWlmICgkZm9ybWF0ID09ICdkb3dubG9hZCcpIHsNCgkJCSRmaWxlID0gJHFyYy0+Z2V0X2lt YWdlKCk7DQoJCQkkcXJjLT5kb3dubG9hZF9pbWFnZSgkZmlsZSk7DQoJCQlyZXR1cm4gJyc7 DQoJCX0gZWxzZWlmICgkZm9ybWF0ID09ICdyYXcnKSB7DQoJCQkkY29udGVudCA9ICRxcmMt PmdldF9saW5rKCk7DQoJCQlyZXR1cm4gKCR3cmFwdGFnKSA/IGRvVGFnKCRjb250ZW50LCAk d3JhcHRhZywgJGNsYXNzLCAnJywgJGh0bWxfaWQpIDogJGNvbnRlbnQ7DQoJCX0NCgl9IGVs c2Ugew0KCQl0cmlnZ2VyX2Vycm9yKHNtZF9xcl9jb2RlX2dUeHQoJ3NtZF9xcl9jb2RlX2lu dmFsaWRfdHlwZScsIGFycmF5KCd7dHlwZX0nID0+ICR0eXBlKSksIEVfVVNFUl9OT1RJQ0Up Ow0KCQlyZXR1cm4gJyc7DQoJfQ0KfQ0KDQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ZnVuY3Rpb24gc21kX3FyY29kZV9leHRyYWN0KCRwZXJtaXR0ZWQsICRkYXRhLCAkZGxtLCAk dGFnLCAkZGVidWc9ZmFsc2UpIHsNCgkkb3B0cyA9IGRvX2xpc3QoJGRhdGEsICRkbG0pOw0K DQoJJG91dCA9IGFycmF5KCk7DQoJJGNvdW50ID0gMDsNCg0KCWlmICgkZGVidWcpIHsNCgkJ ZWNobyAnKysgUEVSTUlUVEVEIElURU1TIC8gU1VQUExJRUQgSVRFTVMgKysnOw0KCQlkbXAo JHBlcm1pdHRlZCwgJG9wdHMpOw0KCX0NCg0KCWlmIChjb3VudCgkcGVybWl0dGVkKSAhPSBj b3VudCgkb3B0cykpIHsNCgkJdHJpZ2dlcl9lcnJvcihzbWRfcXJfY29kZV9nVHh0KCdzbWRf cXJfY29kZV9hdHRyaWJ1dGVfbWlzbWF0Y2gnLCBhcnJheSgne3R5cGV9JyA9PiAkdGFnLCAn e2NvdW50fScgPT4gY291bnQoJG9wdHMpLCAne2V4cGVjdGVkfScgPT4gY291bnQoJHBlcm1p dHRlZCkpKSwgRV9VU0VSX05PVElDRSk7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglmb3Jl YWNoICgkcGVybWl0dGVkIGFzICRpZHggPT4gJHZhcnMpIHsNCgkJaWYgKGlzc2V0KCRvcHRz WyRjb3VudF0pKSB7DQoJCQkkZGF0YXZhbCA9ICRvcHRzWyRjb3VudF07DQoJCQlpZiAocHJl Z19tYXRjaCgkdmFycywgJGRhdGF2YWwpKSB7DQoJCQkJJG91dFskaWR4XSA9ICRkYXRhdmFs Ow0KCQkJfSBlbHNlIHsNCgkJCQl0cmlnZ2VyX2Vycm9yKHNtZF9xcl9jb2RlX2dUeHQoJ3Nt ZF9xcl9jb2RlX2ludmFsaWRfYXR0cmlidXRlJywgYXJyYXkoJ3thdHRyaWJ9JyA9PiAkaWR4 LCAne3RhZ30nID0+ICR0YWcpKSwgRV9VU0VSX05PVElDRSk7DQoJCQkJcmV0dXJuIGZhbHNl Ow0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJLy8gVE9ETzogZXJtLi4uPw0KCQl9DQoJCSRjb3Vu dCsrOw0KCX0NCg0KCXJldHVybiAkb3V0Ow0KfQ0KDQpmdW5jdGlvbiBzbWRfcXJfY29kZV9n VHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsNCgkkbGFuZyA9IGFycmF5KA0KCQknc21k X3FyX2NvZGVfYXR0cmlidXRlX21pc21hdGNoJyA9PiAiTnVtYmVyIG9mIHBhcmFtZXRlcnMg ZG9uJ3QgbWF0Y2ggaW4gJ3t0eXBlfScgUVIgY29kZTogZ2l2ZW4ge2NvdW50fSwgZXhwZWN0 aW5nIHtleHBlY3RlZH0iLA0KCQknc21kX3FyX2NvZGVfaW52YWxpZF9hdHRyaWJ1dGUnID0+ ICJJbnZhbGlkIGF0dHJpYnV0ZSAne2F0dHJpYn0nIHN1cHBsaWVkIGluICd7dGFnfScgUVIg Y29kZS4gQ2hlY2sgdGhlIGZvcm1hdCBhbmQgb3JkZXIgb2YgZGF0YSBpdGVtcyIsDQoJCSdz bWRfcXJfY29kZV9pbnZhbGlkX3R5cGUnID0+ICJJbnZhbGlkIFFSIGNvZGUgdHlwZSAne3R5 cGV9JyIsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAkYXR0cyk7DQp9DQoN Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogVGhpcyBzY3JpcHQgaXMg ZGV2ZWxvcGVkIGJ5IEFydHVycyBTb3NpbnMgYWthIGFyMnJzYXdzZWVuLCBodHRwOi8vY29k ZS1zbmlwcGV0cy5jby5jYw0KICogRmVlbCBmcmVlIHRvIGRpc3RyaWJ1dGUgYW5kIG1vZGlm eSBjb2RlLCBidXQga2VlcCByZWZlcmVuY2UgdG8gaXRzIGNyZWF0b3INCiAqDQogKiBDbGFz cyBuYW1lIHByZWZpeGVkIHdpdGggc21kXyBmb3IgdXNlIGluIFRleHRwYXR0ZXJuICh0byBh dm9pZCBuYW1lc3BhY2UgY2xhc2hlcykNCiAqIE1vZGlmaWVkIGJ5IFN0ZWYgRGF3c29uIGZv ciBUZXh0cGF0dGVybg0KICoNCiAqIFRoaXMgY2xhc3MgZ2VuZXJhdGUgUVIgW1F1aWNrIFJl c3BvbnNlXSBjb2RlcyB3aXRoIHByb3BlciBtZXRhZGF0YSBmb3IgbW9iaWxlICBwaG9uZXMN CiAqIHVzaW5nIGdvb2dsZSBjaGFydCBhcGkgaHR0cDovL2NoYXJ0LmFwaXMuZ29vZ2xlLmNv bQ0KICogSGVyZSBhcmUgc291cmNlcyB3aXRoIGZyZWUgUVIgY29kZSByZWFkaW5nIHNvZnR3 YXJlIGZvciBtb2JpbGUgcGhvbmVzOg0KICogaHR0cDovL3JlYWRlci5rYXl3YS5jb20vDQog KiBodHRwOi8vd3d3LnF1aWNrbWFyay5jb20udHcvRW4vYmFzaWMvZG93bmxvYWQuYXNwDQog KiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvenhpbmcvDQogKg0KICogRm9yIG1vcmUgaW5m b3JtYXRpb24sIGV4YW1wbGVzIGFuZCBvbmxpbmUgZG9jdW1lbnRhdGlvbiB2aXNpdDoNCiAq IGh0dHA6Ly9jb2RlLXNuaXBwZXRzLmNvLmNjL1BIUC1jbGFzc2VzL1FSLWNvZGUtZ2VuZXJh dG9yLWNsYXNzDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KY2xhc3Mg c21kX3FyY29kZQ0Kew0KCXByaXZhdGUgJGFwaSA9ICdodHRwOi8vY2hhcnQuYXBpcy5nb29n bGUuY29tL2NoYXJ0JzsNCglwcml2YXRlICRkYXRhOw0KCXByaXZhdGUgJGRpbWVuc2lvbnMg PSAnJzsNCglwcml2YXRlICRxdWFsaXR5ID0gJyc7DQoJcHJpdmF0ZSAkY29sb3VyID0gJyc7 DQoJcHJpdmF0ZSAkZXNjYXBlID0gJyc7DQoNCgkvLyBDb25zdHJ1Y3Rvcg0KCXB1YmxpYyBm dW5jdGlvbiBzbWRfcXJjb2RlKCR3aWR0aCwgJGhlaWdodCwgJHF1YWwsICRtYXJnaW4sICRi Z2NvbCwgJGFscGhhLCAkZXNjKSB7DQoJCSR0aGlzLT5lc2NhcGUgPSAkZXNjOw0KDQoJCS8v IEJ1aWxkIEFQSSBzdHJpbmdzDQoJCSR3ID0gKGlzX251bWVyaWMoJHdpZHRoKSkgPyAkd2lk dGggOiAyMDA7DQoJCSRoID0gKGlzX251bWVyaWMoJGhlaWdodCkpID8gJGhlaWdodCA6IDIw MDsNCgkJJHRoaXMtPmRpbWVuc2lvbnMgPSAkdy4neCcuJGg7DQoNCgkJJGNvbG91cnMgPSBh cnJheSgpOw0KCQlpZiAoJGFscGhhKSAkY29sb3Vyc1tdID0gJ2EscywwMDAwMDAnLnN1YnN0 cigkYWxwaGEsIC0yKTsNCgkJaWYgKCRiZ2NvbCkgJGNvbG91cnNbXSA9ICdiZyxzLCcuJGJn Y29sOw0KCQkkdGhpcy0+Y29sb3VyID0gKCRjb2xvdXJzKSA/IGpvaW4oJ3wnLCAkY29sb3Vy cykgOiAnJzsNCg0KCQkkcXVhbCA9IHN0cnRvdXBwZXIoJHF1YWwpOw0KCQkkc3pvcHRzW10g PSAoJHF1YWwgJiYgaW5fYXJyYXkoJHF1YWwsIGFycmF5KCdMJywgJ00nLCAnUScsICdIJykp KSA/ICRxdWFsIDogJ0wnOw0KCQlpZiAoaXNfbnVtZXJpYygkbWFyZ2luKSkgJHN6b3B0c1td ID0gJG1hcmdpbjsNCgkJJHRoaXMtPnF1YWxpdHkgPSBqb2luKCd8JywgJHN6b3B0cyk7DQoJ fQ0KDQoJLy8gY3JlYXRlIGNvZGUgd2l0aCBsaW5rIG1ldGFkYXRhDQoJcHVibGljIGZ1bmN0 aW9uIGxpbmsoJGFyZ3MpIHsNCgkJZXh0cmFjdCgkYXJncyk7DQoJCWlmIChwcmVnX21hdGNo KCcvXmh0dHA6XC9cLy8nLCAkdXJsKSB8fCBwcmVnX21hdGNoKCcvXmh0dHBzOlwvXC8vJywg JHVybCkpIHsNCgkJCSR0aGlzLT5kYXRhID0gJHVybDsNCgkJfSBlbHNlIHsNCgkJCSR0aGlz LT5kYXRhID0gImh0dHA6Ly8iLiR1cmw7DQoJCX0NCgl9DQoNCgkvLyBjcmVhdGUgY29kZSB3 aXRoIGJvb2ttYXJrIG1ldGFkYXRhDQoJcHVibGljIGZ1bmN0aW9uIGJvb2ttYXJrKCRhcmdz KSB7DQoJCWV4dHJhY3QoJGFyZ3MpOw0KCQkkdGhpcy0+ZGF0YSA9ICJNRUJLTTpUSVRMRToi LiR0aXRsZS4iO1VSTDoiLiR1cmwuIjs7IjsNCgl9DQoNCgkvLyBjcmVhdGUgdGV4dCBxciBj b2RlDQoJcHVibGljIGZ1bmN0aW9uIHRleHQoJGFyZ3MpIHsNCgkJZXh0cmFjdCgkYXJncyk7 DQoJCSR0aGlzLT5kYXRhID0gJHRleHQ7DQoJfQ0KDQoJLy8gY3JlYXRlIGNvZGUgd2l0aCBz bXMgbWV0YWRhdGENCglwdWJsaWMgZnVuY3Rpb24gc21zKCRhcmdzKSB7DQoJCWV4dHJhY3Qo JGFyZ3MpOw0KCQkkdGhpcy0+ZGF0YSA9ICJTTVNUTzoiLiRwaG9uZS4iOiIuJHRleHQ7DQoJ fQ0KDQoJLy8gY3JlYXRlIGNvZGUgd2l0aCBwaG9uZSBudW1iZXINCglwdWJsaWMgZnVuY3Rp b24gcGhvbmVfbnVtYmVyKCRhcmdzKSB7DQoJCWV4dHJhY3QoJGFyZ3MpOw0KCQkkdGhpcy0+ ZGF0YSA9ICJURUw6Ii4kcGhvbmU7DQoJfQ0KDQoJLy8gY3JlYXRlIGNvZGUgd2l0aCBtZWNh cmQgbWV0YWRhdGENCglwdWJsaWMgZnVuY3Rpb24gY29udGFjdF9pbmZvKCRhcmdzKSB7DQoJ CWV4dHJhY3QoJGFyZ3MpOw0KCQkkdGhpcy0+ZGF0YSA9ICJNRUNBUkQ6TjoiLiRuYW1lLiI7 QURSOiIuJGFkZHJlc3MuIjtURUw6Ii4kcGhvbmUuIjtFTUFJTDoiLiRlbWFpbC4iOzsiOw0K CX0NCg0KCS8vIGNyZWF0ZSBjb2RlIHd0aCBlbWFpbCBtZXRhZGF0YQ0KCXB1YmxpYyBmdW5j dGlvbiBlbWFpbCgkYXJncykgew0KCQlleHRyYWN0KCRhcmdzKTsNCgkJJHRoaXMtPmRhdGEg PSAiTUFUTVNHOlRPOiIuJGVtYWlsLiI7U1VCOiIuJHN1YmplY3QuIjtCT0RZOiIuJG1lc3Nh Z2UuIjs7IjsNCgl9DQoNCgkvLyBjcmVhdGUgY29kZSB3aXRoIGdlbyBsb2NhdGlvbiBtZXRh ZGF0YQ0KCXB1YmxpYyBmdW5jdGlvbiBnZW8oJGFyZ3MpIHsNCgkJZXh0cmFjdCgkYXJncyk7 DQoJCSR0aGlzLT5kYXRhID0gIkdFTzoiLiRsYXQuIiwiLiRsb24uIiwiLiRoZWlnaHQ7DQoJ fQ0KDQoJLy8gY3JlYXRlIGNvZGUgd2l0aCB3aWZpIGNvbmZpZ3VyYXRpb24gbWV0YWRhdGEN CglwdWJsaWMgZnVuY3Rpb24gd2lmaSgkYXJncykgew0KCQlleHRyYWN0KCRhcmdzKTsNCgkJ JHRoaXMtPmRhdGEgPSAiV0lGSTpUOiIuJHR5cGUuIjtTIi4kc3NpZC4iOyIuJHBhc3MuIjs7 IjsNCgl9DQoNCgkvLyBUT0RPDQoJLy8gY3JlYXRlIGNvZGUgd2l0aCBpLWFwcGxpIGFjdGl2 YXRpbmcgbWV0YSBkYXRhDQoJcHVibGljIGZ1bmN0aW9uIGlhcHBsaSgkYWRmLCAkY21kLCAk cGFyYW0pIHsNCgkJJHBhcmFtX3N0ciA9ICIiOw0KCQlmb3JlYWNoKCRwYXJhbSBhcyAkdmFs KQ0KCQl7DQoJCQkkcGFyYW1fc3RyIC49ICJQQVJBTToiLiR2YWxbIm5hbWUiXS4iLCIuJHZh bFsidmFsdWUiXS4iOyI7DQoJCX0NCgkJJHRoaXMtPmRhdGEgPSAiTEFQTDpBREZVUkw6Ii4k YWRmLiI7Q01EOiIuJGNtZC4iOyIuJHBhcmFtX3N0ci4iOyI7DQoJfQ0KDQoJLy8gY3JlYXRl IGNvZGUgd2l0aCBnaWYgb3IganBnIGltYWdlLCBvciBzbWYgb3IgTUZpIG9mIFRvcnVDYSBm aWxlcyBhcyBjb250ZW50DQoJcHVibGljIGZ1bmN0aW9uIGNvbnRlbnQoJGFyZ3MpIHsNCgkJ ZXh0cmFjdCgkYXJncyk7DQoJCSR0aGlzLT5kYXRhID0gIkNOVFM6VFlQRToiLiR0eXBlLiI7 TE5HOiIuJHNpemUuIjtCT0RZOiIuJGNvbnRlbnQuIjs7IjsNCgl9DQoNCglwcml2YXRlIGZ1 bmN0aW9uIGdldF91cmxfcGFyYW1zKCkgew0KCQkkcGFyYW1zID0gYXJyYXkoDQoJCQknY2h0 JyA9PiAncXInLA0KCQkJJ2NocycgPT4gJHRoaXMtPmRpbWVuc2lvbnMsDQoJCQknY2hsZCcg PT4gJHRoaXMtPnF1YWxpdHksDQoJCQknY2hsJyA9PiAoKCR0aGlzLT5lc2NhcGUgPT0gJ2h0 bWwnKSA/IHVybGVuY29kZSgkdGhpcy0+ZGF0YSkgOiAkdGhpcy0+ZGF0YSksDQoJCSk7DQoN CgkJLy8gQ29sb3VyIGlzIG9wdGlvbmFsDQoJCWlmICgkdGhpcy0+Y29sb3VyKSB7DQoJCQkk cGFyYW1zWydjaGYnXSA9ICR0aGlzLT5jb2xvdXI7DQoJCX0NCg0KCQlyZXR1cm4gaHR0cF9i dWlsZF9xdWVyeSgkcGFyYW1zLCAnJywgJyZhbXA7Jyk7DQoJfQ0KDQoJLy8gZ2V0IGltYWdl DQoJcHVibGljIGZ1bmN0aW9uIGdldF9pbWFnZSgpew0KCQkkY2ggPSBjdXJsX2luaXQoKTsN CgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgJHRoaXMtPmFwaSk7DQoJCWN1cmxf c2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCB0cnVlKTsNCgkJY3VybF9zZXRvcHQoJGNoLCBD VVJMT1BUX1BPU1RGSUVMRFMsICR0aGlzLT5nZXRfdXJsX3BhcmFtcygpKTsNCgkJY3VybF9z ZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsNCgkJY3VybF9zZXRv cHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgZmFsc2UpOw0KCQljdXJsX3NldG9wdCgkY2gsIENV UkxPUFRfVElNRU9VVCwgMzApOw0KDQoJCSRyZXNwb25zZSA9IGN1cmxfZXhlYygkY2gpOw0K CQljdXJsX2Nsb3NlKCRjaCk7DQoJCXJldHVybiAkcmVzcG9uc2U7DQoJfQ0KDQoJLy8gZ2V0 IGxpbmsgZm9yIGltYWdlDQoJcHVibGljIGZ1bmN0aW9uIGdldF9saW5rKCRmb2xsb3c9ZmFs c2Upew0KCQlyZXR1cm4gJHRoaXMtPmFwaS4nPycuJHRoaXMtPmdldF91cmxfcGFyYW1zKCk7 DQoJfQ0KDQoJLy8gZm9yY2UgaW1hZ2UgZG93bmxvYWQNCglwdWJsaWMgZnVuY3Rpb24gZG93 bmxvYWRfaW1hZ2UoJGZpbGUpew0KCQloZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZp bGUgVHJhbnNmZXInKTsNCgkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGltYWdlL3BuZycpOw0K CQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPXFy X2NvZGUucG5nJyk7DQoJCWhlYWRlcignQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmlu YXJ5Jyk7DQoJCWhlYWRlcignRXhwaXJlczogMCcpOw0KCQloZWFkZXIoJ0NhY2hlLUNvbnRy b2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpOw0KCQlo ZWFkZXIoJ1ByYWdtYTogcHVibGljJyk7DQoJCWhlYWRlcignQ29udGVudC1MZW5ndGg6ICcg LiBmaWxlc2l6ZSgkZmlsZSkpOw0KCQlvYl9jbGVhbigpOw0KCQlmbHVzaCgpOw0KCQllY2hv ICRmaWxlOw0KCX0NCn0iO3M6NDoidHlwZSI7czoxOiIwIjtzOjU6Im9yZGVyIjtzOjE6IjUi O3M6NToiZmxhZ3MiO3M6MToiMCI7czo0OiJoZWxwIjtzOjkyNDk6IjxkaXYgaWQ9InNtZF9o ZWxwIj4KCgk8aDE+c21kX3FyX2NvZGU8L2gxPgoKCTxwPkNyZWF0ZSBRdWljayBSZXNwb25z ZSAyLUQgYmFyY29kZXMgb24gdGhlIGZseSBjb250YWluaW5nIGEgdmFyaWV0eSBvZiBkYXRh OiB0ZXh0LCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBsaW5rcywgY29udGFjdCBk ZXRhaWxzLCBnZW9ncmFwaGljYWwgbG9jYXRpb24gZGF0YSwgd2lmaSBob3RzcG90IHJlcXVl c3RzLCBhbmQgc28gb24uIENob29zZSB0byBlbWJlZCB0aGUgYmFyY29kZSBkaXJlY3RseSBv biB5b3VyIHBhZ2Ugb3Igb2ZmZXIgaXQgYXMgYSBkb3dubG9hZC48L3A+CgoJPGgyPkF1dGhv ciAvIGNyZWRpdHM8L2gyPgoKCTxwPldyaXR0ZW4gYnkgPGEgaHJlZj0iaHR0cDovL3N0ZWZk YXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi4gQ3JlZGl0cyBhbHNvIGdvIHRv IHRoZSBHb29nbGUgQ2hhcnRzIDxzcGFuIGNsYXNzPSJjYXBzIj5BUEk8L3NwYW4+IGFuZCBB cnR1cnMgU29zaW5zJiM4MjE3OyBpbnRlcmZhY2UsIHdoaWNoIEkgaGFja2VkIGZvciA8c3Bh biBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBhbmQgaW1wcm92ZWQuIE1hbnkgdGhhbmtzIHRv IGFsbCBpbnZvbHZlZC48L3A+CgoJPGgyPkluc3RhbGxhdGlvbiAvIHVuaW5zdGFsbGF0aW9u PC9oMj4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5SZXF1aXJlcyA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiA0LjQuMCssIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IDUg KHdpdGggPHNwYW4gY2xhc3M9ImNhcHMiPkNVUkw8L3NwYW4+KSBhbmQgSW50ZXJuZXQgYWNj ZXNzPC9wPgoKCTxwPkRvd25sb2FkIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0i aHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzEyMTkvc21kX3FyX2NvZGUiPnRleHRw YXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20v c3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA8ZW0+QWRtaW4gLSZndDsgUGx1Z2luczwvZW0+IHBh bmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBUbyB1bmluc3RhbGwsIGRlbGV0 ZSBmcm9tIHRoZSA8ZW0+QWRtaW4gLSZndDsgUGx1Z2luczwvZW0+IHBhZ2UuPC9wPgoKCTxw PlZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0 b3BpYy5waHA/aWQ9MzU4ODYiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0 byByZXBvcnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9w PgoKCTxoMj5Vc2FnZTogPGNvZGU+Jmx0O3R4cDpzbWRfcXJfY29kZSAvJmd0OzwvY29kZT48 L2gyPgoKCTxwPlRoZSBwbHVnaW4gYWRkcyBvbmUgdGFnIHdoaWNoIHlvdSBjYW4gdXNlIHRv IGVtYmVkIGEgUVIgY29kZSBvbiB5b3VyIHBhZ2UuIFRoZSB0YWcgYXR0cmlidXRlcyBhcmU6 PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+IDogY2hv b3NlIGZyb20gb25lIG9mOgoJPHVsPgoJCTxsaT48c3Ryb25nPnRleHQ8L3N0cm9uZz4gJiM4 MjEyOyAodGhlIGRlZmF1bHQpIHRha2VzIHRoZSB0ZXh0IHRvIGJlIGVuY29kZWQ8L2xpPgoJ CTxsaT48c3Ryb25nPmxpbms8L3N0cm9uZz4gJiM4MjEyOyB0YWtlcyBhIDxzcGFuIGNsYXNz PSJjYXBzIj5VUkw8L3NwYW4+LCB3aXRoIG9yIHdpdGhvdXQgdGhlIHNjaGVtZSBwcmVmaXg8 L2xpPgoJCTxsaT48c3Ryb25nPmJvb2ttYXJrPC9zdHJvbmc+ICYjODIxMjsgdGFrZXMgKDEp IGEgdGl0bGUgYW5kICgyKSBhIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+PC9saT4K CQk8bGk+PHN0cm9uZz5zbXM8L3N0cm9uZz4gJiM4MjEyOyByZXF1aXJlcyAoMSkgYSBwaG9u ZSBudW1iZXIgYW5kICgyKSBhIG1lc3NhZ2UgdG8gc2VuZDwvbGk+CgkJPGxpPjxzdHJvbmc+ cGhvbmU8L3N0cm9uZz4gJiM4MjEyOyB0YWtlcyBhIHBob25lIG51bWJlcjwvbGk+CgkJPGxp PjxzdHJvbmc+ZW1haWw8L3N0cm9uZz4gJiM4MjEyOyB0YWtlcyBhbiBlLW1haWwgYWRkcmVz czwvbGk+CgkJPGxpPjxzdHJvbmc+Y29udGFjdDwvc3Ryb25nPiAmIzgyMTI7IGEgPHNwYW4g Y2xhc3M9ImNhcHMiPk1FQ0FSRDwvc3Bhbj4gY29tcHJpc2luZyAoMSkgbmFtZSwgKDIpIGFk ZHJlc3MsICgzKSBwaG9uZSBudW1iZXIsIGFuZCAoNCkgZS1tYWlsIGFkZHJlc3M8L2xpPgoJ CTxsaT48c3Ryb25nPmdlbzwvc3Ryb25nPiAmIzgyMTI7IHRha2VzICgxKSBsYXRpdHVkZSwg KDIpIGxvbmdpdHVkZSwgYW5kICgzKSBoZWlnaHQgYWJvdmUgdGhlIGVhcnRoJiM4MjE3O3Mg c3VyZmFjZTwvbGk+CgkJPGxpPjxzdHJvbmc+d2lmaTwvc3Ryb25nPiAmIzgyMTI7IHJlcXVp cmVzICgxKSA8Y29kZT5XRVA8L2NvZGU+IG9yIDxjb2RlPldQQTwvY29kZT4sICgyKSB0aGUg bmV0d29yayYjODIxNztzIDxzcGFuIGNsYXNzPSJjYXBzIj5TU0lEPC9zcGFuPiwgYW5kICgz KSB0aGUgbmV0d29yayBwYXNzd29yZDwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5kYXRhPC9zcGFuPiA6IHRoZSBpbmZvcm1hdGlvbiB0byBwdXQgaW4gdGhl IFFSIGNvZGUuIFRoZSBkYXRhIGlzIGRlcGVuZGVudCBvbiB0aGUgPGNvZGU+dHlwZTwvY29k ZT4gJiM4MjEyOyBzZWUgYWJvdmUgZm9yIGRldGFpbHMgb24gdGhlIHF1YW50aXR5IGFuZCBv cmRlciBvZiBkYXRhIHlvdSBwdXQgaW4gdGhlIDxjb2RlPmRhdGE8L2NvZGU+IGF0dHJpYnV0 ZS4gRm9yIGV4YW1wbGUsIDxjb2RlPnR5cGU9JnF1b3Q7Ym9va21hcmsmcXVvdDsgZGF0YT0m cXVvdDsyMCwwMDAgTGVhZ3VlcyB1bmRlciB0aGUgU2VhfHd3dy5qdWxlcy12ZXJuZS5jby51 ay8mcXVvdDs8L2NvZGU+LiBEZWxpbWl0IHRoZSBkYXRhIHdpdGggYSBwaXBlICh0aG91Z2gg dGhpcyBjYW4gYmUgY2hhbmdlZCB3aXRoIHRoZSA8Y29kZT5kZWxpbTwvY29kZT4gYXR0cmli dXRlIGlmIHJlcXVpcmVkKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5kZWxpbTwv c3Bhbj4gOiB0aGUgZGVsaW1pdGVyIHRvIHVzZSBiZXR3ZWVuIDxjb2RlPmRhdGE8L2NvZGU+ IGl0ZW1zLiBEZWZhdWx0OiA8Y29kZT58PC9jb2RlPiAocGlwZSk8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+Zm9ybWF0PC9zcGFuPiA6IHdoZXRoZXIgeW91IHdpc2ggdG8gPGNv ZGU+dmlldzwvY29kZT4gdGhlIGJhcmNvZGUgaW5saW5lIChpbnNpZGUgYW4gPGNvZGU+Jmx0 O2ltZyZndDs8L2NvZGU+IHRhZyksIGZvcmNlIGl0IHRvIDxjb2RlPmRvd25sb2FkPC9jb2Rl Piwgb3Igb3V0cHV0IHRoZSA8Y29kZT5yYXc8L2NvZGU+IGxpbmsgc28geW91IGNhbiBjcmFm dCB5b3VyIG93biB1c2UgZm9yIGl0LiBEZWZhdWx0OiA8Y29kZT52aWV3PC9jb2RlPjwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5lc2NhcGU8L3NwYW4+IDogRXNjYXBlIDxzcGFu IGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBlbnRpdGllcyBzdWNoIGFzIDxjb2RlPiZsdDs8 L2NvZGU+LCA8Y29kZT4mZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+JmFtcDs8L2NvZGU+LiBVc2Ug PGNvZGU+ZXNjYXBlPSZxdW90O2h0bWwmcXVvdDs8L2NvZGU+IHRvIHN3aXRjaCB0aGlzIG9u LiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj53aWR0aDwv c3Bhbj4gOiB3aWR0aCBvZiB0aGUgY29kZSwgaW4gcGl4ZWxzLiBEZWZhdXQ6IDIwMDwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5oZWlnaHQ8L3NwYW4+IDogaGVpZ2h0IG9mIHRo ZSBjb2RlLCBpbiBwaXhlbHMuIERlZmF1bHQ6IDIwMDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5xdWFsaXR5PC9zcGFuPiA6IHRoZSBhbW91bnQgb2YgZXJyb3IgY29ycmVjdGlv biB0aGF0IHRoZSBiYXJjb2RlIGNhbiB0b2xlcmF0ZToKCTx1bD4KCQk8bGk+PHN0cm9uZz5M PC9zdHJvbmc+ICYjODIxMjsgTG93OiA3JSAoZGVmYXVsdCk8L2xpPgoJCTxsaT48c3Ryb25n Pk08L3N0cm9uZz4gJiM4MjEyOyBNZWRpdW06IDE1JTwvbGk+CgkJPGxpPjxzdHJvbmc+UTwv c3Ryb25nPiAmIzgyMTI7IFF1YXJ0aWxlOiAyNSU8L2xpPgoJCTxsaT48c3Ryb25nPkg8L3N0 cm9uZz4gJiM4MjEyOyBIaWdoOiAzMCU8L2xpPgoJPC91bD48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+bWFyZ2luPC9zcGFuPiA6IHRoZSBtYXJnaW4gKGluIFFSIGNvZGUgJiM4 MjIwO3Jvd3MmIzgyMjE7KSBhcm91bmQgdGhlIGltYWdlLiBEZWZhdWx0OiA0PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmJnY29sPC9zcGFuPiA6IGJhY2tncm91bmQgY29sb3Vy IGFzIGFuIDxzcGFuIGNsYXNzPSJjYXBzIj5SR0I8L3NwYW4+IGhleCBjb2RlICh3aXRob3V0 IHRoZSAjKS4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ YWxwaGE8L3NwYW4+IDogYWxwaGEgdHJhbnNwYXJlbmN5IGFzIGEgaGV4IHZhbHVlIGZyb20g MDAgKHRyYW5zcGFyZW50KSB0byBGRiAoc29saWQpLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj53cmFwdGFnPC9zcGFuPiA6IHRoZSAoWClIVE1MIHRh ZyAmIzgyMTI7IHNwZWNpZmllZCB3aXRob3V0IGFuZ2xlIGJyYWNrZXRzICYjODIxMjsgdG8g d3JhcCBhcm91bmQgdGhlIG91dHB1dC4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+Y2xhc3M8L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5D U1M8L3NwYW4+IGNsYXNzbmFtZSB0byBhcHBseSB0byB0aGUgd3JhcHRhZyAoaWYgcHJlc2Vu dCkgb3IgdGhlIDxjb2RlPiZsdDtpbWcmZ3Q7PC9jb2RlPiB0YWcgaWYgeW91IGhhdmUgY2hv c2VuIDxjb2RlPmZvcm1hdD0mcXVvdDt2aWV3JnF1b3Q7PC9jb2RlPi4gRGVmYXVsdDogdW5z ZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aHRtbF9pZDwvc3Bhbj4gOiB0aGUg PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGlkIHRvIGFwcGx5IHRvIHRoZSB3cmFw dGFnIChpZiBwcmVzZW50KSBvciB0aGUgPGNvZGU+Jmx0O2ltZyZndDs8L2NvZGU+IHRhZyBp ZiB5b3UgaGF2ZSBjaG9zZW4gPGNvZGU+Zm9ybWF0PSZxdW90O3ZpZXcmcXVvdDs8L2NvZGU+ LiBEZWZhdWx0OiB1bnNldDwvbGk+Cgk8L3VsPgoKCTxoMj5FeGFtcGxlczwvaDI+CgoJPGgz IGlkPSJlZzEiPkV4YW1wbGUgMTogQm9va21hcmsgcGVybWxpbmtzPC9oMz4KCgk8cD5JbiB5 b3VyIGRlZmF1bHQgRm9ybSBwdXQgYSBRUiBjb2RlIGFsb25nc2lkZSB5b3VyIGFydGljbGUg aGVhZGluZyBzbyBwZW9wbGUgY2FuIGJvb2ttYXJrIHRoZSBhcnRpY2xlIGJ5IHRha2luZyBh IHBpY3R1cmUgd2l0aCB0aGVpciBzbWFydCBwaG9uZTo8L3A+Cgo8cHJlIGNsYXNzPSJibG9j ayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7aDEgY2xhc3M9JnF1b3Q7ZW50cnktdGl0bGUm cXVvdDsmZ3Q7CiAgICZsdDt0eHA6cGVybWxpbmsmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZs dDsvdHhwOnBlcm1saW5rJmd0OwogICAmbHQ7dHhwOnNtZF9xcl9jb2RlIHR5cGU9JnF1b3Q7 Ym9va21hcmsmcXVvdDsKICAgICBkYXRhPSYjMzk7Jmx0O3R4cDp0aXRsZSAvJmd0O3wmbHQ7 dHhwOnBlcm1saW5rIC8mZ3Q7JiMzOTsKICAgICB3aWR0aD0mcXVvdDs1MCZxdW90OyBoZWln aHQ9JnF1b3Q7NTAmcXVvdDsKICAgICBxdWFsaXR5PSZxdW90O1EmcXVvdDsgLyZndDsKJmx0 Oy9oMSZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPk5vdGljZSB0aGF0IHNpbmNlIHRoZSBpbWFn ZSBzaXplIGhhcyBiZWVuIHJlZHVjZWQgdG8gZml0IGFsb25nc2lkZSB0aGUgdGl0bGUsIHRo ZSBxdWFsaXR5IChlcnJvciBkZXRlY3Rpb24vY29ycmVjdGlvbikgaGFzIGJlZW4gaW5jcmVh c2VkIHRvIGNvbXBlbnNhdGUuPC9wPgoKCTxoMyBpZD0iZWcyIj5FeGFtcGxlIDI6IEF1dGhv ciBjb250YWN0IGRldGFpbHM8L2gzPgoKCTxwPklmIHlvdSBoYXZlIHNtZF9iaW8gaW5zdGFs bGVkIHlvdSBjb3VsZCBhZGQgdGhlIGZvbGxvd2luZyBjb2RlIHRvIHRoZSAmIzgyMTY7cHVi bGlzaGVkIGJ5JiM4MjE3OyBzZWdtZW50IG9mIHlvdXIgYXJ0aWNsZXMuIEl0IHdpbGwgZGlz cGxheSBhIFFSIGNvZGUgZm9yIHRoZSBjb250YWN0IGRldGFpbHMgb2YgdGhlIGFydGljbGUm IzgyMTc7cyBhdXRob3IsIHRodXMgdmlzaXRvcnMgY2FuIHNjYW4gdGhlIGJhcmNvZGUgYW5k IGhhdmUgdGhlIGF1dGhvciYjODIxNztzIDxzcGFuIGNsYXNzPSJjYXBzIj5NRUNBUkQ8L3Nw YW4+IGFkZGVkIGRpcmVjdGx5IHRvIHRoZWlyIGFkZHJlc3MgYm9va3M6PC9wPgoKPHByZSBj bGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3AgY2xhc3M9JnF1b3Q7cHVi bGlzaGVkJnF1b3Q7Jmd0OwogICAmbHQ7dHhwOnBvc3RlZCAvJmd0OyBieSAmbHQ7dHhwOmF1 dGhvciB0aXRsZT0mcXVvdDswJnF1b3Q7IC8mZ3Q7CiAgICZsdDt0eHA6c21kX3FyX2NvZGUg dHlwZT0mcXVvdDtjb250YWN0JnF1b3Q7CiAgICAgZGF0YT0mIzM5OyZsdDt0eHA6YXV0aG9y IC8mZ3Q7CiAgICAgICAgfCAmbHQ7dHhwOnNtZF9iaW9faW5mbyBpdGVtcz0mcXVvdDthZGRy ZXNzJnF1b3Q7IGxhYmVsPSZxdW90OyZxdW90OyAvJmd0OwogICAgICAgIHwgJmx0O3R4cDpz bWRfYmlvX2luZm8gaXRlbXM9JnF1b3Q7cGhvbmUmcXVvdDsgbGFiZWw9JnF1b3Q7JnF1b3Q7 IC8mZ3Q7CiAgICAgICAgfCAmbHQ7dHhwOnNtZF9iaW9faW5mbyBpdGVtcz0mcXVvdDtlbWFp bCZxdW90OyBsYWJlbD0mcXVvdDsmcXVvdDsgLyZndDsgLyZndDsmIzM5OwogICAgIGJnY29s PSZxdW90O2JlYTdkMCZxdW90OyBtYXJnaW49JnF1b3Q7MSZxdW90OyAvJmd0OwombHQ7L3Am Z3Q7CjwvY29kZT48L3ByZT4KCgk8cD5UaGlzIG9uZSBoYXMgYSBuYXR0eSwgdGhpbiBwdXJw bGUgYm9yZGVyIHRvbyBjb3VydGVzeSBvZiB0aGUgPGNvZGU+Ymdjb2w8L2NvZGU+IGFuZCA8 Y29kZT5tYXJnaW48L2NvZGU+IGF0dHJpYnV0ZXMuPC9wPgoKCTxoMyBpZD0iZWczIj5FeGFt cGxlIDM6IEdlb2dyYXBoaWMgbG9jYXRpb248L2gzPgoKCTxwPk9yZ2FuaXNpbmcgYSBmbGFz aG1vYiBvbiBNb3VudCBLaWxpbWFuamFybz8gTWFrZSBzdXJlIHBlb3BsZSBjYW4gZmluZCB5 b3UgYnkgcHVibGlzaGluZyBhIFFSIGNvZGUgb24geW91ciBzaXRlOjwvcD4KCjxwcmUgY2xh c3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX3FyX2NvZGUgdHlw ZT0mcXVvdDtnZW8mcXVvdDsKICAgICBkYXRhPSZxdW90Oy0zLjA3NTgzIHwgMzcuMzUzMzMg fCA1ODk1JnF1b3Q7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8aDMgaWQ9ImVnNCI+RXhhbXBs ZSA0OiBSYXcgbGlua3M8L2gzPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJi bG9jayI+Jmx0O2EgaHJlZj0mcXVvdDsmbHQ7dHhwOnNtZF9xcl9jb2RlCiAgICAgdHlwZT0m cXVvdDtsaW5rJnF1b3Q7IGRhdGE9JnF1b3Q7bXlmYWJzaXRlLmNvbS92b3VjaGVycyZxdW90 OwogICAgIGZvcm1hdD0mcXVvdDtyYXcmcXVvdDsgLyZndDsmcXVvdDsmZ3Q7RG93bmxvYWQg eW91ciB2b3VjaGVyJmx0Oy9hJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+V2hpbGUgdGhpcyBv bmUgaXMganVzdCBhIGJvcmluZyA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBsaW5r IHRoZXJlJiM4MjE3O3Mgbm90aGluZyB0byBzdG9wIHlvdSBnZW5lcmF0aW5nIGEgcGVyc29u YWwgdm91Y2hlciBjb2RlLCBwZXJoYXBzIGFmdGVyIHRoZXkgaGF2ZSBzdWJtaXR0ZWQgdGhl aXIgY29udGFjdCBkZXRhaWxzIHZpYSB6ZW1fY29udGFjdF9yZWJvcm4sIGFuZCB0YWNraW5n IGl0IG9udG8gdGhlIGVuZCBvZiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4u PC9wPgoKCTxoMj5DaGFuZ2Vsb2c8L2gyPgoKCTxwPjMxIE1hciAxMSB8IDAuMTAgfCBJbml0 aWFsIHB1YmxpYyByZWxlYXNlPC9wPgoKPC9kaXY+CjwhLS0gKioqIEJFR0lOIFBMVUdJTiBD U1MgKioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAgeyBsaW5lLWhl aWdodDoxLjUgO30KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBmb250OiAx MDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5k LWNvbG9yOiAjZjBlNjhjOyBjb2xvcjojMzMzOyB9CiNzbWRfaGVscCBjb2RlLmJsb2NrIHsg Zm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBkaXNwbGF5OmJs b2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hlbHAg aDEgeyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1h bGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xp ZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5zLXNl cmlmOyB9CiNzbWRfaGVscCBoMyB7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fucy1zZXJp ZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDsgdGV4dC1kZWNvcmF0 aW9uOnVuZGVybGluZTt9CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwg c2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4 dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hlbHAgLmF0bm0geyBmb250LXdlaWdo dDpib2xkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJhY2tncm91bmQ6I2VlZTsgYm9yZGVyOjFw eCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFibGUgeyB3aWR0aDo5MCU7IHRleHQtYWxp Z246Y2VudGVyOyBwYWRkaW5nLWJvdHRvbToxZW07IGJvcmRlci1jb2xsYXBzZTpjb2xsYXBz ZTsgfQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7IGJvcmRlcjoxcHggc29saWQgIzk5 OTsgcGFkZGluZzouNWVtOyB9CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlwZTpzcXVh cmU7IH0KI3NtZF9oZWxwIC5pbXBvcnRhbnQgeyBjb2xvcjpyZWQ7IH0KI3NtZF9oZWxwIGxp IHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRfaGVscCAuYnJlYWsgeyBtYXJn aW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0tICoqKiBFTkQgUExVR0lOIENTUyAqKiogLS0+ CiI7czozOiJtZDUiO3M6MzI6IjFmYTRiNmQ1M2YwODk5ODNkZGFlMWVjMjBhNGJiNzA2Ijt9