From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: martin rudalics Newsgroups: gmane.emacs.devel Subject: Re: resizing frames and windows Date: Tue, 29 Apr 2008 16:56:44 +0200 Message-ID: <4817372C.40303@gmx.at> References: <4815E5D1.7000709@gmx.at> <87k5igzqbn.fsf@stupidchicken.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010800020707070906080100" X-Trace: ger.gmane.org 1209481091 4398 80.91.229.12 (29 Apr 2008 14:58:11 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 29 Apr 2008 14:58:11 +0000 (UTC) Cc: emacs-devel To: Chong Yidong Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Apr 29 16:58:46 2008 connect(): Connection refused Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1JqrHv-000420-DJ for ged-emacs-devel@m.gmane.org; Tue, 29 Apr 2008 16:58:39 +0200 Original-Received: from localhost ([127.0.0.1]:40320 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JqrHD-00070C-1L for ged-emacs-devel@m.gmane.org; Tue, 29 Apr 2008 10:57:51 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JqrGs-0006tK-9b for emacs-devel@gnu.org; Tue, 29 Apr 2008 10:57:30 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JqrGq-0006sW-Ld for emacs-devel@gnu.org; Tue, 29 Apr 2008 10:57:29 -0400 Original-Received: from [199.232.76.173] (port=38310 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JqrGq-0006sN-Az for emacs-devel@gnu.org; Tue, 29 Apr 2008 10:57:28 -0400 Original-Received: from mail.gmx.net ([213.165.64.20]) by monty-python.gnu.org with smtp (Exim 4.60) (envelope-from ) id 1JqrGo-0008Vu-Rh for emacs-devel@gnu.org; Tue, 29 Apr 2008 10:57:28 -0400 Original-Received: (qmail invoked by alias); 29 Apr 2008 14:57:22 -0000 Original-Received: from 62-47-42-116.adsl.highway.telekom.at (EHLO [62.47.42.116]) [62.47.42.116] by mail.gmx.net (mp025) with SMTP; 29 Apr 2008 16:57:22 +0200 X-Authenticated: #14592706 X-Provags-ID: V01U2FsdGVkX18YN5oC2XwYr3CcwrmmIb0ongoV6omWDnUXr7khhs xygSso9GiYB5FD User-Agent: Mozilla Thunderbird 1.0 (Windows/20041206) X-Accept-Language: de-DE, de, en-us, en In-Reply-To: <87k5igzqbn.fsf@stupidchicken.com> X-Y-GMX-Trusted: 0 X-detected-kernel: by monty-python.gnu.org: Genre and OS details not recognized. X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:96144 Archived-At: This is a multi-part message in MIME format. --------------010800020707070906080100 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Thanks for trying! > It applies, but compilation fails: > > window.c: In function =E2=80=98Fdisplay_buffer=E2=80=99: > window.c:3853: error: too few arguments to function =E2=80=98window_mi= n_size_2=E2=80=99 > window.c:3868: error: too few arguments to function =E2=80=98window_mi= n_size_2=E2=80=99 > > Are you missing a piece from your patch? Honestly I didn't care about these - my `display-buffer' is in window.el for quite some time. Please try again with the versions of window.h and dispnew.c I sent earlier and the patch for window.c now attached. Sorry for the inconvenience. --------------010800020707070906080100 Content-Type: text/plain; name="window-fixed.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="window-fixed.patch" KioqIHdpbmRvdy5jCVdlZCBBcHIgIDIgMjI6MTU6NDQgMjAwOAotLS0gd2luZG93LmMJVHVl IEFwciAyOSAxNjozOTo0MiAyMDA4CioqKioqKioqKioqKioqKgoqKiogNjUsNzMgKioqKgog IHN0YXRpYyB2b2lkIHdpbmRvd19zY3JvbGwgUF8gKChMaXNwX09iamVjdCwgaW50LCBpbnQs IGludCkpOwogIHN0YXRpYyB2b2lkIHdpbmRvd19zY3JvbGxfcGl4ZWxfYmFzZWQgUF8gKChM aXNwX09iamVjdCwgaW50LCBpbnQsIGludCkpOwogIHN0YXRpYyB2b2lkIHdpbmRvd19zY3Jv bGxfbGluZV9iYXNlZCBQXyAoKExpc3BfT2JqZWN0LCBpbnQsIGludCwgaW50KSk7CiEgc3Rh dGljIGludCB3aW5kb3dfbWluX3NpemVfMSBQXyAoKHN0cnVjdCB3aW5kb3cgKiwgaW50KSk7 CiEgc3RhdGljIGludCB3aW5kb3dfbWluX3NpemVfMiBQXyAoKHN0cnVjdCB3aW5kb3cgKiwg aW50KSk7CiEgc3RhdGljIGludCB3aW5kb3dfbWluX3NpemUgUF8gKChzdHJ1Y3Qgd2luZG93 ICosIGludCwgaW50LCBpbnQgKikpOwogIHN0YXRpYyB2b2lkIHNpemVfd2luZG93IFBfICgo TGlzcF9PYmplY3QsIGludCwgaW50LCBpbnQsIGludCwgaW50KSk7CiAgc3RhdGljIGludCBm cmVlemVfd2luZG93X3N0YXJ0IFBfICgoc3RydWN0IHdpbmRvdyAqLCB2b2lkICopKTsKICBz dGF0aWMgaW50IHdpbmRvd19maXhlZF9zaXplX3AgUF8gKChzdHJ1Y3Qgd2luZG93ICosIGlu dCwgaW50KSk7Ci0tLSA2NSw3MyAtLS0tCiAgc3RhdGljIHZvaWQgd2luZG93X3Njcm9sbCBQ XyAoKExpc3BfT2JqZWN0LCBpbnQsIGludCwgaW50KSk7CiAgc3RhdGljIHZvaWQgd2luZG93 X3Njcm9sbF9waXhlbF9iYXNlZCBQXyAoKExpc3BfT2JqZWN0LCBpbnQsIGludCwgaW50KSk7 CiAgc3RhdGljIHZvaWQgd2luZG93X3Njcm9sbF9saW5lX2Jhc2VkIFBfICgoTGlzcF9PYmpl Y3QsIGludCwgaW50LCBpbnQpKTsKISBzdGF0aWMgaW50IHdpbmRvd19taW5fc2l6ZV8xIFBf ICgoc3RydWN0IHdpbmRvdyAqLCBpbnQsIGludCkpOwohIHN0YXRpYyBpbnQgd2luZG93X21p bl9zaXplXzIgUF8gKChzdHJ1Y3Qgd2luZG93ICosIGludCwgaW50KSk7CiEgc3RhdGljIGlu dCB3aW5kb3dfbWluX3NpemUgUF8gKChzdHJ1Y3Qgd2luZG93ICosIGludCwgaW50LCBpbnQs IGludCAqKSk7CiAgc3RhdGljIHZvaWQgc2l6ZV93aW5kb3cgUF8gKChMaXNwX09iamVjdCwg aW50LCBpbnQsIGludCwgaW50LCBpbnQpKTsKICBzdGF0aWMgaW50IGZyZWV6ZV93aW5kb3df c3RhcnQgUF8gKChzdHJ1Y3Qgd2luZG93ICosIHZvaWQgKikpOwogIHN0YXRpYyBpbnQgd2lu ZG93X2ZpeGVkX3NpemVfcCBQXyAoKHN0cnVjdCB3aW5kb3cgKiwgaW50LCBpbnQpKTsKKioq KioqKioqKioqKioqCioqKiAyOTksMzA0ICoqKioKLS0tIDI5OSwzMDUgLS0tLQogICAgcC0+ ZnJpbmdlc19vdXRzaWRlX21hcmdpbnMgPSBRbmlsOwogICAgcC0+c2Nyb2xsX2Jhcl93aWR0 aCA9IFFuaWw7CiAgICBwLT52ZXJ0aWNhbF9zY3JvbGxfYmFyX3R5cGUgPSBRdDsKKyAgIHAt PnJlc2l6ZV9wcm9wb3J0aW9uYWxseSA9IFFuaWw7CiAgCiAgICBWd2luZG93X2xpc3QgPSBR bmlsOwogICAgcmV0dXJuIHZhbDsKKioqKioqKioqKioqKioqCioqKiAyNTUwLDI1NjcgKioq KgogICNkZWZpbmUgTUlOX1NBRkVfV0lORE9XX1dJRFRIICAoMikKICAjZGVmaW5lIE1JTl9T QUZFX1dJTkRPV19IRUlHSFQgKDEpCiAgCiEgLyogTWFrZSBzdXJlIHRoYXQgd2luZG93X21p bl9oZWlnaHQgYW5kIHdpbmRvd19taW5fd2lkdGggYXJlCiEgICAgbm90IHRvbyBzbWFsbDsg aWYgdGhleSBhcmUsIHNldCB0aGVtIHRvIHNhZmUgbWluaW1hLiAgKi8KICAKISBzdGF0aWMg dm9pZAohIGNoZWNrX21pbl93aW5kb3dfc2l6ZXMgKCkKISB7CiEgICAvKiBTbWFsbGVyIHZh bHVlcyBtaWdodCBwZXJtaXQgYSBjcmFzaC4gICovCiEgICBpZiAod2luZG93X21pbl93aWR0 aCA8IE1JTl9TQUZFX1dJTkRPV19XSURUSCkKISAgICAgd2luZG93X21pbl93aWR0aCA9IE1J Tl9TQUZFX1dJTkRPV19XSURUSDsKISAgIGlmICh3aW5kb3dfbWluX2hlaWdodCA8IE1JTl9T QUZFX1dJTkRPV19IRUlHSFQpCiEgICAgIHdpbmRvd19taW5faGVpZ2h0ID0gTUlOX1NBRkVf V0lORE9XX0hFSUdIVDsKISB9CiAgCiAgLyogSWYgKlJPV1Mgb3IgKkNPTFMgYXJlIHRvbyBz bWFsbCBhIHNpemUgZm9yIEZSQU1FLCBzZXQgdGhlbSB0byB0aGUKICAgICBtaW5pbXVtIGFs bG93YWJsZSBzaXplLiAgKi8KLS0tIDI1NTEsMjU2MSAtLS0tCiAgI2RlZmluZSBNSU5fU0FG RV9XSU5ET1dfV0lEVEggICgyKQogICNkZWZpbmUgTUlOX1NBRkVfV0lORE9XX0hFSUdIVCAo MSkKICAKISAvKiBGb3Igd3Agbm9uLXplcm8gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5z IG9mIHdpbmRvdyB3LiAgT3RoZXJ3aXNlCiEgICAgdGhlIHRvdGFsIG51bWJlciBvZiBsaW5l cyBvZiB3LiAgKi8KICAKISAjZGVmaW5lIFdJTkRPV19UT1RBTF9TSVpFKHcsIHdwKSBcCiEg ICAod3AgPyBXSU5ET1dfVE9UQUxfQ09MUyAodykgOiBXSU5ET1dfVE9UQUxfTElORVMgKHcp KQogIAogIC8qIElmICpST1dTIG9yICpDT0xTIGFyZSB0b28gc21hbGwgYSBzaXplIGZvciBG UkFNRSwgc2V0IHRoZW0gdG8gdGhlCiAgICAgbWluaW11bSBhbGxvd2FibGUgc2l6ZS4gICov CioqKioqKioqKioqKioqKgoqKiogMjYwOCwyNjE0ICoqKioKICAKICAgICAgICBpZiAod2lk dGhfcCkKICAJewohIAkgIC8qIEEgaG9yaXouIGNvbWJpbmF0aW9uIGlzIGZpeGVkLXdpZHRo IGlmIGFsbCBvZiBpZiBpdHMKICAJICAgICBjaGlsZHJlbiBhcmUuICAqLwogIAkgIHdoaWxl IChjICYmIHdpbmRvd19maXhlZF9zaXplX3AgKGMsIHdpZHRoX3AsIDApKQogIAkgICAgYyA9 IFdJTkRPV1AgKGMtPm5leHQpID8gWFdJTkRPVyAoYy0+bmV4dCkgOiBOVUxMOwotLS0gMjYw MiwyNjA4IC0tLS0KICAKICAgICAgICBpZiAod2lkdGhfcCkKICAJewohIAkgIC8qIEEgaG9y aXpvbnRhbCBjb21iaW5hdGlvbiBpcyBmaXhlZC13aWR0aCBpZiBhbGwgb2YgaWYgaXRzCiAg CSAgICAgY2hpbGRyZW4gYXJlLiAgKi8KICAJICB3aGlsZSAoYyAmJiB3aW5kb3dfZml4ZWRf c2l6ZV9wIChjLCB3aWR0aF9wLCAwKSkKICAJICAgIGMgPSBXSU5ET1dQIChjLT5uZXh0KSA/ IFhXSU5ET1cgKGMtPm5leHQpIDogTlVMTDsKKioqKioqKioqKioqKioqCioqKiAyNjE2LDI2 MjIgKioqKgogIAl9CiAgICAgICAgZWxzZQogIAl7CiEgCSAgLyogQSBob3Jpei4gY29tYmlu YXRpb24gaXMgZml4ZWQtaGVpZ2h0IGlmIG9uZSBvZiBpZiBpdHMKICAJICAgICBjaGlsZHJl biBpcy4gICovCiAgCSAgd2hpbGUgKGMgJiYgIXdpbmRvd19maXhlZF9zaXplX3AgKGMsIHdp ZHRoX3AsIDApKQogIAkgICAgYyA9IFdJTkRPV1AgKGMtPm5leHQpID8gWFdJTkRPVyAoYy0+ bmV4dCkgOiBOVUxMOwotLS0gMjYxMCwyNjE2IC0tLS0KICAJfQogICAgICAgIGVsc2UKICAJ ewohIAkgIC8qIEEgaG9yaXpvbnRhbCBjb21iaW5hdGlvbiBpcyBmaXhlZC1oZWlnaHQgaWYg b25lIG9mIGlmIGl0cwogIAkgICAgIGNoaWxkcmVuIGlzLiAgKi8KICAJICB3aGlsZSAoYyAm JiAhd2luZG93X2ZpeGVkX3NpemVfcCAoYywgd2lkdGhfcCwgMCkpCiAgCSAgICBjID0gV0lO RE9XUCAoYy0+bmV4dCkgPyBYV0lORE9XIChjLT5uZXh0KSA6IE5VTEw7CioqKioqKioqKioq KioqKgoqKiogMjYyOSwyNjM1ICoqKioKICAKICAgICAgICBpZiAod2lkdGhfcCkKICAJewoh IAkgIC8qIEEgdmVydC4gY29tYmluYXRpb24gaXMgZml4ZWQtd2lkdGggaWYgb25lIG9mIGlm IGl0cwogIAkgICAgIGNoaWxkcmVuIGlzLiAgKi8KICAJICB3aGlsZSAoYyAmJiAhd2luZG93 X2ZpeGVkX3NpemVfcCAoYywgd2lkdGhfcCwgMCkpCiAgCSAgICBjID0gV0lORE9XUCAoYy0+ bmV4dCkgPyBYV0lORE9XIChjLT5uZXh0KSA6IE5VTEw7Ci0tLSAyNjIzLDI2MjkgLS0tLQog IAogICAgICAgIGlmICh3aWR0aF9wKQogIAl7CiEgCSAgLyogQSB2ZXJ0aWNhbCBjb21iaW5h dGlvbiBpcyBmaXhlZC13aWR0aCBpZiBvbmUgb2YgaWYgaXRzCiAgCSAgICAgY2hpbGRyZW4g aXMuICAqLwogIAkgIHdoaWxlIChjICYmICF3aW5kb3dfZml4ZWRfc2l6ZV9wIChjLCB3aWR0 aF9wLCAwKSkKICAJICAgIGMgPSBXSU5ET1dQIChjLT5uZXh0KSA/IFhXSU5ET1cgKGMtPm5l eHQpIDogTlVMTDsKKioqKioqKioqKioqKioqCioqKiAyNjM3LDI2NDMgKioqKgogIAl9CiAg ICAgICAgZWxzZQogIAl7CiEgCSAgLyogQSB2ZXJ0LiBjb21iaW5hdGlvbiBpcyBmaXhlZC1o ZWlnaHQgaWYgYWxsIG9mIGlmIGl0cwogIAkgICAgIGNoaWxkcmVuIGFyZS4gICovCiAgCSAg d2hpbGUgKGMgJiYgd2luZG93X2ZpeGVkX3NpemVfcCAoYywgd2lkdGhfcCwgMCkpCiAgCSAg ICBjID0gV0lORE9XUCAoYy0+bmV4dCkgPyBYV0lORE9XIChjLT5uZXh0KSA6IE5VTEw7Ci0t LSAyNjMxLDI2MzcgLS0tLQogIAl9CiAgICAgICAgZWxzZQogIAl7CiEgCSAgLyogQSB2ZXJ0 aWNhbCBjb21iaW5hdGlvbiBpcyBmaXhlZC1oZWlnaHQgaWYgYWxsIG9mIGlmIGl0cwogIAkg ICAgIGNoaWxkcmVuIGFyZS4gICovCiAgCSAgd2hpbGUgKGMgJiYgd2luZG93X2ZpeGVkX3Np emVfcCAoYywgd2lkdGhfcCwgMCkpCiAgCSAgICBjID0gV0lORE9XUCAoYy0+bmV4dCkgPyBY V0lORE9XIChjLT5uZXh0KSA6IE5VTEw7CioqKioqKioqKioqKioqKgoqKiogMjY4OSwyODA4 ICoqKioKICAgIHJldHVybiBmaXhlZF9wOwogIH0KICAKISAvKiBSZXR1cm4gdGhlIG1pbmlt dW0gc2l6ZSBmb3IgbGVhZiB3aW5kb3cgVy4gIFdJRFRIX1Agbm9uLXplcm8gbWVhbnMKISAg ICB0YWtlIGludG8gYWNjb3VudCBmcmluZ2VzIGFuZCB0aGUgc2Nyb2xsYmFyIG9mIFcuICBX SURUSF9QIHplcm8gbWVhbnMKISAgICB0YWtlIGludG8gYWNjb3VudCBtb2RlLWxpbmUgb2Yg Vy4gIFJldHVybiAxIGZvciB0aGUgbWluaWJ1ZmZlci4gICovCiAgCiAgc3RhdGljIGludAoh IHdpbmRvd19taW5fc2l6ZV8yICh3LCB3aWR0aF9wKQogICAgICAgc3RydWN0IHdpbmRvdyAq dzsKISAgICAgIGludCB3aWR0aF9wOwogIHsKISAgIGludCBzaXplOwohICAgCiAgICBpZiAo d2lkdGhfcCkKISAgICAgc2l6ZSA9IG1heCAod2luZG93X21pbl93aWR0aCwKISAJCShNSU5f U0FGRV9XSU5ET1dfV0lEVEgKICAJCSArIFdJTkRPV19GUklOR0VfQ09MUyAodykKISAJCSAr IFdJTkRPV19TQ1JPTExfQkFSX0NPTFMgKHcpKSk7CiAgICBlbHNlIGlmIChNSU5JX1dJTkRP V19QICh3KSkKISAgICAgc2l6ZSA9IDE7CiAgICBlbHNlCiEgICAgIHNpemUgPSBtYXggKHdp bmRvd19taW5faGVpZ2h0LAohIAkJKE1JTl9TQUZFX1dJTkRPV19IRUlHSFQKISAJCSAvKiBE b24ndCBjb3VudCB0aGUgaGVhZGVyLWxpbmUgaGVyZS4gIEl0IHdvdWxkIGJyZWFrCiEgCQkg ICAgc3BsaXR0aW5nIGEgd2luZG93IHdpdGggYSBoZWFkZXItbGluZSB3aGVuIHRoZSBuZXcK ISAJCSAgICB3aW5kb3cgc2hhbGwgaGF2ZSBhIGhlaWdodCBvZiB0d28gKGNhbGN1bGF0b3Ig ZG9lcwohIAkJICAgIHRoYXQpLiAqLwohIAkJICsgKFdJTkRPV19XQU5UU19NT0RFTElORV9Q ICh3KSA/IDEgOiAwKSkpOwohIAohICAgcmV0dXJuIHNpemU7CiAgfQogIAohIC8qIFJldHVy biB0aGUgbWluaW11bSBzaXplIG9mIHdpbmRvdyBXLCBub3QgdGFraW5nIGZpeGVkLXdpZHRo IHdpbmRvd3MKISAgICBpbnRvIGFjY291bnQuICBXSURUSF9QIG5vbi16ZXJvIG1lYW5zIHJl dHVybiB0aGUgbWluaW11bSB3aWR0aCwKISAgICBvdGhlcndpc2UgcmV0dXJuIHRoZSBtaW5p bXVtIGhlaWdodC4gIElmIFcgaXMgYSBjb21iaW5hdGlvbiB3aW5kb3csCiEgICAgY29tcHV0 ZSB0aGUgbWluaW11bSBzaXplIGZyb20gdGhlIG1pbmltdW0gc2l6ZXMgb2YgVydzIGNoaWxk cmVuLiAgKi8KICAKICBzdGF0aWMgaW50CiEgd2luZG93X21pbl9zaXplXzEgKHcsIHdpZHRo X3ApCiAgICAgICBzdHJ1Y3Qgd2luZG93ICp3OwohICAgICAgaW50IHdpZHRoX3A7CiAgewog ICAgc3RydWN0IHdpbmRvdyAqYzsKICAgIGludCBzaXplOwogIAogICAgaWYgKCFOSUxQICh3 LT5oY2hpbGQpKQogICAgICB7CiAgICAgICAgYyA9IFhXSU5ET1cgKHctPmhjaGlsZCk7CiAg ICAgICAgc2l6ZSA9IDA7CiAgCiAgICAgICAgaWYgKHdpZHRoX3ApCiAgCXsKISAJICAvKiBU aGUgbWluIHdpZHRoIG9mIGEgaG9yaXpvbnRhbCBjb21iaW5hdGlvbiBpcwohIAkgICAgIHRo ZSBzdW0gb2YgdGhlIG1pbiB3aWR0aHMgb2YgaXRzIGNoaWxkcmVuLiAgKi8KICAJICB3aGls ZSAoYykKICAJICAgIHsKISAJICAgICAgc2l6ZSArPSB3aW5kb3dfbWluX3NpemVfMSAoYywg d2lkdGhfcCk7CiAgCSAgICAgIGMgPSBXSU5ET1dQIChjLT5uZXh0KSA/IFhXSU5ET1cgKGMt Pm5leHQpIDogTlVMTDsKICAJICAgIH0KICAJfQogICAgICAgIGVsc2UKICAJewohIAkgIC8q IFRoZSBtaW4gaGVpZ2h0IGEgaG9yaXpvbnRhbCBjb21iaW5hdGlvbiBlcXVhbHMKISAJICAg ICB0aGUgbWF4aW11bSBvZiBhbGwgbWluIGhlaWdodCBvZiBpdHMgY2hpbGRyZW4uICAqLwog IAkgIHdoaWxlIChjKQogIAkgICAgewohIAkgICAgICBpbnQgbWluX3NpemUgPSB3aW5kb3df bWluX3NpemVfMSAoYywgd2lkdGhfcCk7CiEgCSAgICAgIHNpemUgPSBtYXggKG1pbl9zaXpl LCBzaXplKTsKICAJICAgICAgYyA9IFdJTkRPV1AgKGMtPm5leHQpID8gWFdJTkRPVyAoYy0+ bmV4dCkgOiBOVUxMOwogIAkgICAgfQogIAl9CiAgICAgIH0KICAgIGVsc2UgaWYgKCFOSUxQ ICh3LT52Y2hpbGQpKQogICAgICB7CiAgICAgICAgYyA9IFhXSU5ET1cgKHctPnZjaGlsZCk7 CiAgICAgICAgc2l6ZSA9IDA7CiAgCiAgICAgICAgaWYgKHdpZHRoX3ApCiAgCXsKISAJICAv KiBUaGUgbWluIHdpZHRoIG9mIGEgdmVydGljYWwgY29tYmluYXRpb24gaXMKISAJICAgICB0 aGUgbWF4aW11bSBvZiB0aGUgbWluIHdpZHRocyBvZiBpdHMgY2hpbGRyZW4uICAqLwogIAkg IHdoaWxlIChjKQogIAkgICAgewohIAkgICAgICBpbnQgbWluX3NpemUgPSB3aW5kb3dfbWlu X3NpemVfMSAoYywgd2lkdGhfcCk7CiEgCSAgICAgIHNpemUgPSBtYXggKG1pbl9zaXplLCBz aXplKTsKICAJICAgICAgYyA9IFdJTkRPV1AgKGMtPm5leHQpID8gWFdJTkRPVyAoYy0+bmV4 dCkgOiBOVUxMOwogIAkgICAgfQogIAl9CiAgICAgICAgZWxzZQogIAl7CiEgCSAgLyogVGhl IG1pbiBoZWlnaHQgb2YgYSB2ZXJ0aWNhbCBjb21iaW5hdGlvbiBlcXVhbHMKISAJICAgICB0 aGUgc3VtIG9mIHRoZSBtaW4gaGVpZ2h0IG9mIGl0cyBjaGlsZHJlbi4gICovCiAgCSAgd2hp bGUgKGMpCiAgCSAgICB7CiEgCSAgICAgIHNpemUgKz0gd2luZG93X21pbl9zaXplXzEgKGMs IHdpZHRoX3ApOwogIAkgICAgICBjID0gV0lORE9XUCAoYy0+bmV4dCkgPyBYV0lORE9XIChj LT5uZXh0KSA6IE5VTEw7CiAgCSAgICB9CiAgCX0KICAgICAgfQogICAgZWxzZQohICAgICBz aXplID0gd2luZG93X21pbl9zaXplXzIgKHcsIHdpZHRoX3ApOwogIAogICAgcmV0dXJuIHNp emU7CiAgfQogIAotIAogIC8qIFJldHVybiB0aGUgbWluaW11bSBzaXplIG9mIHdpbmRvdyBX LCB0YWtpbmcgZml4ZWQtc2l6ZSB3aW5kb3dzIGludG8KISAgICBhY2NvdW50LiAgV0lEVEhf UCBub24temVybyBtZWFucyByZXR1cm4gdGhlIG1pbmltdW0gd2lkdGgsCiEgICAgb3RoZXJ3 aXNlIHJldHVybiB0aGUgbWluaW11bSBoZWlnaHQuICBJR05PUkVfRklYRURfUCBub24temVy byBtZWFucwohICAgIGlnbm9yZSBpZiBXIGlzIGZpeGVkLXNpemUuICBTZXQgKkZJWEVEIHRv IDEgaWYgVyBpcyBmaXhlZC1zaXplCiEgICAgdW5sZXNzIEZJWEVEIGlzIG51bGwuICAqLwog IAogIHN0YXRpYyBpbnQKISB3aW5kb3dfbWluX3NpemUgKHcsIHdpZHRoX3AsIGlnbm9yZV9m aXhlZF9wLCBmaXhlZCkKICAgICAgIHN0cnVjdCB3aW5kb3cgKnc7CiEgICAgICBpbnQgd2lk dGhfcCwgaWdub3JlX2ZpeGVkX3AsICpmaXhlZDsKICB7CiAgICBpbnQgc2l6ZSwgZml4ZWRf cDsKICAKLS0tIDI2ODMsMjgxMiAtLS0tCiAgICByZXR1cm4gZml4ZWRfcDsKICB9CiAgCiEg LyogUmV0dXJuIG1pbmltdW0gc2l6ZSBvZiBsZWFmIHdpbmRvdyBXLiAgV0lEVEhfUCBub24t emVybyBtZWFucyByZXR1cm4KISAgICB0aGUgbWluaW11bSB3aWR0aCBvZiBXLCBXSURUSF9Q IHplcm8gbWVhbnMgcmV0dXJuIHRoZSBtaW5pbXVtIGhlaWdodAohICAgIG9mIFcuICBTQUZF X1Agbm9uLXplcm8gbWVhbnMgaWdub3JlIHdpbmRvdy1taW4taGVpZ2h0fHdpZHRoIGJ1dCBq dXN0CiEgICAgcmV0dXJuIHZhbHVlcyB0aGF0IHdvbid0IGNyYXNoIEVtYWNzIGFuZCBkb24n dCBoaWRlIGNvbXBvbmVudHMgbGlrZQohICAgIGZyaW5nZXMsIHNjcm9sbGJhcnMsIG9yIG1v ZGVsaW5lcy4gIElmIFdJRFRIX1AgaXMgemVybyBhbmQgVyBpcyB0aGUKISAgICBtaW5pYnVm ZmVyIHdpbmRvdywgYWx3YXlzIHJldHVybiAxLiAgKi8KICAKICBzdGF0aWMgaW50CiEgd2lu ZG93X21pbl9zaXplXzIgKHcsIHdpZHRoX3AsIHNhZmVfcCkKICAgICAgIHN0cnVjdCB3aW5k b3cgKnc7CiEgICAgICBpbnQgd2lkdGhfcCwgc2FmZV9wOwogIHsKISAgIC8qIFdlIHNob3Vs ZCBjb25zaWRlciBidWZmZXItbG9jYWwgdmFsdWVzIG9mIHdpbmRvd19taW5faGVpZ2h0IGFu ZAohICAgICAgd2luZG93X21pbl93aWR0aCBoZXJlLiAgKi8KICAgIGlmICh3aWR0aF9wKQoh ICAgICB7CiEgICAgICAgaW50IHNhZmVfc2l6ZSA9IChNSU5fU0FGRV9XSU5ET1dfV0lEVEgK ICAJCSArIFdJTkRPV19GUklOR0VfQ09MUyAodykKISAJCSAgICAgICArIFdJTkRPV19TQ1JP TExfQkFSX0NPTFMgKHcpKTsKISAKISAgICAgICByZXR1cm4gc2FmZV9wID8gc2FmZV9zaXpl IDogbWF4ICh3aW5kb3dfbWluX3dpZHRoLCBzYWZlX3NpemUpOwohICAgICB9CiAgICBlbHNl IGlmIChNSU5JX1dJTkRPV19QICh3KSkKISAgICAgcmV0dXJuIDE7CiAgICBlbHNlCiEgICAg IHsKISAgICAgICBpbnQgc2FmZV9zaXplID0gKE1JTl9TQUZFX1dJTkRPV19IRUlHSFQKISAJ CSAgICAgICArICgoQlVGRkVSUCAody0+YnVmZmVyKQohIAkJCSAgICYmICFOSUxQIChYQlVG RkVSICh3LT5idWZmZXIpLT5tb2RlX2xpbmVfZm9ybWF0KSkKISAJCQkgID8gMSA6IDApKTsK ISAKISAgICAgICByZXR1cm4gc2FmZV9wID8gc2FmZV9zaXplIDogbWF4ICh3aW5kb3dfbWlu X2hlaWdodCwgc2FmZV9zaXplKTsKISAgICAgfQogIH0KICAKISAvKiBSZXR1cm4gbWluaW11 bSBzaXplIG9mIHdpbmRvdyBXLCBub3QgdGFraW5nIGZpeGVkLXdpZHRoIHdpbmRvd3MgaW50 bwohICAgIGFjY291bnQuICBXSURUSF9QIG5vbi16ZXJvIG1lYW5zIHJldHVybiB0aGUgbWlu aW11bSB3aWR0aCwgb3RoZXJ3aXNlCiEgICAgcmV0dXJuIHRoZSBtaW5pbXVtIGhlaWdodC4g IFNBRkVfUCBub24temVybyBtZWFucyBpZ25vcmUKISAgICB3aW5kb3ctbWluLWhlaWdodHx3 aWR0aCBidXQganVzdCByZXR1cm4gdmFsdWVzIHRoYXQgd29uJ3QgY3Jhc2ggRW1hY3MKISAg ICBhbmQgZG9uJ3QgaGlkZSBjb21wb25lbnRzIGxpa2UgZnJpbmdlcywgc2Nyb2xsYmFycywg b3IgbW9kZWxpbmVzLiAgSWYKISAgICBXIGlzIGEgY29tYmluYXRpb24gd2luZG93LCBjb21w dXRlIHRoZSBtaW5pbXVtIHNpemUgZnJvbSB0aGUgbWluaW11bQohICAgIHNpemVzIG9mIFcn cyBjaGlsZHJlbi4gICovCiAgCiAgc3RhdGljIGludAohIHdpbmRvd19taW5fc2l6ZV8xICh3 LCB3aWR0aF9wLCBzYWZlX3ApCiAgICAgICBzdHJ1Y3Qgd2luZG93ICp3OwohICAgICAgaW50 IHdpZHRoX3AsIHNhZmVfcDsKICB7CiAgICBzdHJ1Y3Qgd2luZG93ICpjOwogICAgaW50IHNp emU7CiAgCiAgICBpZiAoIU5JTFAgKHctPmhjaGlsZCkpCiAgICAgIHsKKyAgICAgICAvKiBX IGlzIGEgaG9yaXpvbnRhbCBjb21iaW5hdGlvbi4gICovCiAgICAgICAgYyA9IFhXSU5ET1cg KHctPmhjaGlsZCk7CiAgICAgICAgc2l6ZSA9IDA7CiAgCiAgICAgICAgaWYgKHdpZHRoX3Ap CiAgCXsKISAJICAvKiBUaGUgbWluaW11bSB3aWR0aCBvZiBhIGhvcml6b250YWwgY29tYmlu YXRpb24gaXMgdGhlIHN1bSBvZgohIAkgICAgIHRoZSBtaW5pbXVtIHdpZHRocyBvZiBpdHMg Y2hpbGRyZW4uICAqLwogIAkgIHdoaWxlIChjKQogIAkgICAgewohIAkgICAgICBzaXplICs9 IHdpbmRvd19taW5fc2l6ZV8xIChjLCAxLCBzYWZlX3ApOwogIAkgICAgICBjID0gV0lORE9X UCAoYy0+bmV4dCkgPyBYV0lORE9XIChjLT5uZXh0KSA6IE5VTEw7CiAgCSAgICB9CiAgCX0K ICAgICAgICBlbHNlCiAgCXsKISAJICAvKiBUaGUgbWluaW11bSBoZWlnaHQgb2YgYSBob3Jp em9udGFsIGNvbWJpbmF0aW9uIGlzIHRoZQohIAkgICAgIG1heGltdW0gb2YgdGhlIG1pbmlt dW0gaGVpZ2h0cyBvZiBpdHMgY2hpbGRyZW4uICAqLwogIAkgIHdoaWxlIChjKQogIAkgICAg ewohIAkgICAgICBzaXplID0gbWF4ICh3aW5kb3dfbWluX3NpemVfMSAoYywgMCwgc2FmZV9w KSwgc2l6ZSk7CiAgCSAgICAgIGMgPSBXSU5ET1dQIChjLT5uZXh0KSA/IFhXSU5ET1cgKGMt Pm5leHQpIDogTlVMTDsKICAJICAgIH0KICAJfQogICAgICB9CiAgICBlbHNlIGlmICghTklM UCAody0+dmNoaWxkKSkKICAgICAgeworICAgICAgIC8qIFcgaXMgYSB2ZXJ0aWNhbCBjb21i aW5hdGlvbi4gICovCiAgICAgICAgYyA9IFhXSU5ET1cgKHctPnZjaGlsZCk7CiAgICAgICAg c2l6ZSA9IDA7CiAgCiAgICAgICAgaWYgKHdpZHRoX3ApCiAgCXsKISAJICAvKiBUaGUgbWlu aW11bSB3aWR0aCBvZiBhIHZlcnRpY2FsIGNvbWJpbmF0aW9uIGlzIHRoZSBtYXhpbXVtCiEg CSAgICAgb2YgdGhlIG1pbmltdW0gd2lkdGhzIG9mIGl0cyBjaGlsZHJlbi4gICovCiAgCSAg d2hpbGUgKGMpCiAgCSAgICB7CiEgCSAgICAgIHNpemUgPSBtYXggKHdpbmRvd19taW5fc2l6 ZV8xIChjLCAxLCBzYWZlX3ApLCBzaXplKTsKICAJICAgICAgYyA9IFdJTkRPV1AgKGMtPm5l eHQpID8gWFdJTkRPVyAoYy0+bmV4dCkgOiBOVUxMOwogIAkgICAgfQogIAl9CiAgICAgICAg ZWxzZQogIAl7CiEgCSAgLyogVGhlIG1pbmltdW0gaGVpZ2h0IG9mIGEgdmVydGljYWwgY29t YmluYXRpb24gaXMgdGhlIHN1bSBvZgohIAkgICAgIHRoZSBtaW5pbXVtIGhlaWdodCBvZiBp dHMgY2hpbGRyZW4uICAqLwogIAkgIHdoaWxlIChjKQogIAkgICAgewohIAkgICAgICBzaXpl ICs9IHdpbmRvd19taW5fc2l6ZV8xIChjLCAwLCBzYWZlX3ApOwogIAkgICAgICBjID0gV0lO RE9XUCAoYy0+bmV4dCkgPyBYV0lORE9XIChjLT5uZXh0KSA6IE5VTEw7CiAgCSAgICB9CiAg CX0KICAgICAgfQogICAgZWxzZQohICAgICAvKiBXIGlzIGEgbGVhZiB3aW5kb3cuICAqLwoh ICAgICBzaXplID0gd2luZG93X21pbl9zaXplXzIgKHcsIHdpZHRoX3AsIHNhZmVfcCk7CiAg CiAgICByZXR1cm4gc2l6ZTsKICB9CiAgCiAgLyogUmV0dXJuIHRoZSBtaW5pbXVtIHNpemUg b2Ygd2luZG93IFcsIHRha2luZyBmaXhlZC1zaXplIHdpbmRvd3MgaW50bwohICAgIGFjY291 bnQuICBXSURUSF9QIG5vbi16ZXJvIG1lYW5zIHJldHVybiB0aGUgbWluaW11bSB3aWR0aCwg b3RoZXJ3aXNlCiEgICAgcmV0dXJuIHRoZSBtaW5pbXVtIGhlaWdodC4gIFNBRkVfUCBub24t emVybyBtZWFucyBpZ25vcmUKISAgICB3aW5kb3ctbWluLWhlaWdodHx3aWR0aCBidXQganVz dCByZXR1cm4gdmFsdWVzIHRoYXQgd29uJ3QgY3Jhc2ggRW1hY3MKISAgICBhbmQgZG9uJ3Qg aGlkZSBjb21wb25lbnRzIGxpa2UgZnJpbmdlcywgc2Nyb2xsYmFycywgb3IgbW9kZWxpbmVz LgohICAgIElHTk9SRV9GSVhFRF9QIG5vbi16ZXJvIG1lYW5zIGlnbm9yZSBpZiBXIGlzIGZp eGVkLXNpemUuICBTZXQgKkZJWEVECiEgICAgdG8gMSBpZiBXIGlzIGZpeGVkLXNpemUgdW5s ZXNzIEZJWEVEIGlzIG51bGwuICAqLwogIAogIHN0YXRpYyBpbnQKISB3aW5kb3dfbWluX3Np emUgKHcsIHdpZHRoX3AsIHNhZmVfcCwgaWdub3JlX2ZpeGVkX3AsIGZpeGVkKQogICAgICAg c3RydWN0IHdpbmRvdyAqdzsKISAgICAgIGludCB3aWR0aF9wLCBzYWZlX3AsIGlnbm9yZV9m aXhlZF9wLCAqZml4ZWQ7CiAgewogICAgaW50IHNpemUsIGZpeGVkX3A7CiAgCioqKioqKioq KioqKioqKgoqKiogMjgxNSwyODIzICoqKioKICAgICAgKmZpeGVkID0gZml4ZWRfcDsKICAK ICAgIGlmIChmaXhlZF9wKQohICAgICBzaXplID0gd2lkdGhfcCA/IFhGQVNUSU5UICh3LT50 b3RhbF9jb2xzKSA6IFhGQVNUSU5UICh3LT50b3RhbF9saW5lcyk7CiAgICBlbHNlCiEgICAg IHNpemUgPSB3aW5kb3dfbWluX3NpemVfMSAodywgd2lkdGhfcCk7CiAgCiAgICByZXR1cm4g c2l6ZTsKICB9Ci0tLSAyODE5LDI4MjcgLS0tLQogICAgICAqZml4ZWQgPSBmaXhlZF9wOwog IAogICAgaWYgKGZpeGVkX3ApCiEgICAgIHNpemUgPSBXSU5ET1dfVE9UQUxfU0laRSAodywg d2lkdGhfcCk7CiAgICBlbHNlCiEgICAgIHNpemUgPSB3aW5kb3dfbWluX3NpemVfMSAodywg d2lkdGhfcCwgc2FmZV9wKTsKICAKICAgIHJldHVybiBzaXplOwogIH0KKioqKioqKioqKioq KioqCioqKiAyODU5LDI4OTMgKioqKgogICAgcmV0dXJuIDE7CiAgfQogIAohIC8qIENhbGN1 bGF0ZSBuZXcgc2l6ZXMgZm9yIHdpbmRvd3MgaW4gdGhlIGxpc3QgRk9SV0FSRCB3aGVuIHRo ZSB3aW5kb3cgc2l6ZQohICAgIGdvZXMgZnJvbSBUT1RBTCB0byBTSVpFLiAgVE9UQUwgbXVz dCBiZSBncmVhdGVyIHRoYW4gU0laRS4KISAgICBUaGUgbnVtYmVyIG9mIHdpbmRvd3MgaW4g Rk9SV0FSRCBpcyBOQ0hJTERSRU4sIGFuZCB0aGUgbnVtYmVyIHRoYXQKISAgICBjYW4gc2hy aW5rIGlzIFNIUklOS0FCTEUuCiEgICAgVGhlIG1pbmltdW0gc2l6ZSBhIHdpbmRvdyBjYW4g aGF2ZSBpcyBNSU5fU0laRS4KISAgICBJZiB3ZSBhcmUgc2hyaW5raW5nIGZpeGVkIHdpbmRv d3MsIFJFU0laRV9GSVhFRF9QIGlzIG5vbi16ZXJvLgohICAgIElmIHdlIGFyZSBzaHJpbmtp bmcgY29sdW1ucywgV0lEVEhfUCBpcyBub24temVybywgb3RoZXJ3aXNlIHdlIGFyZQohICAg IHNocmlua2luZyByb3dzLgogIAogICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBhbGxv Y2F0ZWQgYXJyYXkgb2YgbmV3IHNpemVzIHRoYXQgdGhlIGNhbGxlcgohICAgIG11c3QgZnJl ZS4gIFRoZSBzaXplIC0xIG1lYW5zIHRoZSB3aW5kb3cgaXMgZml4ZWQgYW5kIFJFU0laRV9G SVhFRF9QCiEgICAgaXMgemVyby4gIEFycmF5IGluZGV4IDAgcmVmZXJzIHRvIHRoZSBmaXJz dCB3aW5kb3cgaW4gRk9SV0FSRCwgMSB0bwohICAgIHRoZSBzZWNvbmQsIGFuZCBzbyBvbi4K ISAKISAgICBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGtlZXAgd2luZG93cyBhdCBsZWFzdCBh dCB0aGUgbWluaW11bSBzaXplCiEgICAgYW5kIHJlc2l6ZSBvdGhlciB3aW5kb3dzIGJlZm9y ZSBpdCByZXNpemVzIGFueSB3aW5kb3cgdG8gemVybyAoaS5lLgohICAgIGRlbGV0ZSB0aGF0 IHdpbmRvdykuCiEgCiEgICAgV2luZG93cyBhcmUgcmVzaXplZCBwcm9wb3J0aW9uYWwgdG8g dGhlaXIgc2l6ZSwgc28gYmlnZ2VyIHdpbmRvd3MKISAgICBzaHJpbmsgbW9yZSB0aGFuIHNt YWxsZXIgd2luZG93cy4gICovCiAgc3RhdGljIGludCAqCiEgc2hyaW5rX3dpbmRvd3MgKHRv dGFsLCBzaXplLCBuY2hpbGRyZW4sIHNocmlua2FibGUsCiEgICAgICAgICAgICAgICAgIG1p bl9zaXplLCByZXNpemVfZml4ZWRfcCwgZm9yd2FyZCwgd2lkdGhfcCkKISAgICAgIGludCB0 b3RhbCwgc2l6ZSwgbmNoaWxkcmVuLCBzaHJpbmthYmxlLCBtaW5fc2l6ZTsKISAgICAgIGlu dCByZXNpemVfZml4ZWRfcCwgd2lkdGhfcDsKICAgICAgIExpc3BfT2JqZWN0IGZvcndhcmQ7 CiAgewogICAgaW50IGF2YWlsYWJsZV9yZXNpemUgPSAwOwohICAgaW50ICpuZXdfc2l6ZXM7 CiAgICBzdHJ1Y3Qgd2luZG93ICpjOwogICAgTGlzcF9PYmplY3QgY2hpbGQ7CiAgICBpbnQg c21hbGxlc3QgPSB0b3RhbDsKLS0tIDI4NjMsMjkwMCAtLS0tCiAgICByZXR1cm4gMTsKICB9 CiAgCiEgLyogQ2FsY3VsYXRlIG5ldyBzaXplcyBmb3Igd2luZG93cyBpbiB0aGUgbGlzdCBG T1JXQVJEIHdoZW4gdGhlaXIKISAgICBjb21wb3VuZCBzaXplIGdvZXMgZnJvbSBUT1RBTCB0 byBTSVpFLiAgVE9UQUwgbXVzdCBiZSBncmVhdGVyIHRoYW4KISAgICBTSVpFLiAgVGhlIG51 bWJlciBvZiB3aW5kb3dzIGluIEZPUldBUkQgaXMgTkNISUxEUkVOLCBhbmQgdGhlIG51bWJl cgohICAgIHRoYXQgY2FuIHNocmluayBpcyBTSFJJTktBQkxFLiAgRml4ZWQtc2l6ZSB3aW5k b3dzIG1heSBiZSBzaHJ1bmsgaWYKISAgICBhbmQgb25seSBpZiBSRVNJWkVfRklYRURfUCBp cyBub24temVyby4gIFdJRFRIX1Agbm9uLXplcm8gbWVhbnMKISAgICBzaHJpbmsgY29sdW1u cywgb3RoZXJ3aXNlIHNocmluayBsaW5lcy4KISAKISAgICBTQUZFX1AgemVybyBtZWFucyB3 aW5kb3dzIG1heSBiZSBzaXplZCBkb3duIHRvIHdpbmRvdy1taW4taGVpZ2h0CiEgICAgbGlu ZXMgKHdpbmRvdy1taW4td2luZG93IGNvbHVtbnMgZm9yIFdJRFRIX1Agbm9uLXplcm8pLiAg U0FGRV9QCiEgICAgbm9uLXplcm8gbWVhbnMgd2luZG93cyBtYXkgYmUgc2l6ZWQgZG93biB0 byB0aGVpciBtaW5pbXVtIHNhZmUgc2l6ZXMKISAgICB0YWtpbmcgaW50byBhY2NvdW50IHRo ZSBzcGFjZSBuZWVkZWQgdG8gZGlzcGxheSBtb2RlbGluZXMsIGZyaW5nZXMsCiEgICAgYW5k IHNjcm9sbGJhcnMuCiAgCiAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFsbG9jYXRl ZCBhcnJheSBvZiBuZXcgc2l6ZXMgdGhhdCB0aGUgY2FsbGVyCiEgICAgbXVzdCBmcmVlLiAg QSBzaXplIC0xIG1lYW5zIHRoZSB3aW5kb3cgaXMgZml4ZWQgYW5kIFJFU0laRV9GSVhFRF9Q IGlzCiEgICAgemVyby4gIEEgc2l6ZSB6ZXJvIG1lYW5zIHRoZSB3aW5kb3cgc2hhbGwgYmUg ZGVsZXRlZC4gIEFycmF5IGluZGV4IDAKISAgICByZWZlcnMgdG8gdGhlIGZpcnN0IHdpbmRv dyBpbiBGT1JXQVJELCAxIHRvIHRoZSBzZWNvbmQsIGFuZCBzbyBvbi4KISAKISAgICBUaGlz IGZ1bmN0aW9uIHJlc2l6ZXMgd2luZG93cyBwcm9wb3J0aW9uYWxseSB0byB0aGVpciBzaXpl LiAgSXQgYWxzbwohICAgIHRyaWVzIHRvIHByZXNlcnZlIHNtYWxsZXIgd2luZG93cyBieSBy ZXNpemluZyBsYXJnZXIgd2luZG93cyBiZWZvcmUKISAgICByZXNpemluZyBhbnkgd2luZG93 IHRvIHplcm8uICBJZiByZXNpemVfcHJvcG9ydGlvbmFsbHkgaXMgbm9uLW5pbCBmb3IKISAg ICBhIHNwZWNpZmljIHdpbmRvdywgaXQgd2lsbCBhdHRlbXB0IHRvIHN0cmljdGx5IHJlc2l6 ZSB0aGF0IHdpbmRvdwohICAgIHByb3BvcnRpb25hbGx5LCBldmVuIGF0IHRoZSBleHBlbnNl IG9mIGRlbGV0aW5nIHNtYWxsZXIgd2luZG93cy4gICovCiAgc3RhdGljIGludCAqCiEgc2hy aW5rX3dpbmRvd3MgKHRvdGFsLCBzaXplLCBuY2hpbGRyZW4sIHNocmlua2FibGUsIHJlc2l6 ZV9maXhlZF9wLAohIAkJZm9yd2FyZCwgd2lkdGhfcCwgc2FmZV9wKQohICAgICAgaW50IHRv dGFsLCBzaXplLCBuY2hpbGRyZW4sIHNocmlua2FibGU7CiEgICAgICBpbnQgcmVzaXplX2Zp eGVkX3AsIHdpZHRoX3AsIHNhZmVfcDsKICAgICAgIExpc3BfT2JqZWN0IGZvcndhcmQ7CiAg ewogICAgaW50IGF2YWlsYWJsZV9yZXNpemUgPSAwOwohICAgaW50ICpuZXdfc2l6ZXMsICpt aW5fc2l6ZXM7CiAgICBzdHJ1Y3Qgd2luZG93ICpjOwogICAgTGlzcF9PYmplY3QgY2hpbGQ7 CiAgICBpbnQgc21hbGxlc3QgPSB0b3RhbDsKKioqKioqKioqKioqKioqCioqKiAyODk2LDI5 MTYgKioqKgogICAgaW50IGk7CiAgCiAgICBuZXdfc2l6ZXMgPSB4bWFsbG9jIChzaXplb2Yg KCpuZXdfc2l6ZXMpICogbmNoaWxkcmVuKTsKICAKICAgIGZvciAoaSA9IDAsIGNoaWxkID0g Zm9yd2FyZDsgIU5JTFAgKGNoaWxkKTsgY2hpbGQgPSBjLT5uZXh0LCArK2kpCiAgICAgIHsK ICAgICAgICBpbnQgY2hpbGRfc2l6ZTsKICAKICAgICAgICBjID0gWFdJTkRPVyAoY2hpbGQp OwohICAgICAgIGNoaWxkX3NpemUgPSB3aWR0aF9wID8gWElOVCAoYy0+dG90YWxfY29scykg OiBYSU5UIChjLT50b3RhbF9saW5lcyk7CiAgCiEgICAgICAgaWYgKCEgcmVzaXplX2ZpeGVk X3AgJiYgd2luZG93X2ZpeGVkX3NpemVfcCAoYywgd2lkdGhfcCwgMCkpCiAgICAgICAgICBu ZXdfc2l6ZXNbaV0gPSAtMTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAg IG5ld19zaXplc1tpXSA9IGNoaWxkX3NpemU7CiEgICAgICAgICAgIGlmIChjaGlsZF9zaXpl ID4gbWluX3NpemUpCiEgICAgICAgICAgICAgYXZhaWxhYmxlX3Jlc2l6ZSArPSBjaGlsZF9z aXplIC0gbWluX3NpemU7CiAgICAgICAgICB9CiAgICAgIH0KICAgIC8qIFdlIG1pZ2h0IG5l ZWQgdG8gc2hyaW5rIHNvbWUgd2luZG93cyB0byB6ZXJvLiAgRmluZCB0aGUgc21hbGxlc3QK LS0tIDI5MDMsMjkyNiAtLS0tCiAgICBpbnQgaTsKICAKICAgIG5ld19zaXplcyA9IHhtYWxs b2MgKHNpemVvZiAoKm5ld19zaXplcykgKiBuY2hpbGRyZW4pOworICAgbWluX3NpemVzID0g eG1hbGxvYyAoc2l6ZW9mICgqbWluX3NpemVzKSAqIG5jaGlsZHJlbik7CiAgCiAgICBmb3Ig KGkgPSAwLCBjaGlsZCA9IGZvcndhcmQ7ICFOSUxQIChjaGlsZCk7IGNoaWxkID0gYy0+bmV4 dCwgKytpKQogICAgICB7CiAgICAgICAgaW50IGNoaWxkX3NpemU7CiAgCiAgICAgICAgYyA9 IFhXSU5ET1cgKGNoaWxkKTsKISAgICAgICBjaGlsZF9zaXplID0gV0lORE9XX1RPVEFMX1NJ WkUgKGMsIHdpZHRoX3ApOwogIAohICAgICAgIGlmICghcmVzaXplX2ZpeGVkX3AgJiYgd2lu ZG93X2ZpeGVkX3NpemVfcCAoYywgd2lkdGhfcCwgMCkpCiAgICAgICAgICBuZXdfc2l6ZXNb aV0gPSAtMTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIG5ld19zaXpl c1tpXSA9IGNoaWxkX3NpemU7CiEgICAgICAgICAgIG1pbl9zaXplc1tpXSA9IHdpbmRvd19t aW5fc2l6ZV8xIChjLCB3aWR0aF9wLCBzYWZlX3ApOwohICAgICAgICAgICBpZiAoY2hpbGRf c2l6ZSA+IG1pbl9zaXplc1tpXQohIAkgICAgICAmJiBOSUxQIChjLT5yZXNpemVfcHJvcG9y dGlvbmFsbHkpKQohICAgICAgICAgICAgIGF2YWlsYWJsZV9yZXNpemUgKz0gY2hpbGRfc2l6 ZSAtIG1pbl9zaXplc1tpXTsKICAgICAgICAgIH0KICAgICAgfQogICAgLyogV2UgbWlnaHQg bmVlZCB0byBzaHJpbmsgc29tZSB3aW5kb3dzIHRvIHplcm8uICBGaW5kIHRoZSBzbWFsbGVz dAoqKioqKioqKioqKioqKioKKioqIDI5MjcsMjkzNCAqKioqCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAvKiBSZXNpemUgdGhpcyB3aW5kb3cgZG93biB0byB6ZXJvLiAgKi8KICAg ICAgICAgICAgICBuZXdfc2l6ZXNbaV0gPSAwOwohICAgICAgICAgICAgIGlmIChzbWFsbGVz dCA+IG1pbl9zaXplKQohICAgICAgICAgICAgICAgYXZhaWxhYmxlX3Jlc2l6ZSAtPSBzbWFs bGVzdCAtIG1pbl9zaXplOwogICAgICAgICAgICAgIGF2YWlsYWJsZV9yZXNpemUgKz0gc21h bGxlc3Q7CiAgICAgICAgICAgICAgLS1zaHJpbmthYmxlOwogICAgICAgICAgICAgIHRvdGFs X3JlbW92ZWQgKz0gc21hbGxlc3Q7Ci0tLSAyOTM3LDI5NDQgLS0tLQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgLyogUmVzaXplIHRoaXMgd2luZG93IGRvd24gdG8gemVyby4gICov CiAgICAgICAgICAgICAgbmV3X3NpemVzW2ldID0gMDsKISAgICAgICAgICAgICBpZiAoc21h bGxlc3QgPiBtaW5fc2l6ZXNbaV0pCiEgICAgICAgICAgICAgICBhdmFpbGFibGVfcmVzaXpl IC09IHNtYWxsZXN0IC0gbWluX3NpemVzW2ldOwogICAgICAgICAgICAgIGF2YWlsYWJsZV9y ZXNpemUgKz0gc21hbGxlc3Q7CiAgICAgICAgICAgICAgLS1zaHJpbmthYmxlOwogICAgICAg ICAgICAgIHRvdGFsX3JlbW92ZWQgKz0gc21hbGxlc3Q7CioqKioqKioqKioqKioqKgoqKiog Mjk0NiwyOTU2ICoqKioKICAgICAgIHByb3BvcnRpb25hbCB0byBpdHMgc2l6ZS4gICovCiAg ICBmb3IgKGkgPSAwOyBpIDwgbmNoaWxkcmVuOyArK2kpCiAgICAgIHsKISAgICAgICBpZiAo bmV3X3NpemVzW2ldID4gbWluX3NpemUpCiAgICAgICAgICB7CiEgICAgICAgICAgIGludCB0 b19zaHJpbmsgPSB0b3RhbF9zaHJpbmsqbmV3X3NpemVzW2ldL3RvdGFsOwohICAgICAgICAg ICBpZiAobmV3X3NpemVzW2ldIC0gdG9fc2hyaW5rIDwgbWluX3NpemUpCiEgICAgICAgICAg ICAgdG9fc2hyaW5rID0gbmV3X3NpemVzW2ldIC0gbWluX3NpemU7CiAgICAgICAgICAgIG5l d19zaXplc1tpXSAtPSB0b19zaHJpbms7CiAgICAgICAgICAgIHRvdGFsX3JlbW92ZWQgKz0g dG9fc2hyaW5rOwogICAgICAgICAgfQotLS0gMjk1NiwyOTY3IC0tLS0KICAgICAgIHByb3Bv cnRpb25hbCB0byBpdHMgc2l6ZS4gICovCiAgICBmb3IgKGkgPSAwOyBpIDwgbmNoaWxkcmVu OyArK2kpCiAgICAgIHsKISAgICAgICBpZiAobmV3X3NpemVzW2ldID4gbWluX3NpemVzW2ld KQogICAgICAgICAgewohICAgICAgICAgICBpbnQgdG9fc2hyaW5rID0gdG90YWxfc2hyaW5r ICogbmV3X3NpemVzW2ldIC8gdG90YWw7CiEgCiEgICAgICAgICAgIGlmIChuZXdfc2l6ZXNb aV0gLSB0b19zaHJpbmsgPCBtaW5fc2l6ZXNbaV0pCiEgICAgICAgICAgICAgdG9fc2hyaW5r ID0gbmV3X3NpemVzW2ldIC0gbWluX3NpemVzW2ldOwogICAgICAgICAgICBuZXdfc2l6ZXNb aV0gLT0gdG9fc2hyaW5rOwogICAgICAgICAgICB0b3RhbF9yZW1vdmVkICs9IHRvX3Nocmlu azsKICAgICAgICAgIH0KKioqKioqKioqKioqKioqCioqKiAyOTcxLDI5NzcgKioqKgogICAg ICAgICAgICB9CiAgCiAgICAgICAgZm9yIChpID0gMDsgaSA8IG5jaGlsZHJlbjsgKytpKQoh ICAgICAgICAgaWYgKG5ld19zaXplc1tpXSA+IG1pbl9zaXplKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgLS1uZXdfc2l6ZXNbaV07CiAgICAgICAgICAgICAgKyt0b3RhbF9yZW1v dmVkOwotLS0gMjk4MiwyOTg4IC0tLS0KICAgICAgICAgICAgfQogIAogICAgICAgIGZvciAo aSA9IDA7IGkgPCBuY2hpbGRyZW47ICsraSkKISAgICAgICAgIGlmIChuZXdfc2l6ZXNbaV0g PiBtaW5fc2l6ZXNbaV0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAtLW5ld19zaXpl c1tpXTsKICAgICAgICAgICAgICArK3RvdGFsX3JlbW92ZWQ7CioqKioqKioqKioqKioqKgoq KiogMjk4MSwyOTg3ICoqKioKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQog IAotIAogICAgICAgIC8qIFNwZWNpYWwgY2FzZSwgb25seSBvbmUgd2luZG93IGxlZnQuICAq LwogICAgICAgIGlmIChub256ZXJvX3NpemVzID09IDEpCiAgICAgICAgICBicmVhazsKLS0t IDI5OTIsMjk5NyAtLS0tCioqKioqKioqKioqKioqKgoqKiogMzAwMSwzMDIyICoqKioKICAg ICAgICAgIH0KICAgICAgfQogIAogICAgcmV0dXJuIG5ld19zaXplczsKICB9CiAgCiAgLyog U2V0IFdJTkRPVydzIGhlaWdodCBvciB3aWR0aCB0byBTSVpFLiAgV0lEVEhfUCBub24temVy byBtZWFucyBzZXQKISAgICBXSU5ET1cncyB3aWR0aC4gIFJlc2l6ZSBXSU5ET1cncyBjaGls ZHJlbiwgaWYgYW55LCBzbyB0aGF0IHRoZXkKISAgICBrZWVwIHRoZWlyIHByb3BvcnRpb25h dGUgc2l6ZSByZWxhdGl2ZSB0byBXSU5ET1cuCiAgCiAgICAgSWYgRklSU1RfT05MWSBpcyAx LCBjaGFuZ2Ugb25seSB0aGUgZmlyc3Qgb2YgV0lORE9XJ3MgY2hpbGRyZW4gd2hlbgogICAg IHRoZXkgYXJlIGluIHNlcmllcy4gIElmIExBU1RfT05MWSBpcyAxLCBjaGFuZ2Ugb25seSB0 aGUgbGFzdCBvZgogICAgIFdJTkRPVydzIGNoaWxkcmVuIHdoZW4gdGhleSBhcmUgaW4gc2Vy aWVzLgogIAogICAgIFByb3BhZ2F0ZSBXSU5ET1cncyB0b3Agb3IgbGVmdCBlZGdlIHBvc2l0 aW9uIHRvIGNoaWxkcmVuLiAgRGVsZXRlCiEgICAgd2luZG93cyB0aGF0IGJlY29tZSB0b28g c21hbGwgdW5sZXNzIE5PREVMRVRFX1AgaXMgbm9uLXplcm8uCiEgCiEgICAgSWYgTk9ERUxF VEVfUCBpcyAyLCB0aGF0IG1lYW5zIHdlIGRvIGRlbGV0ZSB3aW5kb3dzIHRoYXQgYXJlCiEg ICAgdG9vIHNtYWxsLCBldmVuIGlmIHRoZXkgd2VyZSB0b28gc21hbGwgYmVmb3JlISAgKi8K ICAKICBzdGF0aWMgdm9pZAogIHNpemVfd2luZG93ICh3aW5kb3csIHNpemUsIHdpZHRoX3As IG5vZGVsZXRlX3AsIGZpcnN0X29ubHksIGxhc3Rfb25seSkKLS0tIDMwMTEsMzAzNCAtLS0t CiAgICAgICAgICB9CiAgICAgIH0KICAKKyAgIHhmcmVlIChtaW5fc2l6ZXMpOworIAogICAg cmV0dXJuIG5ld19zaXplczsKICB9CiAgCiAgLyogU2V0IFdJTkRPVydzIGhlaWdodCBvciB3 aWR0aCB0byBTSVpFLiAgV0lEVEhfUCBub24temVybyBtZWFucyBzZXQKISAgICBXSU5ET1cn cyB3aWR0aC4gIFJlc2l6ZSBXSU5ET1cncyBjaGlsZHJlbiwgaWYgYW55LCBzbyB0aGF0IHRo ZXkga2VlcAohICAgIHRoZWlyIHByb3BvcnRpb25hdGUgc2l6ZSByZWxhdGl2ZSB0byBXSU5E T1cuCiAgCiAgICAgSWYgRklSU1RfT05MWSBpcyAxLCBjaGFuZ2Ugb25seSB0aGUgZmlyc3Qg b2YgV0lORE9XJ3MgY2hpbGRyZW4gd2hlbgogICAgIHRoZXkgYXJlIGluIHNlcmllcy4gIElm IExBU1RfT05MWSBpcyAxLCBjaGFuZ2Ugb25seSB0aGUgbGFzdCBvZgogICAgIFdJTkRPVydz IGNoaWxkcmVuIHdoZW4gdGhleSBhcmUgaW4gc2VyaWVzLgogIAogICAgIFByb3BhZ2F0ZSBX SU5ET1cncyB0b3Agb3IgbGVmdCBlZGdlIHBvc2l0aW9uIHRvIGNoaWxkcmVuLiAgRGVsZXRl CiEgICAgd2luZG93cyB0aGF0IGJlY29tZSB0b28gc21hbGwgdW5sZXNzIE5PREVMRVRFX1Ag aXMgMS4gIFdoZW4KISAgICBOT0RFTEVURV9QIGVxdWFscyAyIGRvIG5vdCBob25vciBzZXR0 aW5ncyBmb3Igd2luZG93LW1pbi1oZWlnaHQgYW5kCiEgICAgd2luZG93LW1pbi13aWR0aCB3 aGVuIHJlc2l6aW5nIHdpbmRvd3MgYnV0IHVzZSBzYWZlIGRlZmF1bHRzIGluc3RlYWQuCiEg ICAgVGhpcyBzaG91bGQgZ2l2ZSBiZXR0ZXIgYmVoYXZpb3Igd2hlbiByZXNpemluZyBmcmFt ZXMuICAqLwogIAogIHN0YXRpYyB2b2lkCiAgc2l6ZV93aW5kb3cgKHdpbmRvdywgc2l6ZSwg d2lkdGhfcCwgbm9kZWxldGVfcCwgZmlyc3Rfb25seSwgbGFzdF9vbmx5KQoqKioqKioqKioq KioqKioKKioqIDMwMjcsMzA3MyAqKioqCiAgICBzdHJ1Y3Qgd2luZG93ICp3ID0gWFdJTkRP VyAod2luZG93KTsKICAgIHN0cnVjdCB3aW5kb3cgKmM7CiAgICBMaXNwX09iamVjdCBjaGls ZCwgKmZvcndhcmQsICpzaWRld2FyZDsKISAgIGludCBvbGRfc2l6ZSwgbWluX3NpemUsIHNh ZmVfbWluX3NpemU7CiAgCi0gICBjaGVja19taW5fd2luZG93X3NpemVzICgpOwogICAgc2l6 ZSA9IG1heCAoMCwgc2l6ZSk7CiAgCiEgICAvKiBJZiB0aGUgd2luZG93IGhhcyBiZWVuICJ0 b28gc21hbGwiIGF0IG9uZSBwb2ludCwKISAgICAgIGRvbid0IGRlbGV0ZSBpdCBmb3IgYmVp bmcgInRvbyBzbWFsbCIgaW4gdGhlIGZ1dHVyZS4KISAgICAgIFByZXNlcnZlIGl0IGFzIGxv bmcgYXMgdGhhdCBpcyBhdCBhbGwgcG9zc2libGUuICAqLwohICAgaWYgKHdpZHRoX3ApCiEg ICAgIHsKISAgICAgICBvbGRfc2l6ZSA9IFdJTkRPV19UT1RBTF9DT0xTICh3KTsKISAgICAg ICBtaW5fc2l6ZSA9IHdpbmRvd19taW5fd2lkdGg7CiEgICAgICAgc2FmZV9taW5fc2l6ZSA9 IHdpbmRvd19taW5fc2l6ZV8yICh3LCAxKTsKISAgICAgfQohICAgZWxzZQohICAgICB7CiEg ICAgICAgb2xkX3NpemUgPSBYSU5UICh3LT50b3RhbF9saW5lcyk7CiEgICAgICAgbWluX3Np emUgPSB3aW5kb3dfbWluX2hlaWdodDsKISAgICAgICBzYWZlX21pbl9zaXplID0gd2luZG93 X21pbl9zaXplXzIgKHcsIDApOwohICAgICB9CiEgCiEgICBpZiAob2xkX3NpemUgPCBtaW5f c2l6ZSAmJiBub2RlbGV0ZV9wICE9IDIpCiEgICAgIHctPnRvb19zbWFsbF9vayA9IFF0Owoh IAohICAgLyogTW92ZSB0aGUgZm9sbG93aW5nIHRlc3QgaGVyZSBzaW5jZSBvdGhlcndpc2Ug dGhlCiEgICAgICBwcmVjZWRpbmcgdGVzdCBkb2Vzbid0IG1ha2Ugc2Vuc2UuICBtYXJ0aW4u ICovCiEgICBpZiAobm9kZWxldGVfcCA9PSAyKQohICAgICBub2RlbGV0ZV9wID0gMDsKISAK ISAgIC8qIE1heWJlIGRlbGV0ZSBXSU5ET1cgaWYgaXQncyB0b28gc21hbGwuICAqLwohICAg aWYgKG5vZGVsZXRlX3AgIT0gMSAmJiAhTklMUCAody0+cGFyZW50KSkKICAgICAgewohICAg ICAgIGlmICghTUlOSV9XSU5ET1dfUCAodykgJiYgIU5JTFAgKHctPnRvb19zbWFsbF9vaykp CiEgCW1pbl9zaXplID0gd2lkdGhfcCA/IE1JTl9TQUZFX1dJTkRPV19XSURUSCA6IE1JTl9T QUZFX1dJTkRPV19IRUlHSFQ7CiEgICAgICAgaWYgKG1pbl9zaXplIDwgc2FmZV9taW5fc2l6 ZSkKISAJbWluX3NpemUgPSBzYWZlX21pbl9zaXplOwohICAgICAgIGlmIChzaXplIDwgbWlu X3NpemUpCiEgCXsKISAJICBkZWxldGVfd2luZG93ICh3aW5kb3cpOwohIAkgIHJldHVybjsK ISAJfQogICAgICB9CiAgCiAgICAvKiBTZXQgcmVkaXNwbGF5IGhpbnRzLiAgKi8KLS0tIDMw MzksMzA1NCAtLS0tCiAgICBzdHJ1Y3Qgd2luZG93ICp3ID0gWFdJTkRPVyAod2luZG93KTsK ICAgIHN0cnVjdCB3aW5kb3cgKmM7CiAgICBMaXNwX09iamVjdCBjaGlsZCwgKmZvcndhcmQs ICpzaWRld2FyZDsKISAgIGludCBvbGRfc2l6ZSA9IFdJTkRPV19UT1RBTF9TSVpFICh3LCB3 aWR0aF9wKTsKICAKICAgIHNpemUgPSBtYXggKDAsIHNpemUpOwogIAohICAgLyogRGVsZXRl IFdJTkRPVyBpZiBpdCdzIHRvbyBzbWFsbC4gICovCiEgICBpZiAobm9kZWxldGVfcCAhPSAx ICYmICFOSUxQICh3LT5wYXJlbnQpCiEgICAgICAgJiYgc2l6ZSA8IHdpbmRvd19taW5fc2l6 ZV8xICh3LCB3aWR0aF9wLCBub2RlbGV0ZV9wID09IDIpKQogICAgICB7CiEgICAgICAgZGVs ZXRlX3dpbmRvdyAod2luZG93KTsKISAgICAgICByZXR1cm47CiAgICAgIH0KICAKICAgIC8q IFNldCByZWRpc3BsYXkgaGludHMuICAqLwoqKioqKioqKioqKioqKioKKioqIDMxMTcsMzEy NSAqKioqCiAgCSAgbGFzdF9jaGlsZCA9IGNoaWxkOwogIAl9CiAgCiEgICAgICAgY2hpbGRf c2l6ZSA9IFhJTlQgKHdpZHRoX3AgPyBjLT50b3RhbF9jb2xzIDogYy0+dG90YWxfbGluZXMp OwohICAgICAgIHNpemVfd2luZG93IChsYXN0X2NoaWxkLAohIAkJICAgc2l6ZSAtIG9sZF9z aXplICsgY2hpbGRfc2l6ZSwKICAJCSAgIHdpZHRoX3AsIG5vZGVsZXRlX3AsIGZpcnN0X29u bHksIGxhc3Rfb25seSk7CiAgICAgIH0KICAgIGVsc2UgaWYgKCFOSUxQICgqZm9yd2FyZCkg JiYgZmlyc3Rfb25seSkKLS0tIDMwOTgsMzEwNSAtLS0tCiAgCSAgbGFzdF9jaGlsZCA9IGNo aWxkOwogIAl9CiAgCiEgICAgICAgY2hpbGRfc2l6ZSA9IFdJTkRPV19UT1RBTF9TSVpFIChj LCB3aWR0aF9wKTsKISAgICAgICBzaXplX3dpbmRvdyAobGFzdF9jaGlsZCwgc2l6ZSAtIG9s ZF9zaXplICsgY2hpbGRfc2l6ZSwKICAJCSAgIHdpZHRoX3AsIG5vZGVsZXRlX3AsIGZpcnN0 X29ubHksIGxhc3Rfb25seSk7CiAgICAgIH0KICAgIGVsc2UgaWYgKCFOSUxQICgqZm9yd2Fy ZCkgJiYgZmlyc3Rfb25seSkKKioqKioqKioqKioqKioqCioqKiAzMTM1LDMxNDMgKioqKgog ICAgICAgIGVsc2UKICAJYy0+dG9wX2xpbmUgPSB3LT50b3BfbGluZTsKICAKISAgICAgICBj aGlsZF9zaXplID0gWElOVCAod2lkdGhfcCA/IGMtPnRvdGFsX2NvbHMgOiBjLT50b3RhbF9s aW5lcyk7CiEgICAgICAgc2l6ZV93aW5kb3cgKGNoaWxkLAohIAkJICAgc2l6ZSAtIG9sZF9z aXplICsgY2hpbGRfc2l6ZSwKICAJCSAgIHdpZHRoX3AsIG5vZGVsZXRlX3AsIGZpcnN0X29u bHksIGxhc3Rfb25seSk7CiAgICAgIH0KICAgIGVsc2UgaWYgKCFOSUxQICgqZm9yd2FyZCkp Ci0tLSAzMTE1LDMxMjIgLS0tLQogICAgICAgIGVsc2UKICAJYy0+dG9wX2xpbmUgPSB3LT50 b3BfbGluZTsKICAKISAgICAgICBjaGlsZF9zaXplID0gV0lORE9XX1RPVEFMX1NJWkUgKGMs IHdpZHRoX3ApOwohICAgICAgIHNpemVfd2luZG93IChjaGlsZCwgc2l6ZSAtIG9sZF9zaXpl ICsgY2hpbGRfc2l6ZSwKICAJCSAgIHdpZHRoX3AsIG5vZGVsZXRlX3AsIGZpcnN0X29ubHks IGxhc3Rfb25seSk7CiAgICAgIH0KICAgIGVsc2UgaWYgKCFOSUxQICgqZm9yd2FyZCkpCioq KioqKioqKioqKioqKgoqKiogMzE1NSwzMTYxICoqKioKICAJICBpbnQgY2hpbGRfc2l6ZTsK ICAKICAJICBjID0gWFdJTkRPVyAoY2hpbGQpOwohIAkgIGNoaWxkX3NpemUgPSB3aWR0aF9w ID8gWElOVCAoYy0+dG90YWxfY29scykgOiBYSU5UIChjLT50b3RhbF9saW5lcyk7CiAgCSAg dG90YWwgKz0gY2hpbGRfc2l6ZTsKICAKICAJICBpZiAod2luZG93X2ZpeGVkX3NpemVfcCAo Yywgd2lkdGhfcCwgMCkpCi0tLSAzMTM0LDMxNDAgLS0tLQogIAkgIGludCBjaGlsZF9zaXpl OwogIAogIAkgIGMgPSBYV0lORE9XIChjaGlsZCk7CiEgCSAgY2hpbGRfc2l6ZSA9IFdJTkRP V19UT1RBTF9TSVpFIChjLCB3aWR0aF9wKTsKICAJICB0b3RhbCArPSBjaGlsZF9zaXplOwog IAogIAkgIGlmICh3aW5kb3dfZml4ZWRfc2l6ZV9wIChjLCB3aWR0aF9wLCAwKSkKKioqKioq KioqKioqKioqCioqKiAzMTc0LDMxODEgKioqKgogIAkgdmFsdWUgb2YgZXh0cmEgdGFrZXMg Y2FyZSBvZiByb3VuZGluZyBlcnJvcnMuICAqLwogICAgICAgIG4gPSByZXNpemVfZml4ZWRf cCA/IG5jaGlsZHJlbiA6IG5jaGlsZHJlbiAtIG5maXhlZDsKICAgICAgICBpZiAoc2l6ZSA8 IHRvdGFsICYmIG4gPiAxKQohICAgICAgICAgbmV3X3NpemVzID0gc2hyaW5rX3dpbmRvd3Mg KHRvdGFsLCBzaXplLCBuY2hpbGRyZW4sIG4sIG1pbl9zaXplLAohICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZV9maXhlZF9wLCAqZm9yd2FyZCwgd2lkdGhf cCk7CiAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICBlYWNoID0gKHNpemUg LSB0b3RhbCkgLyBuOwotLS0gMzE1MywzMTYxIC0tLS0KICAJIHZhbHVlIG9mIGV4dHJhIHRh a2VzIGNhcmUgb2Ygcm91bmRpbmcgZXJyb3JzLiAgKi8KICAgICAgICBuID0gcmVzaXplX2Zp eGVkX3AgPyBuY2hpbGRyZW4gOiBuY2hpbGRyZW4gLSBuZml4ZWQ7CiAgICAgICAgaWYgKHNp emUgPCB0b3RhbCAmJiBuID4gMSkKISAgICAgICAgIG5ld19zaXplcyA9IHNocmlua193aW5k b3dzICh0b3RhbCwgc2l6ZSwgbmNoaWxkcmVuLCBuLAohICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlc2l6ZV9maXhlZF9wLCAqZm9yd2FyZCwgd2lkdGhfcCwKISAJ CQkJICAgIG5vZGVsZXRlX3AgPT0gMik7CiAgICAgICAgZWxzZQogICAgICAgICAgewogICAg ICAgICAgICBlYWNoID0gKHNpemUgLSB0b3RhbCkgLyBuOwoqKioqKioqKioqKioqKioKKioq IDMxOTAsMzE5NiAqKioqCiAgCSAgaW50IG5ld19zaXplLCBvbGRfc2l6ZTsKICAKICAJICBj ID0gWFdJTkRPVyAoY2hpbGQpOwohIAkgIG9sZF9zaXplID0gd2lkdGhfcCA/IFhGQVNUSU5U IChjLT50b3RhbF9jb2xzKSA6IFhGQVNUSU5UIChjLT50b3RhbF9saW5lcyk7CiAgCSAgbmV3 X3NpemUgPSBvbGRfc2l6ZTsKICAKICAJICAvKiBUaGUgdG9wIG9yIGxlZnQgZWRnZSBwb3Np dGlvbiBvZiB0aGlzIGNoaWxkIGVxdWFscyB0aGUKLS0tIDMxNzAsMzE3NiAtLS0tCiAgCSAg aW50IG5ld19zaXplLCBvbGRfc2l6ZTsKICAKICAJICBjID0gWFdJTkRPVyAoY2hpbGQpOwoh IAkgIG9sZF9zaXplID0gV0lORE9XX1RPVEFMX1NJWkUgKGMsIHdpZHRoX3ApOwogIAkgIG5l d19zaXplID0gb2xkX3NpemU7CiAgCiAgCSAgLyogVGhlIHRvcCBvciBsZWZ0IGVkZ2UgcG9z aXRpb24gb2YgdGhpcyBjaGlsZCBlcXVhbHMgdGhlCioqKioqKioqKioqKioqKgoqKiogMzIw NywzMjEzICoqKioKICAJICAgICAgZXh0cmEgPSAwOwogIAkgICAgfQogIAohIAkgIC8qIFNl dCBuZXcgaGVpZ2h0LiAgTm90ZSB0aGF0IHNpemVfd2luZG93IGFsc28gcHJvcGFnYXRlcwog IAkgICAgIGVkZ2UgcG9zaXRpb25zIHRvIGNoaWxkcmVuLCBzbyBpdCdzIG5vdCBhIG5vLW9w IGlmIHdlCiAgCSAgICAgZGlkbid0IGNoYW5nZSB0aGUgY2hpbGQncyBzaXplLiAgKi8KICAJ ICBzaXplX3dpbmRvdyAoY2hpbGQsIG5ld19zaXplLCB3aWR0aF9wLCAxLCBmaXJzdF9vbmx5 LCBsYXN0X29ubHkpOwotLS0gMzE4NywzMTkzIC0tLS0KICAJICAgICAgZXh0cmEgPSAwOwog IAkgICAgfQogIAohIAkgIC8qIFNldCBuZXcgc2l6ZS4gIE5vdGUgdGhhdCBzaXplX3dpbmRv dyBhbHNvIHByb3BhZ2F0ZXMKICAJICAgICBlZGdlIHBvc2l0aW9ucyB0byBjaGlsZHJlbiwg c28gaXQncyBub3QgYSBuby1vcCBpZiB3ZQogIAkgICAgIGRpZG4ndCBjaGFuZ2UgdGhlIGNo aWxkJ3Mgc2l6ZS4gICovCiAgCSAgc2l6ZV93aW5kb3cgKGNoaWxkLCBuZXdfc2l6ZSwgd2lk dGhfcCwgMSwgZmlyc3Rfb25seSwgbGFzdF9vbmx5KTsKKioqKioqKioqKioqKioqCioqKiAz MjIzLDMyNDMgKioqKgogICAgICAgIHhhc3NlcnQgKHNpemUgPT0gbGFzdF9wb3MgLSBmaXJz dF9wb3MpOwogIAogICAgICAgIC8qIE5vdyBkZWxldGUgYW55IGNoaWxkcmVuIHRoYXQgYmVj YW1lIHRvbyBzbWFsbC4gICovCiEgICAgICAgaWYgKCFub2RlbGV0ZV9wKQogIAlmb3IgKGNo aWxkID0gKmZvcndhcmQ7ICFOSUxQIChjaGlsZCk7IGNoaWxkID0gYy0+bmV4dCkKICAJICB7 CiAgCSAgICBpbnQgY2hpbGRfc2l6ZTsKICAJICAgIGMgPSBYV0lORE9XIChjaGlsZCk7CiEg CSAgICBjaGlsZF9zaXplID0gd2lkdGhfcCA/IFhJTlQgKGMtPnRvdGFsX2NvbHMpIDogWElO VCAoYy0+dG90YWxfbGluZXMpOwohIAkgICAgc2l6ZV93aW5kb3cgKGNoaWxkLCBjaGlsZF9z aXplLCB3aWR0aF9wLCAyLCBmaXJzdF9vbmx5LCBsYXN0X29ubHkpOwogIAkgIH0KICAgICAg fQogIH0KICAKICAvKiBTZXQgV0lORE9XJ3MgaGVpZ2h0IHRvIEhFSUdIVCwgYW5kIHJlY3Vy c2l2ZWx5IGNoYW5nZSB0aGUgaGVpZ2h0IG9mCiEgICAgV0lORE9XJ3MgY2hpbGRyZW4uICBO T0RFTEVURSBub24temVybyBtZWFucyBkb24ndCBkZWxldGUgd2luZG93cwohICAgIHRoYXQg YmVjb21lIHRvbyBzbWFsbCBpbiB0aGUgcHJvY2Vzcy4gIChUaGUgY2FsbGVyIHNob3VsZCBj aGVjawohICAgIGxhdGVyIGFuZCBkbyBzbyBpZiBhcHByb3ByaWF0ZS4pICAqLwogIAogIHZv aWQKICBzZXRfd2luZG93X2hlaWdodCAod2luZG93LCBoZWlnaHQsIG5vZGVsZXRlKQotLS0g MzIwMywzMjI4IC0tLS0KICAgICAgICB4YXNzZXJ0IChzaXplID09IGxhc3RfcG9zIC0gZmly c3RfcG9zKTsKICAKICAgICAgICAvKiBOb3cgZGVsZXRlIGFueSBjaGlsZHJlbiB0aGF0IGJl Y2FtZSB0b28gc21hbGwuICAqLwohICAgICAgIGlmIChub2RlbGV0ZV9wICE9IDEpCiAgCWZv ciAoY2hpbGQgPSAqZm9yd2FyZDsgIU5JTFAgKGNoaWxkKTsgY2hpbGQgPSBjLT5uZXh0KQog IAkgIHsKICAJICAgIGludCBjaGlsZF9zaXplOworIAogIAkgICAgYyA9IFhXSU5ET1cgKGNo aWxkKTsKISAJICAgIGNoaWxkX3NpemUgPSBXSU5ET1dfVE9UQUxfU0laRSAoYywgd2lkdGhf cCk7CiEgCSAgICBzaXplX3dpbmRvdyAoY2hpbGQsIGNoaWxkX3NpemUsIHdpZHRoX3AsIG5v ZGVsZXRlX3AsCiEgCQkJIGZpcnN0X29ubHksIGxhc3Rfb25seSk7CiAgCSAgfQogICAgICB9 CiAgfQogIAogIC8qIFNldCBXSU5ET1cncyBoZWlnaHQgdG8gSEVJR0hULCBhbmQgcmVjdXJz aXZlbHkgY2hhbmdlIHRoZSBoZWlnaHQgb2YKISAgICBXSU5ET1cncyBjaGlsZHJlbi4gIE5P REVMRVRFIHplcm8gbWVhbnMgd2luZG93cyB0aGF0IGhhdmUgYmVjb21lCiEgICAgc21hbGxl ciB0aGFuIHdpbmRvdy1taW4taGVpZ2h0IGluIHRoZSBwcm9jZXNzIG1heSBiZSBkZWxldGVk LgohICAgIE5PREVMRVRFIDEgbWVhbnMgbmV2ZXIgZGVsZXRlIHdpbmRvd3MgdGhhdCBiZWNv bWUgdG9vIHNtYWxsIGluIHRoZQohICAgIHByb2Nlc3MuICAoVGhlIGNhbGxlciBzaG91bGQg Y2hlY2sgbGF0ZXIgYW5kIGRvIHNvIGlmIGFwcHJvcHJpYXRlLikKISAgICBOT0RFTEVURSAy IG1lYW5zIGRlbGV0ZSBvbmx5IHdpbmRvd3MgdGhhdCBoYXZlIGJlY29tZSB0b28gc21hbGwg dG8gYmUKISAgICBkaXNwbGF5ZWQgY29ycmVjdGx5LiAgKi8KICAKICB2b2lkCiAgc2V0X3dp bmRvd19oZWlnaHQgKHdpbmRvdywgaGVpZ2h0LCBub2RlbGV0ZSkKKioqKioqKioqKioqKioq CioqKiAzMjQ4LDMyNTggKioqKgogICAgc2l6ZV93aW5kb3cgKHdpbmRvdywgaGVpZ2h0LCAw LCBub2RlbGV0ZSwgMCwgMCk7CiAgfQogIAotIAogIC8qIFNldCBXSU5ET1cncyB3aWR0aCB0 byBXSURUSCwgYW5kIHJlY3Vyc2l2ZWx5IGNoYW5nZSB0aGUgd2lkdGggb2YKISAgICBXSU5E T1cncyBjaGlsZHJlbi4gIE5PREVMRVRFIG5vbi16ZXJvIG1lYW5zIGRvbid0IGRlbGV0ZSB3 aW5kb3dzCiEgICAgdGhhdCBiZWNvbWUgdG9vIHNtYWxsIGluIHRoZSBwcm9jZXNzLiAgKFRo ZSBjYWxsZXIgc2hvdWxkIGNoZWNrCiEgICAgbGF0ZXIgYW5kIGRvIHNvIGlmIGFwcHJvcHJp YXRlLikgICovCiAgCiAgdm9pZAogIHNldF93aW5kb3dfd2lkdGggKHdpbmRvdywgd2lkdGgs IG5vZGVsZXRlKQotLS0gMzIzMywzMjQ1IC0tLS0KICAgIHNpemVfd2luZG93ICh3aW5kb3cs IGhlaWdodCwgMCwgbm9kZWxldGUsIDAsIDApOwogIH0KICAKICAvKiBTZXQgV0lORE9XJ3Mg d2lkdGggdG8gV0lEVEgsIGFuZCByZWN1cnNpdmVseSBjaGFuZ2UgdGhlIHdpZHRoIG9mCiEg ICAgV0lORE9XJ3MgY2hpbGRyZW4uICBOT0RFTEVURSB6ZXJvIG1lYW5zIHdpbmRvd3MgdGhh dCBoYXZlIGJlY29tZQohICAgIHNtYWxsZXIgdGhhbiB3aW5kb3ctbWluLXdpZHRoIGluIHRo ZSBwcm9jZXNzIG1heSBiZSBkZWxldGVkLgohICAgIE5PREVMRVRFIDEgbWVhbnMgbmV2ZXIg ZGVsZXRlIHdpbmRvd3MgdGhhdCBiZWNvbWUgdG9vIHNtYWxsIGluIHRoZQohICAgIHByb2Nl c3MuICAoVGhlIGNhbGxlciBzaG91bGQgY2hlY2sgbGF0ZXIgYW5kIGRvIHNvIGlmIGFwcHJv cHJpYXRlLikKISAgICBOT0RFTEVURSAyIG1lYW5zIGRlbGV0ZSBvbmx5IHdpbmRvd3MgdGhh dCBoYXZlIGJlY29tZSB0b28gc21hbGwgdG8gYmUKISAgICBkaXNwbGF5ZWQgY29ycmVjdGx5 LiAgKi8KICAKICB2b2lkCiAgc2V0X3dpbmRvd193aWR0aCAod2luZG93LCB3aWR0aCwgbm9k ZWxldGUpCioqKioqKioqKioqKioqKgoqKiogMzM1OSwzMzY1ICoqKioKICAgICAgfQogICAg ICAgIH0KICAgIH0KISAgIAogICAgcnVuX2Z1bnMgKGdsb2JhbF93Y2NoKTsKICAgIHVuYmlu ZF90byAoY291bnQsIFFuaWwpOwogIH0KLS0tIDMzNDYsMzM1MiAtLS0tCiAgICAgIH0KICAg ICAgICB9CiAgICB9CiEgCiAgICBydW5fZnVucyAoZ2xvYmFsX3djY2gpOwogICAgdW5iaW5k X3RvIChjb3VudCwgUW5pbCk7CiAgfQoqKioqKioqKioqKioqKioKKioqIDM4NjMsMzg2OSAq KioqCiAgCSAgICAmJiAod2luZG93X2hlaWdodCAod2luZG93KSA+PSBzcGxpdF9oZWlnaHRf dGhyZXNob2xkCiAgCQl8fCAoTklMUCAoWFdJTkRPVyAod2luZG93KS0+cGFyZW50KSkpCiAg CSAgICAmJiAod2luZG93X2hlaWdodCAod2luZG93KQohIAkJPj0gKDIgKiB3aW5kb3dfbWlu X3NpemVfMiAoWFdJTkRPVyAod2luZG93KSwgMCkpKSkKICAJICB3aW5kb3cgPSBGc3BsaXRf d2luZG93ICh3aW5kb3csIFFuaWwsIFFuaWwpOwogICAgICAgIGVsc2UKICAJewotLS0gMzg1 MCwzODU2IC0tLS0KICAJICAgICYmICh3aW5kb3dfaGVpZ2h0ICh3aW5kb3cpID49IHNwbGl0 X2hlaWdodF90aHJlc2hvbGQKICAJCXx8IChOSUxQIChYV0lORE9XICh3aW5kb3cpLT5wYXJl bnQpKSkKICAJICAgICYmICh3aW5kb3dfaGVpZ2h0ICh3aW5kb3cpCiEgCQk+PSAoMiAqIHdp bmRvd19taW5fc2l6ZV8yIChYV0lORE9XICh3aW5kb3cpLCAwLCAwKSkpKQogIAkgIHdpbmRv dyA9IEZzcGxpdF93aW5kb3cgKHdpbmRvdywgUW5pbCwgUW5pbCk7CiAgICAgICAgZWxzZQog IAl7CioqKioqKioqKioqKioqKgoqKiogMzg3OCwzODg0ICoqKioKICAJCSAgICYmIHdpbmRv d19oZWlnaHQgKHdpbmRvdykgPj0gc3BsaXRfaGVpZ2h0X3RocmVzaG9sZCkKICAJCSAgfHwg KE5JTFAgKFhXSU5ET1cgKHdpbmRvdyktPnBhcmVudCkpKQogIAkgICAgICAmJiAod2luZG93 X2hlaWdodCAod2luZG93KQohIAkJICA+PSAoMiAqIHdpbmRvd19taW5fc2l6ZV8yIChYV0lO RE9XICh3aW5kb3cpLCAwKSkpKQogIAkgICAgd2luZG93ID0gRnNwbGl0X3dpbmRvdyAod2lu ZG93LCBRbmlsLCBRbmlsKTsKICAJICBlbHNlCiAgCSAgICB3aW5kb3cgPSBGZ2V0X2xydV93 aW5kb3cgKGZyYW1lcywgUW5pbCk7Ci0tLSAzODY1LDM4NzEgLS0tLQogIAkJICAgJiYgd2lu ZG93X2hlaWdodCAod2luZG93KSA+PSBzcGxpdF9oZWlnaHRfdGhyZXNob2xkKQogIAkJICB8 fCAoTklMUCAoWFdJTkRPVyAod2luZG93KS0+cGFyZW50KSkpCiAgCSAgICAgICYmICh3aW5k b3dfaGVpZ2h0ICh3aW5kb3cpCiEgCQkgID49ICgyICogd2luZG93X21pbl9zaXplXzIgKFhX SU5ET1cgKHdpbmRvdyksIDAsIDApKSkpCiAgCSAgICB3aW5kb3cgPSBGc3BsaXRfd2luZG93 ICh3aW5kb3csIFFuaWwsIFFuaWwpOwogIAkgIGVsc2UKICAJICAgIHdpbmRvdyA9IEZnZXRf bHJ1X3dpbmRvdyAoZnJhbWVzLCBRbmlsKTsKKioqKioqKioqKioqKioqCioqKiA0MTI0LDQx MzUgKioqKgogICAgZWxzZSBpZiAod2luZG93X2ZpeGVkX3NpemVfcCAobywgIU5JTFAgKGhv cmZsYWcpLCAwKSkKICAgICAgZXJyb3IgKCJBdHRlbXB0IHRvIHNwbGl0IGZpeGVkLXNpemUg d2luZG93Iik7CiAgCi0gICBjaGVja19taW5fd2luZG93X3NpemVzICgpOwotIAogICAgaWYg KE5JTFAgKGhvcmZsYWcpKQogICAgICB7CiEgICAgICAgaW50IHdpbmRvd19zYWZlX2hlaWdo dCA9IHdpbmRvd19taW5fc2l6ZV8yIChvLCAwKTsKISAgICAgICAKICAgICAgICBpZiAoc2l6 ZV9pbnQgPCB3aW5kb3dfc2FmZV9oZWlnaHQpCiAgCWVycm9yICgiV2luZG93IGhlaWdodCAl ZCB0b28gc21hbGwgKGFmdGVyIHNwbGl0dGluZykiLCBzaXplX2ludCk7CiAgICAgICAgaWYg KHNpemVfaW50ICsgd2luZG93X3NhZmVfaGVpZ2h0ID4gWEZBU1RJTlQgKG8tPnRvdGFsX2xp bmVzKSkKLS0tIDQxMTEsNDEyMCAtLS0tCiAgICBlbHNlIGlmICh3aW5kb3dfZml4ZWRfc2l6 ZV9wIChvLCAhTklMUCAoaG9yZmxhZyksIDApKQogICAgICBlcnJvciAoIkF0dGVtcHQgdG8g c3BsaXQgZml4ZWQtc2l6ZSB3aW5kb3ciKTsKICAKICAgIGlmIChOSUxQIChob3JmbGFnKSkK ICAgICAgewohICAgICAgIGludCB3aW5kb3dfc2FmZV9oZWlnaHQgPSB3aW5kb3dfbWluX3Np emVfMiAobywgMCwgMCk7CiEgCiAgICAgICAgaWYgKHNpemVfaW50IDwgd2luZG93X3NhZmVf aGVpZ2h0KQogIAllcnJvciAoIldpbmRvdyBoZWlnaHQgJWQgdG9vIHNtYWxsIChhZnRlciBz cGxpdHRpbmcpIiwgc2l6ZV9pbnQpOwogICAgICAgIGlmIChzaXplX2ludCArIHdpbmRvd19z YWZlX2hlaWdodCA+IFhGQVNUSU5UIChvLT50b3RhbF9saW5lcykpCioqKioqKioqKioqKioq KgoqKiogNDE0NSw0MTUyICoqKioKICAgICAgfQogICAgZWxzZQogICAgICB7CiEgICAgICAg aW50IHdpbmRvd19zYWZlX3dpZHRoID0gd2luZG93X21pbl9zaXplXzIgKG8sIDEpOwohICAg ICAgIAogICAgICAgIGlmIChzaXplX2ludCA8IHdpbmRvd19zYWZlX3dpZHRoKQogIAllcnJv ciAoIldpbmRvdyB3aWR0aCAlZCB0b28gc21hbGwgKGFmdGVyIHNwbGl0dGluZykiLCBzaXpl X2ludCk7CiAgICAgICAgaWYgKHNpemVfaW50ICsgd2luZG93X3NhZmVfd2lkdGggPiBYRkFT VElOVCAoby0+dG90YWxfY29scykpCi0tLSA0MTMwLDQxMzcgLS0tLQogICAgICB9CiAgICBl bHNlCiAgICAgIHsKISAgICAgICBpbnQgd2luZG93X3NhZmVfd2lkdGggPSB3aW5kb3dfbWlu X3NpemVfMiAobywgMSwgMCk7CiEgCiAgICAgICAgaWYgKHNpemVfaW50IDwgd2luZG93X3Nh ZmVfd2lkdGgpCiAgCWVycm9yICgiV2luZG93IHdpZHRoICVkIHRvbyBzbWFsbCAoYWZ0ZXIg c3BsaXR0aW5nKSIsIHNpemVfaW50KTsKICAgICAgICBpZiAoc2l6ZV9pbnQgKyB3aW5kb3df c2FmZV93aWR0aCA+IFhGQVNUSU5UIChvLT50b3RhbF9jb2xzKSkKKioqKioqKioqKioqKioq CioqKiA0Mjc3LDQyODggKioqKgogICAgKihob3Jpel9mbGFnID8gJihYV0lORE9XICh3KS0+ dG90YWxfY29scykgOiAmKFhXSU5ET1cgKHcpLT50b3RhbF9saW5lcykpCiAgCiAgCiEgLyog RW5sYXJnZSBXSU5ET1cgYnkgREVMVEEuCiEgICAgSE9SSVpfRkxBRyBub256ZXJvIG1lYW5z IGVubGFyZ2UgaXQgaG9yaXpvbnRhbGx5OwohICAgIHplcm8gbWVhbnMgZG8gaXQgdmVydGlj YWxseS4KICAKICAgICBTaWJsaW5ncyBvZiB0aGUgc2VsZWN0ZWQgd2luZG93IGFyZSByZXNp emVkIHRvIGZ1bGZpbGwgdGhlIHNpemUKISAgICByZXF1ZXN0LiAgSWYgdGhleSBiZWNvbWUg dG9vIHNtYWxsIGluIHRoZSBwcm9jZXNzLCB0aGV5IHdpbGwgYmUKICAgICBkZWxldGVkLiAg Ki8KICAKICBzdGF0aWMgdm9pZAotLS0gNDI2Miw0MjcyIC0tLS0KICAgICooaG9yaXpfZmxh ZyA/ICYoWFdJTkRPVyAodyktPnRvdGFsX2NvbHMpIDogJihYV0lORE9XICh3KS0+dG90YWxf bGluZXMpKQogIAogIAohIC8qIEVubGFyZ2UgV0lORE9XIGJ5IERFTFRBLiAgSE9SSVpfRkxB RyBub256ZXJvIG1lYW5zIGVubGFyZ2UgaXQKISAgICBob3Jpem9udGFsbHk7IHplcm8gbWVh bnMgZG8gaXQgdmVydGljYWxseS4KICAKICAgICBTaWJsaW5ncyBvZiB0aGUgc2VsZWN0ZWQg d2luZG93IGFyZSByZXNpemVkIHRvIGZ1bGZpbGwgdGhlIHNpemUKISAgICByZXF1ZXN0LiAg SWYgdGhleSBiZWNvbWUgdG9vIHNtYWxsIGluIHRoZSBwcm9jZXNzLCB0aGV5IG1heSBiZQog ICAgIGRlbGV0ZWQuICAqLwogIAogIHN0YXRpYyB2b2lkCioqKioqKioqKioqKioqKgoqKiog NDI5OSw0MzA4ICoqKioKICAgIHZvaWQgKCpzZXRzaXplZnVuKSBQXyAoKExpc3BfT2JqZWN0 LCBpbnQsIGludCkpCiAgICAgID0gKGhvcml6X2ZsYWcgPyBzZXRfd2luZG93X3dpZHRoIDog c2V0X3dpbmRvd19oZWlnaHQpOwogIAotICAgLyogQ2hlY2sgdmFsdWVzIG9mIHdpbmRvd19t aW5fd2lkdGggYW5kIHdpbmRvd19taW5faGVpZ2h0IGZvcgotICAgICAgdmFsaWRpdHkuICAq LwotICAgY2hlY2tfbWluX3dpbmRvd19zaXplcyAoKTsKLSAKICAgIC8qIEdpdmUgdXAgaWYg dGhpcyB3aW5kb3cgY2Fubm90IGJlIHJlc2l6ZWQuICAqLwogICAgaWYgKHdpbmRvd19maXhl ZF9zaXplX3AgKFhXSU5ET1cgKHdpbmRvdyksIGhvcml6X2ZsYWcsIDEpKQogICAgICBlcnJv ciAoIldpbmRvdyBpcyBub3QgcmVzaXphYmxlIik7Ci0tLSA0MjgzLDQyODggLS0tLQoqKioq KioqKioqKioqKioKKioqIDQzMzksNDM0OSAqKioqCiAgCQkvKiBUaGlzIGlzIGEgbWFpbiB3 aW5kb3cgZm9sbG93ZWQgYnkgYSBtaW5pYnVmZmVyLiAgKi8KICAJCTogIU5JTFAgKHAtPm5l eHQpID8gKCgqc2l6ZWZ1bikgKHAtPm5leHQpCiAgCQkJCSAgICAgLSB3aW5kb3dfbWluX3Np emUgKFhXSU5ET1cgKHAtPm5leHQpLAohIAkJCQkJCQlob3Jpel9mbGFnLCAwLCAwKSkKICAJ CS8qIFRoaXMgaXMgYSBtaW5pYnVmZmVyIGZvbGxvd2luZyBhIG1haW4gd2luZG93LiAgKi8K ICAJCTogIU5JTFAgKHAtPnByZXYpID8gKCgqc2l6ZWZ1bikgKHAtPnByZXYpCiAgCQkJCSAg ICAgLSB3aW5kb3dfbWluX3NpemUgKFhXSU5ET1cgKHAtPnByZXYpLAohIAkJCQkJCQlob3Jp el9mbGFnLCAwLCAwKSkKICAJCS8qIFRoaXMgaXMgYSBmcmFtZSB3aXRoIG9ubHkgb25lIHdp bmRvdywgYSBtaW5pYnVmZmVyLW9ubHkKICAJCSAgIG9yIGEgbWluaWJ1ZmZlcmxlc3MgZnJh bWUuICAqLwogIAkJOiAoZGVsdGEgPSAwKSk7Ci0tLSA0MzE5LDQzMjkgLS0tLQogIAkJLyog VGhpcyBpcyBhIG1haW4gd2luZG93IGZvbGxvd2VkIGJ5IGEgbWluaWJ1ZmZlci4gICovCiAg CQk6ICFOSUxQIChwLT5uZXh0KSA/ICgoKnNpemVmdW4pIChwLT5uZXh0KQogIAkJCQkgICAg IC0gd2luZG93X21pbl9zaXplIChYV0lORE9XIChwLT5uZXh0KSwKISAJCQkJCQkJaG9yaXpf ZmxhZywgMCwgMCwgMCkpCiAgCQkvKiBUaGlzIGlzIGEgbWluaWJ1ZmZlciBmb2xsb3dpbmcg YSBtYWluIHdpbmRvdy4gICovCiAgCQk6ICFOSUxQIChwLT5wcmV2KSA/ICgoKnNpemVmdW4p IChwLT5wcmV2KQogIAkJCQkgICAgIC0gd2luZG93X21pbl9zaXplIChYV0lORE9XIChwLT5w cmV2KSwKISAJCQkJCQkJaG9yaXpfZmxhZywgMCwgMCwgMCkpCiAgCQkvKiBUaGlzIGlzIGEg ZnJhbWUgd2l0aCBvbmx5IG9uZSB3aW5kb3csIGEgbWluaWJ1ZmZlci1vbmx5CiAgCQkgICBv ciBhIG1pbmlidWZmZXJsZXNzIGZyYW1lLiAgKi8KICAJCTogKGRlbHRhID0gMCkpOwoqKioq KioqKioqKioqKioKKioqIDQzNTUsNDM2MSAqKioqCiAgICAgICAgZGVsdGEgPSBtYXhkZWx0 YTsKICAgIH0KICAKISAgIGlmIChYSU5UICgqc2l6ZXApICsgZGVsdGEgPCB3aW5kb3dfbWlu X3NpemUgKFhXSU5ET1cgKHdpbmRvdyksIGhvcml6X2ZsYWcsIDAsIDApKQogICAgICB7CiAg ICAgICAgZGVsZXRlX3dpbmRvdyAod2luZG93KTsKICAgICAgICByZXR1cm47Ci0tLSA0MzM1 LDQzNDIgLS0tLQogICAgICAgIGRlbHRhID0gbWF4ZGVsdGE7CiAgICB9CiAgCiEgICBpZiAo WElOVCAoKnNpemVwKSArIGRlbHRhIDwgd2luZG93X21pbl9zaXplIChYV0lORE9XICh3aW5k b3cpLAohIAkJCQkJICAgICAgIGhvcml6X2ZsYWcsIDAsIDAsIDApKQogICAgICB7CiAgICAg ICAgZGVsZXRlX3dpbmRvdyAod2luZG93KTsKICAgICAgICByZXR1cm47CioqKioqKioqKioq KioqKgoqKiogNDM2OCw0Mzc3ICoqKioKICAgIG1heGltdW0gPSAwOwogICAgZm9yIChuZXh0 ID0gcC0+bmV4dDsgV0lORE9XUCAobmV4dCk7IG5leHQgPSBYV0lORE9XIChuZXh0KS0+bmV4 dCkKICAgICAgbWF4aW11bSArPSAoKnNpemVmdW4pIChuZXh0KSAtIHdpbmRvd19taW5fc2l6 ZSAoWFdJTkRPVyAobmV4dCksCiEgCQkJCQkJICAgIGhvcml6X2ZsYWcsIDAsIDApOwogICAg Zm9yIChwcmV2ID0gcC0+cHJldjsgV0lORE9XUCAocHJldik7IHByZXYgPSBYV0lORE9XIChw cmV2KS0+cHJldikKICAgICAgbWF4aW11bSArPSAoKnNpemVmdW4pIChwcmV2KSAtIHdpbmRv d19taW5fc2l6ZSAoWFdJTkRPVyAocHJldiksCiEgCQkJCQkJICAgIGhvcml6X2ZsYWcsIDAs IDApOwogIAogICAgLyogSWYgd2UgY2FuIGdldCBpdCBhbGwgZnJvbSB0aGVtIHdpdGhvdXQg ZGVsZXRpbmcgdGhlbSwgZG8gc28uICAqLwogICAgaWYgKGRlbHRhIDw9IG1heGltdW0pCi0t LSA0MzQ5LDQzNTggLS0tLQogICAgbWF4aW11bSA9IDA7CiAgICBmb3IgKG5leHQgPSBwLT5u ZXh0OyBXSU5ET1dQIChuZXh0KTsgbmV4dCA9IFhXSU5ET1cgKG5leHQpLT5uZXh0KQogICAg ICBtYXhpbXVtICs9ICgqc2l6ZWZ1bikgKG5leHQpIC0gd2luZG93X21pbl9zaXplIChYV0lO RE9XIChuZXh0KSwKISAJCQkJCQkgICAgaG9yaXpfZmxhZywgMCwgMCwgMCk7CiAgICBmb3Ig KHByZXYgPSBwLT5wcmV2OyBXSU5ET1dQIChwcmV2KTsgcHJldiA9IFhXSU5ET1cgKHByZXYp LT5wcmV2KQogICAgICBtYXhpbXVtICs9ICgqc2l6ZWZ1bikgKHByZXYpIC0gd2luZG93X21p bl9zaXplIChYV0lORE9XIChwcmV2KSwKISAJCQkJCQkgICAgaG9yaXpfZmxhZywgMCwgMCwg MCk7CiAgCiAgICAvKiBJZiB3ZSBjYW4gZ2V0IGl0IGFsbCBmcm9tIHRoZW0gd2l0aG91dCBk ZWxldGluZyB0aGVtLCBkbyBzby4gICovCiAgICBpZiAoZGVsdGEgPD0gbWF4aW11bSkKKioq KioqKioqKioqKioqCioqKiA0MzkyLDQzOTkgKioqKgogIAkgIGlmICghIE5JTFAgKG5leHQp KQogIAkgICAgewogIAkgICAgICBpbnQgdGhpc19vbmUgPSAoKCpzaXplZnVuKSAobmV4dCkK ISAJCQkgICAgICAtIHdpbmRvd19taW5fc2l6ZSAoWFdJTkRPVyAobmV4dCksCiEgCQkJCQkJ IGhvcml6X2ZsYWcsIDAsICZmaXhlZF9wKSk7CiAgCSAgICAgIGlmICghZml4ZWRfcCkKICAJ CXsKICAJCSAgaWYgKHRoaXNfb25lID4gZGVsdGEpCi0tLSA0MzczLDQzODAgLS0tLQogIAkg IGlmICghIE5JTFAgKG5leHQpKQogIAkgICAgewogIAkgICAgICBpbnQgdGhpc19vbmUgPSAo KCpzaXplZnVuKSAobmV4dCkKISAJCQkgICAgICAtIHdpbmRvd19taW5fc2l6ZSAoWFdJTkRP VyAobmV4dCksIGhvcml6X2ZsYWcsCiEgCQkJCQkJIDAsIDAsICZmaXhlZF9wKSk7CiAgCSAg ICAgIGlmICghZml4ZWRfcCkKICAJCXsKICAJCSAgaWYgKHRoaXNfb25lID4gZGVsdGEpCioq KioqKioqKioqKioqKgoqKiogNDQxNCw0NDIxICoqKioKICAJICBpZiAoISBOSUxQIChwcmV2 KSkKICAJICAgIHsKICAJICAgICAgaW50IHRoaXNfb25lID0gKCgqc2l6ZWZ1bikgKHByZXYp CiEgCQkJICAgICAgLSB3aW5kb3dfbWluX3NpemUgKFhXSU5ET1cgKHByZXYpLAohIAkJCQkJ CSBob3Jpel9mbGFnLCAwLCAmZml4ZWRfcCkpOwogIAkgICAgICBpZiAoIWZpeGVkX3ApCiAg CQl7CiAgCQkgIGlmICh0aGlzX29uZSA+IGRlbHRhKQotLS0gNDM5NSw0NDAyIC0tLS0KICAJ ICBpZiAoISBOSUxQIChwcmV2KSkKICAJICAgIHsKICAJICAgICAgaW50IHRoaXNfb25lID0g KCgqc2l6ZWZ1bikgKHByZXYpCiEgCQkJICAgICAgLSB3aW5kb3dfbWluX3NpemUgKFhXSU5E T1cgKHByZXYpLCBob3Jpel9mbGFnLAohIAkJCQkJCSAwLCAwLCAmZml4ZWRfcCkpOwogIAkg ICAgICBpZiAoIWZpeGVkX3ApCiAgCQl7CiAgCQkgIGlmICh0aGlzX29uZSA+IGRlbHRhKQoq KioqKioqKioqKioqKioKKioqIDQ0NzQsNDQ4MCAqKioqCiAgCiAgCSAgLyogRGVsZXRlIGFu eSBzaWJsaW5ncyB0aGF0IGNvbWUgYWZ0ZXIgV0lORE9XLgogIAkgICAgIE5vdGUgdGhhdCBp ZiBTVEFSVCBpcyBub3QgV0lORE9XLCB0aGVuIFdJTkRPVyBzdGlsbAohIAkgICAgIEZoYXMg c2libGluZ3MsIHNvIFdJTkRPVyBoYXMgbm90IHlldCByZXBsYWNlZCBpdHMgcGFyZW50LiAg Ki8KICAJICB0ZW0gPSBzdGFydDsKICAJICB3aGlsZSAoISBFUSAodGVtLCB3aW5kb3cpKQog IAkgICAgewotLS0gNDQ1NSw0NDYxIC0tLS0KICAKICAJICAvKiBEZWxldGUgYW55IHNpYmxp bmdzIHRoYXQgY29tZSBhZnRlciBXSU5ET1cuCiAgCSAgICAgTm90ZSB0aGF0IGlmIFNUQVJU IGlzIG5vdCBXSU5ET1csIHRoZW4gV0lORE9XIHN0aWxsCiEgCSAgICAgaGFzIHNpYmxpbmdz LCBzbyBXSU5ET1cgaGFzIG5vdCB5ZXQgcmVwbGFjZWQgaXRzIHBhcmVudC4gICovCiAgCSAg dGVtID0gc3RhcnQ7CiAgCSAgd2hpbGUgKCEgRVEgKHRlbSwgd2luZG93KSkKICAJICAgIHsK KioqKioqKioqKioqKioqCioqKiA0NTExLDQ1MTcgKioqKgogIAogIAkgICAgIFRoZSBudW1i ZXIgb2YgY2hpbGRyZW4gbiBlcXVhbHMgdGhlIG51bWJlciBvZiByZXNpemFibGUKICAJICAg ICBjaGlsZHJlbiBvZiB0aGlzIHdpbmRvdyArIDEgYmVjYXVzZSB3ZSBrbm93IHdpbmRvdyBp dHNlbGYKISAJICAgICBpcyByZXNpemFibGUgKG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIHNp Z25hbGxlZCBhbiBlcnJvcikuICAqLwogIAogIAkgIHN0cnVjdCB3aW5kb3cgKncgPSBYV0lO RE9XICh3aW5kb3cpOwogIAkgIExpc3BfT2JqZWN0IHM7Ci0tLSA0NDkyLDQ1MDIgLS0tLQog IAogIAkgICAgIFRoZSBudW1iZXIgb2YgY2hpbGRyZW4gbiBlcXVhbHMgdGhlIG51bWJlciBv ZiByZXNpemFibGUKICAJICAgICBjaGlsZHJlbiBvZiB0aGlzIHdpbmRvdyArIDEgYmVjYXVz ZSB3ZSBrbm93IHdpbmRvdyBpdHNlbGYKISAJICAgICBpcyByZXNpemFibGUgKG90aGVyd2lz ZSB3ZSB3b3VsZCBoYXZlIHNpZ25hbGxlZCBhbiBlcnJvcikuCiEgCiEgCSAgICAgVGhpcyBy ZWFzb25pbmcgaXMgbm90IGNvcnJlY3Qgd2hlbiBvdGhlciB3aW5kb3dzIGJlY29tZSB0b28K ISAJICAgICBzbWFsbCBhbmQgc2hyaW5rX3dpbmRvd3MgcmVmdXNlcyB0byBkZWxldGUgdGhl bS4gIEJlbG93IHdlCiEgCSAgICAgdXNlIHJlc2l6ZV9wcm9wb3J0aW9uYWxseSB0byB3b3Jr IGFyb3VuZCB0aGlzIHByb2JsZW0uICAqLwogIAogIAkgIHN0cnVjdCB3aW5kb3cgKncgPSBY V0lORE9XICh3aW5kb3cpOwogIAkgIExpc3BfT2JqZWN0IHM7CioqKioqKioqKioqKioqKgoq KiogNDUzMiw0NTQzICoqKioKICAJICAoKnNldHNpemVmdW4pICh3aW5kb3csIFhJTlQgKCpz aXplcCkgKyBkZWx0YTEsIDApOwogIAogIAkgIC8qIFNxdWVlemUgb3V0IGRlbHRhMSBsaW5l cyBvciBjb2x1bW5zIGZyb20gb3VyIHBhcmVudCwKISAJICAgICBzaHJpa2luZyB0aGlzIHdp bmRvdyBhbmQgc2libGluZ3MgcHJvcG9ydGlvbmF0ZWx5LgohIAkgICAgIFRoaXMgYnJpbmdz IHBhcmVudCBiYWNrIHRvIGNvcnJlY3Qgc2l6ZS4KISAJICAgICBEZWx0YTEgd2FzIGNhbGN1 bGF0ZWQgc28gdGhpcyBtYWtlcyB0aGlzIHdpbmRvdyB0aGUgZGVzaXJlZCBzaXplLAohIAkg ICAgIHRha2luZyBpdCBhbGwgb3V0IG9mIHRoZSBzaWJsaW5ncy4gICovCiAgCSAgKCpzZXRz aXplZnVuKSAocGFyZW50LCBvcGh0LCAwKTsKISAKICAJfQogICAgICB9CiAgCi0tLSA0NTE3 LDQ1MzMgLS0tLQogIAkgICgqc2V0c2l6ZWZ1bikgKHdpbmRvdywgWElOVCAoKnNpemVwKSAr IGRlbHRhMSwgMCk7CiAgCiAgCSAgLyogU3F1ZWV6ZSBvdXQgZGVsdGExIGxpbmVzIG9yIGNv bHVtbnMgZnJvbSBvdXIgcGFyZW50LAohIAkgICAgIHNocmlua2luZyB0aGlzIHdpbmRvdyBh bmQgc2libGluZ3MgcHJvcG9ydGlvbmF0ZWx5LiAgVGhpcwohIAkgICAgIGJyaW5ncyBwYXJl bnQgYmFjayB0byBjb3JyZWN0IHNpemUuICBEZWx0YTEgd2FzIGNhbGN1bGF0ZWQKISAJICAg ICBzbyB0aGlzIG1ha2VzIHRoaXMgd2luZG93IHRoZSBkZXNpcmVkIHNpemUsIHRha2luZyBp dCBhbGwKISAJICAgICBvdXQgb2YgdGhlIHNpYmxpbmdzLgohIAohIAkgICAgIFRlbXBvcmFy aWx5IHNldCByZXNpemVfcHJvcG9ydGlvbmFsbHkgdG8gUXQgdG8gYXNzdXJlIHRoYXQsCiEg CSAgICAgaWYgbmVjZXNzYXJ5LCBzaHJpbmtfd2luZG93cyBkZWxldGVzIHNtYWxsZXIgd2lu ZG93cyByYXRoZXIKISAJICAgICB0aGFuIHNocmluayB0aGlzIHdpbmRvdy4gICovCiEgCSAg dy0+cmVzaXplX3Byb3BvcnRpb25hbGx5ID0gUXQ7CiAgCSAgKCpzZXRzaXplZnVuKSAocGFy ZW50LCBvcGh0LCAwKTsKISAJICB3LT5yZXNpemVfcHJvcG9ydGlvbmFsbHkgPSBRbmlsOwog IAl9CiAgICAgIH0KICAKKioqKioqKioqKioqKioqCioqKiA0NTY3LDQ1NzYgKioqKgogICAg TGlzcF9PYmplY3Qgb2xkX2NvbmZpZyA9IEZjdXJyZW50X3dpbmRvd19jb25maWd1cmF0aW9u IChRbmlsKTsKICAgIGludCBkZWxjb3VudCA9IHdpbmRvd19kZWxldGlvbl9jb3VudDsKICAK LSAgIC8qIENoZWNrIHZhbHVlcyBvZiB3aW5kb3dfbWluX3dpZHRoIGFuZCB3aW5kb3dfbWlu X2hlaWdodCBmb3IKLSAgICAgIHZhbGlkaXR5LiAgKi8KLSAgIGNoZWNrX21pbl93aW5kb3df c2l6ZXMgKCk7Ci0gCiAgICBDSEVDS19XSU5ET1cgKHdpbmRvdyk7CiAgCiAgICAvKiBHaXZl IHVwIGlmIHRoaXMgd2luZG93IGNhbm5vdCBiZSByZXNpemVkLiAgKi8KLS0tIDQ1NTcsNDU2 MiAtLS0tCioqKioqKioqKioqKioqKgoqKiogNDYyNSw0NjMxICoqKioKICAKICAgICAgICAv KiBEb24ndCBtYWtlIHRoaXMgd2luZG93IHRvbyBzbWFsbC4gICovCiAgICAgICAgaWYgKFhJ TlQgKENVUlNJWkUgKHdpbmRvdykpICsgZGVsdGEKISAJICA8IHdpbmRvd19taW5fc2l6ZV8y IChYV0lORE9XICh3aW5kb3cpLCBob3Jpel9mbGFnKSkKICAJewogIAkgIEZzZXRfd2luZG93 X2NvbmZpZ3VyYXRpb24gKG9sZF9jb25maWcpOwogIAkgIGVycm9yICgiQ2Fubm90IGFkanVz dCB3aW5kb3cgc2l6ZSBhcyBzcGVjaWZpZWQiKTsKLS0tIDQ2MTEsNDYxNyAtLS0tCiAgCiAg ICAgICAgLyogRG9uJ3QgbWFrZSB0aGlzIHdpbmRvdyB0b28gc21hbGwuICAqLwogICAgICAg IGlmIChYSU5UIChDVVJTSVpFICh3aW5kb3cpKSArIGRlbHRhCiEgCSAgPCB3aW5kb3dfbWlu X3NpemVfMiAoWFdJTkRPVyAod2luZG93KSwgaG9yaXpfZmxhZywgMCkpCiAgCXsKICAJICBG c2V0X3dpbmRvd19jb25maWd1cmF0aW9uIChvbGRfY29uZmlnKTsKICAJICBlcnJvciAoIkNh bm5vdCBhZGp1c3Qgd2luZG93IHNpemUgYXMgc3BlY2lmaWVkIik7CioqKioqKioqKioqKioq KgoqKiogNDc3OCw0NzkwICoqKioKICAgICAgICBmb3IgKGNoaWxkID0gdy0+dmNoaWxkOyBX SU5ET1dQIChjaGlsZCk7IGNoaWxkID0gWFdJTkRPVyAoY2hpbGQpLT5uZXh0KQogIAlsYXN0 X2NoaWxkID0gY2hpbGQ7CiAgCiEgICAgICAgLyogQXNzaWduIG5ldyBoZWlnaHRzLiAgV2Ug bGVhdmUgb25seSBNSU5fU0FGRV9XSU5ET1dfSEVJR0hULiAgKi8KICAgICAgICBmb3IgKGNo aWxkID0gbGFzdF9jaGlsZDsgZGVsdGEgJiYgIU5JTFAgKGNoaWxkKTsgY2hpbGQgPSBjLT5w cmV2KQogIAl7CiAgCSAgaW50IHRoaXNfb25lOwogIAogIAkgIGMgPSBYV0lORE9XIChjaGls ZCk7CiEgCSAgdGhpc19vbmUgPSBYRkFTVElOVCAoYy0+dG90YWxfbGluZXMpIC0gTUlOX1NB RkVfV0lORE9XX0hFSUdIVDsKICAKICAJICBpZiAodGhpc19vbmUgPiBkZWx0YSkKICAJICAg IHRoaXNfb25lID0gZGVsdGE7Ci0tLSA0NzY0LDQ3NzYgLS0tLQogICAgICAgIGZvciAoY2hp bGQgPSB3LT52Y2hpbGQ7IFdJTkRPV1AgKGNoaWxkKTsgY2hpbGQgPSBYV0lORE9XIChjaGls ZCktPm5leHQpCiAgCWxhc3RfY2hpbGQgPSBjaGlsZDsKICAKISAgICAgICAvKiBTaXplIGNo aWxkcmVuIGRvd24gdG8gdGhlaXIgc2FmZSBoZWlnaHRzLiAgKi8KICAgICAgICBmb3IgKGNo aWxkID0gbGFzdF9jaGlsZDsgZGVsdGEgJiYgIU5JTFAgKGNoaWxkKTsgY2hpbGQgPSBjLT5w cmV2KQogIAl7CiAgCSAgaW50IHRoaXNfb25lOwogIAogIAkgIGMgPSBYV0lORE9XIChjaGls ZCk7CiEgCSAgdGhpc19vbmUgPSBYRkFTVElOVCAoYy0+dG90YWxfbGluZXMpIC0gd2luZG93 X21pbl9zaXplXzEgKGMsIDAsIDEpOwogIAogIAkgIGlmICh0aGlzX29uZSA+IGRlbHRhKQog IAkgICAgdGhpc19vbmUgPSBkZWx0YTsKKioqKioqKioqKioqKioqCioqKiA0ODg3LDQ5MDIg KioqKgogICAgeGFzc2VydCAoTUlOSV9XSU5ET1dfUCAodykpOwogICAgeGFzc2VydCAoZGVs dGEgPj0gMCk7CiAgCi0gICAvKiBDaGVjayB2YWx1ZXMgb2Ygd2luZG93X21pbl93aWR0aCBh bmQgd2luZG93X21pbl9oZWlnaHQgZm9yCi0gICAgICB2YWxpZGl0eS4gICovCi0gICBjaGVj a19taW5fd2luZG93X3NpemVzICgpOwotIAogICAgLyogQ29tcHV0ZSBob3cgbXVjaCB3ZSBj YW4gZW5sYXJnZSB0aGUgbWluaS13aW5kb3cgd2l0aG91dCBkZWxldGluZwogICAgICAgb3Ro ZXIgd2luZG93cy4gICovCiAgICByb290ID0gWFdJTkRPVyAoRlJBTUVfUk9PVF9XSU5ET1cg KGYpKTsKICAgIGlmIChkZWx0YSkKICAgICAgewohICAgICAgIGludCBtaW5faGVpZ2h0ID0g d2luZG93X21pbl9zaXplIChyb290LCAwLCAwLCAwKTsKICAgICAgICBpZiAoWEZBU1RJTlQg KHJvb3QtPnRvdGFsX2xpbmVzKSAtIGRlbHRhIDwgbWluX2hlaWdodCkKICAJLyogTm90ZSB0 aGF0IHRoZSByb290IHdpbmRvdyBtYXkgYWxyZWFkeSBiZSBzbWFsbGVyIHRoYW4KICAJICAg bWluX2hlaWdodC4gICovCi0tLSA0ODczLDQ4ODQgLS0tLQogICAgeGFzc2VydCAoTUlOSV9X SU5ET1dfUCAodykpOwogICAgeGFzc2VydCAoZGVsdGEgPj0gMCk7CiAgCiAgICAvKiBDb21w dXRlIGhvdyBtdWNoIHdlIGNhbiBlbmxhcmdlIHRoZSBtaW5pLXdpbmRvdyB3aXRob3V0IGRl bGV0aW5nCiAgICAgICBvdGhlciB3aW5kb3dzLiAgKi8KICAgIHJvb3QgPSBYV0lORE9XIChG UkFNRV9ST09UX1dJTkRPVyAoZikpOwogICAgaWYgKGRlbHRhKQogICAgICB7CiEgICAgICAg aW50IG1pbl9oZWlnaHQgPSB3aW5kb3dfbWluX3NpemUgKHJvb3QsIDAsIDAsIDAsIDApOwog ICAgICAgIGlmIChYRkFTVElOVCAocm9vdC0+dG90YWxfbGluZXMpIC0gZGVsdGEgPCBtaW5f aGVpZ2h0KQogIAkvKiBOb3RlIHRoYXQgdGhlIHJvb3Qgd2luZG93IG1heSBhbHJlYWR5IGJl IHNtYWxsZXIgdGhhbgogIAkgICBtaW5faGVpZ2h0LiAgKi8KKioqKioqKioqKioqKioqCioq KiA2MTY0LDYxNzAgKioqKgogICAgTGlzcF9PYmplY3QgbGVmdF9tYXJnaW5fY29scywgcmln aHRfbWFyZ2luX2NvbHM7CiAgICBMaXNwX09iamVjdCBsZWZ0X2ZyaW5nZV93aWR0aCwgcmln aHRfZnJpbmdlX3dpZHRoLCBmcmluZ2VzX291dHNpZGVfbWFyZ2luczsKICAgIExpc3BfT2Jq ZWN0IHNjcm9sbF9iYXJfd2lkdGgsIHZlcnRpY2FsX3Njcm9sbF9iYXJfdHlwZTsKISAgIExp c3BfT2JqZWN0IGRlZGljYXRlZDsKICB9OwogIAogICNkZWZpbmUgU0FWRURfV0lORE9XX04o c3d2LG4pIFwKLS0tIDYxNDYsNjE1MiAtLS0tCiAgICBMaXNwX09iamVjdCBsZWZ0X21hcmdp bl9jb2xzLCByaWdodF9tYXJnaW5fY29sczsKICAgIExpc3BfT2JqZWN0IGxlZnRfZnJpbmdl X3dpZHRoLCByaWdodF9mcmluZ2Vfd2lkdGgsIGZyaW5nZXNfb3V0c2lkZV9tYXJnaW5zOwog ICAgTGlzcF9PYmplY3Qgc2Nyb2xsX2Jhcl93aWR0aCwgdmVydGljYWxfc2Nyb2xsX2Jhcl90 eXBlOwohICAgTGlzcF9PYmplY3QgZGVkaWNhdGVkLCByZXNpemVfcHJvcG9ydGlvbmFsbHk7 CiAgfTsKICAKICAjZGVmaW5lIFNBVkVEX1dJTkRPV19OKHN3dixuKSBcCioqKioqKioqKioq KioqKgoqKiogNjMyNyw2MzM3ICoqKioKICAJCQkJICAgICAqIHNpemVvZiAoc3RydWN0IHdp bmRvdyAqKSk7CiAgICAgICAgbl9sZWFmX3dpbmRvd3MgPSBnZXRfbGVhZl93aW5kb3dzIChy b290X3dpbmRvdywgbGVhZl93aW5kb3dzLCAwKTsKICAKLSAgICAgICAvKiBUZW1wb3Jhcmls eSBhdm9pZCBhbnkgcHJvYmxlbXMgd2l0aCB3aW5kb3dzIHRoYXQgYXJlIHNtYWxsZXIKLSAJ IHRoYW4gdGhleSBhcmUgc3VwcG9zZWQgdG8gYmUuICAqLwotICAgICAgIHdpbmRvd19taW5f aGVpZ2h0ID0gMTsKLSAgICAgICB3aW5kb3dfbWluX3dpZHRoID0gMTsKLSAKICAgICAgICAv KiBLbHVkZ2UgQWxlcnQhCiAgCSBNYXJrIGFsbCB3aW5kb3dzIG5vdyBvbiBmcmFtZSBhcyAi ZGVsZXRlZCIuCiAgCSBSZXN0b3JpbmcgdGhlIG5ldyBjb25maWd1cmF0aW9uICJ1bmRlbGV0 ZXMiIGFueSB0aGF0IGFyZSBpbiBpdC4KLS0tIDYzMDksNjMxNCAtLS0tCioqKioqKioqKioq KioqKgoqKiogNjM5OCw2NDAzICoqKioKLS0tIDYzNzUsNjM4MSAtLS0tCiAgCSAgdy0+c2Ny b2xsX2Jhcl93aWR0aCA9IHAtPnNjcm9sbF9iYXJfd2lkdGg7CiAgCSAgdy0+dmVydGljYWxf c2Nyb2xsX2Jhcl90eXBlID0gcC0+dmVydGljYWxfc2Nyb2xsX2Jhcl90eXBlOwogIAkgIHct PmRlZGljYXRlZCA9IHAtPmRlZGljYXRlZDsKKyAJICB3LT5yZXNpemVfcHJvcG9ydGlvbmFs bHkgPSBwLT5yZXNpemVfcHJvcG9ydGlvbmFsbHk7CiAgCSAgWFNFVEZBU1RJTlQgKHctPmxh c3RfbW9kaWZpZWQsIDApOwogIAkgIFhTRVRGQVNUSU5UICh3LT5sYXN0X292ZXJsYXlfbW9k aWZpZWQsIDApOwogIAoqKioqKioqKioqKioqKioKKioqIDY1MjcsNjUzNiAqKioqCiAgICBp ZiAoIU5JTFAgKG5ld19jdXJyZW50X2J1ZmZlcikpCiAgICAgIEZzZXRfYnVmZmVyIChuZXdf Y3VycmVudF9idWZmZXIpOwogIAotICAgLyogUmVzdG9yZSB0aGUgbWluaW11bSBoZWlnaHRz IHJlY29yZGVkIGluIHRoZSBjb25maWd1cmF0aW9uLiAgKi8KLSAgIHdpbmRvd19taW5faGVp Z2h0ID0gZGF0YS0+bWluX2hlaWdodDsKLSAgIHdpbmRvd19taW5fd2lkdGggPSBkYXRhLT5t aW5fd2lkdGg7Ci0gCiAgICBWbWluaWJ1Zl9zY3JvbGxfd2luZG93ID0gZGF0YS0+bWluaWJ1 Zl9zY3JvbGxfd2luZG93OwogICAgbWluaWJ1Zl9zZWxlY3RlZF93aW5kb3cgPSBkYXRhLT5t aW5pYnVmX3NlbGVjdGVkX3dpbmRvdzsKICAKLS0tIDY1MDUsNjUxMCAtLS0tCioqKioqKioq KioqKioqKgoqKiogNjY2Niw2NjcxICoqKioKLS0tIDY2NDAsNjY0NiAtLS0tCiAgICAgICAg cC0+c2Nyb2xsX2Jhcl93aWR0aCA9IHctPnNjcm9sbF9iYXJfd2lkdGg7CiAgICAgICAgcC0+ dmVydGljYWxfc2Nyb2xsX2Jhcl90eXBlID0gdy0+dmVydGljYWxfc2Nyb2xsX2Jhcl90eXBl OwogICAgICAgIHAtPmRlZGljYXRlZCA9IHctPmRlZGljYXRlZDsKKyAgICAgICBwLT5yZXNp emVfcHJvcG9ydGlvbmFsbHkgPSB3LT5yZXNpemVfcHJvcG9ydGlvbmFsbHk7CiAgICAgICAg aWYgKCFOSUxQICh3LT5idWZmZXIpKQogIAl7CiAgCSAgLyogU2F2ZSB3J3MgdmFsdWUgb2Yg cG9pbnQgaW4gdGhlIHdpbmRvdyBjb25maWd1cmF0aW9uLgoqKioqKioqKioqKioqKioKKioq IDY3NTMsNjc2MCAqKioqCiAgICBkYXRhLT5taW5pYnVmX3NlbGVjdGVkX3dpbmRvdyA9IG1p bmlidWZfbGV2ZWwgPiAwID8gbWluaWJ1Zl9zZWxlY3RlZF93aW5kb3cgOiBRbmlsOwogICAg ZGF0YS0+cm9vdF93aW5kb3cgPSBGUkFNRV9ST09UX1dJTkRPVyAoZik7CiAgICBkYXRhLT5m b2N1c19mcmFtZSA9IEZSQU1FX0ZPQ1VTX0ZSQU1FIChmKTsKLSAgIGRhdGEtPm1pbl9oZWln aHQgPSB3aW5kb3dfbWluX2hlaWdodDsKLSAgIGRhdGEtPm1pbl93aWR0aCA9IHdpbmRvd19t aW5fd2lkdGg7CiAgICB0ZW0gPSBGbWFrZV92ZWN0b3IgKG1ha2VfbnVtYmVyIChuX3dpbmRv d3MpLCBRbmlsKTsKICAgIGRhdGEtPnNhdmVkX3dpbmRvd3MgPSB0ZW07CiAgICBmb3IgKGkg PSAwOyBpIDwgbl93aW5kb3dzOyBpKyspCi0tLSA2NzI4LDY3MzMgLS0tLQoqKioqKioqKioq KioqKioKKioqIDc2MTEsNzYyMiAqKioqCiAgICBWc3BsaXRfd2luZG93X3ByZWZlcnJlZF9m dW5jdGlvbiA9IFFuaWw7CiAgCiAgICBERUZWQVJfSU5UICgid2luZG93LW1pbi1oZWlnaHQi LCAmd2luZG93X21pbl9oZWlnaHQsCiEgCSAgICAgIGRvYzogLyogKkRlbGV0ZSBhbnkgd2lu ZG93IGxlc3MgdGhhbiB0aGlzIHRhbGwgKGluY2x1ZGluZyBpdHMgbW9kZSBsaW5lKS4KISBU aGUgdmFsdWUgaXMgaW4gbGluZSB1bml0cy4gKi8pOwogICAgd2luZG93X21pbl9oZWlnaHQg PSA0OwogIAogICAgREVGVkFSX0lOVCAoIndpbmRvdy1taW4td2lkdGgiLCAmd2luZG93X21p bl93aWR0aCwKISAJICAgICAgZG9jOiAvKiAqRGVsZXRlIGFueSB3aW5kb3cgbGVzcyB0aGFu IHRoaXMgd2lkZSAobWVhc3VyZWQgaW4gY2hhcmFjdGVycykuICAqLyk7CiAgICB3aW5kb3df bWluX3dpZHRoID0gMTA7CiAgCiAgICBERUZWQVJfTElTUCAoInNjcm9sbC1wcmVzZXJ2ZS1z Y3JlZW4tcG9zaXRpb24iLAotLS0gNzU4NCw3NjA0IC0tLS0KICAgIFZzcGxpdF93aW5kb3df cHJlZmVycmVkX2Z1bmN0aW9uID0gUW5pbDsKICAKICAgIERFRlZBUl9JTlQgKCJ3aW5kb3ct bWluLWhlaWdodCIsICZ3aW5kb3dfbWluX2hlaWdodCwKISAJICAgICAgZG9jOiAvKiBBbGxv dyBkZWxldGluZyB3aW5kb3dzIGxlc3MgdGhhbiB0aGlzIHRhbGwuCiEgVGhlIHZhbHVlIGlz IG1lYXN1cmVkIGluIGxpbmUgdW5pdHMuICBJZiBhIHdpbmRvdyB3YW50cyBhIG1vZGVsaW5l IGl0CiEgaXMgY291bnRlZCBhcyBvbmUgbGluZS4KISAKISBFbWFjcyBob25vcnMgc2V0dGlu Z3Mgb2YgdGhpcyB2YXJpYWJsZSB3aGVuIGVubGFyZ2luZyBvciBzaHJpbmtpbmcKISB3aW5k b3dzIHZlcnRpY2FsbHkuICBBIHZhbHVlIGxlc3MgdGhhbiAxIGlzIGludmFsaWQuICAqLyk7 CiAgICB3aW5kb3dfbWluX2hlaWdodCA9IDQ7CiAgCiAgICBERUZWQVJfSU5UICgid2luZG93 LW1pbi13aWR0aCIsICZ3aW5kb3dfbWluX3dpZHRoLAohIAkgICAgICBkb2M6IC8qIEFsbG93 IGRlbGV0aW5nIHdpbmRvd3MgbGVzcyB0aGFuIHRoaXMgd2lkZS4KISBUaGUgdmFsdWUgaXMg bWVhc3VyZWQgaW4gY2hhcmFjdGVycyBhbmQgaW5jbHVkZXMgYW55IGZyaW5nZXMgb3IKISB0 aGUgc2Nyb2xsYmFyLgohIAohIEVtYWNzIGhvbm9ycyBzZXR0aW5ncyBvZiB0aGlzIHZhcmlh YmxlIHdoZW4gZW5sYXJnaW5nIG9yIHNocmlua2luZwohIHdpbmRvd3MgaG9yaXpvbnRhbGx5 LiAgQSB2YWx1ZSBsZXNzIHRoYW4gMiBpcyBpbnZhbGlkLiAgKi8pOwogICAgd2luZG93X21p bl93aWR0aCA9IDEwOwogIAogICAgREVGVkFSX0xJU1AgKCJzY3JvbGwtcHJlc2VydmUtc2Ny ZWVuLXBvc2l0aW9uIiwK --------------010800020707070906080100--