From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Alp Aker Newsgroups: gmane.emacs.bugs Subject: bug#10736: Add "underwave" face attribute Date: Thu, 12 Apr 2012 20:49:17 -0400 Message-ID: References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=20cf302d4bbca88d0804bd84d7dd X-Trace: dough.gmane.org 1334278198 11403 80.91.229.3 (13 Apr 2012 00:49:58 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Fri, 13 Apr 2012 00:49:58 +0000 (UTC) Cc: Lars Magne Ingebrigtsen , 10736@debbugs.gnu.org, =?UTF-8?Q?Aur=C3=A9lien?= Aptel To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri Apr 13 02:49:57 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1SIUi1-0001bl-CM for geb-bug-gnu-emacs@m.gmane.org; Fri, 13 Apr 2012 02:49:53 +0200 Original-Received: from localhost ([::1]:47246 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SIUi0-0001AH-Ne for geb-bug-gnu-emacs@m.gmane.org; Thu, 12 Apr 2012 20:49:52 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:39385) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SIUhx-00019c-CL for bug-gnu-emacs@gnu.org; Thu, 12 Apr 2012 20:49:50 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SIUhv-0007Lz-9C for bug-gnu-emacs@gnu.org; Thu, 12 Apr 2012 20:49:48 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:58742) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SIUhu-0007LR-S3 for bug-gnu-emacs@gnu.org; Thu, 12 Apr 2012 20:49:47 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1SIUj7-0004lU-MB for bug-gnu-emacs@gnu.org; Thu, 12 Apr 2012 20:51:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Alp Aker Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 13 Apr 2012 00:51:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 10736 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 10736-submit@debbugs.gnu.org id=B10736.133427823818286 (code B ref 10736); Fri, 13 Apr 2012 00:51:01 +0000 Original-Received: (at 10736) by debbugs.gnu.org; 13 Apr 2012 00:50:38 +0000 Original-Received: from localhost ([127.0.0.1]:55280 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1SIUij-0004kt-N0 for submit@debbugs.gnu.org; Thu, 12 Apr 2012 20:50:37 -0400 Original-Received: from mail-ee0-f44.google.com ([74.125.83.44]:49271) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1SIUig-0004kl-Hz for 10736@debbugs.gnu.org; Thu, 12 Apr 2012 20:50:35 -0400 Original-Received: by eeke51 with SMTP id e51so683922eek.3 for <10736@debbugs.gnu.org>; Thu, 12 Apr 2012 17:49:18 -0700 (PDT) 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 :cc:content-type; bh=Y2NF8rQtf5wCJktR9t6IwbSo21glLIc+l9SNG+jqWOI=; b=x3niUiO6nXdY383wvvYgrPPhX5uNghNs+P5z46v8tZF+PyGcttWryKD96Sza9FSZ54 QoNO4W3xCikjKw4m+0aUQs7WaDvE+1cAMAHB3hgD4YnWOICx6p+KrNEqIX8BeOYhcfi4 2zwLkG/LLuMIRVMhJuQfUBwpX7MFtiIQvGSRdi/GgaJMntCA5gvfbdyNmrUUKWmnFObZ eqAjAXKBXQXcYZIeVpOPuI5SM781J7VRgCWat4yEFlo7Nm8DC1awcBCYclTEDMl5XCJq fhAWwTQNMg5zoyiyFHuAUK/62v7JWoRr24dhezwmzvuza1ucPRn+4q4tC6uIOGhdhX59 nTAw== Original-Received: by 10.14.133.10 with SMTP id p10mr36038eei.36.1334278158322; Thu, 12 Apr 2012 17:49:18 -0700 (PDT) Original-Received: by 10.213.7.195 with HTTP; Thu, 12 Apr 2012 17:49:17 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:58963 Archived-At: --20cf302d4bbca88d0804bd84d7dd Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On Thu, Apr 12, 2012 at 5:57 PM, Stefan Monnier wrote: > Assuming the code is OK, yes. =A0 I'd like to hear someone's opinion on > the code, tho (Jan, maybe?). Looking afresh at the small bit I contributed for ns_draw_underwave, it seems to me that that function does some unnecessary work with clipping rectangles, so I'd like to offer a slightly simpler version (revised patch file attached). (In explanation of this change: If I understand the NS port's drawing routine correctly, at the time this function is called the current clipping path has already been restricted to the glyph string's clip rects. Since NSRectClip can only further restrict the current clipping path, there's no need explicitly to invoke the glyph string's clip rects at this point. Indeed, I suspect the NS version could get away without worrying about clipping at all here, but I'm not as certain of this latter point.) --20cf302d4bbca88d0804bd84d7dd Content-Type: application/octet-stream; name="underwave-clip-4.patch" Content-Disposition: attachment; filename="underwave-clip-4.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h0yh8p9z0 PT09IG1vZGlmaWVkIGZpbGUgJ2RvYy9saXNwcmVmL2Rpc3BsYXkudGV4aScKLS0tIGRvYy9saXNw cmVmL2Rpc3BsYXkudGV4aQkyMDEyLTA0LTA0IDA3OjU0OjAyICswMDAwCisrKyBkb2MvbGlzcHJl Zi9kaXNwbGF5LnRleGkJMjAxMi0wNC0xMiAyMzo1NjozOSArMDAwMApAQCAtMjEyMywxMCArMjEy MywzMiBAQAogbmFtZSwgb3IgYSBoZXhhZGVjaW1hbCBjb2xvciBzcGVjaWZpY2F0aW9uLiAgQHhy ZWZ7Q29sb3IgTmFtZXN9LgogCiBAaXRlbSA6dW5kZXJsaW5lCi1XaGV0aGVyIG9yIG5vdCBjaGFy YWN0ZXJzIHNob3VsZCBiZSB1bmRlcmxpbmVkLCBhbmQgaW4gd2hhdCBjb2xvci4gIElmCi10aGUg dmFsdWUgaXMgQGNvZGV7dH0sIHVuZGVybGluaW5nIHVzZXMgdGhlIGZvcmVncm91bmQgY29sb3Ig b2YgdGhlCi1mYWNlLiAgSWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLCB1bmRlcmxpbmluZyB1c2Vz IHRoYXQgY29sb3IuICBUaGUKLXZhbHVlIEBjb2Rle25pbH0gbWVhbnMgZG8gbm90IHVuZGVybGlu ZS4KK1doZXRoZXIgb3Igbm90IGNoYXJhY3RlcnMgc2hvdWxkIGJlIHVuZGVybGluZWQsIGFuZCBp biB3aGF0Citjb2xvci4gSGVyZSBhcmUgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgQGNvZGV7 OnVuZGVybGluZX0KK2F0dHJpYnV0ZSwgYW5kIHdoYXQgdGhleSBtZWFuOgorCitAdGFibGUgQGFz aXMKK0BpdGVtIEBjb2Rle25pbH0KK0Rvbid0IHVuZGVybGluZS4KKworQGl0ZW0gQGNvZGV7dH0K K1VuZGVybGluZSB3aXRoIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIG9mIHRoZSBmYWNlLgorCitAaXRl bSBAdmFye2NvbG9yfQorVW5kZXJsaW5lIGluIGNvbG9yIEB2YXJ7Y29sb3J9LgorCitAaXRlbSBA Y29kZXsoOmNvbG9yIEB2YXJ7Y29sb3J9IDpzdHlsZSBAdmFye3N0eWxlfSl9CitJZiBAdmFye2Nv bG9yfSBpcyBhIHN0cmluZywgdW5kZXJsaW5lIGluIGl0LgorSWYgQHZhcntjb2xvcn0gaXMgQGNv ZGV7Zm9yZWdyb3VuZC1jb2xvcn0sIHVuZGVybGluZSB3aXRoIHRoZQorZm9yZWdyb3VuZCBjb2xv ciBvZiB0aGUgZmFjZS4KKworSWYgQHZhcntzdHlsZX0gaXMgQGNvZGV7d2F2ZX0gdW5kZXJsaW5l IHdpdGggYSB3YXZlLgorSWYgQHZhcntzdHlsZX0gaXMgQGNvZGV7bGluZX0gdW5kZXJsaW5lIHdp dGggYSBsaW5lLiAKKworSWYgdGhlIGF0dHJpYnV0ZSBAY29kZXs6Y29sb3J9IGlzIG9taXRlZCwg dW5kZXJsaW5lIHdpdGggdGhlCitmb3JlZ3JvdW5kIGNvbG9yIG9mIHRoZSBmYWNlLgorSWYgdGhl IGF0dHJpYnV0ZSBAY29kZXs6c3R5bGV9IGlzIG9taXRlZCwgdW5kZXJsaW5lIHdpdGggYSBsaW5l LgorQGVuZCB0YWJsZQogCiBAaXRlbSA6b3ZlcmxpbmUKIFdoZXRoZXIgb3Igbm90IGNoYXJhY3Rl cnMgc2hvdWxkIGJlIG92ZXJsaW5lZCwgYW5kIGluIHdoYXQgY29sb3IuCgo9PT0gbW9kaWZpZWQg ZmlsZSAnbGlzcC9jdXMtZmFjZS5lbCcKLS0tIGxpc3AvY3VzLWZhY2UuZWwJMjAxMi0wMS0xOSAw NzoyMToyNSArMDAwMAorKysgbGlzcC9jdXMtZmFjZS5lbAkyMDEyLTA0LTEyIDIzOjU2OjM5ICsw MDAwCkBAIC0xMzUsOCArMTM1LDEzIEBACiAgICAgIChjaG9pY2UgOnRhZyAiVW5kZXJsaW5lIgog CSAgICAgOmhlbHAtZWNobyAiQ29udHJvbCB0ZXh0IHVuZGVybGluaW5nLiIKIAkgICAgIChjb25z dCA6dGFnICJPZmYiIG5pbCkKLQkgICAgIChjb25zdCA6dGFnICJPbiIgdCkKLQkgICAgIChjb2xv ciA6dGFnICJDb2xvcmVkIikpKQorCSAgICAgKGxpc3QgOnRhZyAiT24iCisJCSAgIChjb25zdCA6 Zm9ybWF0ICIiIDp2YWx1ZSA6Y29sb3IpCisJCSAgIChjaG9pY2UgOnRhZyAiQ29sb3IiIChjb25z dCA6dGFnICJGb3JlZ3JvdW5kIENvbG9yIiBmb3JlZ3JvdW5kLWNvbG9yKSBjb2xvcikKKyAgICAg ICAgICAgICAgICAgICAoY29uc3QgOmZvcm1hdCAiIiA6dmFsdWUgOnN0eWxlKQorICAgICAgICAg ICAgICAgICAgIChjaG9pY2UgOnRhZyAiU3R5bGUiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY29uc3QgOnRhZyAiTGluZSIgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zdCA6dGFnICJXYXZlIiB3YXZlKSkpKSkKIAogICAgICg6b3ZlcmxpbmUKICAgICAgKGNob2lj ZSA6dGFnICJPdmVybGluZSIKCj09PSBtb2RpZmllZCBmaWxlICdsaXNwL2ZhY2VzLmVsJwotLS0g bGlzcC9mYWNlcy5lbAkyMDEyLTA0LTA5IDEzOjA1OjQ4ICswMDAwCisrKyBsaXNwL2ZhY2VzLmVs CTIwMTItMDQtMTIgMjM6NTY6MzkgKzAwMDAKQEAgLTYxMywxMCArNjEzLDIxIEBACiAKIGA6dW5k ZXJsaW5lJwogCi1WQUxVRSBzcGVjaWZpZXMgd2hldGhlciBjaGFyYWN0ZXJzIGluIEZBQ0Ugc2hv dWxkIGJlIHVuZGVybGluZWQuICBJZgotVkFMVUUgaXMgdCwgdW5kZXJsaW5lIHdpdGggZm9yZWdy b3VuZCBjb2xvciBvZiB0aGUgZmFjZS4gIElmIFZBTFVFIGlzCi1hIHN0cmluZywgdW5kZXJsaW5l IHdpdGggdGhhdCBjb2xvci4gIElmIFZBTFVFIGlzIG5pbCwgZXhwbGljaXRseQotZG9uJ3QgdW5k ZXJsaW5lLgorVkFMVUUgc3BlY2lmaWVzIHdoZXRoZXIgY2hhcmFjdGVycyBpbiBGQUNFIHNob3Vs ZCBiZSB1bmRlcmxpbmVkLgorSWYgVkFMVUUgaXMgdCwgdW5kZXJsaW5lIHdpdGggZm9yZWdyb3Vu ZCBjb2xvciBvZiB0aGUgZmFjZS4KK0lmIFZBTFVFIGlzIGEgc3RyaW5nLCB1bmRlcmxpbmUgd2l0 aCB0aGF0IGNvbG9yLgorSWYgVkFMVUUgaXMgbmlsLCBleHBsaWNpdGx5IGRvbid0IHVuZGVybGlu ZS4KKworT3RoZXJ3aXNlLCBWQUxVRSBtdXN0IGJlIGEgcHJvcGVydHkgbGlzdCBvZiB0aGUgZm9y bToKKworYCg6Y29sb3IgQ09MT1IgOnN0eWxlIFNUWUxFKScuCisKK0NPTE9SIGNhbiBiZSBhIGVp dGhlciBhIGNvbG9yIG5hbWUgc3RyaW5nIG9yIGBmb3JlZ3JvdW5kLWNvbG9yJy4KK1NUWUxFIGNh biBiZSBlaXRoZXIgYGxpbmUnIG9yIGB3YXZlJy4KK0lmIGEga2V5d29yZC92YWx1ZSBwYWlyIGlz IG1pc3NpbmcgZnJvbSB0aGUgcHJvcGVydHkgbGlzdCwgYQorZGVmYXVsdCB2YWx1ZSB3aWxsIGJl IHVzZWQgZm9yIHRoZSB2YWx1ZS4KK1RoZSBkZWZhdWx0IHZhbHVlIG9mIENPTE9SIGlzIHRoZSBm b3JlZ3JvdW5kIGNvbG9yIG9mIHRoZSBmYWNlLgorVGhlIGRlZmF1bHQgdmFsdWUgb2YgU1RZTEUg aXMgYGxpbmUnLgogCiBgOm92ZXJsaW5lJwogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2Rpc3Bl eHRlcm4uaCcKLS0tIHNyYy9kaXNwZXh0ZXJuLmgJMjAxMi0wMy0yNiAwNTo0MzowNSArMDAwMAor Kysgc3JjL2Rpc3BleHRlcm4uaAkyMDEyLTA0LTEyIDIzOjU2OjM5ICswMDAwCkBAIC0xNTEwLDYg KzE1MTAsMTMgQEAKICAgRkFDRV9TVU5LRU5fQk9YCiB9OwogCisvKiBVbmRlcmxpbmUgdHlwZS4g Ki8KKworZW51bSBmYWNlX3VuZGVybGluZV90eXBlCit7CisgIEZBQ0VfVU5ERVJfTElORSwKKyAg RkFDRV9VTkRFUl9XQVZFCit9OwogCiAvKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIHJlYWxpemVk IGZhY2UuCiAKQEAgLTE1ODUsNiArMTU5Miw5IEBACiAgICAgIGRyYXdpbmcgc2hhZG93cy4gICov CiAgIHVuc2lnbmVkIHVzZV9ib3hfY29sb3JfZm9yX3NoYWRvd3NfcCA6IDE7CiAKKyAgLyogU3R5 bGUgb2YgdW5kZXJsaW5pbmcuICovCisgIGVudW0gZmFjZV91bmRlcmxpbmVfdHlwZSB1bmRlcmxp bmVfdHlwZTsKKwogICAvKiBOb24temVybyBpZiB0ZXh0IGluIHRoaXMgZmFjZSBzaG91bGQgYmUg dW5kZXJsaW5lZCwgb3ZlcmxpbmVkLAogICAgICBzdHJpa2UtdGhyb3VnaCBvciBoYXZlIGEgYm94 IGRyYXduIGFyb3VuZCBpdC4gICovCiAgIHVuc2lnbmVkIHVuZGVybGluZV9wIDogMTsKCj09PSBt b2RpZmllZCBmaWxlICdzcmMvbnN0ZXJtLm0nCi0tLSBzcmMvbnN0ZXJtLm0JMjAxMi0wMi0wNCAx NToxMDo1NCArMDAwMAorKysgc3JjL25zdGVybS5tCTIwMTItMDQtMTMgMDA6MDI6NTAgKzAwMDAK QEAgLTI1OTgsNiArMjU5OCw2MCBAQAogICByZXR1cm4gbjsKIH0KIAorLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgIERyYXcgYSB3YXZ5IGxpbmUgdW5kZXIgZ2x5cGggc3RyaW5nIHMuIFRoZSB3YXZlIGZpbGxz IHdhdmVfaGVpZ2h0CisgICBwaXhlbHMgZnJvbSB5LgorCisgICAgICAgICAgICAgICAgICAgIHgg ICAgICAgICAgd2F2ZV9sZW5ndGggPSAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtLQorICAgICAgICAgICAgICAgIHkgICAgKiAgICogICAqICAgKiAgICoKKyAgICAgICAgICAg ICAgICAgICAgIHwqICogKiAqICogKiAqICogKgorICAgIHdhdmVfaGVpZ2h0ID0gMyAgfCAqICAg KiAgICogICAqCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZAorbnNfZHJhd191bmRl cndhdmUgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMsIENHRmxvYXQgd2lkdGgsIENHRmxvYXQgeCkK K3sKKyAgaW50IHdhdmVfaGVpZ2h0ID0gMywgd2F2ZV9sZW5ndGggPSAzOworICBpbnQgeSwgZHgs IGR5LCBvZGQsIHhtYXg7CisgIE5TUG9pbnQgYSwgYjsKKyAgTlNSZWN0IHdhdmVDbGlwOworCisg IGR4ID0gd2F2ZV9sZW5ndGg7CisgIGR5ID0gd2F2ZV9oZWlnaHQgLSAxOworICB5ID0gIHMtPnli YXNlICsgMTsKKyAgeG1heCA9IHggKyB3aWR0aDsKKworICAvKiBGaW5kIGFuZCBzZXQgY2xpcHBp bmcgcmVjdGFuZ2xlICovCisgIHdhdmVDbGlwID0gTlNNYWtlUmVjdCAoeCwgeSwgd2lkdGgsIHdh dmVfaGVpZ2h0KTsKKyAgW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gc2F2ZUdy YXBoaWNzU3RhdGVdOworICBOU1JlY3RDbGlwICh3YXZlQ2xpcCk7CisKKyAgLyogRHJhdyB0aGUg d2F2ZXMgKi8KKyAgYS54ID0geCAtICgoaW50KSh4KSAlIGR4KTsKKyAgYi54ID0gYS54ICsgZHg7 CisgIG9kZCA9IChpbnQpKGEueC9keCkgJSAyOworICBhLnkgPSBiLnkgPSB5OworCisgIGlmIChv ZGQpCisgICAgYS55ICs9IGR5OworICBlbHNlCisgICAgYi55ICs9IGR5OworCisgIHdoaWxlIChh LnggPD0geG1heCkKKyAgICB7CisgICAgICBbTlNCZXppZXJQYXRoIHN0cm9rZUxpbmVGcm9tUG9p bnQ6YSB0b1BvaW50OmJdOworICAgICAgYS54ID0gYi54LCBhLnkgPSBiLnk7CisgICAgICBiLngg Kz0gZHgsIGIueSA9IHkgKyBvZGQqZHk7CisgICAgICBvZGQgPSAhb2RkOworICAgIH0KKworICAv KiBSZXN0b3JlIHByZXZpb3VzIGNsaXBwaW5nIHJlY3RhbmdsZShzKSAqLworICBbW05TR3JhcGhp Y3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSByZXN0b3JlR3JhcGhpY3NTdGF0ZV07Cit9CisKKwor CiB2b2lkCiBuc19kcmF3X3RleHRfZGVjb3JhdGlvbiAoc3RydWN0IGdseXBoX3N0cmluZyAqcywg c3RydWN0IGZhY2UgKmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgTlNDb2xvciAqZGVm YXVsdENvbCwgQ0dGbG9hdCB3aWR0aCwgQ0dGbG9hdCB4KQpAQCAtMjYxMSw2MyArMjY2NSw3NSBA QAogICAvKiBEbyB1bmRlcmxpbmUuICovCiAgIGlmIChmYWNlLT51bmRlcmxpbmVfcCkKICAgICB7 Ci0gICAgICBOU1JlY3QgcjsKLSAgICAgIHVuc2lnbmVkIGxvbmcgdGhpY2tuZXNzLCBwb3NpdGlv bjsKLQotICAgICAgLyogSWYgdGhlIHByZXYgd2FzIHVuZGVybGluZWQsIG1hdGNoIGl0cyBhcHBl YXJhbmNlLiAqLwotICAgICAgaWYgKHMtPnByZXYgJiYgcy0+cHJldi0+ZmFjZS0+dW5kZXJsaW5l X3AKLSAgICAgICAgICAmJiBzLT5wcmV2LT51bmRlcmxpbmVfdGhpY2tuZXNzID4gMCkKLSAgICAg ICAgewotICAgICAgICAgIHRoaWNrbmVzcyA9IHMtPnByZXYtPnVuZGVybGluZV90aGlja25lc3M7 Ci0gICAgICAgICAgcG9zaXRpb24gPSBzLT5wcmV2LT51bmRlcmxpbmVfcG9zaXRpb247Ci0gICAg ICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHN0cnVjdCBmb250ICpmb250 OwotICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGVzY2VudDsKLQotICAgICAgICAgIGZvbnQ9cy0+ Zm9udDsKLSAgICAgICAgICBkZXNjZW50ID0gcy0+eSArIHMtPmhlaWdodCAtIHMtPnliYXNlOwot Ci0gICAgICAgICAgLyogVXNlIHVuZGVybGluZSB0aGlja25lc3Mgb2YgZm9udCwgZGVmYXVsdGlu ZyB0byAxLiAqLwotICAgICAgICAgIHRoaWNrbmVzcyA9IChmb250ICYmIGZvbnQtPnVuZGVybGlu ZV90aGlja25lc3MgPiAwKQotICAgICAgICAgICAgPyBmb250LT51bmRlcmxpbmVfdGhpY2tuZXNz IDogMTsKLQotICAgICAgICAgIC8qIERldGVybWluZSB0aGUgb2Zmc2V0IG9mIHVuZGVybGluaW5n IGZyb20gdGhlIGJhc2VsaW5lLiAqLwotICAgICAgICAgIGlmICh4X3VuZGVybGluZV9hdF9kZXNj ZW50X2xpbmUpCi0gICAgICAgICAgICBwb3NpdGlvbiA9IGRlc2NlbnQgLSB0aGlja25lc3M7Ci0g ICAgICAgICAgZWxzZSBpZiAoeF91c2VfdW5kZXJsaW5lX3Bvc2l0aW9uX3Byb3BlcnRpZXMKLSAg ICAgICAgICAgICAgICAgICAmJiBmb250ICYmIGZvbnQtPnVuZGVybGluZV9wb3NpdGlvbiA+PSAw KQotICAgICAgICAgICAgcG9zaXRpb24gPSBmb250LT51bmRlcmxpbmVfcG9zaXRpb247Ci0gICAg ICAgICAgZWxzZSBpZiAoZm9udCkKLSAgICAgICAgICAgIHBvc2l0aW9uID0gbHJvdW5kIChmb250 LT5kZXNjZW50IC8gMik7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcG9zaXRpb24gPSB1 bmRlcmxpbmVfbWluaW11bV9vZmZzZXQ7Ci0KLSAgICAgICAgICBwb3NpdGlvbiA9IG1heCAocG9z aXRpb24sIHVuZGVybGluZV9taW5pbXVtX29mZnNldCk7Ci0KLSAgICAgICAgICAvKiBFbnN1cmUg dW5kZXJsaW5pbmcgaXMgbm90IGNyb3BwZWQuICovCi0gICAgICAgICAgaWYgKGRlc2NlbnQgPD0g cG9zaXRpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHBvc2l0aW9uID0gZGVzY2Vu dCAtIDE7Ci0gICAgICAgICAgICAgIHRoaWNrbmVzcyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgZWxzZSBpZiAoZGVzY2VudCA8IHBvc2l0aW9uICsgdGhpY2tuZXNzKQotICAgICAgICAg ICAgdGhpY2tuZXNzID0gMTsKLSAgICAgICAgfQotCi0gICAgICBzLT51bmRlcmxpbmVfdGhpY2tu ZXNzID0gdGhpY2tuZXNzOwotICAgICAgcy0+dW5kZXJsaW5lX3Bvc2l0aW9uID0gcG9zaXRpb247 Ci0KLSAgICAgIHIgPSBOU01ha2VSZWN0ICh4LCBzLT55YmFzZSArIHBvc2l0aW9uLCB3aWR0aCwg dGhpY2tuZXNzKTsKLQotICAgICAgaWYgKGZhY2UtPnVuZGVybGluZV9kZWZhdWx0ZWRfcCkKLSAg ICAgICAgW2RlZmF1bHRDb2wgc2V0XTsKLSAgICAgIGVsc2UKLSAgICAgICAgW25zX2xvb2t1cF9p bmRleGVkX2NvbG9yIChmYWNlLT51bmRlcmxpbmVfY29sb3IsIHMtPmYpIHNldF07Ci0gICAgICBO U1JlY3RGaWxsIChyKTsKKyAgICAgIGlmIChzLT5mYWNlLT51bmRlcmxpbmVfdHlwZSA9PSBGQUNF X1VOREVSX1dBVkUpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZmFjZS0+dW5kZXJsaW5lX2Rl ZmF1bHRlZF9wKQorICAgICAgICAgICAgW2RlZmF1bHRDb2wgc2V0XTsKKyAgICAgICAgICBlbHNl CisgICAgICAgICAgICBbbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKGZhY2UtPnVuZGVybGluZV9j b2xvciwgcy0+Zikgc2V0XTsKKworICAgICAgICAgIG5zX2RyYXdfdW5kZXJ3YXZlIChzLCB3aWR0 aCwgeCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHMtPmZhY2UtPnVuZGVybGluZV90eXBl ID09IEZBQ0VfVU5ERVJfTElORSkKKyAgICAgICAgeworCisgICAgICAgICAgTlNSZWN0IHI7Cisg ICAgICAgICAgdW5zaWduZWQgbG9uZyB0aGlja25lc3MsIHBvc2l0aW9uOworCisgICAgICAgICAg LyogSWYgdGhlIHByZXYgd2FzIHVuZGVybGluZWQsIG1hdGNoIGl0cyBhcHBlYXJhbmNlLiAqLwor ICAgICAgICAgIGlmIChzLT5wcmV2ICYmIHMtPnByZXYtPmZhY2UtPnVuZGVybGluZV9wCisgICAg ICAgICAgICAgICYmIHMtPnByZXYtPnVuZGVybGluZV90aGlja25lc3MgPiAwKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICB0aGlja25lc3MgPSBzLT5wcmV2LT51bmRlcmxpbmVfdGhpY2tu ZXNzOworICAgICAgICAgICAgICBwb3NpdGlvbiA9IHMtPnByZXYtPnVuZGVybGluZV9wb3NpdGlv bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIHN0cnVjdCBmb250ICpmb250OworICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGRl c2NlbnQ7CisKKyAgICAgICAgICAgICAgZm9udD1zLT5mb250OworICAgICAgICAgICAgICBkZXNj ZW50ID0gcy0+eSArIHMtPmhlaWdodCAtIHMtPnliYXNlOworCisgICAgICAgICAgICAgIC8qIFVz ZSB1bmRlcmxpbmUgdGhpY2tuZXNzIG9mIGZvbnQsIGRlZmF1bHRpbmcgdG8gMS4gKi8KKyAgICAg ICAgICAgICAgdGhpY2tuZXNzID0gKGZvbnQgJiYgZm9udC0+dW5kZXJsaW5lX3RoaWNrbmVzcyA+ IDApCisgICAgICAgICAgICAgICAgPyBmb250LT51bmRlcmxpbmVfdGhpY2tuZXNzIDogMTsKKwor ICAgICAgICAgICAgICAvKiBEZXRlcm1pbmUgdGhlIG9mZnNldCBvZiB1bmRlcmxpbmluZyBmcm9t IHRoZSBiYXNlbGluZS4gKi8KKyAgICAgICAgICAgICAgaWYgKHhfdW5kZXJsaW5lX2F0X2Rlc2Nl bnRfbGluZSkKKyAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IGRlc2NlbnQgLSB0aGlja25lc3M7 CisgICAgICAgICAgICAgIGVsc2UgaWYgKHhfdXNlX3VuZGVybGluZV9wb3NpdGlvbl9wcm9wZXJ0 aWVzCisgICAgICAgICAgICAgICAgICAgICAgICYmIGZvbnQgJiYgZm9udC0+dW5kZXJsaW5lX3Bv c2l0aW9uID49IDApCisgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBmb250LT51bmRlcmxpbmVf cG9zaXRpb247CisgICAgICAgICAgICAgIGVsc2UgaWYgKGZvbnQpCisgICAgICAgICAgICAgICAg cG9zaXRpb24gPSBscm91bmQgKGZvbnQtPmRlc2NlbnQgLyAyKTsKKyAgICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gdW5kZXJsaW5lX21pbmltdW1fb2Zmc2V0Owor CisgICAgICAgICAgICAgIHBvc2l0aW9uID0gbWF4IChwb3NpdGlvbiwgdW5kZXJsaW5lX21pbmlt dW1fb2Zmc2V0KTsKKworICAgICAgICAgICAgICAvKiBFbnN1cmUgdW5kZXJsaW5pbmcgaXMgbm90 IGNyb3BwZWQuICovCisgICAgICAgICAgICAgIGlmIChkZXNjZW50IDw9IHBvc2l0aW9uKQorICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gZGVzY2VudCAtIDE7 CisgICAgICAgICAgICAgICAgICB0aGlja25lc3MgPSAxOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgZWxzZSBpZiAoZGVzY2VudCA8IHBvc2l0aW9uICsgdGhpY2tuZXNzKQorICAg ICAgICAgICAgICAgIHRoaWNrbmVzcyA9IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBz LT51bmRlcmxpbmVfdGhpY2tuZXNzID0gdGhpY2tuZXNzOworICAgICAgICAgIHMtPnVuZGVybGlu ZV9wb3NpdGlvbiA9IHBvc2l0aW9uOworCisgICAgICAgICAgciA9IE5TTWFrZVJlY3QgKHgsIHMt PnliYXNlICsgcG9zaXRpb24sIHdpZHRoLCB0aGlja25lc3MpOworCisgICAgICAgICAgaWYgKGZh Y2UtPnVuZGVybGluZV9kZWZhdWx0ZWRfcCkKKyAgICAgICAgICAgIFtkZWZhdWx0Q29sIHNldF07 CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgW25zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChm YWNlLT51bmRlcmxpbmVfY29sb3IsIHMtPmYpIHNldF07CisgICAgICAgICAgTlNSZWN0RmlsbCAo cik7CisgICAgICAgIH0KICAgICB9Ci0KICAgLyogRG8gb3ZlcmxpbmUuIFdlIGZvbGxvdyBvdGhl ciB0ZXJtcyBpbiB1c2luZyBhIHRoaWNrbmVzcyBvZiAxCiAgICAgIGFuZCBpZ25vcmluZyBvdmVy bGluZV9tYXJnaW4uICovCiAgIGlmIChmYWNlLT5vdmVybGluZV9wKQoKPT09IG1vZGlmaWVkIGZp bGUgJ3NyYy93MzJ0ZXJtLmMnCi0tLSBzcmMvdzMydGVybS5jCTIwMTItMDQtMDkgMTM6MDU6NDgg KzAwMDAKKysrIHNyYy93MzJ0ZXJtLmMJMjAxMi0wNC0xMiAyMzo1NjozOSArMDAwMApAQCAtMzA5 LDYgKzMwOSw5NCBAQAogICAgIFNlbGVjdENsaXBSZ24gKGhkYywgTlVMTCk7CiB9CiAKKy8qIFJl c3RvcmUgY2xpcHBpbmcgcmVjdGFuZ2xlIGluIFMgKi8KK3N0YXRpYyB2b2lkCit3MzJfcmVzdG9y ZV9nbHlwaF9zdHJpbmdfY2xpcCAoc3RydWN0IGdseXBoX3N0cmluZyAqcykKK3sKKyAgUkVDVCAq ciA9IHMtPmNsaXA7CisgIGludCBuID0gcy0+bnVtX2NsaXBzOworCisgIGlmIChuID09IDEpCisg ICAgdzMyX3NldF9jbGlwX3JlY3RhbmdsZSAocy0+aGRjLCByKTsKKyAgZWxzZSBpZiAobiA+IDEp CisgICAgeworICAgICAgSFJHTiBjbGlwMSA9IENyZWF0ZVJlY3RSZ25JbmRpcmVjdCAocik7Cisg ICAgICBIUkdOIGNsaXAyID0gQ3JlYXRlUmVjdFJnbkluZGlyZWN0IChyICsgMSk7CisgICAgICBp ZiAoQ29tYmluZVJnbiAoY2xpcDEsIGNsaXAxLCBjbGlwMiwgUkdOX09SKSAhPSBFUlJPUikKKyAg ICAgICAgU2VsZWN0Q2xpcFJnbiAocy0+aGRjLCBjbGlwMSk7CisgICAgICBEZWxldGVPYmplY3Qg KGNsaXAxKTsKKyAgICAgIERlbGV0ZU9iamVjdCAoY2xpcDIpOworICAgIH0KK30KKworLyoKKyAg IERyYXcgYSB3YXZ5IGxpbmUgdW5kZXIgUy4gVGhlIHdhdmUgZmlsbHMgd2F2ZV9oZWlnaHQgcGl4 ZWxzIGZyb20geTAuCisKKyAgICAgICAgICAgICAgICAgICAgeDAgICAgICAgICB3YXZlX2xlbmd0 aCA9IDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCisgICAgICAgICAgICAg ICAgeTAgICAqICAgKiAgICogICAqICAgKgorICAgICAgICAgICAgICAgICAgICAgfCogKiAqICog KiAqICogKiAqCisgICAgd2F2ZV9oZWlnaHQgPSAzICB8ICogICAqICAgKiAgICoKKworKi8KKwor dm9pZAordzMyX2RyYXdfdW5kZXJ3YXZlIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzLCBDT0xPUlJF RiBjb2xvcikKK3sKKyAgaW50IHdhdmVfaGVpZ2h0ID0gMiwgd2F2ZV9sZW5ndGggPSAzOworICBp bnQgZHgsIGR5LCB4MCwgeTAsIHdpZHRoLCB4MSwgeTEsIHgyLCB5Miwgb2RkLCB4bWF4OworICBY UmVjdGFuZ2xlIHdhdmVfY2xpcCwgc3RyaW5nX2NsaXAsIGZpbmFsX2NsaXA7CisgIFJFQ1QgdzMy X2ZpbmFsX2NsaXAsIHczMl9zdHJpbmdfY2xpcDsKKyAgSFBFTiBocCwgb2xkaHA7CisKKyAgZHgg PSB3YXZlX2xlbmd0aDsKKyAgZHkgPSB3YXZlX2hlaWdodCAtIDE7CisgIHgwID0gcy0+eDsKKyAg eTAgPSBzLT55YmFzZSArIDE7CisgIHdpZHRoID0gcy0+d2lkdGg7CisgIHhtYXggPSB4MCArIHdp ZHRoOworCisgIC8qIEZpbmQgYW5kIHNldCBjbGlwcGluZyByZWN0YW5nbGUgKi8KKworICB3YXZl X2NsaXAgPSAoWFJlY3RhbmdsZSl7IHgwLCB5MCwgd2lkdGgsIHdhdmVfaGVpZ2h0IH07CisgIGdl dF9nbHlwaF9zdHJpbmdfY2xpcF9yZWN0IChzLCAmdzMyX3N0cmluZ19jbGlwKTsKKyAgQ09OVkVS VF9UT19YUkVDVCAoc3RyaW5nX2NsaXAsIHczMl9zdHJpbmdfY2xpcCk7CisKKyAgaWYgKCF4X2lu dGVyc2VjdF9yZWN0YW5nbGVzICgmd2F2ZV9jbGlwLCAmc3RyaW5nX2NsaXAsICZmaW5hbF9jbGlw KSkKKyAgICByZXR1cm47CisKKyAgaHAgPSBDcmVhdGVQZW4gKFBTX1NPTElELCAwLCBjb2xvcik7 CisgIG9sZGhwID0gU2VsZWN0T2JqZWN0IChzLT5oZGMsIGhwKTsKKyAgQ09OVkVSVF9GUk9NX1hS RUNUIChmaW5hbF9jbGlwLCB3MzJfZmluYWxfY2xpcCk7CisgIHczMl9zZXRfY2xpcF9yZWN0YW5n bGUgKHMtPmhkYywgJnczMl9maW5hbF9jbGlwKTsKKworICAvKiBEcmF3IHRoZSB3YXZlcyAqLwor CisgIHgxID0geDAgLSAoeDAgJSBkeCk7CisgIHgyID0geDEgKyBkeDsKKyAgb2RkID0gKHgxL2R4 KSAlIDI7CisgIHkxID0geTIgPSB5MDsKKworICBpZiAob2RkKQorICAgIHkxICs9IGR5OworICBl bHNlCisgICAgeTIgKz0gZHk7CisKKyAgTW92ZVRvRXggKHMtPmhkYywgeDEsIHkxLCBOVUxMKTsK KworICB3aGlsZSAoeDEgPD0geG1heCkKKyAgICB7CisgICAgICBMaW5lVG8gKHMtPmhkYywgeDIs IHkyKTsKKyAgICAgIHgxICA9IHgyLCB5MSA9IHkyOworICAgICAgeDIgKz0gZHgsIHkyID0geTAg KyBvZGQqZHk7CisgICAgICBvZGQgPSAhb2RkOworICAgIH0KKworICAvKiBSZXN0b3JlIHByZXZp b3VzIHBlbiBhbmQgY2xpcHBpbmcgcmVjdGFuZ2xlKHMpICovCisgIHczMl9yZXN0b3JlX2dseXBo X3N0cmluZ19jbGlwIChzKTsKKyAgU2VsZWN0T2JqZWN0IChzLT5oZGMsIG9sZGhwKTsKKyAgRGVs ZXRlT2JqZWN0IChocCk7Cit9CiAKIC8qIERyYXcgYSBob2xsb3cgcmVjdGFuZ2xlIGF0IHRoZSBz cGVjaWZpZWQgcG9zaXRpb24uICAqLwogdm9pZApAQCAtMjM0Myw2MCArMjQzMSw3NCBAQAogICAg ICAgLyogRHJhdyB1bmRlcmxpbmUuICAqLwogICAgICAgaWYgKHMtPmZhY2UtPnVuZGVybGluZV9w KQogICAgICAgICB7Ci0gICAgICAgICAgdW5zaWduZWQgbG9uZyB0aGlja25lc3MsIHBvc2l0aW9u OwotICAgICAgICAgIGludCB5OwotCi0gICAgICAgICAgaWYgKHMtPnByZXYgJiYgcy0+cHJldi0+ ZmFjZS0+dW5kZXJsaW5lX3ApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8qIFdlIHVz ZSB0aGUgc2FtZSB1bmRlcmxpbmUgc3R5bGUgYXMgdGhlIHByZXZpb3VzIG9uZS4gICovCi0gICAg ICAgICAgICAgIHRoaWNrbmVzcyA9IHMtPnByZXYtPnVuZGVybGluZV90aGlja25lc3M7Ci0gICAg ICAgICAgICAgIHBvc2l0aW9uID0gcy0+cHJldi0+dW5kZXJsaW5lX3Bvc2l0aW9uOwotICAgICAg ICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLyog R2V0IHRoZSB1bmRlcmxpbmUgdGhpY2tuZXNzLiAgRGVmYXVsdCBpcyAxIHBpeGVsLiAgKi8KLSAg ICAgICAgICAgICAgaWYgKHMtPmZvbnQgJiYgcy0+Zm9udC0+dW5kZXJsaW5lX3RoaWNrbmVzcyA+ IDApCi0gICAgICAgICAgICAgICAgdGhpY2tuZXNzID0gcy0+Zm9udC0+dW5kZXJsaW5lX3RoaWNr bmVzczsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRoaWNrbmVzcyA9IDE7 Ci0gICAgICAgICAgICAgIGlmICh4X3VuZGVybGluZV9hdF9kZXNjZW50X2xpbmUpCi0gICAgICAg ICAgICAgICAgcG9zaXRpb24gPSAocy0+aGVpZ2h0IC0gdGhpY2tuZXNzKSAtIChzLT55YmFzZSAt IHMtPnkpOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg ICAgICAgIC8qIEdldCB0aGUgdW5kZXJsaW5lIHBvc2l0aW9uLiAgVGhpcyBpcyB0aGUgcmVjb21t ZW5kZWQKLSAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbCBvZmZzZXQgaW4gcGl4ZWxzIGZyb20g dGhlIGJhc2VsaW5lIHRvIHRoZSB0b3Agb2YKLSAgICAgICAgICAgICAgICAgICB0aGUgdW5kZXJs aW5lLiAgVGhpcyBpcyBhIHNpZ25lZCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlCi0gICAgICAgICAg ICAgICAgICAgc3BlY3MsIGFuZCBpdHMgZGVmYXVsdCBpcwotCi0gICAgICAgICAgICAgICAgICAg Uk9VTkQgKChtYXhpbXVtX2Rlc2NlbnQpIC8gMiksIHdpdGgKLSAgICAgICAgICAgICAgICAgICBS T1VORCAoeCkgPSBmbG9vciAoeCArIDAuNSkgICovCi0KLSAgICAgICAgICAgICAgICBpZiAoeF91 c2VfdW5kZXJsaW5lX3Bvc2l0aW9uX3Byb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAgICAgJiYg cy0+Zm9udCAmJiBzLT5mb250LT51bmRlcmxpbmVfcG9zaXRpb24gPj0gMCkKLSAgICAgICAgICAg ICAgICAgIHBvc2l0aW9uID0gcy0+Zm9udC0+dW5kZXJsaW5lX3Bvc2l0aW9uOwotICAgICAgICAg ICAgICAgIGVsc2UgaWYgKHMtPmZvbnQpCi0gICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IChz LT5mb250LT5kZXNjZW50ICsgMSkgLyAyOwotICAgICAgICAgICAgICAgIH0KLQkgICAgICBwb3Np dGlvbiA9IG1heCAocG9zaXRpb24sIHVuZGVybGluZV9taW5pbXVtX29mZnNldCk7Ci0gICAgICAg ICAgICB9Ci0JICAvKiBDaGVjayB0aGUgc2FuaXR5IG9mIHRoaWNrbmVzcyBhbmQgcG9zaXRpb24u ICBXZSBzaG91bGQKLQkgICAgIGF2b2lkIGRyYXdpbmcgdW5kZXJsaW5lIG91dCBvZiB0aGUgY3Vy cmVudCBsaW5lIGFyZWEuICAqLwotCSAgaWYgKHMtPnkgKyBzLT5oZWlnaHQgPD0gcy0+eWJhc2Ug KyBwb3NpdGlvbikKLQkgICAgcG9zaXRpb24gPSAocy0+aGVpZ2h0IC0gMSkgLSAocy0+eWJhc2Ug LSBzLT55KTsKLQkgIGlmIChzLT55ICsgcy0+aGVpZ2h0IDwgcy0+eWJhc2UgKyBwb3NpdGlvbiAr IHRoaWNrbmVzcykKLQkgICAgdGhpY2tuZXNzID0gKHMtPnkgKyBzLT5oZWlnaHQpIC0gKHMtPnli YXNlICsgcG9zaXRpb24pOwotCSAgcy0+dW5kZXJsaW5lX3RoaWNrbmVzcyA9IHRoaWNrbmVzczsK LQkgIHMtPnVuZGVybGluZV9wb3NpdGlvbiA9cG9zaXRpb247Ci0gICAgICAgICAgeSA9IHMtPnli YXNlICsgcG9zaXRpb247Ci0gICAgICAgICAgaWYgKHMtPmZhY2UtPnVuZGVybGluZV9kZWZhdWx0 ZWRfcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdzMyX2ZpbGxfYXJlYSAocy0+Ziwg cy0+aGRjLCBzLT5nYy0+Zm9yZWdyb3VuZCwgcy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgeSwgcy0+d2lkdGgsIDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAg ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdzMyX2ZpbGxfYXJlYSAocy0+Ziwgcy0+aGRjLCBz LT5mYWNlLT51bmRlcmxpbmVfY29sb3IsIHMtPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHksIHMtPndpZHRoLCAxKTsKKyAgICAgICAgICBpZiAocy0+ZmFjZS0+dW5kZXJsaW5lX3R5 cGUgPT0gRkFDRV9VTkRFUl9XQVZFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDT0xP UlJFRiBjb2xvcjsKKworICAgICAgICAgICAgICBpZiAocy0+ZmFjZS0+dW5kZXJsaW5lX2RlZmF1 bHRlZF9wKQorICAgICAgICAgICAgICAgIGNvbG9yID0gcy0+Z2MtPmZvcmVncm91bmQ7CisgICAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb2xvciA9IHMtPmZhY2UtPnVuZGVybGlu ZV9jb2xvcjsKKworICAgICAgICAgICAgICB3MzJfZHJhd191bmRlcndhdmUgKHMsIGNvbG9yKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChzLT5mYWNlLT51bmRlcmxpbmVfdHlw ZSA9PSBGQUNFX1VOREVSX0xJTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHVuc2ln bmVkIGxvbmcgdGhpY2tuZXNzLCBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgaW50IHk7CisKKyAg ICAgICAgICAgICAgaWYgKHMtPnByZXYgJiYgcy0+cHJldi0+ZmFjZS0+dW5kZXJsaW5lX3ApCisg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyogV2UgdXNlIHRoZSBzYW1lIHVu ZGVybGluZSBzdHlsZSBhcyB0aGUgcHJldmlvdXMgb25lLiAgKi8KKyAgICAgICAgICAgICAgICAg IHRoaWNrbmVzcyA9IHMtPnByZXYtPnVuZGVybGluZV90aGlja25lc3M7CisgICAgICAgICAgICAg ICAgICBwb3NpdGlvbiA9IHMtPnByZXYtPnVuZGVybGluZV9wb3NpdGlvbjsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAvKiBHZXQgdGhlIHVuZGVybGluZSB0aGlja25lc3MuICBEZWZhdWx0IGlzIDEgcGl4 ZWwuICAqLworICAgICAgICAgICAgICAgICAgaWYgKHMtPmZvbnQgJiYgcy0+Zm9udC0+dW5kZXJs aW5lX3RoaWNrbmVzcyA+IDApCisgICAgICAgICAgICAgICAgICAgIHRoaWNrbmVzcyA9IHMtPmZv bnQtPnVuZGVybGluZV90aGlja25lc3M7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgICAgIHRoaWNrbmVzcyA9IDE7CisgICAgICAgICAgICAgICAgICBpZiAoeF91bmRl cmxpbmVfYXRfZGVzY2VudF9saW5lKQorICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IChz LT5oZWlnaHQgLSB0aGlja25lc3MpIC0gKHMtPnliYXNlIC0gcy0+eSk7CisgICAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAv KiBHZXQgdGhlIHVuZGVybGluZSBwb3NpdGlvbi4gIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkCisg ICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwgb2Zmc2V0IGluIHBpeGVscyBmcm9tIHRo ZSBiYXNlbGluZSB0byB0aGUgdG9wIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHVu ZGVybGluZS4gIFRoaXMgaXMgYSBzaWduZWQgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZQorICAgICAg ICAgICAgICAgICAgICAgICAgIHNwZWNzLCBhbmQgaXRzIGRlZmF1bHQgaXMKKworICAgICAgICAg ICAgICAgICAgICAgICAgIFJPVU5EICgobWF4aW11bV9kZXNjZW50KSAvIDIpLCB3aXRoCisgICAg ICAgICAgICAgICAgICAgICAgICAgUk9VTkQgKHgpID0gZmxvb3IgKHggKyAwLjUpICAqLworCisg ICAgICAgICAgICAgICAgICAgICAgaWYgKHhfdXNlX3VuZGVybGluZV9wb3NpdGlvbl9wcm9wZXJ0 aWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHMtPmZvbnQgJiYgcy0+Zm9udC0+dW5k ZXJsaW5lX3Bvc2l0aW9uID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9 IHMtPmZvbnQtPnVuZGVybGluZV9wb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICBlbHNl IGlmIChzLT5mb250KQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAocy0+Zm9u dC0+ZGVzY2VudCArIDEpIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgcG9zaXRpb24gPSBtYXggKHBvc2l0aW9uLCB1bmRlcmxpbmVfbWluaW11bV9vZmZzZXQp OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgLyogQ2hlY2sgdGhlIHNhbml0eSBv ZiB0aGlja25lc3MgYW5kIHBvc2l0aW9uLiAgV2Ugc2hvdWxkCisgICAgICAgICAgICAgICAgIGF2 b2lkIGRyYXdpbmcgdW5kZXJsaW5lIG91dCBvZiB0aGUgY3VycmVudCBsaW5lIGFyZWEuICAqLwor ICAgICAgICAgICAgICBpZiAocy0+eSArIHMtPmhlaWdodCA8PSBzLT55YmFzZSArIHBvc2l0aW9u KQorICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gKHMtPmhlaWdodCAtIDEpIC0gKHMtPnliYXNl IC0gcy0+eSk7CisgICAgICAgICAgICAgIGlmIChzLT55ICsgcy0+aGVpZ2h0IDwgcy0+eWJhc2Ug KyBwb3NpdGlvbiArIHRoaWNrbmVzcykKKyAgICAgICAgICAgICAgICB0aGlja25lc3MgPSAocy0+ eSArIHMtPmhlaWdodCkgLSAocy0+eWJhc2UgKyBwb3NpdGlvbik7CisgICAgICAgICAgICAgIHMt PnVuZGVybGluZV90aGlja25lc3MgPSB0aGlja25lc3M7CisgICAgICAgICAgICAgIHMtPnVuZGVy bGluZV9wb3NpdGlvbiA9cG9zaXRpb247CisgICAgICAgICAgICAgIHkgPSBzLT55YmFzZSArIHBv c2l0aW9uOworICAgICAgICAgICAgICBpZiAocy0+ZmFjZS0+dW5kZXJsaW5lX2RlZmF1bHRlZF9w KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHczMl9maWxsX2FyZWEgKHMt PmYsIHMtPmhkYywgcy0+Z2MtPmZvcmVncm91bmQsIHMtPngsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB5LCBzLT53aWR0aCwgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgdzMyX2Zp bGxfYXJlYSAocy0+Ziwgcy0+aGRjLCBzLT5mYWNlLT51bmRlcmxpbmVfY29sb3IsIHMtPngsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LCBzLT53aWR0aCwgMSk7CisgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAvKiBEcmF3IG92ZXJs aW5lLiAgKi8KCj09PSBtb2RpZmllZCBmaWxlICdzcmMveGZhY2VzLmMnCi0tLSBzcmMveGZhY2Vz LmMJMjAxMi0wNC0wOSAxMzowNTo0OCArMDAwMAorKysgc3JjL3hmYWNlcy5jCTIwMTItMDQtMTIg MjM6NTY6MzkgKzAwMDAKQEAgLTMyMCw2ICszMjAsNyBAQAogCiBMaXNwX09iamVjdCBRbm9ybWFs OwogTGlzcF9PYmplY3QgUWJvbGQ7CitzdGF0aWMgTGlzcF9PYmplY3QgUWxpbmUsIFF3YXZlOwog c3RhdGljIExpc3BfT2JqZWN0IFF1bHRyYV9saWdodCwgUWV4dHJhX2xpZ2h0LCBRbGlnaHQ7CiBz dGF0aWMgTGlzcF9PYmplY3QgUXNlbWlfbGlnaHQsIFFzZW1pX2JvbGQsIFFleHRyYV9ib2xkLCBR dWx0cmFfYm9sZDsKIHN0YXRpYyBMaXNwX09iamVjdCBRb2JsaXF1ZSwgUXJldmVyc2Vfb2JsaXF1 ZSwgUXJldmVyc2VfaXRhbGljOwpAQCAtMTg4OSw3ICsxODkwLDggQEAKICAgeGFzc2VydCAoVU5T UEVDSUZJRURQIChhdHRyc1tMRkFDRV9VTkRFUkxJTkVfSU5ERVhdKQogCSAgIHx8IElHTk9SRV9E RUZGQUNFX1AgKGF0dHJzW0xGQUNFX1VOREVSTElORV9JTkRFWF0pCiAJICAgfHwgU1lNQk9MUCAo YXR0cnNbTEZBQ0VfVU5ERVJMSU5FX0lOREVYXSkKLQkgICB8fCBTVFJJTkdQIChhdHRyc1tMRkFD RV9VTkRFUkxJTkVfSU5ERVhdKSk7CisJICAgfHwgU1RSSU5HUCAoYXR0cnNbTEZBQ0VfVU5ERVJM SU5FX0lOREVYXSkKKwkgICB8fCBDT05TUCAoYXR0cnNbTEZBQ0VfVU5ERVJMSU5FX0lOREVYXSkp OwogICB4YXNzZXJ0IChVTlNQRUNJRklFRFAgKGF0dHJzW0xGQUNFX09WRVJMSU5FX0lOREVYXSkK IAkgICB8fCBJR05PUkVfREVGRkFDRV9QIChhdHRyc1tMRkFDRV9PVkVSTElORV9JTkRFWF0pCiAJ ICAgfHwgU1lNQk9MUCAoYXR0cnNbTEZBQ0VfT1ZFUkxJTkVfSU5ERVhdKQpAQCAtMjUyMCw3ICsy NTIyLDggQEAKIAkJewogCQkgIGlmIChFUSAodmFsdWUsIFF0KQogCQkgICAgICB8fCBOSUxQICh2 YWx1ZSkKLQkJICAgICAgfHwgU1RSSU5HUCAodmFsdWUpKQorCQkgICAgICB8fCBTVFJJTkdQICh2 YWx1ZSkKKwkJICAgICAgfHwgQ09OU1AgKHZhbHVlKSkKIAkJICAgIHRvW0xGQUNFX1VOREVSTElO RV9JTkRFWF0gPSB2YWx1ZTsKIAkJICBlbHNlCiAJCSAgICBlcnIgPSAxOwpAQCAtMjk0NCwxNSAr Mjk0Nyw1NCBAQAogICAgIH0KICAgZWxzZSBpZiAoRVEgKGF0dHIsIFFDdW5kZXJsaW5lKSkKICAg ICB7Ci0gICAgICBpZiAoIVVOU1BFQ0lGSUVEUCAodmFsdWUpICYmICFJR05PUkVfREVGRkFDRV9Q ICh2YWx1ZSkpCi0JaWYgKChTWU1CT0xQICh2YWx1ZSkKLQkgICAgICYmICFFUSAodmFsdWUsIFF0 KQotCSAgICAgJiYgIUVRICh2YWx1ZSwgUW5pbCkpCi0JICAgIC8qIFVuZGVybGluZSBjb2xvci4g ICovCi0JICAgIHx8IChTVFJJTkdQICh2YWx1ZSkKLQkJJiYgU0NIQVJTICh2YWx1ZSkgPT0gMCkp Ci0JICBzaWduYWxfZXJyb3IgKCJJbnZhbGlkIGZhY2UgdW5kZXJsaW5lIiwgdmFsdWUpOwotCisg ICAgICBpbnQgdmFsaWRfcCA9IDA7CisgICAgICAKKyAgICAgIGlmIChVTlNQRUNJRklFRFAgKHZh bHVlKSB8fCBJR05PUkVfREVGRkFDRV9QICh2YWx1ZSkpCisJdmFsaWRfcCA9IDE7CisgICAgICBl bHNlIGlmIChOSUxQICh2YWx1ZSkgfHwgRVEgKHZhbHVlLCBRdCkpCisgICAgICAgIHZhbGlkX3Ag PSAxOworICAgICAgZWxzZSBpZiAoU1RSSU5HUCAodmFsdWUpICYmIFNDSEFSUyAodmFsdWUpID4g MCkKKyAgICAgICAgdmFsaWRfcCA9IDE7CisgICAgICBlbHNlIGlmIChDT05TUCAodmFsdWUpKQor ICAgICAgICB7CisgICAgICAgICAgTGlzcF9PYmplY3Qga2V5LCB2YWwsIGxpc3Q7CisKKyAgICAg ICAgICBsaXN0ID0gdmFsdWU7CisgICAgICAgICAgdmFsaWRfcCA9IDE7CisKKyAgICAgICAgICB3 aGlsZSAoIU5JTFAgKENBUl9TQUZFKGxpc3QpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAga2V5ID0gQ0FSX1NBRkUgKGxpc3QpOworICAgICAgICAgICAgICBsaXN0ID0gQ0RSX1NBRkUg KGxpc3QpOworICAgICAgICAgICAgICB2YWwgPSBDQVJfU0FGRSAobGlzdCk7CisgICAgICAgICAg ICAgIGxpc3QgPSBDRFJfU0FGRSAobGlzdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAg aWYoTklMUCAoa2V5KSB8fCBOSUxQICh2YWwpKSAKKyAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICB2YWxpZF9wID0gMDsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgICBlbHNlIGlmIChFUSAoa2V5LCBRQ2NvbG9yKQor ICAgICAgICAgICAgICAgICAgICAgICAmJiAhKEVRICh2YWwsIFFmb3JlZ3JvdW5kX2NvbG9yKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChTVFJJTkdQICh2YWwpICYmIFNDSEFSUyAo dmFsKSA+IDApKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICB2YWxpZF9w ID0gMDsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgCisgICAgICAgICAgICAgIGVsc2UgaWYgKEVRIChrZXksIFFDc3R5bGUpIAorICAg ICAgICAgICAgICAgICAgICAgICAmJiAhKEVRICh2YWwsIFFsaW5lKSB8fCBFUSAodmFsLCBRd2F2 ZSkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHZhbGlkX3AgPSAwOwor ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICAKKyAgICAgIGlmICghdmFsaWRfcCkKKyAgICAgICAgc2lnbmFs X2Vycm9yICgiSW52YWxpZCBmYWNlIHVuZGVybGluZSIsIHZhbHVlKTsKKyAgICAgIAogICAgICAg b2xkX3ZhbHVlID0gTEZBQ0VfVU5ERVJMSU5FIChsZmFjZSk7CiAgICAgICBMRkFDRV9VTkRFUkxJ TkUgKGxmYWNlKSA9IHZhbHVlOwogICAgIH0KQEAgLTM3NjIsNiArMzgwNCw3IEBACiAKICAgQ0hF Q0tfU1lNQk9MIChhdHRyKTsKIAorICAvKiBYWFg6IG5vIGNoZWNrIGZvciBRQ2JveD8gKi8KICAg aWYgKEVRIChhdHRyLCBRQ3VuZGVybGluZSkpCiAgICAgcmVzdWx0ID0gRmNvbnMgKFF0LCBGY29u cyAoUW5pbCwgUW5pbCkpOwogICBlbHNlIGlmIChFUSAoYXR0ciwgUUNvdmVybGluZSkpCkBAIC01 NTYzLDcgKzU2MDYsNyBAQAogI2lmZGVmIEhBVkVfV0lORE9XX1NZU1RFTQogICBzdHJ1Y3QgZmFj ZSAqZGVmYXVsdF9mYWNlOwogICBzdHJ1Y3QgZnJhbWUgKmY7Ci0gIExpc3BfT2JqZWN0IHN0aXBw bGUsIG92ZXJsaW5lLCBzdHJpa2VfdGhyb3VnaCwgYm94OworICBMaXNwX09iamVjdCBzdGlwcGxl LCB1bmRlcmxpbmUsIG92ZXJsaW5lLCBzdHJpa2VfdGhyb3VnaCwgYm94OwogCiAgIHhhc3NlcnQg KEZSQU1FX1dJTkRPV19QIChjYWNoZS0+ZikpOwogCkBAIC01Njk2LDI5ICs1NzM5LDc2IEBACiAK ICAgLyogVGV4dCB1bmRlcmxpbmUsIG92ZXJsaW5lLCBzdHJpa2UtdGhyb3VnaC4gICovCiAKLSAg aWYgKEVRIChhdHRyc1tMRkFDRV9VTkRFUkxJTkVfSU5ERVhdLCBRdCkpCisgIHVuZGVybGluZSA9 IGF0dHJzW0xGQUNFX1VOREVSTElORV9JTkRFWF07CisgIGlmIChFUSAodW5kZXJsaW5lLCBRdCkp CiAgICAgewogICAgICAgLyogVXNlIGRlZmF1bHQgY29sb3IgKHNhbWUgYXMgZm9yZWdyb3VuZCBj b2xvcikuICAqLwogICAgICAgZmFjZS0+dW5kZXJsaW5lX3AgPSAxOworICAgICAgZmFjZS0+dW5k ZXJsaW5lX3R5cGUgPSBGQUNFX1VOREVSX0xJTkU7CiAgICAgICBmYWNlLT51bmRlcmxpbmVfZGVm YXVsdGVkX3AgPSAxOwogICAgICAgZmFjZS0+dW5kZXJsaW5lX2NvbG9yID0gMDsKICAgICB9Ci0g IGVsc2UgaWYgKFNUUklOR1AgKGF0dHJzW0xGQUNFX1VOREVSTElORV9JTkRFWF0pKQorICBlbHNl IGlmIChTVFJJTkdQICh1bmRlcmxpbmUpKQogICAgIHsKICAgICAgIC8qIFVzZSBzcGVjaWZpZWQg Y29sb3IuICAqLwogICAgICAgZmFjZS0+dW5kZXJsaW5lX3AgPSAxOworICAgICAgZmFjZS0+dW5k ZXJsaW5lX3R5cGUgPSBGQUNFX1VOREVSX0xJTkU7CiAgICAgICBmYWNlLT51bmRlcmxpbmVfZGVm YXVsdGVkX3AgPSAwOwogICAgICAgZmFjZS0+dW5kZXJsaW5lX2NvbG9yCi0JPSBsb2FkX2NvbG9y IChmLCBmYWNlLCBhdHRyc1tMRkFDRV9VTkRFUkxJTkVfSU5ERVhdLAorCT0gbG9hZF9jb2xvciAo ZiwgZmFjZSwgdW5kZXJsaW5lLAogCQkgICAgICBMRkFDRV9VTkRFUkxJTkVfSU5ERVgpOwogICAg IH0KLSAgZWxzZSBpZiAoTklMUCAoYXR0cnNbTEZBQ0VfVU5ERVJMSU5FX0lOREVYXSkpCisgIGVs c2UgaWYgKE5JTFAgKHVuZGVybGluZSkpCiAgICAgewogICAgICAgZmFjZS0+dW5kZXJsaW5lX3Ag PSAwOwogICAgICAgZmFjZS0+dW5kZXJsaW5lX2RlZmF1bHRlZF9wID0gMDsKICAgICAgIGZhY2Ut PnVuZGVybGluZV9jb2xvciA9IDA7CiAgICAgfQotCisgIGVsc2UgaWYgKENPTlNQICh1bmRlcmxp bmUpKQorICAgIHsKKyAgICAgIC8qIGAoOmNvbG9yIENPTE9SIDpzdHlsZSBTVFlMRSknLiAgCisg ICAgICAgICBTVFlMRSBiZWluZyBvbmUgb2YgYGxpbmUnIG9yIGB3YXZlJy4gKi8KKyAgICAgIGZh Y2UtPnVuZGVybGluZV9wID0gMTsKKyAgICAgIGZhY2UtPnVuZGVybGluZV9jb2xvciA9IDA7Cisg ICAgICBmYWNlLT51bmRlcmxpbmVfZGVmYXVsdGVkX3AgPSAxOworICAgICAgZmFjZS0+dW5kZXJs aW5lX3R5cGUgPSBGQUNFX1VOREVSX0xJTkU7CisKKyAgICAgIHdoaWxlIChDT05TUCAodW5kZXJs aW5lKSkKKyAgICAgICAgeworICAgICAgICAgIExpc3BfT2JqZWN0IGtleXdvcmQsIHZhbHVlOwor CisgICAgICAgICAga2V5d29yZCA9IFhDQVIgKHVuZGVybGluZSk7CisgICAgICAgICAgdW5kZXJs aW5lID0gWENEUiAodW5kZXJsaW5lKTsKKworICAgICAgICAgIGlmICghQ09OU1AgKHVuZGVybGlu ZSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB2YWx1ZSA9IFhDQVIgKHVuZGVybGlu ZSk7CisgICAgICAgICAgdW5kZXJsaW5lID0gWENEUiAodW5kZXJsaW5lKTsKKworICAgICAgICAg IGlmIChFUSAoa2V5d29yZCwgUUNjb2xvcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg IGlmIChFUSAodmFsdWUsIFFmb3JlZ3JvdW5kX2NvbG9yKSkKKyAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICBmYWNlLT51bmRlcmxpbmVfZGVmYXVsdGVkX3AgPSAxOworICAgICAg ICAgICAgICAgICAgZmFjZS0+dW5kZXJsaW5lX2NvbG9yID0gMDsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgIGVsc2UgaWYgKFNUUklOR1AgKHZhbHVlKSkKKyAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICBmYWNlLT51bmRlcmxpbmVfZGVmYXVsdGVkX3AgPSAwOwor ICAgICAgICAgICAgICAgICAgZmFjZS0+dW5kZXJsaW5lX2NvbG9yID0gbG9hZF9jb2xvciAoZiwg ZmFjZSwgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMRkFDRV9VTkRFUkxJTkVfSU5ERVgpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChFUSAoa2V5d29yZCwgUUNzdHlsZSkpCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChFUSAodmFsdWUsIFFsaW5lKSkKKyAgICAg ICAgICAgICAgICBmYWNlLT51bmRlcmxpbmVfdHlwZSA9IEZBQ0VfVU5ERVJfTElORTsKKyAgICAg ICAgICAgICAgZWxzZSBpZiAoRVEgKHZhbHVlLCBRd2F2ZSkpCisgICAgICAgICAgICAgICAgZmFj ZS0+dW5kZXJsaW5lX3R5cGUgPSBGQUNFX1VOREVSX1dBVkU7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9CisgIAogICBvdmVybGluZSA9IGF0dHJzW0xGQUNFX09WRVJMSU5FX0lOREVY XTsKICAgaWYgKFNUUklOR1AgKG92ZXJsaW5lKSkKICAgICB7CkBAIC02NDY1LDYgKzY1NTUsOCBA QAogICBERUZTWU0gKFFDY29sb3IsICI6Y29sb3IiKTsKICAgREVGU1lNIChRQ2xpbmVfd2lkdGgs ICI6bGluZS13aWR0aCIpOwogICBERUZTWU0gKFFDc3R5bGUsICI6c3R5bGUiKTsKKyAgREVGU1lN IChRbGluZSwgImxpbmUiKTsKKyAgREVGU1lNIChRd2F2ZSwgIndhdmUiKTsKICAgREVGU1lNIChR cmVsZWFzZWRfYnV0dG9uLCAicmVsZWFzZWQtYnV0dG9uIik7CiAgIERFRlNZTSAoUXByZXNzZWRf YnV0dG9uLCAicHJlc3NlZC1idXR0b24iKTsKICAgREVGU1lNIChRbm9ybWFsLCAibm9ybWFsIik7 Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3h0ZXJtLmMnCi0tLSBzcmMveHRlcm0uYwkyMDEyLTA0 LTA5IDEzOjA1OjQ4ICswMDAwCisrKyBzcmMveHRlcm0uYwkyMDEyLTA0LTEyIDIzOjU2OjM5ICsw MDAwCkBAIC0yNjY1LDYgKzI2NjUsNjUgQEAKICAgcy0+YmFja2dyb3VuZF9maWxsZWRfcCA9IDE7 CiB9CiAKKy8qCisgICBEcmF3IGEgd2F2eSBsaW5lIHVuZGVyIFMuIFRoZSB3YXZlIGZpbGxzIHdh dmVfaGVpZ2h0IHBpeGVscyBmcm9tIHkwLgorCisgICAgICAgICAgICAgICAgICAgIHgwICAgICAg ICAgd2F2ZV9sZW5ndGggPSAyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQor ICAgICAgICAgICAgICAgIHkwICAgKiAgICogICAqICAgKiAgICoKKyAgICAgICAgICAgICAgICAg ICAgIHwqICogKiAqICogKiAqICogKgorICAgIHdhdmVfaGVpZ2h0ID0gMyAgfCAqICAgKiAgICog ICAqCisKKyovCisKK3N0YXRpYyB2b2lkCit4X2RyYXdfdW5kZXJ3YXZlIChzdHJ1Y3QgZ2x5cGhf c3RyaW5nICpzKQoreworICBpbnQgd2F2ZV9oZWlnaHQgPSAyLCB3YXZlX2xlbmd0aCA9IDM7Cisg IGludCBkeCwgZHksIHgwLCB5MCwgd2lkdGgsIHgxLCB5MSwgeDIsIHkyLCBvZGQsIHhtYXg7Cisg IFhSZWN0YW5nbGUgd2F2ZV9jbGlwLCBzdHJpbmdfY2xpcCwgZmluYWxfY2xpcDsKKworICBkeCA9 IHdhdmVfbGVuZ3RoOworICBkeSA9IHdhdmVfaGVpZ2h0IC0gMTsKKyAgeDAgPSBzLT54OworICB5 MCA9IHMtPnliYXNlICsgMTsKKyAgd2lkdGggPSBzLT53aWR0aDsKKyAgeG1heCA9IHgwICsgd2lk dGg7CisKKyAgLyogRmluZCBhbmQgc2V0IGNsaXBwaW5nIHJlY3RhbmdsZSAqLworCisgIHdhdmVf Y2xpcCA9IChYUmVjdGFuZ2xlKXsgeDAsIHkwLCB3aWR0aCwgd2F2ZV9oZWlnaHQgfTsKKyAgZ2V0 X2dseXBoX3N0cmluZ19jbGlwX3JlY3QgKHMsICZzdHJpbmdfY2xpcCk7CisKKyAgaWYgKCF4X2lu dGVyc2VjdF9yZWN0YW5nbGVzICgmd2F2ZV9jbGlwLCAmc3RyaW5nX2NsaXAsICZmaW5hbF9jbGlw KSkKKyAgICByZXR1cm47CisKKyAgWFNldENsaXBSZWN0YW5nbGVzIChzLT5kaXNwbGF5LCBzLT5n YywgMCwgMCwgJmZpbmFsX2NsaXAsIDEsIFVuc29ydGVkKTsKKworICAvKiBEcmF3IHRoZSB3YXZl cyAqLworCisgIHgxID0geDAgLSAoeDAgJSBkeCk7CisgIHgyID0geDEgKyBkeDsKKyAgb2RkID0g KHgxL2R4KSAlIDI7CisgIHkxID0geTIgPSB5MDsKKworICBpZiAob2RkKQorICAgIHkxICs9IGR5 OworICBlbHNlCisgICAgeTIgKz0gZHk7CisKKyAgd2hpbGUgKHgxIDw9IHhtYXgpCisgICAgewor ICAgICAgWERyYXdMaW5lIChzLT5kaXNwbGF5LCBzLT53aW5kb3csIHMtPmdjLCB4MSwgeTEsIHgy LCB5Mik7CisgICAgICB4MSAgPSB4MiwgeTEgPSB5MjsKKyAgICAgIHgyICs9IGR4LCB5MiA9IHkw ICsgb2RkKmR5OworICAgICAgb2RkID0gIW9kZDsKKyAgICB9CisKKyAgLyogUmVzdG9yZSBwcmV2 aW91cyBjbGlwcGluZyByZWN0YW5nbGUocykgKi8KKyAgWFNldENsaXBSZWN0YW5nbGVzIChzLT5k aXNwbGF5LCBzLT5nYywgMCwgMCwgcy0+Y2xpcCwgcy0+bnVtX2NsaXBzLCBVbnNvcnRlZCk7Cit9 CisKIAogLyogRHJhdyBnbHlwaCBzdHJpbmcgUy4gICovCiAKQEAgLTI3NjcsNjggKzI4MjYsODMg QEAKICAgICB7CiAgICAgICAvKiBEcmF3IHVuZGVybGluZS4gICovCiAgICAgICBpZiAocy0+ZmFj ZS0+dW5kZXJsaW5lX3ApCi0JewotCSAgdW5zaWduZWQgbG9uZyB0aGlja25lc3MsIHBvc2l0aW9u OwotCSAgaW50IHk7Ci0KLQkgIGlmIChzLT5wcmV2ICYmIHMtPnByZXYtPmZhY2UtPnVuZGVybGlu ZV9wKQotCSAgICB7Ci0JICAgICAgLyogV2UgdXNlIHRoZSBzYW1lIHVuZGVybGluZSBzdHlsZSBh cyB0aGUgcHJldmlvdXMgb25lLiAgKi8KLQkgICAgICB0aGlja25lc3MgPSBzLT5wcmV2LT51bmRl cmxpbmVfdGhpY2tuZXNzOwotCSAgICAgIHBvc2l0aW9uID0gcy0+cHJldi0+dW5kZXJsaW5lX3Bv c2l0aW9uOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICAvKiBHZXQgdGhlIHVuZGVy bGluZSB0aGlja25lc3MuICBEZWZhdWx0IGlzIDEgcGl4ZWwuICAqLwotCSAgICAgIGlmIChzLT5m b250ICYmIHMtPmZvbnQtPnVuZGVybGluZV90aGlja25lc3MgPiAwKQotCQl0aGlja25lc3MgPSBz LT5mb250LT51bmRlcmxpbmVfdGhpY2tuZXNzOwotCSAgICAgIGVsc2UKLQkJdGhpY2tuZXNzID0g MTsKLQkgICAgICBpZiAoeF91bmRlcmxpbmVfYXRfZGVzY2VudF9saW5lKQotCQlwb3NpdGlvbiA9 IChzLT5oZWlnaHQgLSB0aGlja25lc3MpIC0gKHMtPnliYXNlIC0gcy0+eSk7Ci0JICAgICAgZWxz ZQotCQl7Ci0JCSAgLyogR2V0IHRoZSB1bmRlcmxpbmUgcG9zaXRpb24uICBUaGlzIGlzIHRoZSBy ZWNvbW1lbmRlZAotCQkgICAgIHZlcnRpY2FsIG9mZnNldCBpbiBwaXhlbHMgZnJvbSB0aGUgYmFz ZWxpbmUgdG8gdGhlIHRvcCBvZgotCQkgICAgIHRoZSB1bmRlcmxpbmUuICBUaGlzIGlzIGEgc2ln bmVkIHZhbHVlIGFjY29yZGluZyB0byB0aGUKLQkJICAgICBzcGVjcywgYW5kIGl0cyBkZWZhdWx0 IGlzCi0KLQkJICAgICBST1VORCAoKG1heGltdW0gZGVzY2VudCkgLyAyKSwgd2l0aAotCQkgICAg IFJPVU5EKHgpID0gZmxvb3IgKHggKyAwLjUpICAqLwotCi0JCSAgaWYgKHhfdXNlX3VuZGVybGlu ZV9wb3NpdGlvbl9wcm9wZXJ0aWVzCi0JCSAgICAgICYmIHMtPmZvbnQgJiYgcy0+Zm9udC0+dW5k ZXJsaW5lX3Bvc2l0aW9uID49IDApCi0JCSAgICBwb3NpdGlvbiA9IHMtPmZvbnQtPnVuZGVybGlu ZV9wb3NpdGlvbjsKLQkJICBlbHNlIGlmIChzLT5mb250KQotCQkgICAgcG9zaXRpb24gPSAocy0+ Zm9udC0+ZGVzY2VudCArIDEpIC8gMjsKLQkJICBlbHNlCi0JCSAgICBwb3NpdGlvbiA9IHVuZGVy bGluZV9taW5pbXVtX29mZnNldDsKLQkJfQotCSAgICAgIHBvc2l0aW9uID0gbWF4IChwb3NpdGlv biwgdW5kZXJsaW5lX21pbmltdW1fb2Zmc2V0KTsKLQkgICAgfQotCSAgLyogQ2hlY2sgdGhlIHNh bml0eSBvZiB0aGlja25lc3MgYW5kIHBvc2l0aW9uLiAgV2Ugc2hvdWxkCi0JICAgICBhdm9pZCBk cmF3aW5nIHVuZGVybGluZSBvdXQgb2YgdGhlIGN1cnJlbnQgbGluZSBhcmVhLiAgKi8KLQkgIGlm IChzLT55ICsgcy0+aGVpZ2h0IDw9IHMtPnliYXNlICsgcG9zaXRpb24pCi0JICAgIHBvc2l0aW9u ID0gKHMtPmhlaWdodCAtIDEpIC0gKHMtPnliYXNlIC0gcy0+eSk7Ci0JICBpZiAocy0+eSArIHMt PmhlaWdodCA8IHMtPnliYXNlICsgcG9zaXRpb24gKyB0aGlja25lc3MpCi0JICAgIHRoaWNrbmVz cyA9IChzLT55ICsgcy0+aGVpZ2h0KSAtIChzLT55YmFzZSArIHBvc2l0aW9uKTsKLQkgIHMtPnVu ZGVybGluZV90aGlja25lc3MgPSB0aGlja25lc3M7Ci0JICBzLT51bmRlcmxpbmVfcG9zaXRpb24g PSBwb3NpdGlvbjsKLQkgIHkgPSBzLT55YmFzZSArIHBvc2l0aW9uOwotCSAgaWYgKHMtPmZhY2Ut PnVuZGVybGluZV9kZWZhdWx0ZWRfcCkKLQkgICAgWEZpbGxSZWN0YW5nbGUgKHMtPmRpc3BsYXks IHMtPndpbmRvdywgcy0+Z2MsCi0JCQkgICAgcy0+eCwgeSwgcy0+d2lkdGgsIHRoaWNrbmVzcyk7 Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBYR0NWYWx1ZXMgeGdjdjsKLQkgICAgICBYR2V0R0NW YWx1ZXMgKHMtPmRpc3BsYXksIHMtPmdjLCBHQ0ZvcmVncm91bmQsICZ4Z2N2KTsKLQkgICAgICBY U2V0Rm9yZWdyb3VuZCAocy0+ZGlzcGxheSwgcy0+Z2MsIHMtPmZhY2UtPnVuZGVybGluZV9jb2xv cik7Ci0JICAgICAgWEZpbGxSZWN0YW5nbGUgKHMtPmRpc3BsYXksIHMtPndpbmRvdywgcy0+Z2Ms Ci0JCQkgICAgICBzLT54LCB5LCBzLT53aWR0aCwgdGhpY2tuZXNzKTsKLQkgICAgICBYU2V0Rm9y ZWdyb3VuZCAocy0+ZGlzcGxheSwgcy0+Z2MsIHhnY3YuZm9yZWdyb3VuZCk7Ci0JICAgIH0KLQl9 Ci0KKyAgICAgICAgeworICAgICAgICAgIGlmIChzLT5mYWNlLT51bmRlcmxpbmVfdHlwZSA9PSBG QUNFX1VOREVSX1dBVkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChzLT5mYWNl LT51bmRlcmxpbmVfZGVmYXVsdGVkX3ApCisgICAgICAgICAgICAgICAgeF9kcmF3X3VuZGVyd2F2 ZSAocyk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICBYR0NWYWx1ZXMgeGdjdjsKKyAgICAgICAgICAgICAgICAgIFhHZXRHQ1ZhbHVlcyAo cy0+ZGlzcGxheSwgcy0+Z2MsIEdDRm9yZWdyb3VuZCwgJnhnY3YpOworICAgICAgICAgICAgICAg ICAgWFNldEZvcmVncm91bmQgKHMtPmRpc3BsYXksIHMtPmdjLCBzLT5mYWNlLT51bmRlcmxpbmVf Y29sb3IpOworICAgICAgICAgICAgICAgICAgeF9kcmF3X3VuZGVyd2F2ZSAocyk7CisgICAgICAg ICAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCAocy0+ZGlzcGxheSwgcy0+Z2MsIHhnY3YuZm9yZWdy b3VuZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2Ug aWYgKHMtPmZhY2UtPnVuZGVybGluZV90eXBlID09IEZBQ0VfVU5ERVJfTElORSkKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aGlja25lc3MsIHBvc2l0aW9uOwor ICAgICAgICAgICAgICBpbnQgeTsKKworICAgICAgICAgICAgICBpZiAocy0+cHJldiAmJiBzLT5w cmV2LT5mYWNlLT51bmRlcmxpbmVfcCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAvKiBXZSB1c2UgdGhlIHNhbWUgdW5kZXJsaW5lIHN0eWxlIGFzIHRoZSBwcmV2aW91cyBv bmUuICAqLworICAgICAgICAgICAgICAgICAgdGhpY2tuZXNzID0gcy0+cHJldi0+dW5kZXJsaW5l X3RoaWNrbmVzczsKKyAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcy0+cHJldi0+dW5kZXJs aW5lX3Bvc2l0aW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8qIEdldCB0aGUgdW5kZXJsaW5lIHRo aWNrbmVzcy4gIERlZmF1bHQgaXMgMSBwaXhlbC4gICovCisgICAgICAgICAgICAgICAgICBpZiAo cy0+Zm9udCAmJiBzLT5mb250LT51bmRlcmxpbmVfdGhpY2tuZXNzID4gMCkKKyAgICAgICAgICAg ICAgICAgICAgdGhpY2tuZXNzID0gcy0+Zm9udC0+dW5kZXJsaW5lX3RoaWNrbmVzczsKKyAgICAg ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGhpY2tuZXNzID0gMTsKKyAg ICAgICAgICAgICAgICAgIGlmICh4X3VuZGVybGluZV9hdF9kZXNjZW50X2xpbmUpCisgICAgICAg ICAgICAgICAgICAgIHBvc2l0aW9uID0gKHMtPmhlaWdodCAtIHRoaWNrbmVzcykgLSAocy0+eWJh c2UgLSBzLT55KTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCB0aGUgdW5kZXJsaW5lIHBvc2l0aW9uLiAg VGhpcyBpcyB0aGUgcmVjb21tZW5kZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNh bCBvZmZzZXQgaW4gcGl4ZWxzIGZyb20gdGhlIGJhc2VsaW5lIHRvIHRoZSB0b3Agb2YKKyAgICAg ICAgICAgICAgICAgICAgICAgICB0aGUgdW5kZXJsaW5lLiAgVGhpcyBpcyBhIHNpZ25lZCB2YWx1 ZSBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3MsIGFuZCBp dHMgZGVmYXVsdCBpcworCisgICAgICAgICAgICAgICAgICAgICAgICAgUk9VTkQgKChtYXhpbXVt IGRlc2NlbnQpIC8gMiksIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICBST1VORCh4KSA9 IGZsb29yICh4ICsgMC41KSAgKi8KKworICAgICAgICAgICAgICAgICAgICAgIGlmICh4X3VzZV91 bmRlcmxpbmVfcG9zaXRpb25fcHJvcGVydGllcworICAgICAgICAgICAgICAgICAgICAgICAgICAm JiBzLT5mb250ICYmIHMtPmZvbnQtPnVuZGVybGluZV9wb3NpdGlvbiA+PSAwKQorICAgICAgICAg ICAgICAgICAgICAgICAgcG9zaXRpb24gPSBzLT5mb250LT51bmRlcmxpbmVfcG9zaXRpb247Cisg ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocy0+Zm9udCkKKyAgICAgICAgICAgICAgICAg ICAgICAgIHBvc2l0aW9uID0gKHMtPmZvbnQtPmRlc2NlbnQgKyAxKSAvIDI7CisgICAgICAgICAg ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSB1bmRl cmxpbmVfbWluaW11bV9vZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgIHBvc2l0aW9uID0gbWF4IChwb3NpdGlvbiwgdW5kZXJsaW5lX21pbmltdW1fb2Zmc2V0 KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIC8qIENoZWNrIHRoZSBzYW5pdHkg b2YgdGhpY2tuZXNzIGFuZCBwb3NpdGlvbi4gIFdlIHNob3VsZAorICAgICAgICAgICAgICAgICBh dm9pZCBkcmF3aW5nIHVuZGVybGluZSBvdXQgb2YgdGhlIGN1cnJlbnQgbGluZSBhcmVhLiAgKi8K KyAgICAgICAgICAgICAgaWYgKHMtPnkgKyBzLT5oZWlnaHQgPD0gcy0+eWJhc2UgKyBwb3NpdGlv bikKKyAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IChzLT5oZWlnaHQgLSAxKSAtIChzLT55YmFz ZSAtIHMtPnkpOworICAgICAgICAgICAgICBpZiAocy0+eSArIHMtPmhlaWdodCA8IHMtPnliYXNl ICsgcG9zaXRpb24gKyB0aGlja25lc3MpCisgICAgICAgICAgICAgICAgdGhpY2tuZXNzID0gKHMt PnkgKyBzLT5oZWlnaHQpIC0gKHMtPnliYXNlICsgcG9zaXRpb24pOworICAgICAgICAgICAgICBz LT51bmRlcmxpbmVfdGhpY2tuZXNzID0gdGhpY2tuZXNzOworICAgICAgICAgICAgICBzLT51bmRl cmxpbmVfcG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgeSA9IHMtPnliYXNlICsg cG9zaXRpb247CisgICAgICAgICAgICAgIGlmIChzLT5mYWNlLT51bmRlcmxpbmVfZGVmYXVsdGVk X3ApCisgICAgICAgICAgICAgICAgWEZpbGxSZWN0YW5nbGUgKHMtPmRpc3BsYXksIHMtPndpbmRv dywgcy0+Z2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPngsIHksIHMtPndp ZHRoLCB0aGlja25lc3MpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgWEdDVmFsdWVzIHhnY3Y7CisgICAgICAgICAgICAgICAgICBYR2V0 R0NWYWx1ZXMgKHMtPmRpc3BsYXksIHMtPmdjLCBHQ0ZvcmVncm91bmQsICZ4Z2N2KTsKKyAgICAg ICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChzLT5kaXNwbGF5LCBzLT5nYywgcy0+ZmFjZS0+ dW5kZXJsaW5lX2NvbG9yKTsKKyAgICAgICAgICAgICAgICAgIFhGaWxsUmVjdGFuZ2xlIChzLT5k aXNwbGF5LCBzLT53aW5kb3csIHMtPmdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHMtPngsIHksIHMtPndpZHRoLCB0aGlja25lc3MpOworICAgICAgICAgICAgICAgICAgWFNl dEZvcmVncm91bmQgKHMtPmRpc3BsYXksIHMtPmdjLCB4Z2N2LmZvcmVncm91bmQpOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgLyogRHJhdyBvdmVy bGluZS4gICovCiAgICAgICBpZiAocy0+ZmFjZS0+b3ZlcmxpbmVfcCkKIAl7Cgo= --20cf302d4bbca88d0804bd84d7dd--