X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f X-Recipient: geda-user AT delorie DOT com X-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=VP0UDiNw2a27UY+O+tk84hfwxlWn7fGqpw0+PXOrjZ0=; b=odkZSNWPCIKpXKOJD5Xf4hhxDUp3LXtVcxRZy97u0XxiJ/7uFuVF0ELNJblc5Ew5Us WtstpOswHqac8JfkhkmVEeviJJtz4iNXhQXIFDWymSzUxPp5Al65dbFY7WlK9CAFIPqt M6PUKwDhv/mr4KXPS7adegQ6JHACYUyycTC1/yJcyUmrOMMbFfTQnhKnbXhIlwq/k98V DkgSsE0+VMiDSJtxLcKaDOP5/+Rir8pw8b8xIPfZXUuxBtJpLxM/aIir9MQ+SjMU3Rzz GyWibHCPevcbiMe6RNkQXxdYz5/uirJ03S2We30+LtTEMYMYZDqfApwNR7kbLCZwq46O Xouw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:content-type; bh=VP0UDiNw2a27UY+O+tk84hfwxlWn7fGqpw0+PXOrjZ0=; b=ILntfBwH0kzvLfsC5SVWESMmMJLPCQIVBGY59vAY6zy9CwfwpYA9HYg6lD0ncTt7bi U3MTuHPAOMQ4X8b+SXuTJkssuJTz8X7YvcY5jTlWX+tp0g6YmGBlxHmkquc9StVNZOSs zv0Eq80TFSMUeGHLLv9QjFwmweefKtJzqZGCnNTOMcKkITjPj1HYiVFzL2sMW4E3hk1j Yp+7QSy70TUXXESAUrKacUiVVCEL12SEWzqEBItU2ayXjeILhuIeNBy215D5HT//Qn7o 6g8pSKSFpjM379pO3sqKP+rP3aaSb05IS67DukSqT2Jgu0QEQskFGdyhPg+LszDFHye9 bMgw== X-Gm-Message-State: ALoCoQlgoEjaZdX+mfjsanTdqKMJ7Ye1hkD45ukvKVdQ77MndYToQ+BaJb9hkS0pWxf/eYnEk0n41z/T1RMXszdjR/gR4Qpw0g== MIME-Version: 1.0 X-Received: by 10.194.6.98 with SMTP id z2mr6948138wjz.101.1452822660251; Thu, 14 Jan 2016 17:51:00 -0800 (PST) In-Reply-To: <56982D5A.1020706@prochac.sk> References: <56982D5A DOT 1020706 AT prochac DOT sk> Date: Thu, 14 Jan 2016 16:51:00 -0900 Message-ID: Subject: Re: [geda-user] LP1532611 (modular fie formats) fixes From: "Britton Kerin (britton DOT kerin AT gmail DOT com) [via geda-user AT delorie DOT com]" To: geda-user AT delorie DOT com Content-Type: multipart/mixed; boundary=047d7b5d3e64967bb5052955a20e Reply-To: geda-user AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: geda-user AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk --047d7b5d3e64967bb5052955a20e Content-Type: multipart/alternative; boundary=047d7b5d3e64967bb0052955a20c --047d7b5d3e64967bb0052955a20c Content-Type: text/plain; charset=UTF-8 On Thu, Jan 14, 2016 at 2:20 PM, Milan Prochac (milan AT prochac DOT sk) [via geda-user AT delorie DOT com] wrote: > On 12. 1. 2016 20:23, Britton Kerin (britton DOT kerin AT gmail DOT com) [via > geda-user AT delorie DOT com] wrote: > >> >> I'm working on this branch there are some minor issues. I'll push fixes >> to LP1532611_fixes >> >> > Can you share details about the issues? I guess I can identify the culprit > and prepare fix faster > Attached is a patch showing roughly what I've found. The fftemplate.c is entirely in this patch but I didn't change anything in it besides including assert.h I think. It comes down to a little more honoring of default format (e.g. making sure its in default position in format list in SaveAs, checks that only one defualt format is specified, and stuff to take care of situation where PCB->Filename is known and PCB->Fileformat not. Some or all of that last category of change may be uneeded with the patch you propose for invalid file arguments (which I think is the right fix for that). I'd like for you to "own" this code for sure as you can almost surely improve it faster and better, but I'd like to start using it as well. If you aren't wanting to use git yet it would be nice to get you synced up with a repository version (one way or another, either you can sync to home/bert/LP1532611 or we could declare the edits in that branch premature and restart it with a new patch from you). You can then send patches to whoever owns the branch so people can track it. Britton --047d7b5d3e64967bb0052955a20c Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

= On Thu, Jan 14, 2016 at 2:20 PM, Milan Prochac (milan AT prochac DOT sk) [via <geda-user AT delorie DOT com> wro= te:
On 12. 1. 2016 20:23= , Britton Kerin (britton DOT kerin AT gmail DOT com) [via geda-user AT delorie DOT com] wrote:

I'm working on this branch there are some minor issues.=C2=A0 I'll = push fixes to LP1532611_fixes


Can you share details about the issues? I guess I can identify the culprit = and prepare fix faster

Attac= hed is a patch showing roughly what I've found.=C2=A0 The fftemplate.c = is entirely in this patch but I didn't change anything in it besides in= cluding assert.h I think.

It= comes down to a little more honoring of default format (e.g. making sure i= ts in default position in format list in SaveAs, checks that only one defua= lt format is specified, and stuff to take care of situation where PCB->F= ilename is known and PCB->Fileformat not.=C2=A0 Some or all of that last= category of change may be uneeded with the patch you propose for invalid f= ile arguments (which I think is the right fix for that).=C2=A0
= =C2=A0
I'd like for you to "own" this co= de for sure as you can almost surely improve it faster and better, but I= 9;d like to start using it as well.=C2=A0 If you aren't wanting to use = git yet it would be nice to get you synced up with a repository version (on= e way or another, either you can sync to home/bert/LP1532611 or we could de= clare the edits in that branch premature and restart it with a new patch fr= om you).=C2=A0 You can then send patches to whoever owns the branch so peop= le can track it.

Britton

--047d7b5d3e64967bb0052955a20c-- --047d7b5d3e64967bb5052955a20e Content-Type: application/octet-stream; name=file_format_fixes Content-Disposition: attachment; filename=file_format_fixes Content-Transfer-Encoding: base64 X-Attachment-Id: f_ijf0nvhz0 G1sxbWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMbW20KG1sxbWluZGV4 IGJkNzRkYjMuLjMxMGM0NzEgMTAwNjQ0G1ttChtbMW0tLS0gYS9jb25maWd1cmUuYWMbW20KG1sx bSsrKyBiL2NvbmZpZ3VyZS5hYxtbbQobWzM2bUBAIC0xMDQzLDYgKzEwNDMsMTAgQEAbW20gG1tt ZmkbW20KIAlETUFMTE9DX0xJQlM9IiIbW20KIF0pG1ttCiAbW20KG1szMm0rG1ttG1szMm0jIEZJ WE1FOiB0aGlzIGlzIGEgc3RpbGwtaGFja2lzaCB3YXkgdG8gZ2V0IGxpYnlhbWwgbGlua2VkIGlu LCBpdCBwcm9iYWJseSB3YW50cxtbbQobWzMybSsbW20bWzMybSMgYSBmZWF0dXJlIHJlcXVlc3Qg b3B0aW9uIGF0IGxlYXN0G1ttChtbMzJtKxtbbRtbMzJtQUNfQ0hFQ0tfTElCKHlhbWwseWFtbF9w YXJzZXJfaW5pdGlhbGl6ZSwsQUNfTVNHX0VSUk9SKFtwcm9ibGVtIHdpdGggbGlieWFtbF0pKRtb bQobWzMybSsbW20KICMgLS0tLS0tLS0tLS0tLSBFbGVjdHJpY0ZlbmNlIC0tLS0tLS0tLS0tLS0t LS0tLS0bW20KIGRubCBFbGVjdHJpY0ZlbmNlIGNoZWNrcxtbbQogd2l0aF9lZmVuY2U9bm8bW20K G1sxbWRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0bW20KG1sx bWluZGV4IDY5YTRkZjIuLjQ0YmJjYzYgMTAwNjQ0G1ttChtbMW0tLS0gYS9zcmMvTWFrZWZpbGUu YW0bW20KG1sxbSsrKyBiL3NyYy9NYWtlZmlsZS5hbRtbbQobWzM2bUBAIC02NCw2ICs2NCw3IEBA G1ttIBtbbVBDQl9TUkNTID0gXBtbbQogCWVkaWZfcGFyc2UuaCBcG1ttCiAJZXJyb3IuYyBcG1tt CiAJZXJyb3IuaCBcG1ttChtbMzJtKxtbbQkbWzMybWZmdGVtcGxhdGUuYyBcG1ttCiAJZmlsZS5j IFwbW20KIAlmaWxlLmggXBtbbQogCWZpbmQuYyBcG1ttChtbMzZtQEAgLTIxOCw3ICsyMTksNyBA QBtbbSAbW21jaGVja19QUk9HUkFNUyA9IHVuaXR0ZXN0G1ttCiBjaGVja19TQ1JJUFRTID0gdW5p dHRlc3QbW20KIFRFU1RTID0gdW5pdHRlc3QbW20KIBtbbQobWzMxbS0jIEFjdGlvbiwgQXR0cmli dXRlLCBhbmQgRmxhZyBsaXN0cy4bW20KG1szMm0rG1ttG1szMm0jIEFjdGlvbiwgQXR0cmlidXRl LCBGbGFnLCBhbmQgRm9ybWF0IGxpc3RzLhtbbQogY29yZV9saXN0cy5oIDogJHtQQ0JfU1JDU30g TWFrZWZpbGUbW20KIAl0cnVlID4gJEAbW20KIAkoZm9yIGYgaW4gJHtQQ0JfU1JDU30gOyBkbyBj YXQgJChzcmNkaXIpLyQkZiA7IGRvbmUpIHwgZ3JlcCAiXlJFR0lTVEVSIiA+ICRALnRtcBtbbQob WzFtZGlmZiAtLWdpdCBhL3NyYy9hY3Rpb24uYyBiL3NyYy9hY3Rpb24uYxtbbQobWzFtaW5kZXgg MmNmZDZhOS4uM2IxYjA2NCAxMDA2NDQbW20KG1sxbS0tLSBhL3NyYy9hY3Rpb24uYxtbbQobWzFt KysrIGIvc3JjL2FjdGlvbi5jG1ttChtbMzZtQEAgLTU3NDgsMTQgKzU3NDgsMjYgQEAbW20gG1tt QWN0aW9uU2F2ZVRvIChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIENvb3JkIHgsIENvb3JkIHkpG1tt CiAgIGNoYXIgKmZvcm1hdDsbW20KIBtbbQogICBmdW5jdGlvbiA9IEFSRyAoMCk7G1ttChtbMzJt KxtbbQogICAbW20KG1szMW0tICBpZiAoICEgZnVuY3Rpb24gfHwgc3RyY2FzZWNtcCAoZnVuY3Rp b24sICJMYXlvdXQiKSA9PSAwKRtbbQobWzMxbS0gICAgextbbQobWzMxbS0gICAgICBpZiAoU2F2 ZVBDQldpdGhGb3JtYXQgKFBDQiwgUENCLT5GaWxlbmFtZSwgUENCLT5GaWxlZm9ybWF0KSA9PSAw KRtbbQobWzMybSsbW20bWzMybSAgaWYgKCAoISBmdW5jdGlvbikgfHwgKHN0cmNhc2VjbXAgKGZ1 bmN0aW9uLCAiTGF5b3V0IikgPT0gMCkgKRtbbQobWzMybSsbW20bWzMybSAgICB7G1ttChtbMzJt KxtbbRtbMzJtICAgICAgLy8gQXQgbGVhc3QgaW4gdGhlIGNhc2Ugb24gYW4gaW52b2NhdGlvbiBs aWtlICdwY2IgaW52YWxpZF9maWxlLnBjYicsG1ttChtbMzJtKxtbbRtbMzJtICAgICAgLy8gd2Ug ZW5kIHVwIGF0IHRoaXMgcG9pbnQgd2l0aCBQQ0ItPkZpbGVuYW1lIHNldCBidXQgUENCLT5GaWxl Zm9ybWF0G1ttChtbMzJtKxtbbRtbMzJtICAgICAgLy8gbm90IHNldC4gIFByZS1maWxlLWZvcm1h dC1wbHVnaW4gcGNiIHNlZW1zIHRvIGp1c3QgcHV0IGEgcGFyc2UgRVJST1IbW20KG1szMm0rG1tt G1szMm0gICAgICAvLyBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIGxvZyBhbmQgc3RhcnQgZWRpdGlu ZyBhIG5ldyBibGFuayBwY2IsIGFuZBtbbQobWzMybSsbW20bWzMybSAgICAgIC8vIHRoZW4gd2hl biBhIHN1YnNlcXVlbnQgc2F2ZSBoYXBwZW5zIGl0IHB1dHMgYSB2YWxpZCBmaWxlIGluIHBsYWNl G1ttChtbMzJtKxtbbRtbMzJtICAgICAgLy8gb2YgdGhlIGdpdmVuIGludmFsaWQgb25lLiAgVGhp cyBzZWVtcyBwcmV0dHkgd2VpcmQgdG8gbWUgYW5kIEknZBtbbQobWzMybSsbW20bWzMybSAgICAg IC8vIHJhdGhlciBoYXZlIGEgbXVjaCBtb3JlIHByb21pbmVudCBzaG93LXN0b3BwaW5nIGVycm9y IG1lc3NhZ2UgYnV0G1ttChtbMzJtKxtbbRtbMzJtICAgICAgLy8gZm9yIG5vdyBhdCBsZWFzdCB3 ZSdyZSBnb2luZyB0byBjYXJyeSBvbiB0aGUgdHJhZGl0aW9uLCB3aGljaCBtZWFucxtbbQobWzMy bSsbW20bWzMybSAgICAgIC8vIHdlIGhhdmUgdG8gdXNlIHRoZSBkZWZhdWx0IGZvcm1hdCBpbiB0 aGlzIHNpdHVhdGlvbi4bW20KG1szMm0rG1ttG1szMm0gICAgICBmb3JtYXQbW20KG1szMm0rG1tt G1szMm0gICAgICAgID0gUENCLT5GaWxlZm9ybWF0ID8gUENCLT5GaWxlZm9ybWF0IDogaGlkX2dl dF9kZWZhdWx0X2Zvcm1hdF9pZCAoKTsbW20KG1szMm0rG1ttG1szMm0gICAgICBpZiAoU2F2ZVBD QldpdGhGb3JtYXQgKFBDQiwgUENCLT5GaWxlbmFtZSwgZm9ybWF0KSA9PSAwKRtbbQogICAgICAg ICBTZXRDaGFuZ2VkRmxhZyAoZmFsc2UpOxtbbQogICAgICAgcmV0dXJuIDA7G1ttCiAgICAgfRtb bQobWzMxbS0bW20KG1szMm0rG1ttG1s0MW0gIBtbbQogICBpZiAoYXJnYyA8IDIgKRtbbQogICAg IEFGQUlMIChzYXZldG8pOxtbbQogG1ttChtbMzZtQEAgLTU3NjYsNiArNTc3OCw3IEBAG1ttIBtb bUFjdGlvblNhdmVUbyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBDb29yZCB4LCBDb29yZCB5KRtb bQogICAgIGZvcm1hdCA9IChQQ0ItPkZpbGVmb3JtYXQpP1BDQi0+RmlsZWZvcm1hdDpoaWRfZ2V0 X2RlZmF1bHRfZm9ybWF0X2lkICgpOxtbbQogICB9G1ttCiAbW20KG1szMm0rG1ttCiAgIGlmIChz dHJjYXNlY21wIChmdW5jdGlvbiwgIkxheW91dEFzIikgPT0gMCkbW20KICAgICB7G1ttCiAgICAg ICBpZiAoU2F2ZVBDQldpdGhGb3JtYXQgKFBDQiwgbmFtZSwgZm9ybWF0KSA9PSAwKRtbbQobWzFt ZGlmZiAtLWdpdCBhL3NyYy9mZnRlbXBsYXRlLmMgYi9zcmMvZmZ0ZW1wbGF0ZS5jG1ttChtbMW1u ZXcgZmlsZSBtb2RlIDEwMDY0NBtbbQobWzFtaW5kZXggMDAwMDAwMC4uNGYyMGI1MRtbbQobWzFt LS0tIC9kZXYvbnVsbBtbbQobWzFtKysrIGIvc3JjL2ZmdGVtcGxhdGUuYxtbbQobWzM2bUBAIC0w LDAgKzEsMzAxIEBAG1ttChtbMzJtKxtbbRtbMzJt77u/LyohG1ttChtbMzJtKxtbbRtbMzJtICog XGZpbGUgc2ZmLXRlbXBsYXRlLmMbW20KG1szMm0rG1ttG1szMm0gKhtbbQobWzMybSsbW20bWzMy bSAqIFxicmllZiB0ZW1wbGF0ZSBmaWxlIGZvciBwbHVnZ2FibGUgZmlsZSBmb3JtYXRzLhtbbQob WzMybSsbW20bWzMybSAqG1ttChtbMzJtKxtbbRtbMzJtICogPGhyPhtbbQobWzMybSsbW20bWzMy bSAqG1ttChtbMzJtKxtbbRtbMzJtICogPGgxPjxiPkNvcHlyaWdodC48L2I+PC9oMT5cbhtbbQob WzMybSsbW20bWzMybSAqG1ttChtbMzJtKxtbbRtbMzJtICogUENCLCBpbnRlcmFjdGl2ZSBwcmlu dGVkIGNpcmN1aXQgYm9hcmQgZGVzaWduG1ttChtbMzJtKxtbbRtbMzJtICobW20KG1szMm0rG1tt G1szMm0gKiBDb3B5cmlnaHQgKEMpIDE5OTQsMTk5NSwxOTk2LDE5OTcsMTk5OCwyMDA1LDIwMDYg VGhvbWFzIE5hdRtbbQobWzMybSsbW20bWzMybSAqG1ttChtbMzJtKxtbbRtbMzJtICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkbW20KG1szMm0rG1ttG1szMm0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieRtbbQobWzMybSsbW20bWzMybSAq IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UsIG9yG1ttChtbMzJtKxtbbRtbMzJtICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4bW20KG1szMm0rG1ttG1szMm0gKhtbbQobWzMybSsbW20bWzMybSAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLBtb bQobWzMybSsbW20bWzMybSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mG1ttChtbMzJtKxtbbRtbMzJtICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZRtbbQobWzMy bSsbW20bWzMybSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu G1ttChtbMzJtKxtbbRtbMzJtICobW20KG1szMm0rG1ttG1szMm0gKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZRtbbQobWzMy bSsbW20bWzMybSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlG1ttChtbMzJtKxtbbRtbMzJtICogRm91bmRhdGlvbiwgSW5jLiwgNjc1 IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuG1ttChtbMzJtKxtbbRtbMzJtICob W20KG1szMm0rG1ttG1szMm0gKiBDb250YWN0IGFkZHJlc3NlcyBmb3IgcGFwZXIgbWFpbCBhbmQg RW1haWw6G1ttChtbMzJtKxtbbRtbMzJtICogVGhvbWFzIE5hdSwgU2NobGVoZW53ZWcgMTUsIDg4 NDcxIEJhdXN0ZXR0ZW4sIEdlcm1hbnkbW20KG1szMm0rG1ttG1szMm0gKiBUaG9tYXMuTmF1QHJ6 LnVuaS11bG0uZGUbW20KG1szMm0rG1ttG1szMm0gKhtbbQobWzMybSsbW20bWzMybSAqIFxub3Rl IEhvdyB0byBjb21waWxlIChpbmNsdWRlIHBhdGhzIGNhbiBkaWZmZXIsIGRlcGVuZGluZyBvbiB5 b3VyIHN5c3RlbSk6G1ttChtbMzJtKxtbbRtbMzJtICogICAgZ2NjIC1JPHBjYnJvb3Q+L3NyYyAt STxwY2Jyb290PiAtSS91c3IvaW5jbHVkZS9nbGliLTIuMCAtSS91c3IvbGliNjQvZ2xpYi0yLjAv aW5jbHVkZSAtREhBVkVfQ09ORklHX0ggLWZQSUMgLXNoYXJlZCBmZnRlbXBsYXRlLmMgLW8gZmZ0 ZW1wbGF0ZS5zbxtbbQobWzMybSsbW20bWzMybSAqICAgIC0gPHBjYnJvb3Q+IGlzIHRoZSBsb2Nh dGlvbiBvZiAqY29uZmlndXJlZCogUENCIHNvdWNlIHRyZWUgKGNvbmZpZy5oIGlzIGF2YWlsYWJs ZSkbW20KG1szMm0rG1ttG1szMm0gKiAgICAtIGNvcHkgdGhlIC5zbyBmaWxlIGludG8gb25lIG9m IHBsdWdpbiBkaXJlY3RvcmllcyAoZS5nLiB+Ly5wY2IvcGx1Z2lucykbW20KG1szMm0rG1ttG1sz Mm0gKiAgICAtIHNldCBleGVjdXRhYmxlIGZsYWcbW20KG1szMm0rG1ttG1szMm0gKi8bW20KG1sz Mm0rG1ttChtbMzJtKxtbbQobWzMybSsbW20KG1szMm0rG1ttG1szMm0jaWZkZWYgSEFWRV9DT05G SUdfSBtbbQobWzMybSsbW20bWzMybSNpbmNsdWRlICJjb25maWcuaCIbW20KG1szMm0rG1ttG1sz Mm0jZW5kaWYbW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgPGFzc2VydC5oPhtb bQobWzMybSsbW20KG1szMm0rG1ttG1szMm0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSBtbbQobWzMy bSsbW20bWzMybSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4bW20KG1szMm0rG1ttG1szMm0jZW5kaWYb W20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgImdsb2JhbC5oIhtbbQobWzMybSsb W20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSA8ZGlyZW50Lmg+G1ttChtbMzJtKxtbbQobWzMybSsb W20bWzMybSNpbmNsdWRlIDxlcnJuby5oPhtbbQobWzMybSsbW20KG1szMm0rG1ttG1szMm0jaWZk ZWYgSEFWRV9QV0RfSBtbbQobWzMybSsbW20bWzMybSNpbmNsdWRlIDxwd2QuaD4bW20KG1szMm0r G1ttG1szMm0jZW5kaWYbW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgPHN0cmlu Zy5oPhtbbQobWzMybSsbW20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSA8dGltZS5oPhtbbQobWzMy bSsbW20KG1szMm0rG1ttG1szMm0jaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gbW20KG1szMm0rG1tt G1szMm0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPhtbbQobWzMybSsbW20bWzMybSNlbmRpZhtbbQob WzMybSsbW20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSA8c3lzL3N0YXQuaD4bW20KG1szMm0rG1tt ChtbMzJtKxtbbRtbMzJtI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9IG1ttChtbMzJtKxtbbRtbMzJt I2luY2x1ZGUgPG5ldGluZXQvaW4uaD4bW20KG1szMm0rG1ttG1szMm0jZW5kaWYbW20KG1szMm0r G1ttChtbMzJtKxtbbRtbMzJtI2lmZGVmIEhBVkVfTkVUREJfSBtbbQobWzMybSsbW20bWzMybSNp bmNsdWRlIDxuZXRkYi5oPhtbbQobWzMybSsbW20bWzMybSNlbmRpZhtbbQobWzMybSsbW20KG1sz Mm0rG1ttG1szMm0jaW5jbHVkZSA8c3RkaW8uaD4bW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJt I2lmZGVmIEhBVkVfU1RETElCX0gbW20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSA8c3RkbGliLmg+ G1ttChtbMzJtKxtbbRtbMzJtI2VuZGlmG1ttChtbMzJtKxtbbQobWzMybSsbW20bWzMybSNpZmRl ZiBIQVZFX1NUUklOR19IG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgPHN0cmluZy5oPhtbbQob WzMybSsbW20bWzMybSNlbmRpZhtbbQobWzMybSsbW20KG1szMm0rG1ttG1szMm0jaWZkZWYgSEFW RV9VTklTVERfSBtbbQobWzMybSsbW20bWzMybSNpbmNsdWRlIDx1bmlzdGQuaD4bW20KG1szMm0r G1ttG1szMm0jZW5kaWYbW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgPHlhbWwu aD4bW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgImJ1ZmZlci5oIhtbbQobWzMy bSsbW20bWzMybSNpbmNsdWRlICJjaGFuZ2UuaCIbW20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSAi Y3JlYXRlLmgiG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgImNyb3NzaGFpci5oIhtbbQobWzMy bSsbW20bWzMybSNpbmNsdWRlICJkYXRhLmgiG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgImVk aWZfcGFyc2UuaCIbW20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSAiZXJyb3IuaCIbW20KG1szMm0r G1ttG1szMm0jaW5jbHVkZSAiZmlsZS5oIhtbbQobWzMybSsbW20bWzMybSNpbmNsdWRlICJoaWQu aCIbW20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSAibGF5ZXJmbGFncy5oIhtbbQobWzMybSsbW20b WzMybSNpbmNsdWRlICJtaXNjLmgiG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgIm15bWVtLmgi G1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgInBhcnNlX2wuaCIbW20KG1szMm0rG1ttG1szMm0j aW5jbHVkZSAicGNiLXByaW50Zi5oIhtbbQobWzMybSsbW20bWzMybSNpbmNsdWRlICJwb2x5Z29u LmgiG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgInJhdHMuaCIbW20KG1szMm0rG1ttG1szMm0j aW5jbHVkZSAicmVtb3ZlLmgiG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgInNldC5oIhtbbQob WzMybSsbW20bWzMybSNpbmNsdWRlICJzdHJmbGFncy5oIhtbbQobWzMybSsbW20KG1szMm0rG1tt G1szMm0jaWZkZWYgSEFWRV9MSUJETUFMTE9DG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgPGRt YWxsb2MuaD4bW20KG1szMm0rG1ttG1szMm0jZW5kaWYbW20KG1szMm0rG1ttChtbMzJtKxtbbQob WzMybSsbW20bWzMybSNkZWZpbmUgREVNT19GSUxFX1ZFUlNJT05fSU1QTEVNRU5URUQgMjAxMTA2 MDMbW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtLyobW20KG1szMm0rG1ttG1szMm0qICBGdW5j dGlvbiB0byBjaGVjayBmaWxlIGZvcm1hdBtbbQobWzMybSsbW20bWzMybSogIGZ1bmN0aW9uIHNo b3VsZCByZXR1cm4gMCwgdGhlIGZpbGUgcHJvdmlkZWQgaXMgb2Ygc3BlY2lmaWVkIGZvcm1hdCwg b3RoZXJ3aXNlIG5vbi16ZXJvIHZhbHVlLhtbbQobWzMybSsbW20bWzMybSogIFRoaXMgZnVuY3Rp b24gaXMgb3B0aW9uYWw7IGlmIGl0IGlzIG5vdCBwcm92aWRlZCwgdGhlIHN5c3RlbSB0cmllcyB0 byBsb2FkIHRoZSBmaWxlLiBJZiBsb2FkaW5nIGZhaWxzLBtbbQobWzMybSsbW20bWzMybSogIGl0 IGlzIHN1cHBvc2VkIHRoYXQgZmlsZSBmb3JtYXQgaXMgbm90IGNvcnJlY3QuG1ttChtbMzJtKxtb bRtbMzJtKi8bW20KG1szMm0rG1ttG1szMm1pbnQbW20KG1szMm0rG1ttG1szMm1DaGVja0RlbW9G aWxlKGNoYXIgKmZpbGVuYW1lKRtbbQobWzMybSsbW20bWzMybXsbW20KG1szMm0rG1ttG1szMm0g IGNoYXIgKmxhc3RfZG90ID0gcmluZGV4IChmaWxlbmFtZSwgJy4nKTsbW20KG1szMm0rG1ttG1sz Mm0gIHJldHVybiBzdHJjbXAgKGxhc3RfZG90LCAiLnlwY2IiKTsbW20KG1szMm0rG1ttG1szMm19 G1ttChtbMzJtKxtbbQobWzMybSsbW20bWzMybS8qG1ttChtbMzJtKxtbbRtbMzJtKiAgRnVuY3Rp b24gdG8gY2hlY2sgc3VwcG9ydGVkIHZlcnNpb24bW20KG1szMm0rG1ttG1szMm0qICBmdW5jdGlv biBzaG91bGQgcmV0dXJuIDAsIGlmIHN1cHBvcnRzIHRoZSBwcm92aWRlZCBkYXRhIHN0cnVjdHVy ZSB2ZXJzaW9uIChhdCBsZWFzdCBtaW5pbWFsIG9uZSkbW20KG1szMm0rG1ttG1szMm0qICBmdW5j dGlvbiBzaG91bGQgcmV0dXJuIG5vbi16ZXJvIHZhbHVlLCBpZiBkb2VzIG5vdCBzdXBwb3J0IHRo ZSB2ZXJzaW9uIG9mIGRhdHlhIHN0cnVjdHVyZXMuG1ttChtbMzJtKxtbbRtbMzJtKi8bW20KG1sz Mm0rG1ttG1szMm1pbnQbW20KG1szMm0rG1ttG1szMm1DaGVja0RlbW9WZXJzaW9uKHVuc2lnbmVk IGxvbmcgY3VycmVudCwgdW5zaWduZWQgbG9uZyBtaW5pbWFsKRtbbQobWzMybSsbW20bWzMybXsb W20KG1szMm0rG1ttG1szMm0gICAgcmV0dXJuIChERU1PX0ZJTEVfVkVSU0lPTl9JTVBMRU1FTlRF RCA+PSBtaW5pbWFsKT8wOjE7G1ttChtbMzJtKxtbbRtbMzJtfRtbbQobWzMybSsbW20KG1szMm0r G1ttChtbMzJtKxtbbRtbMzJtLyobW20KG1szMm0rG1ttG1szMm0qICBGdW5jdGlvbiB0byBzYXZl IGxheW91dCB0byBzcGVjaWZpZWQgZmlsZRtbbQobWzMybSsbW20bWzMybSogIEZ1bmN0aW9ucyBz YXZlcyBjb250ZW5zIG9mIFBDQnR5cGUgc3RydWN0dXJlIHRvIHNwZWNpZmllZCBmaWxlG1ttChtb MzJtKxtbbRtbMzJtKiAgUmV0dXJucyAwLCBpZiBzdWNjZWVkZWQsIG90aGVyIHZhbHVlIGluZGlj YXRlcyBlcnJvci4bW20KG1szMm0rG1ttG1szMm0qICBObyB1c2VyIGludGVyYWN0aW9ucyBhcmUg bmVjZXNzYXJ5LhtbbQobWzMybSsbW20bWzMybSovG1ttChtbMzJtKxtbbRtbMzJtaW50G1ttChtb MzJtKxtbbRtbMzJtU2F2ZURlbW8oUENCVHlwZSAqcGNiLCBjaGFyICpmaWxlbmFtZSkbW20KG1sz Mm0rG1ttG1szMm17G1ttChtbMzJtKxtbbRtbMzJtICB5YW1sX2VtaXR0ZXJfdCBlbWl0dGVyOxtb bQobWzMybSsbW20bWzMybSAgeWFtbF9ldmVudF90IGV2ZW50OxtbbQobWzMybSsbW20bWzMybSAg aW50IHJldHVybl9jb2RlOxtbbQobWzMybSsbW20bWzQxbSAgG1ttChtbMzJtKxtbbRtbMzJtICAv KiBDcmVhdGUgdGhlIEVtaXR0ZXIgb2JqZWN0LiAqLxtbbQobWzMybSsbW20bWzMybSAgeWFtbF9l bWl0dGVyX2luaXRpYWxpemUoJmVtaXR0ZXIpOxtbbQobWzMybSsbW20bWzQxbSAgG1ttChtbMzJt KxtbbRtbMzJtICAvKiBTZXQgYSBmaWxlIG91dHB1dC4gKi8bW20KG1szMm0rG1ttG1szMm0gIEZJ TEUgKm91dHB1dCA9IGZvcGVuKGZpbGVuYW1lLCAidyIpOxtbbQobWzMybSsbW20bWzMybSAgaWYg KCBvdXRwdXQgPT0gTlVMTCApIHsbW20KG1szMm0rG1ttG1szMm0gICAgLy8gRklYTUU6IHJlbW92 ZSB0aGlzIGZwcmludGYgc29tZWRheRtbbQobWzMybSsbW20bWzMybSAgICBmcHJpbnRmICgbW20K G1szMm0rG1ttG1szMm0gICAgICAgIHN0ZGVyciwbW20KG1szMm0rG1ttG1szMm0gICAgICAgICIl czogJWk6ICVzOiBmb3BlbigpIGZhaWxlZCB0byBvcGVuICVzIGZvciB3cml0aW5nOiAlcyIsG1tt ChtbMzJtKxtbbRtbMzJtICAgICAgICBfX0ZJTEVfXywbW20KG1szMm0rG1ttG1szMm0gICAgICAg IF9fTElORV9fLBtbbQobWzMybSsbW20bWzMybSAgICAgICAgX19mdW5jX18sG1ttChtbMzJtKxtb bRtbMzJtICAgICAgICBmaWxlbmFtZSwbW20KG1szMm0rG1ttG1szMm0gICAgICAgIHN0cmVycm9y IChlcnJubykgKTsbW20KG1szMm0rG1ttG1szMm0gICAgcmV0dXJuIDE7G1ttChtbMzJtKxtbbRtb MzJtICB9G1ttChtbMzJtKxtbbRtbNDFtICAbW20KG1szMm0rG1ttG1szMm0gIHlhbWxfZW1pdHRl cl9zZXRfb3V0cHV0X2ZpbGUoJmVtaXR0ZXIsIG91dHB1dCk7G1ttChtbMzJtKxtbbQobWzMybSsb W20bWzMybSAgLyogQ3JlYXRlIGFuZCBlbWl0IHRoZSBTVFJFQU0tU1RBUlQgZXZlbnQuICovG1tt ChtbMzJtKxtbbRtbMzJtICB5YW1sX3N0cmVhbV9zdGFydF9ldmVudF9pbml0aWFsaXplKCZldmVu dCwgWUFNTF9VVEY4X0VOQ09ESU5HKTsbW20KG1szMm0rG1ttG1szMm0gIGlmICgheWFtbF9lbWl0 dGVyX2VtaXQoJmVtaXR0ZXIsICZldmVudCkpG1ttChtbMzJtKxtbbRtbMzJtICAgICAgZ290byBl cnJvcjsbW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtICB5YW1sX2RvY3VtZW50X3N0YXJ0X2V2 ZW50X2luaXRpYWxpemUoJmV2ZW50LCBOVUxMLCBOVUxMLCBOVUxMLCAxKTsbW20KG1szMm0rG1tt G1szMm0gIGlmICgheWFtbF9lbWl0dGVyX2VtaXQoJmVtaXR0ZXIsICZldmVudCkpG1ttChtbMzJt KxtbbRtbMzJtICAgICAgZ290byBlcnJvcjsbW20KG1szMm0rG1ttG1s0MW0gIBtbbQobWzMybSsb W20bWzMybSAgZXZlbnQudHlwZSA9IFlBTUxfU0NBTEFSX0VWRU5UOxtbbRtbNDFtIBtbbQobWzMy bSsbW20bWzMybSAgZXZlbnQuZGF0YS5zY2FsYXIuYW5jaG9yID0gTlVMTDsbW20KG1szMm0rG1tt G1szMm0gIGV2ZW50LmRhdGEuc2NhbGFyLnRhZyA9IE5VTEw7G1ttChtbMzJtKxtbbRtbMzJtICBl dmVudC5kYXRhLnNjYWxhci52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopIHN0cmR1cCAoImJhciIp OxtbbQobWzMybSsbW20bWzMybSAgZXZlbnQuZGF0YS5zY2FsYXIubGVuZ3RoID0gc3RybGVuICgi YmFyIik7G1ttChtbMzJtKxtbbRtbMzJtICBldmVudC5kYXRhLnNjYWxhci5wbGFpbl9pbXBsaWNp dCA9IDE7G1ttChtbMzJtKxtbbRtbMzJtICBldmVudC5kYXRhLnNjYWxhci5xdW90ZWRfaW1wbGlj aXQgPSBmYWxzZTsbW20KG1szMm0rG1ttG1szMm0gIGV2ZW50LnN0YXJ0X21hcmsgPSAoeWFtbF9t YXJrX3QpIHsgMCwgMCwgMCB9OxtbbQobWzMybSsbW20bWzMybSAgZXZlbnQuc3RhcnRfbWFyayA9 ICh5YW1sX21hcmtfdCkgeyAxLCAxLCAxIH07G1ttChtbMzJtKxtbbRtbMzJtICBpZiAoIXlhbWxf ZW1pdHRlcl9lbWl0KCZlbWl0dGVyLCAmZXZlbnQpKRtbbQobWzMybSsbW20bWzMybSAgICBnb3Rv IGVycm9yOxtbbQobWzMybSsbW20bWzQxbSAgG1ttChtbMzJtKxtbbRtbMzJtICAvKhtbbQobWzMy bSsbW20bWzMybSAgICAuLi4bW20KG1szMm0rG1ttG1szMm0gICAgRW1pdCBtb3JlIGV2ZW50cy4b W20KG1szMm0rG1ttG1szMm0gICAgLi4uG1ttChtbMzJtKxtbbRtbMzJtICAqLxtbbQobWzMybSsb W20bWzQxbSAgG1ttChtbMzJtKxtbbRtbMzJtICB5YW1sX2RvY3VtZW50X2VuZF9ldmVudF9pbml0 aWFsaXplKCZldmVudCwgMSk7G1ttChtbMzJtKxtbbRtbMzJtICBpZiAoIXlhbWxfZW1pdHRlcl9l bWl0KCZlbWl0dGVyLCAmZXZlbnQpKRtbbQobWzMybSsbW20bWzMybSAgICAgIGdvdG8gZXJyb3I7 G1ttChtbMzJtKxtbbRtbNDFtICAbW20KG1szMm0rG1ttG1szMm0gIC8qIENyZWF0ZSBhbmQgZW1p dCB0aGUgU1RSRUFNLUVORCBldmVudC4gKi8bW20KG1szMm0rG1ttG1szMm0gIHlhbWxfc3RyZWFt X2VuZF9ldmVudF9pbml0aWFsaXplKCZldmVudCk7G1ttChtbMzJtKxtbbRtbMzJtICBpZiAoIXlh bWxfZW1pdHRlcl9lbWl0KCZlbWl0dGVyLCAmZXZlbnQpKRtbbQobWzMybSsbW20bWzMybSAgICAg IGdvdG8gZXJyb3I7G1ttChtbMzJtKxtbbRtbNDFtICAbW20KG1szMm0rG1ttG1szMm0gIC8qIERl c3Ryb3kgdGhlIEVtaXR0ZXIgb2JqZWN0LiAqLxtbbQobWzMybSsbW20bWzMybSAgeWFtbF9lbWl0 dGVyX2RlbGV0ZSgmZW1pdHRlcik7G1ttChtbMzJtKxtbbQobWzMybSsbW20bWzMybSAgLy8gRklY TUU6IG5lZWRzIHJldHVybiBjb2RlIGNoZWNrG1ttChtbMzJtKxtbbRtbMzJtICByZXR1cm5fY29k ZSA9IGZjbG9zZSAob3V0cHV0KTsbW20KG1szMm0rG1ttG1szMm0gIGlmICggcmV0dXJuX2NvZGUg IT0gMCApIHsbW20KG1szMm0rG1ttG1szMm0gICAgZnByaW50ZiAoG1ttChtbMzJtKxtbbRtbMzJt ICAgICAgICBzdGRlcnIsG1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAiJXM6ICVpOiAlczogZmNs b3NlKCkgZmFpbGVkOiAlcyIsG1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBfX0ZJTEVfXywbW20K G1szMm0rG1ttG1szMm0gICAgICAgIF9fTElORV9fLBtbbQobWzMybSsbW20bWzMybSAgICAgICAg X19mdW5jX18sG1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBzdHJlcnJvciAoZXJybm8pICk7G1tt ChtbMzJtKxtbbRtbMzJtICAgIHJldHVybiAxOxtbbQobWzMybSsbW20bWzMybSAgfRtbbQobWzMy bSsbW20bWzQxbSAgG1ttChtbMzJtKxtbbRtbMzJtICByZXR1cm4gMDsbW20KG1szMm0rG1ttG1s0 MW0gIBtbbQobWzMybSsbW20bWzMybSAgLyogT24gZXJyb3IuICovG1ttChtbMzJtKxtbbRtbMzJt ICBlcnJvcjobW20KG1szMm0rG1ttG1szMm0gIGZwcmludGYgKHN0ZGVyciwgIllBTUwgZW1pc3Np b24gZmFpbGVkOiAlc1xuIiwgIGVtaXR0ZXIucHJvYmxlbSk7G1ttChtbMzJtKxtbbRtbNDFtICAb W20KG1szMm0rG1ttG1szMm0gIC8qIERlc3Ryb3kgdGhlIEVtaXR0ZXIgb2JqZWN0LiAqLxtbbQob WzMybSsbW20bWzMybSAgeWFtbF9lbWl0dGVyX2RlbGV0ZSgmZW1pdHRlcik7G1ttChtbMzJtKxtb bQobWzMybSsbW20bWzMybSAgLy8gRklYTUU6IG5lZWRzIHJldHVybiBjb2RlIGNoZWNrG1ttChtb MzJtKxtbbRtbMzJtICBmY2xvc2UgKG91dHB1dCk7G1ttChtbMzJtKxtbbQobWzMybSsbW20bWzMy bSAgcmV0dXJuIDE7G1ttChtbMzJtKxtbbRtbMzJtfRtbbQobWzMybSsbW20KG1szMm0rG1ttChtb MzJtKxtbbRtbMzJtLyobW20KG1szMm0rG1ttG1szMm0qICBGdW5jdGlvbiB0byBsb2FkIGxheW91 dCBmcm9tIHNwZWNpZmllZCBmaWxlG1ttChtbMzJtKxtbbRtbMzJtKiAgRnVuY3Rpb25zIGZpbGxz IHByb3ZpZGVkIFBDQnR5cGUgc3RydWN0dXJlIHdpdGggZGF0YRtbbQobWzMybSsbW20bWzMybSog IFJldHVybnMgMCwgaWYgc3VjY2VlZGVkLCBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgZXJyb3IuG1tt ChtbMzJtKxtbbRtbMzJtKiAgTm8gdXNlciBpbnRlcmFjdGlvbnMgYXJlIG5lY2Vzc2FyeS4bW20K G1szMm0rG1ttG1szMm0qLxtbbQobWzMybSsbW20bWzMybWludBtbbQobWzMybSsbW20bWzMybVBh cnNlRGVtbyhQQ0JUeXBlICpwY2IsIGNoYXIgKmZpbGVuYW1lKRtbbQobWzMybSsbW20bWzMybXsb W20KG1szMm0rG1ttG1szMm0gIC8qIEZvbGxvZmluZyBmdW5jdGlvbiBjYWxsIGlzIHBsYWNlaG9s ZGVyLCB3aGljaCBjcmVhdGVzIGVtcHR5IGJvYXJkICovG1ttChtbMzJtKxtbbRtbNDFtICAbW20K G1szMm0rG1ttG1szMm0gIENyZWF0ZU5ld1BDQlBvc3QgKHBjYiwgMSk7IC8qIFJFTU9WRSBNRSEh ISIgKi8bW20KG1szMm0rG1ttG1s0MW0gIBtbbQobWzMybSsbW20bWzMybSAgcmV0dXJuIDA7G1tt ChtbMzJtKxtbbRtbMzJtfRtbbQobWzMybSsbW20KG1szMm0rG1ttG1szMm0vKhtbbQobWzMybSsb W20bWzMybSogIEFycmF5IG9mIGZpbGUgZm9ybWF0IHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmVzOhtb bQobWzMybSsbW20bWzMybSogICAgLSB1bmlxdWUgaWRlbnRpZmljdGlvbiBzdHJpbmcbW20KG1sz Mm0rG1ttG1szMm0qICAgIC0gbmFtZSBzaG93biBpbiBPcGVuL1NhdmUgZGlhbG9ncxtbbQobWzMy bSsbW20bWzMybSogICAgLSBwb2ludGVyIHRvIE5VTEwtdGVybWluYXRlZCBsaXN0IG9mIGZpbGUg cGF0dGVybnMbW20KG1szMm0rG1ttG1szMm0qICAgIC0gbWltZS10eXBlG1ttChtbMzJtKxtbbRtb MzJtKiAgICAtIGZpbGUgZm9ybWF0IGlzIGRlZmF1bHQgZm9ybWF0ICgxKRtbbQobWzMybSsbW20b WzMybSogICAgLSBmdW5jdGlvbiB0byBjaGVjayBmb3JtYXQgdmVyc2lvbhtbbQobWzMybSsbW20b WzMybSogICAgLSBmdW5jdGlvbiB0byBjaGVjayBpZiBmaWxlIGlzIG9mIGFjY2VwdGFibGUgZm9y bWF0G1ttChtbMzJtKxtbbRtbMzJtKiAgICAtIGZ1bmN0aW9uIHRvIGxvYWQgbGF5b3V0G1ttChtb MzJtKxtbbRtbMzJtKiAgICAtIGZ1bmN0aW9uIHRvIHNhdmUgbGF5b3V0G1ttChtbMzJtKxtbbRtb MzJtKiAgICAtIGZ1bmN0aW9uIHRvIGxvYWQgZWxlbWVudChzKSAtIG5vdCBpbXBsZW1lbnRlZCB5 ZXQbW20KG1szMm0rG1ttG1szMm0qICAgIC0gZnVuY3Rpb24gdG8gc2F2ZSBlbGVtZW50KHMpIC0g bm90IGltcGxlbWVudGVkIHlldBtbbQobWzMybSsbW20bWzMybSovG1ttChtbMzJtKxtbbQobWzMy bSsbW20bWzMybXN0YXRpYyBjaGFyICpkZW1vX2Zvcm1hdF9saXN0X3BhdHRlcm5zW109eyIqLnlw Y2IiLCAiKi5ZUENCIiwgMH07G1ttChtbMzJtKxtbbQobWzMybSsbW20bWzMybXN0YXRpYyBISURf Rm9ybWF0IGRlbW9fZm9ybWF0X2xpc3RbXT17G1ttChtbMzJtKxtbbRtbMzJtICAvKhtbbQobWzMy bSsbW20bWzMybSAgeyJ5cGNiIiwiWUFNTCBQQ0IiLCBkZW1vX2Zvcm1hdF9saXN0X3BhdHRlcm5z LCAiYXBwbGljYXRpb24veC1wY2ItbGF5b3V0IiwgMCwgKHZvaWQgKilDaGVja0RlbW9WZXJzaW9u LCAodm9pZCAqKUNoZWNrRGVtb0ZpbGUsICh2b2lkICopUGFyc2VEZW1vLCAodm9pZCAqKVNhdmVE ZW1vLCAwLCAwfRtbbQobWzMybSsbW20bWzMybSAgKi8bW20KG1szMm0rG1ttG1szMm0gIC8vIEZJ WE1FOiBmb3IgdGhlIG1vbWVudCB3ZSBjaGFuZ2UgUGFyc2VEZW1vIHRvIE5VTEwsIHdoaWNoIHRl bGxzIHRoZSBzeXN0ZW0bW20KG1szMm0rG1ttG1szMm0gIC8vIHRoYXQgdGhlcmUgaXMgbm8gbG9h ZCBmb3JtYXQsIHNvIGl0IHdvbid0IGNvbnNpZGVyIHRoZSBmaWxlIHRydWx5IHNhdmVkG1ttChtb MzJtKxtbbRtbMzJtICAvLyBpZiBpdCdzIG9ubHkgYmVlbiBzYXZlZCBpbiB5cGNiIGZvcm1hdCAo YmVjYXVzZSBpdCBjYW4ndCBiZSBsb2FkZWQgYWdhaW4pG1ttChtbMzJtKxtbbRtbMzJtICB7Inlw Y2IiLCJZQU1MIFBDQiIsIGRlbW9fZm9ybWF0X2xpc3RfcGF0dGVybnMsICJhcHBsaWNhdGlvbi94 LXBjYi1sYXlvdXQiLCAwLCAodm9pZCAqKUNoZWNrRGVtb1ZlcnNpb24sICh2b2lkICopQ2hlY2tE ZW1vRmlsZSwgKHZvaWQgKilQYXJzZURlbW8sICh2b2lkICopU2F2ZURlbW8sIDAsIDB9G1ttChtb MzJtKxtbbRtbMzJtfTsbW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtUkVHSVNURVJfRk9STUFU UyAoZGVtb19mb3JtYXRfbGlzdCkbW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtLyobW20KG1sz Mm0rG1ttG1szMm0qIFBsdWdpbiByZWdpc3RyYXRpb24uIFJlbmFtZSBpdCB0byBoaWRfPGJhc2Vu YW1lPl9pbml0G1ttChtbMzJtKxtbbRtbMzJtKi8bW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJt dm9pZBtbbQobWzMybSsbW20bWzMybWhpZF9mZnRlbXBsYXRlX2luaXQoKRtbbQobWzMybSsbW20b WzMybXsbW20KG1szMm0rG1ttG1szMm0gIHJlZ2lzdGVyX2RlbW9fZm9ybWF0X2xpc3QoKTsbW20K G1szMm0rG1ttG1szMm19G1ttChtbMW1kaWZmIC0tZ2l0IGEvc3JjL2ZpbGUuYyBiL3NyYy9maWxl LmMbW20KG1sxbWluZGV4IDVhZjc2MjQuLmQwZjk4ZWEgMTAwNjQ0G1ttChtbMW0tLS0gYS9zcmMv ZmlsZS5jG1ttChtbMW0rKysgYi9zcmMvZmlsZS5jG1ttChtbMzZtQEAgLTQzLDYgKzQzLDggQEAb W20KIBtbbQogI2luY2x1ZGUgImdsb2JhbC5oIhtbbQogG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1 ZGUgPGFzc2VydC5oPhtbbQobWzMybSsbW20KICNpbmNsdWRlIDxkaXJlbnQuaD4bW20KICNpZmRl ZiBIQVZFX1BXRF9IG1ttCiAjaW5jbHVkZSA8cHdkLmg+G1ttChtbMzZtQEAgLTEyNyw5ICsxMjks NiBAQBtbbSAbW21zdGF0aWMgaW50IFdyaXRlUGlwZSAoY2hhciAqLCBib29sKTsbW20KIHN0YXRp YyBpbnQgUGFyc2VMaWJyYXJ5VHJlZSAodm9pZCk7G1ttCiBzdGF0aWMgaW50IExvYWROZXdsaWJG b290cHJpbnRzRnJvbURpcihjaGFyICpwYXRoLCBjaGFyICp0b3BwYXRoLCBib29sIHJlY3Vyc2l2 ZSk7G1ttCiAbW20KG1szMW0tLy9leHRlcm4gaW50IFNhdmVQQ0JXaXRoRm9ybWF0IChQQ0JUeXBl ICpwY2IsIGNoYXIgKmZpbGVuYW1lLCBjaGFyICpmaWxlZm9ybWF0KTsbW20KG1szMW0tLy9leHRl cm4gaW50IExvYWRQQ0JXaXRoRm9ybWF0IChQQ0JUeXBlICoqcGNiLCBjaGFyICpmaWxlbmFtZSwg Y2hhciAqZmlsZWZvcm1hdCwgY2hhciAqKm5ld19mb3JtYXQpOxtbbQobWzMxbS0bW20KIC8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLRtbbQogICogRmxhZyBoZWxwZXIgZnVuY3Rpb25zG1ttCiAgKi8bW20K G1szNm1AQCAtMTA3OSw4ICsxMDc4LDE4IEBAG1ttIBtbbUJhY2t1cCAodm9pZCkbW20KIAkgIGV4 aXQgKDEpOxtbbQogCX0bW20KICAgICAgIHNwcmludGYgKGZpbGVuYW1lLCAiJXN+IiwgUENCLT5G aWxlbmFtZSk7G1ttChtbMzFtLSAgICAgIGZpbGVmb3JtYXQgPSBQQ0ItPkZpbGVmb3JtYXQ7G1tt ChtbMzFtLSBwcmludGYoIkI6ICVzXG4iLGZpbGVmb3JtYXQpOxtbbQobWzMybSsbW20KG1szMm0r G1ttG1szMm0gICAgICAvLyBBdCBsZWFzdCBpbiB0aGUgY2FzZSBvbiBhbiBpbnZvY2F0aW9uIGxp a2UgJ3BjYiBpbnZhbGlkX2ZpbGUucGNiJywbW20KG1szMm0rG1ttG1szMm0gICAgICAvLyB3ZSBl bmQgdXAgYXQgdGhpcyBwb2ludCB3aXRoIFBDQi0+RmlsZW5hbWUgc2V0IGJ1dCBQQ0ItPkZpbGVm b3JtYXQbW20KG1szMm0rG1ttG1szMm0gICAgICAvLyBub3Qgc2V0LiAgUHJlLWZpbGUtZm9ybWF0 LXBsdWdpbiBwY2Igc2VlbXMgdG8ganVzdCBwdXQgYSBwYXJzZSBFUlJPUhtbbQobWzMybSsbW20b WzMybSAgICAgIC8vIG1lc3NhZ2UgaW4gdGhlIG1lc3NhZ2UgbG9nIGFuZCBzdGFydCBlZGl0aW5n IGEgbmV3IGJsYW5rIHBjYiwgYW5kG1ttChtbMzJtKxtbbRtbMzJtICAgICAgLy8gdGhlbiB3aGVu IGEgc3Vic2VxdWVudCBzYXZlIGhhcHBlbnMgaXQgcHV0cyBhIHZhbGlkIGZpbGUgaW4gcGxhY2Ub W20KG1szMm0rG1ttG1szMm0gICAgICAvLyBvZiB0aGUgZ2l2ZW4gaW52YWxpZCBvbmUuICBUaGlz IHNlZW1zIHByZXR0eSB3ZWlyZCB0byBtZSBhbmQgSSdkG1ttChtbMzJtKxtbbRtbMzJtICAgICAg Ly8gcmF0aGVyIGhhdmUgYSBtdWNoIG1vcmUgcHJvbWluZW50IHNob3ctc3RvcHBpbmcgZXJyb3Ig bWVzc2FnZSBidXQbW20KG1szMm0rG1ttG1szMm0gICAgICAvLyBmb3Igbm93IGF0IGxlYXN0IHdl J3JlIGdvaW5nIHRvIGNhcnJ5IG9uIHRoZSB0cmFkaXRpb24sIHdoaWNoIG1lYW5zG1ttChtbMzJt KxtbbRtbMzJtICAgICAgLy8gd2UgaGF2ZSB0byB1c2UgdGhlIGRlZmF1bHQgZm9ybWF0IGluIHRo aXMgc2l0dWF0aW9uLhtbbQobWzMybSsbW20bWzMybSAgICAgIGZpbGVmb3JtYXQbW20KG1szMm0r G1ttG1szMm0gICAgICAgID0gUENCLT5GaWxlZm9ybWF0ID8gUENCLT5GaWxlZm9ybWF0IDogaGlk X2dldF9kZWZhdWx0X2Zvcm1hdF9pZCAoKTsbW20KICAgICB9G1ttCiAgIGVsc2UbW20KICAgICB7 G1ttChtbMzZtQEAgLTExMDMsNiArMTExMiw3IEBAG1ttIBtbbUJhY2t1cCAodm9pZCkbW20KICAg U2V0dGluZ3MuU2F2ZUNvbW1hbmQgPSBzYXZlX3NhdmVjb21tYW5kOxtbbQogG1ttCiAgIGZyZWUg KGZpbGVuYW1lKTsbW20KG1szMm0rG1ttCiB9G1ttCiAbW20KICNpZiAhZGVmaW5lZChIQVNfQVRF WElUKSAmJiAhZGVmaW5lZChIQVNfT05fRVhJVCkbW20KG1szNm1AQCAtMTY5Myw4ICsxNzAzLDkg QEAbW20gG1ttc3RhdGljIEhJRF9Gb3JtYXQgKiphbGxfZm9ybWF0cyA9IDA7G1ttCiAJMTogZGF0 YSBPSxtbbQogICAgaWQgPT0gTlVMTCAtPiBmdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQgZm9yIHNw ZWNpZmljIGZvcm1hdBtbbQogKi8bW20KG1szMm0rG1ttCiBpbnQbW20KG1szMW0taGlkX2dldF9m aWxlX2Zvcm1hdChpbnQgaWR4LCBpbnQgbG9hZF9zYXZlLCBjaGFyICoqaWQsIGNoYXIgKipuYW1l LCBjaGFyICoqbWltZSwgY2hhciAqKipwYXR0ZXJucykbW20KG1szMm0rG1ttG1szMm1oaWRfZ2V0 X2ZpbGVfZm9ybWF0KGludCBpZHgsIGludCBsb2FkX3NhdmUsIGludCAqaXNfZGVmYXVsdCwgY2hh ciAqKmlkLCBjaGFyICoqbmFtZSwgY2hhciAqKm1pbWUsIGNoYXIgKioqcGF0dGVybnMpG1ttCiB7 G1ttCiAgICAgaWYgKGlkeCA+PSBuX2Zvcm1hdHMpG1ttCiAgICAgICAgIHJldHVybiAwOxtbbQob WzM2bUBAIC0xNzA0LDYgKzE3MTUsNyBAQBtbbSAbW21oaWRfZ2V0X2ZpbGVfZm9ybWF0KGludCBp ZHgsIGludCBsb2FkX3NhdmUsIGNoYXIgKippZCwgY2hhciAqKm5hbWUsIGNoYXIgKiptaW1lLBtb bQogCXJldHVybiAxOxtbbQogICAgICAgfRtbbQogG1ttChtbMzJtKxtbbRtbMzJtICAgICppc19k ZWZhdWx0ID0gYWxsX2Zvcm1hdHNbaWR4XS0+ZGVmYXVsdF9mb3JtYXQ7G1ttCiAgICAgKmlkID0g YWxsX2Zvcm1hdHNbaWR4XS0+aWQ7G1ttCiAgICAgKm5hbWUgPSBhbGxfZm9ybWF0c1tpZHhdLT5k ZXNjcmlwdGlvbjsbW20KICAgICAqbWltZSA9IGFsbF9mb3JtYXRzW2lkeF0tPm1pbWV0eXBlOxtb bQobWzM2bUBAIC0xNzU2LDEzICsxNzY4LDE3IEBAG1ttIBtbbWNoYXIgKhtbbQogaGlkX2dldF9k ZWZhdWx0X2Zvcm1hdF9pZCAoY2hhciAqZGVzYykbW20KIHsbW20KICAgaW50IGk7G1ttChtbMzJt KxtbbRtbMzJtICBjaGFyICpyZXN1bHQgPSBOVUxMOxtbbQogG1ttCiAgIGZvciAoaSA9IDA7IGkg PCBuX2Zvcm1hdHM7IGkrKykbW20KICAgICB7G1ttChtbMzFtLSAgICAgIGlmIChhbGxfZm9ybWF0 c1tpXS0+ZGVmYXVsdF9mb3JtYXQpG1ttChtbMzFtLSAgICAgICAgcmV0dXJuIGFsbF9mb3JtYXRz W2ldLT5pZDsbW20KG1szMm0rG1ttG1szMm0gICAgICBpZiAoYWxsX2Zvcm1hdHNbaV0tPmRlZmF1 bHRfZm9ybWF0KSB7G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBhc3NlcnQgKHJlc3VsdCA9PSBO VUxMKTsgICAvLyBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUgZGVmYXVsdCBmb3JtYXQbW20KG1sz Mm0rG1ttG1szMm0gICAgICAgIHJlc3VsdCA9IGFsbF9mb3JtYXRzW2ldLT5pZDsbW20KG1szMm0r G1ttG1szMm0gICAgICB9G1ttCiAgICAgfRtbbQobWzMxbS0gIHJldHVybiBOVUxMOxtbbQobWzMy bSsbW20KG1szMm0rG1ttG1szMm0gIHJldHVybiByZXN1bHQ7G1ttCiB9G1ttCiAbW20KIGV4dGVy biBpbnQgaGlkX2ZpbGVfZm9ybWF0X2xvYWRhYmxlKGNoYXIgKmlkKRtbbQobWzFtZGlmZiAtLWdp dCBhL3NyYy9oaWQuaCBiL3NyYy9oaWQuaBtbbQobWzFtaW5kZXggZDg1NTNhMy4uNzhmMjI2NSAx MDA2NDQbW20KG1sxbS0tLSBhL3NyYy9oaWQuaBtbbQobWzFtKysrIGIvc3JjL2hpZC5oG1ttChtb MzZtQEAgLTI5MCw2ICsyOTAsNyBAQBtbbSAbW21leHRlcm4gIkMiG1ttCiAgIH0gSElEX0Zvcm1h dDsbW20KIBtbbQogICBleHRlcm4gdm9pZCBoaWRfcmVnaXN0ZXJfZm9ybWF0cyAoSElEX0Zvcm1h dCAqLCBpbnQpOxtbbQobWzMybSsbW20bWzMybSAgLy8gRklYTUU6IHRoZXNlIGRlZmluaXRpb25z IGNvdWxkIHN0YW5kIGFuIGV4cGxpY2l0IHZvaWQgaW4gYXJnIGxpc3QbW20KICNkZWZpbmUgUkVH SVNURVJfRk9STUFUUyhhKSBISURDT05DQVQodm9pZCByZWdpc3Rlcl8sYSkgKClcG1ttCiB7IGhp ZF9yZWdpc3Rlcl9mb3JtYXRzKGEsIHNpemVvZihhKS9zaXplb2YoYVswXSkpOyB9G1ttCiAbW20K G1szNm1AQCAtMjk3LDcgKzI5OCw3IEBAG1ttIBtbbWV4dGVybiAiQyIbW20KIGV4dGVybiBjaGFy ICogaGlkX2dldF9mb3JtYXRfaWRfYnlfZGVzYyAoY2hhciAqZGVzYyk7G1ttCiBleHRlcm4gY2hh ciAqIGhpZF9nZXRfZm9ybWF0X2lkX2J5X2lkeCAoaW50KTsbW20KIGV4dGVybiBjaGFyICogaGlk X2dldF9kZWZhdWx0X2Zvcm1hdF9pZCAoKTsbW20KG1szMW0tZXh0ZXJuIGludCBoaWRfZ2V0X2Zp bGVfZm9ybWF0KGludCBpZHgsIGludCBsb2FkX3NhdmUsIGNoYXIgKippZCwgY2hhciAqKm5hbWUs IGNoYXIgKiptaW1lLCBjaGFyICoqKnBhdHRlcm5zKTsbW20KG1szMm0rG1ttG1szMm1leHRlcm4g aW50IGhpZF9nZXRfZmlsZV9mb3JtYXQoaW50IGlkeCwgaW50IGxvYWRfc2F2ZSwgaW50ICppc19k ZWZhdWx0LCBjaGFyICoqaWQsIGNoYXIgKipuYW1lLCBjaGFyICoqbWltZSwgY2hhciAqKipwYXR0 ZXJucyk7G1ttCiBleHRlcm4gaW50IGhpZF9maWxlX2Zvcm1hdF9sb2FkYWJsZShjaGFyICppZCk7 G1ttCiAbW20KIBtbbQobWzFtZGlmZiAtLWdpdCBhL3NyYy9oaWQvZ3RrL2d0a2hpZC1tYWluLmMg Yi9zcmMvaGlkL2d0ay9ndGtoaWQtbWFpbi5jG1ttChtbMW1pbmRleCAzNWZlMDNhLi4wZjJjYzJi IDEwMDY0NBtbbQobWzFtLS0tIGEvc3JjL2hpZC9ndGsvZ3RraGlkLW1haW4uYxtbbQobWzFtKysr IGIvc3JjL2hpZC9ndGsvZ3RraGlkLW1haW4uYxtbbQobWzM2bUBAIC0xMzUxLDEwICsxMzUxLDEy IEBAG1ttIBtbbVNhdmUgKGludCBhcmdjLCBjaGFyICoqYXJndiwgQ29vcmQgeCwgQ29vcmQgeSkb W20KIAkgICAqIEFjdGlvblNhdmVUbygpIHdpbGwgaWdub3JlIHRoZSBuZXcgZmlsZSBuYW1lIHdl G1ttCiAJICAgKiBqdXN0IG9idGFpbmVkLhtbbQogCSAgICovG1ttChtbMzFtLQkgIGlmIChzdHJj YXNlY21wIChmdW5jdGlvbiwgIkxheW91dCIpID09IDApG1ttChtbMzJtKxtbbQkbWzMybSAgaWYg KHN0cmNhc2VjbXAgKGZ1bmN0aW9uLCAiTGF5b3V0IikgPT0gMCkgextbbQogCSAgICBoaWRfYWN0 aW9ubCAoIlNhdmVUbyIsICJMYXlvdXRBcyIsIG5hbWUsIGhpZF9nZXRfZm9ybWF0X2lkX2J5X2Rl c2MoY3VycmVudF9mb3JtYXQpLCBOVUxMKTsbW20KG1szMW0tCSAgZWxzZRtbbQobWzMybSsbW20b WzMybSAgICAgICAgICB9G1ttChtbMzJtKxtbbQkbWzMybSAgZWxzZSB7G1ttCiAJICAgIGhpZF9h Y3Rpb25sICgiU2F2ZVRvIiwgZnVuY3Rpb24sIG5hbWUsIGhpZF9nZXRfZm9ybWF0X2lkX2J5X2Rl c2MoY3VycmVudF9mb3JtYXQpLCBOVUxMKTsbW20KG1szMm0rG1ttG1szMm0gICAgICAgICAgfRtb bQogCX0bW20KICAgICAgIGdfZnJlZSAobmFtZSk7G1ttCiAgICAgfRtbbQobWzFtZGlmZiAtLWdp dCBhL3NyYy9oaWQvZ3RrL2d1aS1kaWFsb2cuYyBiL3NyYy9oaWQvZ3RrL2d1aS1kaWFsb2cuYxtb bQobWzFtaW5kZXggOWM1N2NiMi4uZjI0MWQ0OCAxMDA2NDQbW20KG1sxbS0tLSBhL3NyYy9oaWQv Z3RrL2d1aS1kaWFsb2cuYxtbbQobWzFtKysrIGIvc3JjL2hpZC9ndGsvZ3VpLWRpYWxvZy5jG1tt ChtbMzZtQEAgLTM1LDYgKzM1LDggQEAbW20KICNpbmNsdWRlICJkYXRhLmgiG1ttCiAjaW5jbHVk ZSAiZ3VpLmgiG1ttCiAbW20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSA8YXNzZXJ0Lmg+G1ttChtb MzJtKxtbbQogI2lmZGVmIEhBVkVfTElCRE1BTExPQxtbbQogI2luY2x1ZGUgPGRtYWxsb2MuaD4b W20KICNlbmRpZhtbbQobWzM2bUBAIC0zMDgsMjEgKzMxMCw2NSBAQBtbbSAbW21naGlkX2RpYWxv Z19maWxlX3NlbGVjdF9vcGVuIChnY2hhciAqIHRpdGxlLCBnY2hhciAqKiBwYXRoLCBnY2hhciAq IHNob3J0Y3V0cykbW20KICAgICAvKiBhZGQgYSBmaWx0ZXIgZm9yIGxheW91dCBmaWxlcyAqLxtb bQogICAgIEd0a0ZpbGVGaWx0ZXIgKnBjYl9maWx0ZXI7G1ttCiAgICAgaW50IGlkeCA9IDAsIHBp OxtbbQobWzMybSsbW20bWzMybSAgICBpbnQgaXNfZGVmYXVsdF9mb3JtYXQ7G1ttCiAgICAgY2hh ciAqZmlsdGVyX2lkLCAqZmlsdGVyX25hbWUsICpmaWx0ZXJfbWltZSwgKipmaWx0ZXJfcGF0dGVy bnM7G1ttCiAbW20KG1szMW0tICAgIHdoaWxlIChoaWRfZ2V0X2ZpbGVfZm9ybWF0KGlkeCwgMCwg JmZpbHRlcl9pZCwgJmZpbHRlcl9uYW1lLCAmZmlsdGVyX21pbWUsICZmaWx0ZXJfcGF0dGVybnMp KSB7G1ttChtbMzFtLSAgICAgICAgaWYgKGZpbHRlcl9pZCAhPSBOVUxMICkgextbbQobWzMxbS0g ICAgICAgICAgICBwY2JfZmlsdGVyID0gZ3RrX2ZpbGVfZmlsdGVyX25ldyAoKTsbW20KG1szMW0t ICAgICAgICAgICAgZ3RrX2ZpbGVfZmlsdGVyX3NldF9uYW1lIChwY2JfZmlsdGVyLCBmaWx0ZXJf bmFtZSk7G1ttChtbMzFtLSAgICAgICAgICAgIGd0a19maWxlX2ZpbHRlcl9hZGRfbWltZV90eXBl IChwY2JfZmlsdGVyLCBmaWx0ZXJfbWltZSk7G1ttChtbMzFtLQkgICAgcGkgPSAwOxtbbQobWzMx bS0JICAgIHdoaWxlIChmaWx0ZXJfcGF0dGVybnNbcGldICE9IDAgKSB7G1ttChtbMzFtLQkJZ3Rr X2ZpbGVfZmlsdGVyX2FkZF9wYXR0ZXJuIChwY2JfZmlsdGVyLCBmaWx0ZXJfcGF0dGVybnNbcGld KTsbW20KG1szMW0tCQlwaSsrOxtbbQobWzMxbS0JICAgIH0bW20KG1szMW0tICAgICAgICAgICAg Z3RrX2ZpbGVfY2hvb3Nlcl9hZGRfZmlsdGVyIChHVEtfRklMRV9DSE9PU0VSIChkaWFsb2cpLCBw Y2JfZmlsdGVyKTsbW20KG1szMW0tCX0bW20KG1szMW0tICAgICAgICBpZHgrKzsbW20KG1szMm0r G1ttChtbMzJtKxtbbRtbMzJtICAgIC8vIFRoZSBkZWZhdWx0IGZvcm1hdCBzaG91bGQgZ28gYXQg dGhlIHRvcCBvZiB0aGUgZmlsdGVyIGxpc3QuICBGSVhNRTobW20KG1szMm0rG1ttG1szMm0gICAg Ly8gYWN0dWFsbHkgaXQgc2hvdWxkIHBlcmhhcHMgYmUgdGhlIGRlZmF1bHQgb3B0aW9uLCByYXRo ZXIgdGhhbiAiYWxsIhtbbQobWzMybSsbW20bWzMybSAgICAvLyAod2hpY2ggaXMgYWxyZWFkeSBh ZGRlZCBhYm92ZSkuG1ttChtbMzJtKxtbbRtbMzJtICAgIGJvb2wgZm91bmRfZGVmYXVsdCA9IGZh bHNlOxtbbQobWzMybSsbW20bWzMybSAgICB3aGlsZSAoG1ttChtbMzJtKxtbbRtbMzJtICAgICAg ICBoaWRfZ2V0X2ZpbGVfZm9ybWF0ICgbW20KG1szMm0rG1ttG1szMm0gICAgICAgICAgaWR4LBtb bQobWzMybSsbW20bWzMybSAgICAgICAgICAwLBtbbQobWzMybSsbW20bWzMybSAgICAgICAgICAm aXNfZGVmYXVsdF9mb3JtYXQsG1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAgICZmaWx0ZXJfaWQs G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAgICZmaWx0ZXJfbmFtZSwbW20KG1szMm0rG1ttG1sz Mm0gICAgICAgICAgJmZpbHRlcl9taW1lLBtbbQobWzMybSsbW20bWzMybSAgICAgICAgICAmZmls dGVyX3BhdHRlcm5zICkgKSB7G1ttChtbMzJtKxtbbRtbMzJtICAgICAgaWYgKCBpc19kZWZhdWx0 X2Zvcm1hdCApIHsbW20KG1szMm0rG1ttG1szMm0gICAgICAgIC8vIFRoZSBkZWZhdWx0IGZvcm1h dCBoYWQgYmV0dGVyIGJlIGJ1aWx0LWluIGFuZCBjYXBhYmxlIG9mIGxvYWQbW20KG1szMm0rG1tt G1szMm0gICAgICAgIGFzc2VydCAoZmlsdGVyX2lkICE9IE5VTEwpOxtbbRtbNDFtICAbW20KG1sz Mm0rG1ttG1szMm0gICAgICAgIC8vIFRoZXJlIGJldHRlciBub3QgYmUgbW9yZSB0aGFuIG9uZSBk ZWZhdWx0LiAgRklYTUU6IE1lc3NhZ2UgZm9yIHRoaXMbW20KG1szMm0rG1ttG1szMm0gICAgICAg IC8vIGFzIHdlbGwgaW4gY2FzZSBvZiBzY3Jld2VkLXVwIHBsdWdpbnMgdGhhdCB3YW50IHRvIHNl dCBkZWZhdWx0PxtbbQobWzMybSsbW20bWzMybSAgICAgICAgYXNzZXJ0ICghIGZvdW5kX2RlZmF1 bHQpOxtbbQobWzMybSsbW20bWzMybSAgICAgICAgZm91bmRfZGVmYXVsdCA9IHRydWU7G1ttChtb MzJtKxtbbRtbMzJtICAgICAgICBwY2JfZmlsdGVyID0gZ3RrX2ZpbGVfZmlsdGVyX25ldyAoKTsb W20KG1szMm0rG1ttG1szMm0gICAgICAgIGd0a19maWxlX2ZpbHRlcl9zZXRfbmFtZSAocGNiX2Zp bHRlciwgZmlsdGVyX25hbWUpOxtbbQobWzMybSsbW20bWzMybSAgICAgICAgZ3RrX2ZpbGVfZmls dGVyX2FkZF9taW1lX3R5cGUgKHBjYl9maWx0ZXIsIGZpbHRlcl9taW1lKTsbW20KG1szMm0rG1tt G1szMm0gICAgICAgIHBpID0gMDsbW20KG1szMm0rG1ttG1szMm0gICAgICAgIHdoaWxlIChmaWx0 ZXJfcGF0dGVybnNbcGldICE9IDAgKSB7G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAgIGd0a19m aWxlX2ZpbHRlcl9hZGRfcGF0dGVybiAocGNiX2ZpbHRlciwgZmlsdGVyX3BhdHRlcm5zW3BpXSk7 G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAgIHBpKys7G1ttChtbMzJtKxtbbRtbMzJtICAgICAg ICB9G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBndGtfZmlsZV9jaG9vc2VyX2FkZF9maWx0ZXIg KEdUS19GSUxFX0NIT09TRVIgKGRpYWxvZyksIHBjYl9maWx0ZXIpOxtbbQobWzMybSsbW20bWzMy bSAgICAgIH0bW20KG1szMm0rG1ttG1szMm0gICAgICBpZHgrKzsbW20KG1szMm0rG1ttG1szMm0g ICAgfRtbbQobWzMybSsbW20KG1szMm0rG1ttG1szMm0gICAgLy8gTm93IGFkZCBhbGwgdGhlIG90 aGVyIG5vbi1kZWZhdWx0IGZvcm1hdHMbW20KG1szMm0rG1ttG1szMm0gICAgaWR4ID0gMDsbW20K G1szMm0rG1ttG1szMm0gICAgd2hpbGUgKBtbbQobWzMybSsbW20bWzMybSAgICAgICAgaGlkX2dl dF9maWxlX2Zvcm1hdCAoG1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAgIGlkeCwbW20KG1szMm0r G1ttG1szMm0gICAgICAgICAgMCwbW20KG1szMm0rG1ttG1szMm0gICAgICAgICAgJmlzX2RlZmF1 bHRfZm9ybWF0LBtbbQobWzMybSsbW20bWzMybSAgICAgICAgICAmZmlsdGVyX2lkLCAmZmlsdGVy X25hbWUsG1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAgICZmaWx0ZXJfbWltZSwbW20KG1szMm0r G1ttG1szMm0gICAgICAgICAgJmZpbHRlcl9wYXR0ZXJucyApICkgextbbQobWzMybSsbW20bWzMy bSAgICAgIGlmIChmaWx0ZXJfaWQgIT0gTlVMTCAmJiAoISBpc19kZWZhdWx0X2Zvcm1hdCkgKSB7 G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBwY2JfZmlsdGVyID0gZ3RrX2ZpbGVfZmlsdGVyX25l dyAoKTsbW20KG1szMm0rG1ttG1szMm0gICAgICAgIGd0a19maWxlX2ZpbHRlcl9zZXRfbmFtZSAo cGNiX2ZpbHRlciwgZmlsdGVyX25hbWUpOxtbbQobWzMybSsbW20bWzMybSAgICAgICAgZ3RrX2Zp bGVfZmlsdGVyX2FkZF9taW1lX3R5cGUgKHBjYl9maWx0ZXIsIGZpbHRlcl9taW1lKTsbW20KG1sz Mm0rG1ttG1szMm0gICAgICAgIHBpID0gMDsbW20KG1szMm0rG1ttG1szMm0gICAgICAgIHdoaWxl IChmaWx0ZXJfcGF0dGVybnNbcGldICE9IDAgKSB7G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAg IGd0a19maWxlX2ZpbHRlcl9hZGRfcGF0dGVybiAocGNiX2ZpbHRlciwgZmlsdGVyX3BhdHRlcm5z W3BpXSk7G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAgIHBpKys7G1ttChtbMzJtKxtbbRtbMzJt ICAgICAgICB9G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBndGtfZmlsZV9jaG9vc2VyX2FkZF9m aWx0ZXIgKEdUS19GSUxFX0NIT09TRVIgKGRpYWxvZyksIHBjYl9maWx0ZXIpOxtbbQobWzMybSsb W20bWzMybSAgICAgIH0bW20KG1szMm0rG1ttG1szMm0gICAgICBpZHgrKzsbW20KICAgICB9G1tt CiAgIH0bW20KIBtbbQobWzM2bUBAIC01MDUsMTAgKzU1MSw0NSBAQBtbbSAbW21naGlkX2RpYWxv Z19maWxlX3NlbGVjdF9zYXZlIChnY2hhciAqIHRpdGxlLCBnY2hhciAqKiBwYXRoLCBnY2hhciAq KiBmb3JtYXQsIGdjaBtbbQogICBpZiAoZm9ybWF0ICE9IE5VTEwgKSB7G1ttCiAgICAgR3RrRmls ZUZpbHRlciAqcGNiX2ZpbHRlcjsbW20KICAgICBpbnQgaWR4ID0gMCwgcGk7G1ttChtbMzJtKxtb bRtbMzJtICAgIGludCBpc19kZWZhdWx0X2Zvcm1hdDsbW20KICAgICBjaGFyICpmaWx0ZXJfaWQs ICpmaWx0ZXJfbmFtZSwgKmZpbHRlcl9taW1lLCAqKmZpbHRlcl9wYXR0ZXJuczsbW20KIBtbbQob WzMxbS0gICAgd2hpbGUgKGhpZF9nZXRfZmlsZV9mb3JtYXQoaWR4LCAwLCAmZmlsdGVyX2lkLCAm ZmlsdGVyX25hbWUsICZmaWx0ZXJfbWltZSwgJmZpbHRlcl9wYXR0ZXJucykpIHsbW20KG1szMW0t ICAgICAgICBpZiAoZmlsdGVyX2lkICE9IE5VTEwgKSB7G1ttChtbMzJtKxtbbRtbMzJtICAgIC8v IFdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRlZmF1bHQgZm9ybWF0IGdldHMgYWRkZWQg dG8gdGhlIGZpbHRlchtbbQobWzMybSsbW20bWzMybSAgICAvLyBmaXJzdCwgc28gdGhhdCBpdCBl bmRzIHVwIGFzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBhbmQgYXQgdGhlIHRvcCBvZhtbbQobWzMy bSsbW20bWzMybSAgICAvLyB0aGUgbGlzdCBpbiB0aGUgR1VJG1ttChtbMzJtKxtbbRtbMzJtICAg IGJvb2wgZm91bmRfZGVmYXVsdCA9IGZhbHNlOxtbbQobWzMybSsbW20bWzMybSAgICB3aGlsZSAo G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBoaWRfZ2V0X2ZpbGVfZm9ybWF0ICgbW20KG1szMm0r G1ttG1szMm0gICAgICAgICAgaWR4LBtbbQobWzMybSsbW20bWzMybSAgICAgICAgICAwLBtbbQob WzMybSsbW20bWzMybSAgICAgICAgICAmaXNfZGVmYXVsdF9mb3JtYXQsG1ttChtbMzJtKxtbbRtb MzJtICAgICAgICAgICZmaWx0ZXJfaWQsICZmaWx0ZXJfbmFtZSwbW20KG1szMm0rG1ttG1szMm0g ICAgICAgICAgJmZpbHRlcl9taW1lLBtbbQobWzMybSsbW20bWzMybSAgICAgICAgICAmZmlsdGVy X3BhdHRlcm5zKSApIHsbW20KG1szMm0rG1ttG1szMm0gICAgICBpZiAoIGlzX2RlZmF1bHRfZm9y bWF0ICkgextbbQobWzMybSsbW20bWzMybSAgICAgICAgLy8gVGhlIGRlZmF1bHQgZm9ybWF0IGhh ZCBiZXR0ZXIgYmUgYnVpbHQtaW4gYW5kIGNhcGFibGUgb2Ygc2F2ZRtbbQobWzMybSsbW20bWzMy bSAgICAgICAgYXNzZXJ0IChmaWx0ZXJfaWQgIT0gTlVMTCk7G1ttG1s0MW0gIBtbbQobWzMybSsb W20bWzMybSAgICAgICAgLy8gVGhlcmUgYmV0dGVyIG5vdCBiZSBtb3JlIHRoYW4gb25lIGRlZmF1 bHQuICBGSVhNRTogTWVzc2FnZSBmb3IgdGhpcxtbbQobWzMybSsbW20bWzMybSAgICAgICAgLy8g YXMgd2VsbCBpbiBjYXNlIG9mIHNjcmV3ZWQtdXAgcGx1Z2lucyB0aGF0IHdhbnQgdG8gc2V0IGRl ZmF1bHQ/G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBhc3NlcnQgKCEgZm91bmRfZGVmYXVsdCk7 G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBmb3VuZF9kZWZhdWx0ID0gdHJ1ZTsbW20KG1szMm0r G1ttG1szMm0gICAgICAgIHBjYl9maWx0ZXIgPSBndGtfZmlsZV9maWx0ZXJfbmV3ICgpOxtbbQob WzMybSsbW20bWzMybSAgICAgICAgZ3RrX2ZpbGVfZmlsdGVyX3NldF9uYW1lIChwY2JfZmlsdGVy LCBmaWx0ZXJfbmFtZSk7G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBndGtfZmlsZV9maWx0ZXJf YWRkX21pbWVfdHlwZSAocGNiX2ZpbHRlciwgZmlsdGVyX21pbWUpOxtbbQobWzMybSsbW20bWzMy bSAgICAgICAgcGkgPSAwOxtbbQobWzMybSsbW20bWzMybSAgICAgICAgd2hpbGUgKGZpbHRlcl9w YXR0ZXJuc1twaV0gIT0gMCApIHsbW20KG1szMm0rG1ttG1szMm0gICAgICAgICAgZ3RrX2ZpbGVf ZmlsdGVyX2FkZF9wYXR0ZXJuIChwY2JfZmlsdGVyLCBmaWx0ZXJfcGF0dGVybnNbcGldKTsbW20K G1szMm0rG1ttG1szMm0gICAgICAgICAgcGkrKzsbW20KG1szMm0rG1ttG1szMm0gICAgICAgIH0b W20KG1szMm0rG1ttG1szMm0gICAgICAgIGd0a19maWxlX2Nob29zZXJfYWRkX2ZpbHRlciAoR1RL X0ZJTEVfQ0hPT1NFUiAoZGlhbG9nKSwgcGNiX2ZpbHRlcik7G1ttChtbMzJtKxtbbRtbMzJtICAg ICAgfRtbbQobWzMybSsbW20bWzMybSAgICAgIGlkeCsrOxtbbQobWzMybSsbW20bWzMybSAgICB9 G1ttChtbMzJtKxtbbQobWzMybSsbW20bWzMybSAgICAvLyBOb3cgYWRkIGFsbCB0aGUgb3RoZXIg bm9uLWRlZmF1bHQgZm9ybWF0cxtbbQobWzMybSsbW20bWzMybSAgICBpZHggPSAwOxtbbQobWzMy bSsbW20bWzMybSAgICB3aGlsZSAoaGlkX2dldF9maWxlX2Zvcm1hdChpZHgsIDAsICZpc19kZWZh dWx0X2Zvcm1hdCwgJmZpbHRlcl9pZCwgJmZpbHRlcl9uYW1lLCAmZmlsdGVyX21pbWUsICZmaWx0 ZXJfcGF0dGVybnMpKSB7G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBpZiAoZmlsdGVyX2lkICE9 IE5VTEwgJiYgKCEgaXNfZGVmYXVsdF9mb3JtYXQpICkgextbbQogICAgICAgICAgICAgcGNiX2Zp bHRlciA9IGd0a19maWxlX2ZpbHRlcl9uZXcgKCk7G1ttCiAgICAgICAgICAgICBndGtfZmlsZV9m aWx0ZXJfc2V0X25hbWUgKHBjYl9maWx0ZXIsIGZpbHRlcl9uYW1lKTsbW20KICAgICAgICAgICAg IGd0a19maWxlX2ZpbHRlcl9hZGRfbWltZV90eXBlIChwY2JfZmlsdGVyLCBmaWx0ZXJfbWltZSk7 G1ttCg== --047d7b5d3e64967bb5052955a20e--