From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 7970 invoked from network); 13 Jul 2021 14:55:45 -0000 Received: from 1ess.inri.net (216.126.196.35) by inbox.vuxu.org with ESMTPUTF8; 13 Jul 2021 14:55:45 -0000 Received: from mail-oi1-f171.google.com ([209.85.167.171]) by 1ess; Tue Jul 13 08:08:09 -0400 2021 Received: by mail-oi1-f171.google.com with SMTP id p67so5418155oig.2 for <9front@9front.org>; Tue, 13 Jul 2021 05:08:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=vgwFz1cCB+EBY7+4QjMgWrstjMImrjJputamc3g1QkM=; b=lt/3j6M+aNYqVDRdmjISWf3Rm0WzIODcrEBk4ysdPAgrdOq3DayHwUX+74rFzGDwC2 B5K2S+/R0GZebNir3A2CHSwgTbeSfMapFFiQ3sIK97nFE9FcqDaoxKMNuQtiZv4kRKXV FBIrypMnj7VRc7tXAi2Px/yRHKiT8opa0AgqIBOiUMjHcEQMeCDaE16u9GSxt3Giunua +AwncwprCSujHWF0Ee2lzE+x9mOfaWxxnoPd9U8SGNN+03FDmwTqrYyAFSmUrSr4l3Qk FouzWQCaHnozzuIgRChG7uPFx+1yrIgcB1RYSnnWHXrlvL04UMZAdke3epdil7rbLKRi tFew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=vgwFz1cCB+EBY7+4QjMgWrstjMImrjJputamc3g1QkM=; b=fepOVNsh477eYe3rfN+Hy001mGvKSwLELo8SPKXmiIIAccSc2r6j1i+FRjDd17wpaf EmEmnetrtS22cuOepUJN2ThrQ4oxaq7R8IBkd3XNfHqanA0qoZKlLHTETOML1ZpP9lGA Gm3LnYfpuC4YbX4HgDXNPobaknkRWvWLgjLnOD4PKECcD/19H24IRhuOONBoSQ3tnTN6 oLr8mUbLspNCw5QzYLr549zk4M2+DqJs64uGSc/IMP/xKf0ty20PLNABFi9ig9/IzKhw ZS2GBQjORJ2ttuuKL8OTMdFy5EgPwXb8bhVO1QyvYMDFfy+SVeIC9opd2mWrtAd5o2gJ an3Q== X-Gm-Message-State: AOAM531jrnFIG8JZopxAEo44hVUvRvmxn7QwIJC8Ga6od/nLxeTmiY+Q LsF3ug0i+cJxDrBiRxSkdOka3HB/Y9B3gKqkdNBFzSeRwTs= X-Google-Smtp-Source: ABdhPJwOOa8ebix7Mzyp289I87n1ouZi9pPlyl78toe/KsTDJBSpVm/ty3c58Oq/GqNgDtvHOZwxnLZDvRRk0RktO6c= X-Received: by 2002:a17:90a:2dce:: with SMTP id q14mr3994739pjm.42.1626177655134; Tue, 13 Jul 2021 05:00:55 -0700 (PDT) MIME-Version: 1.0 References: <8CE29EA89CBA8F74C1D4D8EEF2528473@eigenstate.org> In-Reply-To: From: =?UTF-8?B?Sm9zw6kgTWlndWVsIFPDoW5jaGV6IEdhcmPDrWE=?= Date: Tue, 13 Jul 2021 14:00:43 +0200 Message-ID: To: 9front@9front.org Content-Type: multipart/mixed; boundary="0000000000007aaf3405c6fffde6" List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: social structured information property deep-learning database Subject: Re: [9front] Mouse clipping patch Reply-To: 9front@9front.org Precedence: bulk --0000000000007aaf3405c6fffde6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Here are the fixed patches: - The libdraw patch wouldn't compile due to a missing declaration. Oops! - Fixed a bug where clicking a window border wouldn't focus it (kvik noticed it right away). - Fixed the rect parsing code in rio. - Changed naming convention to clip/unclip. - Documented my changes in mouse(2) and mouse(3). I've included a patch for qwx's quake2 (https://shithub.us/qwx/qk2/HEAD/info.html) which, while not replacing the old grabbing behavior, makes it impossible for the cursor to escape the window. It relies on the forced unclip (no unclipmouse to be seen in the code), so it also serves as a demonstration of that feature. Finally, I've also included a simple rc script to clip the mouse. I've used it to test all the interactions of this new clip feature with rio, as it's easy to invoke, easy to kill with Del, and you have access to rio menus (so you can "exit the clip" by creating a new window which unfocuses the current one). On Tue, Jul 13, 2021 at 5:14 AM Jos=C3=A9 Miguel S=C3=A1nchez Garc=C3=ADa wrote: > > Let's see if I can do this quote thing correctly: > > First of all: I'm aware of some bugs (and you pointed out others)! > I'll send the corrected patchset tomorrow. > The naming scheme is a bit messy as a result of a dropped feature. > I'll improve it too. > > > Don't do this to vncv! Not grabbing the mouse makes it > > much more usable. > > I'm aware of someone who will respectfully disagree :-) > > > For the other programs that can use it, I assume the > > patches will follow up once we're happy with this patch > > set? > > Sure, they'll come later. I wanted to keep them separated from these. > > > Not sure that this is necessary. Your mouse being > > constrained to the window is probably enough hint. > > Keep in mind that the border changes not only for the window currently > grabbing the window, but for any non-current window "grabbing" it too > (even if it doesn't apply because it's not focused). The different > border color serves as an indicator that, when you focus it, it will > grab your mouse. It might avoid an unpleasant surprise. However, if > you feel like it's redundant, it can be easily removed. > > > But also, do we need to do it? Is there any case > > where we want to constrain the grab to anything > > other than the whole window? What if the ctl > > messages were just > > > > trap > > release > > > > with no further parameters? > > The point of allowing arbitrary clip rects is to make the grabbing > program unaware of the existence of a window manager. Rio itself would > be an example of a program which doesn't grab the whole "window" (the > whole screen), but only subrects of it. In order to maintain an > uniform interface which works regardless of the presence of rio or > not, I've decided to go down the simplest route and just allow any > subrect of the whole screen to be clipped. It didn't require more code > or more complex handling, and it even allows future programs to take > advantage of this feature. > > Hope it makes sense! > > On Tue, Jul 13, 2021 at 4:53 AM wrote: > > > > Quoth Jos=C3=A9 Miguel S=C3=A1nchez Garc=C3=ADa : > > > think about vncv, qwx's quake ports, screenlock > > > > Don't do this to vncv! Not grabbing the mouse makes it > > much more usable. > > > > For the other programs that can use it, I assume the > > patches will follow up once we're happy with this patch > > set? > > > > > - Windows holding the mouse have a different border color, > > > so they can be clearly identified. > > > > Not sure that this is necessary. Your mouse being > > constrained to the window is probably enough hint. > > > > > + write(mousectl->mctlfd, x->data, cnt); > > > > This will hide all errors from the write, so > > a malformed mousectl message will get silently > > dropped. > > > > > +extern int clipmouse(Mousectl*, Rectangle); > > > +extern void releasemouse(Mousectl*); > > > > This naming lacks symmetry. > > > > How about constrainmouse()/releasemouse()? > > Or if you feel cute: mousetrap()/mouserelease()? > > > > Same with the ctl messages: trap/release, or clip/unclip? > > > > > + grabr.min.x =3D strtol(x->data+4, &p, 0); > > > + if(p =3D=3D nil){ > > > > This isn't how strtol behaves -- if it can't convert > > the number, it leaves p untouched. you need to do: > > > > grabr.min.x =3D strtol(p, &e, 0); > > if(p =3D=3D e || *e !=3D ' ') > > // error > > p =3D e; > > > > You can probably clean it up a bit with tokenize(), > > and then ensure that *e =3D=3D '\0': > > > > if(tokenize(x->data+4, coords, 4) !=3D 4) > > error() > > n =3D strtol(coords[0], &e, 0); > > if(*e !=3D 0) > > error() > > > > But also, do we need to do it? Is there any case > > where we want to constrain the grab to anything > > other than the whole window? What if the ctl > > messages were just > > > > trap > > release > > > > with no further parameters? > > --0000000000007aaf3405c6fffde6 Content-Type: application/octet-stream; name="rio-mouseclip.diff" Content-Disposition: attachment; filename="rio-mouseclip.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kr203rgt3 LS0tIC8vLmdpdC9mcy9vYmplY3QvMmY4YTU5ZjRiNWJmZTAyOGMwMjI4NTVhY2MxOTY2NmQ2OWVl ZDkwOS90cmVlLy9zeXMvc3JjL2NtZC9yaW8vZGF0LmgKKysrIC9zeXMvc3JjL2NtZC9yaW8vZGF0 LmgKQEAgLTEwLDYgKzEwLDcgQEAKIAlRbGFiZWwsCiAJUWtiZCwKIAlRbW91c2UsCisJUW1vdXNl Y3RsLAogCVFuZXcsCiAJUXNjcmVlbiwKIAlRc25hcmYsCkBAIC0xNTQsNiArMTU1LDkgQEAKIAkg KiBOb3cgdGhleSdyZSBhbHdheXMgdGhlIHNhbWUgYnV0IHRoZSBjb2RlIGRvZXNuJ3QgYXNzdW1l IHNvLgogCSovCiAJUmVjdGFuZ2xlCQlzY3JlZW5yOwkvKiBzY3JlZW4gY29vcmRpbmF0ZXMgb2Yg d2luZG93ICovCisJUmVjdGFuZ2xlCW1jbGlwcjsKKwlGaWQJCQkqbWNsaXBmaWQ7CisJaW50CQkJ bWNsaXA7CiAJaW50CQkJcmVzaXplZDsKIAlpbnQJCQl3Y3RscmVhZHk7CiAJUmVjdGFuZ2xlCQls YXN0c3I7CkBAIC0zMDQsMTEgKzMwOCwxNCBAQAogSW1hZ2UJKmxpZ2h0aG9sZGNvbDsKIEltYWdl CSpwYWxlaG9sZGNvbDsKIEltYWdlCSpwYWxldGV4dGNvbDsKK0ltYWdlCSpncmFiY29sOworSW1h Z2UJKmxpZ2h0Z3JhYmNvbDsKIEltYWdlCSpzaXplY29sOwogaW50CXJldmVyc2U7CS8qIHRoZXJl IGFyZSBubyBwYXN0ZWwgcGFpbnRzIGluIHRoZSBkdW5nZW9ucyBhbmQgZHJhZ29ucyB3b3JsZCAt LSByb2IgcGlrZSAqLwogCiBXaW5kb3cJKip3aW5kb3c7CiBXaW5kb3cJKndrZXlib2FyZDsJLyog d2luZG93IG9mIHNpbXVsYXRlZCBrZXlib2FyZCAqLworV2luZG93CSp3Y2xpcDsKIGludAkJbndp bmRvdzsKIGludAkJc25hcmZmZDsKIGludAkJZ290c2NyZWVuOwotLS0gLy8uZ2l0L2ZzL29iamVj dC8yZjhhNTlmNGI1YmZlMDI4YzAyMjg1NWFjYzE5NjY2ZDY5ZWVkOTA5L3RyZWUvL3N5cy9zcmMv Y21kL3Jpby9kYXRhLmMKKysrIC9zeXMvc3JjL2NtZC9yaW8vZGF0YS5jCkBAIC0xOTUsNiArMTk1 LDggQEAKIAlsaWdodGhvbGRjb2wgPSBhbGxvY2ltYWdlKGRpc3BsYXksIFJlY3QoMCwwLDEsMSks IENNQVA4LCAxLCBER3JleWJsdWUpOwogCXBhbGVob2xkY29sID0gYWxsb2NpbWFnZShkaXNwbGF5 LCBSZWN0KDAsMCwxLDEpLCBDTUFQOCwgMSwgRFBhbGVncmV5Ymx1ZSk7CiAJcGFsZXRleHRjb2wg PSBhbGxvY2ltYWdlKGRpc3BsYXksIFJlY3QoMCwwLDEsMSksIENNQVA4LCAxLCAweDY2NjY2NkZG XnJldmVyc2UpOworCWdyYWJjb2wgPSBhbGxvY2ltYWdlKGRpc3BsYXksIFJlY3QoMCwwLDEsMSks IENNQVA4LCAxLCAweEIyMjIyMkZGKTsKKwlsaWdodGdyYWJjb2wgPSBhbGxvY2ltYWdlKGRpc3Bs YXksIFJlY3QoMCwwLDEsMSksIENNQVA4LCAxLCAweENENUM1Q0ZGKTsKIAlzaXplY29sID0gYWxs b2NpbWFnZShkaXNwbGF5LCBSZWN0KDAsMCwxLDEpLCBDTUFQOCwgMSwgRFJlZCk7CiAKIAlpZihy ZXZlcnNlID09IDApCi0tLSAvLy5naXQvZnMvb2JqZWN0LzJmOGE1OWY0YjViZmUwMjhjMDIyODU1 YWNjMTk2NjZkNjllZWQ5MDkvdHJlZS8vc3lzL3NyYy9jbWQvcmlvL2Zucy5oCisrKyAvc3lzL3Ny Yy9jbWQvcmlvL2Zucy5oCkBAIC01LDYgKzUsNyBAQAogaW50CXdyaXRld2N0bChYZmlkKiwgY2hh ciopOwogV2luZG93ICpuZXcoSW1hZ2UqLCBpbnQsIGludCwgaW50LCBjaGFyKiwgY2hhciosIGNo YXIqKik7CiB2b2lkCXJpb3NldGN1cnNvcihDdXJzb3IqKTsKK3ZvaWQJdXBkYXRlbWNsaXAodm9p ZCk7CiBpbnQJbWluKGludCwgaW50KTsKIGludAltYXgoaW50LCBpbnQpOwogUnVuZSoJc3RycnVu ZShSdW5lKiwgUnVuZSk7Ci0tLSAvLy5naXQvZnMvb2JqZWN0LzJmOGE1OWY0YjViZmUwMjhjMDIy ODU1YWNjMTk2NjZkNjllZWQ5MDkvdHJlZS8vc3lzL3NyYy9jbWQvcmlvL2ZzeXMuYworKysgL3N5 cy9zcmMvY21kL3Jpby9mc3lzLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAl7ICJsYWJlbCIsCQlRVEZJ TEUsCVFsYWJlbCwJCTA2MDAgfSwKIAl7ICJrYmQiLAlRVEZJTEUsCVFrYmQsCQkwNjAwIH0sCiAJ eyAibW91c2UiLAlRVEZJTEUsCVFtb3VzZSwJCTA2MDAgfSwKKwl7ICJtb3VzZWN0bCIsCVFURklM RSwJUW1vdXNlY3RsLAkJMDYwMCB9LAogCXsgInNjcmVlbiIsCQlRVEZJTEUsCVFzY3JlZW4sCQkw NDAwIH0sCiAJeyAic25hcmYiLAkJUVRGSUxFLAlRc25hcmYsCQkwNjAwIH0sCiAJeyAidGV4dCIs CQlRVEZJTEUsCVF0ZXh0LAkJMDYwMCB9LAotLS0gLy8uZ2l0L2ZzL29iamVjdC8yZjhhNTlmNGI1 YmZlMDI4YzAyMjg1NWFjYzE5NjY2ZDY5ZWVkOTA5L3RyZWUvL3N5cy9zcmMvY21kL3Jpby9yaW8u YworKysgL3N5cy9zcmMvY21kL3Jpby9yaW8uYwpAQCAtMzI3LDYgKzMyNywyNyBAQAogfQogCiB2 b2lkCit1cGRhdGVtY2xpcCh2b2lkKQoreworCVdpbmRvdyAqdzsKKworCWlmKGlucHV0ID09IG5p bCB8fCAhaW5wdXQtPm1jbGlwIHx8IG1lbnVpbmcgfHwgc3dlZXBpbmcpCisJCXcgPSBuaWw7CisJ ZWxzZQorCQl3ID0gaW5wdXQ7CisJaWYodyA9PSB3Y2xpcCkKKwkJcmV0dXJuOworCWlmKHcgIT0g bmlsKXsKKwkJY2xpcG1vdXNlKG1vdXNlY3RsLCB3LT5tY2xpcHIpOworCQl3c2VuZGN0bG1lc2co dywgUmVwYWludCwgWlIsIG5pbCk7CisJfWVsc2UKKwkJdW5jbGlwbW91c2UobW91c2VjdGwpOwor CWlmKHdjbGlwKQorCQl3c2VuZGN0bG1lc2cod2NsaXAsIFJlcGFpbnQsIFpSLCBuaWwpOworCXdj bGlwID0gdzsKK30KKwordm9pZAoga2lsbHByb2NzKHZvaWQpCiB7CiAJaW50IGk7CkBAIC00ODks NiArNTEwLDkgQEAKIAkJCQl3dG9wbWUod2tleWJvYXJkKTsKIAkJCQl3aW5wdXQgPSB3a2V5Ym9h cmQ7CiAJCQl9CisJCQl3ID0gd3BvaW50dG8obW91c2UtPnh5KTsKKwkJCWlmKHNlbmRpbmcgPT0g RkFMU0UgJiYgIXNjcm9sbGluZyAmJiB3IT1uaWwgJiYgIXctPmRlbGV0ZWQgJiYgaW5ib3JkZXIo dy0+c2NyZWVuciwgbW91c2UtPnh5KSkKKwkJCQltb3ZpbmcgPSBUUlVFOwogCQkJaWYod2lucHV0 IT1uaWwgJiYgIXdpbnB1dC0+ZGVsZXRlZCAmJiB3aW5wdXQtPmkhPW5pbCl7CiAJCQkJLyogY29u dmVydCB0byBsb2dpY2FsIGNvb3JkaW5hdGVzICovCiAJCQkJeHkueCA9IG1vdXNlLT54eS54ICsg KHdpbnB1dC0+aS0+ci5taW4ueC13aW5wdXQtPnNjcmVlbnIubWluLngpOwpAQCAtNTA1LDEwICs1 MjksNyBAQAogCQkJCQlzY3JvbGxpbmcgPSBtb3VzZS0+YnV0dG9uczsKIAkJCQllbHNlCiAJCQkJ CXNjcm9sbGluZyA9IG1vdXNlLT5idXR0b25zICYmIHB0aW5yZWN0KHh5LCB3aW5wdXQtPnNjcm9s bHIpOwotCQkJCS8qIHRvcHBlZCB3aWxsIGJlIHplcm8gb3IgbGVzcyBpZiB3aW5kb3cgaGFzIGJl ZW4gYm90dG9tZWQgKi8KLQkJCQlpZihzZW5kaW5nID09IEZBTFNFICYmICFzY3JvbGxpbmcgJiYg aW5ib3JkZXIod2lucHV0LT5zY3JlZW5yLCBtb3VzZS0+eHkpICYmIHdpbnB1dC0+dG9wcGVkPjAp Ci0JCQkJCW1vdmluZyA9IFRSVUU7Ci0JCQkJZWxzZSBpZihpbnNpZGUgJiYgKHNjcm9sbGluZyB8 fCB3aW5wdXQtPm1vdXNlb3BlbiB8fCAobW91c2UtPmJ1dHRvbnMmMSkpKQorCQkJCWlmKGluc2lk ZSAmJiAoc2Nyb2xsaW5nIHx8IHdpbnB1dC0+bW91c2VvcGVuIHx8IChtb3VzZS0+YnV0dG9ucyYx KSkpCiAJCQkJCXNlbmRpbmcgPSBUUlVFOwogCQkJfWVsc2UKIAkJCQlzZW5kaW5nID0gRkFMU0U7 CkBAIC01MjMsMjEgKzU0NCwyMSBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYobW92aW5n ICYmIChtb3VzZS0+YnV0dG9ucyY3KSl7Ci0JCQkJaW5jcmVmKHdpbnB1dCk7CisJCQkJaW5jcmVm KHcpOwogCQkJCXN3ZWVwaW5nID0gVFJVRTsKIAkJCQlpZihtb3VzZS0+YnV0dG9ucyAmIDMpCi0J CQkJCWkgPSBiYW5kc2l6ZSh3aW5wdXQpOworCQkJCQlpID0gYmFuZHNpemUodyk7CiAJCQkJZWxz ZQotCQkJCQlpID0gZHJhZyh3aW5wdXQpOworCQkJCQlpID0gZHJhZyh3KTsKIAkJCQlzd2VlcGlu ZyA9IEZBTFNFOwotCQkJCWlmKGkgIT0gbmlsKXsKLQkJCQkJd2N1cnJlbnQod2lucHV0KTsKLQkJ CQkJd3NlbmRjdGxtZXNnKHdpbnB1dCwgUmVzaGFwZWQsIGktPnIsIGkpOwotCQkJCX0KLQkJCQl3 Y2xvc2Uod2lucHV0KTsKKwkJCQlpZihpICE9IG5pbCkKKwkJCQkJd3NlbmRjdGxtZXNnKHcsIFJl c2hhcGVkLCBpLT5yLCBpKTsKKwkJCQl3Y3VycmVudCh3KTsKKwkJCQl3dG9wbWUodyk7CisJCQkJ d3NlbmRjdGxtZXNnKHcsIFRvcHBlZCwgWlIsIG5pbCk7CisJCQkJd2Nsb3NlKHcpOwogCQkJCWNv bnRpbnVlOwogCQkJfQotCQkJdyA9IHdwb2ludHRvKG1vdXNlLT54eSk7CiAJCQlpZih3IT1uaWwg JiYgaW5ib3JkZXIody0+c2NyZWVuciwgbW91c2UtPnh5KSkKIAkJCQlyaW9zZXRjdXJzb3IoY29y bmVyc1t3aGljaGNvcm5lcih3LT5zY3JlZW5yLCBtb3VzZS0+eHkpXSk7CiAJCQllbHNlCkBAIC03 MTUsNiArNzM2LDcgQEAKIAkJbWVudTNzdHJbaV0gPSBuaWw7CiAJfQogCXN3ZWVwaW5nID0gVFJV RTsKKwl1cGRhdGVtY2xpcCgpOwogCXN3aXRjaChpID0gbWVudWhpdCgzLCBtb3VzZWN0bCwgJm1l bnUzLCB3c2NyZWVuKSl7CiAJY2FzZSAtMToKIAkJYnJlYWs7CkBAIC03NDQsNiArNzY2LDcgQEAK IAkJYnJlYWs7CiAJfQogCXN3ZWVwaW5nID0gRkFMU0U7CisJdXBkYXRlbWNsaXAoKTsKIH0KIAog dm9pZApAQCAtNzUzLDYgKzc3Niw4IEBACiAJCW1lbnUyc3RyW1Njcm9sbF0gPSAibm9zY3JvbGwi OwogCWVsc2UKIAkJbWVudTJzdHJbU2Nyb2xsXSA9ICJzY3JvbGwiOworCXN3ZWVwaW5nID0gVFJV RTsKKwl1cGRhdGVtY2xpcCgpOwogCXN3aXRjaChtZW51aGl0KDIsIG1vdXNlY3RsLCAmbWVudTIs IHdzY3JlZW4pKXsKIAljYXNlIEN1dDoKIAkJd3NuYXJmKHcpOwpAQCAtNzg3LDYgKzgxMiw4IEBA CiAJCQl3c2hvdyh3LCB3LT5ucik7CiAJCWJyZWFrOwogCX0KKwlzd2VlcGluZyA9IEZBTFNFOwor CXVwZGF0ZW1jbGlwKCk7CiAJZmx1c2hpbWFnZShkaXNwbGF5LCAxKTsKIAl3c2VuZGN0bG1lc2co dywgV2FrZXVwLCBaUiwgbmlsKTsKIH0KLS0tIC8vLmdpdC9mcy9vYmplY3QvMmY4YTU5ZjRiNWJm ZTAyOGMwMjI4NTVhY2MxOTY2NmQ2OWVlZDkwOS90cmVlLy9zeXMvc3JjL2NtZC9yaW8vd2luZC5j CisrKyAvc3lzL3NyYy9jbWQvcmlvL3dpbmQuYwpAQCAtMzAyLDYgKzMwMiwxMSBAQAogCQkJY29s ID0gaG9sZGNvbDsKIAkJZWxzZQogCQkJY29sID0gcGFsZWhvbGRjb2w7CisJfWVsc2UgaWYody0+ bWNsaXApeworCQlpZih0eXBlID09IFNlbGJvcmRlcikKKwkJCWNvbCA9IGdyYWJjb2w7CisJCWVs c2UKKwkJCWNvbCA9IGxpZ2h0Z3JhYmNvbDsKIAl9ZWxzZXsKIAkJaWYodHlwZSA9PSBTZWxib3Jk ZXIpCiAJCQljb2wgPSB0aXRsZWNvbDsKQEAgLTM1OCw2ICszNjMsOCBAQAogCXctPnNjcm9sbHIu bWF4LnggPSByLm1pbi54K1Njcm9sbHdpZDsKIAl3LT5sYXN0c3IgPSBaUjsKIAlyLm1pbi54ICs9 IFNjcm9sbHdpZCtTY3JvbGxnYXA7CisJdy0+bWNsaXAgPSBGQUxTRTsKKwl1cGRhdGVtY2xpcCgp OwogCWZyY2xlYXIodywgRkFMU0UpOwogCWZyaW5pdCh3LCByLCB3LT5mb250LCB3LT5pLCBjb2xz KTsKIAl3c2V0Y29scyh3LCB3ID09IGlucHV0KTsKQEAgLTEyNjQsNiArMTI3MSw3IEBACiAJdy0+ Z29uZSA9IGNoYW5jcmVhdGUoc2l6ZW9mKGNoYXIqKSwgMCk7CiAJdy0+c2Nyb2xsciA9IHI7CiAJ dy0+c2Nyb2xsci5tYXgueCA9IHIubWluLngrU2Nyb2xsd2lkOworCXctPm1jbGlwID0gRkFMU0U7 CiAJdy0+bGFzdHNyID0gWlI7CiAJci5taW4ueCArPSBTY3JvbGx3aWQrU2Nyb2xsZ2FwOwogCWZy aW5pdCh3LCByLCBmb250LCBpLCBjb2xzKTsKQEAgLTEzMDYsNiArMTMxNCw3IEBACiAJCWlucHV0 ID0gbmlsOwogCQlyaW9zZXRjdXJzb3IobmlsKTsKIAl9CisJdXBkYXRlbWNsaXAoKTsKIAlpZih3 ID09IHdrZXlib2FyZCkKIAkJd2tleWJvYXJkID0gbmlsOwogCWZvcihpPTA7IGk8bmhpZGRlbjsg aSsrKQpAQCAtMTM5MCw2ICsxMzk5LDcgQEAKIAogCQkJc2VuZHAoYywgdyk7CiAJCX0KKwkJdXBk YXRlbWNsaXAoKTsKIAkJaWYody0+aT09bmlsIHx8IER4KHctPnNjcmVlbnIpPD0wKQogCQkJYnJl YWs7CiAJCXdyZXBhaW50KHcpOwotLS0gLy8uZ2l0L2ZzL29iamVjdC8yZjhhNTlmNGI1YmZlMDI4 YzAyMjg1NWFjYzE5NjY2ZDY5ZWVkOTA5L3RyZWUvL3N5cy9zcmMvY21kL3Jpby94ZmlkLmMKKysr IC9zeXMvc3JjL2NtZC9yaW8veGZpZC5jCkBAIC0xOCw2ICsxOCw3IEBACiBjaGFyIEVsb25nW10g PSAJCSJzbmFyZiBidWZmZXIgdG9vIGxvbmciOwogY2hhciBFdW5raWRbXSA9IAkidW5rbm93biBp ZCBpbiBhdHRhY2giOwogY2hhciBFYmFkcmVjdFtdID0gCSJiYWQgcmVjdGFuZ2xlIGluIGF0dGFj aCI7CitjaGFyIEVjbGlwW10gPQkJImludmFsaWQgY2xpcCByZWN0YW5nbGUiOwogY2hhciBFd2lu ZG93W10gPSAJImNhbm5vdCBtYWtlIHdpbmRvdyI7CiBjaGFyIEVub3dpbmRvd1tdID0gCSJ3aW5k b3cgaGFzIG5vIGltYWdlIjsKIGNoYXIgRWJhZG1vdXNlW10gPSAJImJhZCBmb3JtYXQgb24gL2Rl di9tb3VzZSI7CkBAIC0zNDIsNiArMzQzLDE0IEBACiAJY2FzZSBRa2JkOgogCQl3LT5rYmRvcGVu ID0gRkFMU0U7CiAJCWJyZWFrOworCWNhc2UgUW1vdXNlY3RsOgorCQlpZih3LT5tY2xpcCAmJiB3 LT5tY2xpcGZpZCA9PSB4LT5mKXsKKwkJCXctPm1jbGlwID0gRkFMU0U7CisJCQl3LT5tY2xpcGZp ZCA9IG5pbDsKKwkJCXVwZGF0ZW1jbGlwKCk7CisJCQl3c2VuZGN0bG1lc2codywgUmVwYWludCwg WlIsIG5pbCk7CisJCX0KKwkJYnJlYWs7CiAJY2FzZSBRbW91c2U6CiAJCXctPnJlc2l6ZWQgPSBG QUxTRTsKIAkJdy0+bW91c2VvcGVuID0gRkFMU0U7CkBAIC0zNzEsNyArMzgwLDggQEAKIHsKIAlG Y2FsbCBmYzsKIAlpbnQgY250LCBxaWQsIG5iLCBvZmYsIG5yOwotCWNoYXIgZXJyW0VSUk1BWF0s ICpwOworCWNoYXIgZXJyW0VSUk1BWF0sICpjb29yZHNbNF0sICpwOworCVJlY3RhbmdsZSBtY2xp cHI7CiAJUG9pbnQgcHQ7CiAJV2luZG93ICp3OwogCVJ1bmUgKnI7CkBAIC01MDAsNiArNTEwLDUw IEBACiAJCXctPmxhYmVsID0gcDsKIAkJdy0+bGFiZWxbY250XSA9IDA7CiAJCW1lbW1vdmUody0+ bGFiZWwsIHgtPmRhdGEsIGNudCk7CisJCWJyZWFrOworCisJY2FzZSBRbW91c2VjdGw6CisJCWlm KHN0cm5jbXAoeC0+ZGF0YSwgImNsaXAiLCA0KT09MCl7CisJCQlpZih0b2tlbml6ZSh4LT5kYXRh KzQsIGNvb3JkcywgNCkhPTQpeworCQkJCWZpbHN5c3Jlc3BvbmQoeC0+ZnMsIHgsICZmYywgRWNs aXApOworCQkJCXJldHVybjsKKwkJCX0KKwkJCW1jbGlwci5taW4ueCA9IHN0cnRvbChjb29yZHNb MF0sICZwLCAwKTsKKwkJCWlmKCpwICE9ICdcMCcpeworCQkJCWZpbHN5c3Jlc3BvbmQoeC0+ZnMs IHgsICZmYywgRWNsaXApOworCQkJCXJldHVybjsKKwkJCX0KKwkJCW1jbGlwci5taW4ueSA9IHN0 cnRvbChjb29yZHNbMV0sICZwLCAwKTsKKwkJCWlmKCpwICE9ICdcMCcpeworCQkJCWZpbHN5c3Jl c3BvbmQoeC0+ZnMsIHgsICZmYywgRWNsaXApOworCQkJCXJldHVybjsKKwkJCX0KKwkJCW1jbGlw ci5tYXgueCA9IHN0cnRvbChjb29yZHNbMl0sICZwLCAwKTsKKwkJCWlmKCpwICE9ICdcMCcpewor CQkJCWZpbHN5c3Jlc3BvbmQoeC0+ZnMsIHgsICZmYywgRWNsaXApOworCQkJCXJldHVybjsKKwkJ CX0KKwkJCW1jbGlwci5tYXgueSA9IHN0cnRvbChjb29yZHNbM10sICZwLCAwKTsKKwkJCWlmKCpw ICE9ICdcMCcpeworCQkJCWZpbHN5c3Jlc3BvbmQoeC0+ZnMsIHgsICZmYywgRWNsaXApOworCQkJ CXJldHVybjsKKwkJCX0KKwkJCWlmKCFyZWN0aW5yZWN0KG1jbGlwciwgdy0+c2NyZWVucikpewor CQkJCWZpbHN5c3Jlc3BvbmQoeC0+ZnMsIHgsICZmYywgRWNsaXApOworCQkJCXJldHVybjsKKwkJ CX0KKwkJCXctPm1jbGlwciA9IG1jbGlwcjsKKwkJCXctPm1jbGlwZmlkID0geC0+ZjsKKwkJCXct Pm1jbGlwID0gVFJVRTsKKwkJCXVwZGF0ZW1jbGlwKCk7CisJCQl3c2VuZGN0bG1lc2codywgUmVw YWludCwgWlIsIG5pbCk7CisJCX1lbHNlIGlmKHN0cm5jbXAoeC0+ZGF0YSwgInVuY2xpcCIsIDYp PT0wKXsKKwkJCXctPm1jbGlwID0gRkFMU0U7CisJCQl3LT5tY2xpcGZpZCA9IG5pbDsKKwkJCXVw ZGF0ZW1jbGlwKCk7CisJCQl3c2VuZGN0bG1lc2codywgUmVwYWludCwgWlIsIG5pbCk7CisJCX1l bHNlCisJCQl3cml0ZShtb3VzZWN0bC0+bWN0bGZkLCB4LT5kYXRhLCBjbnQpOwogCQlicmVhazsK IAogCWNhc2UgUW1vdXNlOgo= --0000000000007aaf3405c6fffde6 Content-Type: application/octet-stream; name="devmouse-clip.diff" Content-Disposition: attachment; filename="devmouse-clip.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kr203rgn0 LS0tIC8vLmdpdC9mcy9vYmplY3QvMmY4YTU5ZjRiNWJmZTAyOGMwMjI4NTVhY2MxOTY2NmQ2OWVl ZDkwOS90cmVlLy9zeXMvc3JjLzkvcG9ydC9kZXZtb3VzZS5jCisrKyAvc3lzL3NyYy85L3BvcnQv ZGV2bW91c2UuYwpAQCAtMTgsNiArMTgsOCBAQAogCVNjcm9sbFJpZ2h0ID0gMHg0MCwKIH07CiAK K2NoYXIgRWNsaXBbXSA9ICJpbnZhbGlkIGNsaXAgcmVjdGFuZ2xlIjsKKwogdHlwZWRlZiBzdHJ1 Y3QgTW91c2VpbmZvCU1vdXNlaW5mbzsKIHR5cGVkZWYgc3RydWN0IE1vdXNlc3RhdGUJTW91c2Vz dGF0ZTsKIApAQCAtNTMsNiArNTUsOCBAQAogCUNNYnV0dG9ubWFwLAogCUNNc2Nyb2xsc3dhcCwK IAlDTXN3YXAsCisJQ01jbGlwLAorCUNNdW5jbGlwLAogCUNNYmxhbmssCiAJQ01ibGFua3RpbWUs CiAJQ010d2l0Y2gsCkBAIC02NCw2ICs2OCw4IEBACiAJQ01idXR0b25tYXAsCSJidXR0b25tYXAi LAkwLAogCUNNc2Nyb2xsc3dhcCwJInNjcm9sbHN3YXAiLAkwLAogCUNNc3dhcCwJCSJzd2FwIiwJ CTEsCisJQ01jbGlwLAkJImNsaXAiLAkJMCwKKwlDTXVuY2xpcCwJInVuY2xpcCIsCTEsCiAJQ01i bGFuaywJImJsYW5rIiwJMSwKIAlDTWJsYW5rdGltZSwJImJsYW5rdGltZSIsCTIsCiAJQ010d2l0 Y2gsCSJ0d2l0Y2giLAkxLApAQCAtOTUsNiArMTAxLDkgQEAKIHN0YXRpYyB1Y2hhciBidXR0b25t YXBbOF0gPSB7CiAJMCwgMSwgMiwgMywgNCwgNSwgNiwgNywKIH07CitzdGF0aWMgUmVjdGFuZ2xl IGNsaXByOworc3RhdGljIENoYW4gKmNsaXBjaGFuOworc3RhdGljIGludCBjbGlwOwogc3RhdGlj IGludCBtb3VzZXN3YXA7CiBzdGF0aWMgaW50IHNjcm9sbHN3YXA7CiBzdGF0aWMgdWxvbmcgbW91 c2V0aW1lOwpAQCAtMjA2LDYgKzIxNSwxMCBAQAogCWlmKChjLT5xaWQudHlwZSZRVERJUikhPTAg fHwgKGMtPmZsYWcmQ09QRU4pPT0wKQogCQlyZXR1cm47CiAJc3dpdGNoKCh1bG9uZyljLT5xaWQu cGF0aCl7CisJY2FzZSBRbW91c2VjdGw6CisJCWlmKGMgPT0gY2xpcGNoYW4pCisJCQljbGlwID0g MDsKKwkJYnJlYWs7CiAJY2FzZSBRbW91c2VpbjoKIAkJbW91c2UuaW5idXR0b25zICY9IH4oKE1v dXNlc3RhdGUqKWMtPmF1eCktPmJ1dHRvbnM7CiAJCWZyZWUoYy0+YXV4KTsJLyogTW91c2VzdGF0 ZSAqLwpAQCAtMzQ0LDYgKzM1Nyw3IEBACiBtb3VzZXdyaXRlKENoYW4gKmMsIHZvaWQgKnZhLCBs b25nIG4sIHZsb25nKQogewogCWNoYXIgKnA7CisJUmVjdGFuZ2xlIHI7CiAJUG9pbnQgcHQ7CiAJ Q21kYnVmICpjYjsKIAlDbWR0YWIgKmN0OwpAQCAtNDAzLDYgKzQxNywzNyBAQAogCQkJbW91c2Vi bGFua3NjcmVlbigxKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgQ01jbGlwOgorCQkJaWYoY2ItPm5m IDwgNSkKKwkJCQllcnJvcihFc2hvcnQpOworCQkJaWYoIWdzY3JlZW4pCisJCQkJYnJlYWs7CisJ CQlyLm1pbi54ID0gc3RydG9sKGNiLT5mWzFdLCAmcCwgMCk7CisJCQlpZihwID09IG5pbCkKKwkJ CQllcnJvcihFY2xpcCk7CisJCQlyLm1pbi55ID0gc3RydG9sKGNiLT5mWzJdLCAmcCwgMCk7CisJ CQlpZihwID09IG5pbCkKKwkJCQllcnJvcihFY2xpcCk7CisJCQlyLm1heC54ID0gc3RydG9sKGNi LT5mWzNdLCAmcCwgMCk7CisJCQlpZihwID09IG5pbCkKKwkJCQllcnJvcihFY2xpcCk7CisJCQly Lm1heC55ID0gc3RydG9sKGNiLT5mWzRdLCAmcCwgMCk7CisJCQlpZihwID09IG5pbCkKKwkJCQll cnJvcihFY2xpcCk7CisJCQlpZighcmVjdGlucmVjdChyLCBnc2NyZWVuLT5jbGlwcikpCisJCQkJ ZXJyb3IoRWNsaXApOworCQkJY2xpcHIgPSByOworCQkJY2xpcGNoYW4gPSBjOworCQkJY2xpcCA9 IDE7CisJCQlpZighcHRpbnJlY3QobW91c2UueHksIGNsaXByKSkKKwkJCQlhYnNtb3VzZXRyYWNr KG1vdXNlLnh5LngsIG1vdXNlLnh5LnksIDAsIDApOworCQkJYnJlYWs7CisKKwkJY2FzZSBDTXVu Y2xpcDoKKwkJCWNsaXAgPSAwOworCQkJY2xpcGNoYW4gPSBuaWw7CisJCQlicmVhazsKKwogCQlj YXNlIENNYmxhbmt0aW1lOgogCQkJYmxhbmt0aW1lID0gc3RydG91bChjYi0+ZlsxXSwgMCwgMCk7 CiAJCQkvKiB3ZXQgZmxvb3IgKi8KQEAgLTYwOSw2ICs2NTQsMTcgQEAKIAkJeSA9IGdzY3JlZW4t PmNsaXByLm1pbi55OwogCWlmKHkgPj0gZ3NjcmVlbi0+Y2xpcHIubWF4LnkpCiAJCXkgPSBnc2Ny ZWVuLT5jbGlwci5tYXgueS0xOworCisJaWYoY2xpcCl7CisJCWlmKHggPCBjbGlwci5taW4ueCkK KwkJCXggPSBjbGlwci5taW4ueDsKKwkJaWYoeCA+PSBjbGlwci5tYXgueCkKKwkJCXggPSBjbGlw ci5tYXgueC0xOworCQlpZih5IDwgY2xpcHIubWluLnkpCisJCQl5ID0gY2xpcHIubWluLnk7CisJ CWlmKHkgPj0gY2xpcHIubWF4LnkpCisJCQl5ID0gY2xpcHIubWF4LnktMTsKKwl9CiAKIAogCWls b2NrKCZtb3VzZSk7Cg== --0000000000007aaf3405c6fffde6 Content-Type: application/octet-stream; name="grab.rc" Content-Disposition: attachment; filename="grab.rc" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kr203rgu4 IyEvYmluL3JjCgpyZWFkIC1jIDU5IC9kZXYvd2luZG93IHwgYXdrICd7cHJpbnQgImNsaXAiLCAk Mis0LCAkMys0LCAkNC00LCAkNS00fScgfFszPTFdIGNhdCAvZmQvMyAvZmQvMCA+Pi9kZXYvbW91 c2VjdGwK --0000000000007aaf3405c6fffde6 Content-Type: application/octet-stream; name="man-mouseclip.diff" Content-Disposition: attachment; filename="man-mouseclip.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kr203rgs2 LS0tIC8vLmdpdC9mcy9vYmplY3QvMmY4YTU5ZjRiNWJmZTAyOGMwMjI4NTVhY2MxOTY2NmQ2OWVl ZDkwOS90cmVlLy9zeXMvbWFuLzIvbW91c2UKKysrIC9zeXMvbWFuLzIvbW91c2UKQEAgLTI5LDYg KzI5LDEyIEBACiB2b2lkCQltb3ZldG8oTW91c2VjdGwgKm1jLCBQb2ludCBwdCkKIC5QUAogLkIK K2ludAkJY2xpcG1vdXNlKE1vdXNlY3RsICptYywgUmVjdGFuZ2xlIHIpCisuUFAKKy5CCit2b2lk CQl1bmNsaXBtb3VzZShNb3VzZWN0bCAqbWMpCisuUFAKKy5CCiB2b2lkCQlzZXRjdXJzb3IoTW91 c2VjdGwgKm1jLCBDdXJzb3IgKmMpCiAuUFAKIC5CCkBAIC05Niw2ICsxMDIsNyBAQAogCiAJY2hh cgkqZmlsZTsKIAlpbnQJbWZkOwkJLyogdG8gbW91c2UgZmlsZSAqLworCWludAltY3RsZmQ7CQkv KiB0byBtb3VzZWN0bCBmaWxlICovCiAJaW50CWNmZDsJCS8qIHRvIGN1cnNvciBmaWxlICovCiAJ aW50CXBpZDsJCS8qIG9mIHNsYXZlIHByb2MgKi8KIAlJbWFnZSoJaW1hZ2U7CS8qIG9mIGFzc29j aWF0ZWQgd2luZG93L2Rpc3BsYXkgKi8KQEAgLTE2NCw2ICsxNzEsMTIgQEAKIC5JIE1vdmV0bwog bW92ZXMgdGhlIG1vdXNlIGN1cnNvciBvbiB0aGUgZGlzcGxheSB0byB0aGUgcG9zaXRpb24gc3Bl Y2lmaWVkIGJ5CiAuSVIgcHQgLgorLlBQCisuSSBDbGlwbW91c2UKK3Jlc3RyaWN0cyB0aGUgbW91 c2UgbW92ZW1lbnQgdG8gdGhlIGFyZWEgaW5zaWRlCisuSVIgciAuCisuSSBVbmNsaXBtb3VzZQor ZnJlZXMgdGhlIG1vdXNlIG9mIGFueSBwcmV2aW91cyBjbGlwIG9wZXJhdGlvbi4KIC5QUAogLkkg U2V0Y3Vyc29yCiBzZXRzIHRoZSBpbWFnZSBvZiB0aGUgY3Vyc29yIHRvIHRoYXQgc3BlY2lmaWVk IGJ5Ci0tLSAvLy5naXQvZnMvb2JqZWN0LzJmOGE1OWY0YjViZmUwMjhjMDIyODU1YWNjMTk2NjZk NjllZWQ5MDkvdHJlZS8vc3lzL21hbi8zL21vdXNlCisrKyAvc3lzL21hbi8zL21vdXNlCkBAIC0x NzEsNiArMTcxLDE1IEBACiAuQiB0d2l0Y2gKIHVuYmxhbmtzIHRoZSBzY3JlZW4gYW5kIHJlc2V0 cyB0aGUgaWRsZSB0aW1lb3V0IGFzIGlmIHRoZQogbW91c2Ugd2FzIHR3aXRjaGVkLgorLlRQCisu QkkgY2xpcCAiIHgwIiAiIHkwIiAiIHgxIiAiIHkxIgorcmVzdHJpY3RzIHRoZSBtb3VzZSBtb3Zl bWVudCB0byB0aGUgYXJlYSBpbnNpZGUgdGhlIHByb3ZpZGVkIHJlY3RhbmdsZS4KK1RoZSBwcm92 aWRlZCByZWN0YW5nbGUgbXVzdCBiZSBmdWxseSBjb250YWluZWQgaW5zaWRlIHRoZSBzY3JlZW4u CisuVFAKKy5CSSB1bmNsaXAKK3VuZG9lcyBhbnkgcHJldmlvdXMKKy5JIGNsaXAKK29wZXJhdGlv bnMsIGxldHRpbmcgdGhlIG1vdXNlIG1vdmUgZnJlZWx5IGFjcm9zcyB0aGUgc2NyZWVuLgogLlBE CiAuUFAKIE5vdCBhbGwgbWljZSBpbnRlcnByZXQgYWxsIG1lc3NhZ2VzOyB3aXRoIHNvbWUgZGV2 aWNlcywKQEAgLTIwMyw2ICsyMTIsMTMgQEAKIGZpbGUgc2V0cyB0aGUgY3VycmVudCBjdXJzb3Ig aW5mb3JtYXRpb24uCiBBIHdyaXRlIG9mIGZld2VyIHRoYW4gNzIgYnl0ZXMgc2V0cyB0aGUKIGN1 cnNvciB0byB0aGUgZGVmYXVsdCwgYW4gYXJyb3cuCisuUFAKK0EKKy5JIGNsaXAKK2lzIHZhbGlk IGFzIGxvbmcgYXMgdGhlIGZpbGUgdGhhdCByZXF1ZXN0ZWQgaXQgaXMga2VwdCBvcGVuLgorV2hl biBpdCdzIGNsb3NlZCwgdGhlIGNsaXAgaXMgZm9yY2libHkgcmVsZWFzZWQuCitUaGlzIGlzIGEg c2VjdXJpdHkgbWVjaGFuaXNtIGFnYWluc3QgY3Jhc2hpbmcgYXBwcywKK3doaWNoIHdvdWxkIG90 aGVyd2lzZSBsZWF2ZSBhbiB1bndhbnRlZCBhY3RpdmUgZ3JhYi4KIC5QUAogVGhlCiAuQiBtb3Vz ZQo= --0000000000007aaf3405c6fffde6 Content-Type: application/octet-stream; name="libdraw-mouseclip.diff" Content-Disposition: attachment; filename="libdraw-mouseclip.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kr203rgr1 LS0tIC8vLmdpdC9mcy9vYmplY3QvMmY4YTU5ZjRiNWJmZTAyOGMwMjI4NTVhY2MxOTY2NmQ2OWVl ZDkwOS90cmVlLy9zeXMvaW5jbHVkZS9tb3VzZS5oCisrKyAvc3lzL2luY2x1ZGUvbW91c2UuaApA QCAtMjIsNiArMjIsNyBAQAogCiAJY2hhcgkJKmZpbGU7CiAJaW50CQltZmQ7CQkvKiB0byBtb3Vz ZSBmaWxlICovCisJaW50CQltY3RsZmQ7CQkvKiB0byBtb3VzZWN0bCBmaWxlICovCiAJaW50CQlj ZmQ7CQkvKiB0byBjdXJzb3IgZmlsZSAqLwogCWludAkJcGlkOwkJLyogb2Ygc2xhdmUgcHJvYyAq LwogCUltYWdlKglpbWFnZTsJLyogb2YgYXNzb2NpYXRlZCB3aW5kb3cvZGlzcGxheSAqLwpAQCAt MzksNiArNDAsOCBAQAogICovCiBleHRlcm4gTW91c2VjdGwqCWluaXRtb3VzZShjaGFyKiwgSW1h Z2UqKTsKIGV4dGVybiB2b2lkCQltb3ZldG8oTW91c2VjdGwqLCBQb2ludCk7CitleHRlcm4gaW50 CQljbGlwbW91c2UoTW91c2VjdGwqLCBSZWN0YW5nbGUpOworZXh0ZXJuIHZvaWQJCXVuY2xpcG1v dXNlKE1vdXNlY3RsKik7CiBleHRlcm4gaW50CQkJcmVhZG1vdXNlKE1vdXNlY3RsKik7CiBleHRl cm4gdm9pZAkJY2xvc2Vtb3VzZShNb3VzZWN0bCopOwogZXh0ZXJuIHZvaWQJCXNldGN1cnNvcihN b3VzZWN0bCosIEN1cnNvciopOwotLS0gLy8uZ2l0L2ZzL29iamVjdC8yZjhhNTlmNGI1YmZlMDI4 YzAyMjg1NWFjYzE5NjY2ZDY5ZWVkOTA5L3RyZWUvL3N5cy9zcmMvbGliZHJhdy9tb3VzZS5jCisr KyAvc3lzL3NyYy9saWJkcmF3L21vdXNlLmMKQEAgLTEyLDE0ICsxMiwzNSBAQAogCW0tPnh5ID0g cHQ7CiB9CiAKK2ludAorY2xpcG1vdXNlKE1vdXNlY3RsICptLCBSZWN0YW5nbGUgcikKK3sKKwlj aGFyIGJ1ZlsxMjhdOworCWxvbmcgbjsKKworCW4gPSBzbnByaW50KGJ1Ziwgc2l6ZW9mKGJ1Ziks ICJjbGlwICVkICVkICVkICVkIiwKKwkJci5taW4ueCwgci5taW4ueSwKKwkJci5tYXgueCwgci5t YXgueSk7CisJaWYod3JpdGUobS0+bWN0bGZkLCBidWYsIG4pICE9IG4pCisJCXJldHVybiAtMTsK KwlyZXR1cm4gMDsKK30KKwogdm9pZAordW5jbGlwbW91c2UoTW91c2VjdGwgKm0pCit7CisJZnBy aW50KG0tPm1jdGxmZCwgInVuY2xpcCIpOworfQorCit2b2lkCiBjbG9zZW1vdXNlKE1vdXNlY3Rs ICptYykKIHsKIAlpZihtYyA9PSBuaWwpCiAJCXJldHVybjsKIAljbG9zZShtYy0+bWZkKTsKKwlj bG9zZShtYy0+bWN0bGZkKTsKIAljbG9zZShtYy0+Y2ZkKTsKLQltYy0+bWZkID0gbWMtPmNmZCA9 IC0xOworCW1jLT5tZmQgPSBtYy0+bWN0bGZkID0gbWMtPmNmZCA9IC0xOwogCXRocmVhZGludCht Yy0+cGlkKTsKIH0KIApAQCAtOTYsNiArMTE3LDcgQEAKIHsKIAlNb3VzZWN0bCAqbWM7CiAJY2hh ciAqdCwgKnNsOworCWxvbmcgbjsKIAogCW1jID0gbWFsbG9jeihzaXplb2YoTW91c2VjdGwpLCAx KTsKIAlpZihmaWxlID09IG5pbCkKQEAgLTEwNiwxOCArMTI4LDI1IEBACiAJCWZyZWUobWMpOwog CQlyZXR1cm4gbmlsOwogCX0KLQl0ID0gbWFsbG9jKHN0cmxlbihmaWxlKSsxNik7CisJbiA9IHN0 cmxlbihmaWxlKSsxNjsKKwl0ID0gbWFsbG9jKG4pOwogCWlmICh0ID09IG5pbCkgewogCQljbG9z ZShtYy0+bWZkKTsKIAkJZnJlZShtYyk7CiAJCXJldHVybiBuaWw7CiAJfQotCXN0cmNweSh0LCBm aWxlKTsKKwlzZXByaW50KHQsIHQrbiwgIiVzIiwgZmlsZSk7CisJc3RyY2F0KHQsICJjdGwiKTsK IAlzbCA9IHV0ZnJydW5lKHQsICcvJyk7CiAJaWYoc2wpCi0JCXN0cmNweShzbCwgIi9jdXJzb3Ii KTsKKwkJc2VwcmludChzbCwgdCtuLCAiL21vdXNlY3RsIik7CiAJZWxzZQotCQlzdHJjcHkodCwg Ii9kZXYvY3Vyc29yIik7CisJCXNlcHJpbnQodCwgdCtuLCAiL2Rldi9tb3VzZWN0bCIpOworCW1j LT5tY3RsZmQgPSBvcGVuKHQsIE9SRFdSfE9DRVhFQyk7CisJaWYoc2wpCisJCXNlcHJpbnQoc2ws IHQrbiwgIi9jdXJzb3IiKTsKKwllbHNlCisJCXNlcHJpbnQodCwgdCtuLCAiL2Rldi9jdXJzb3Ii KTsKIAltYy0+Y2ZkID0gb3Blbih0LCBPUkRXUnxPQ0VYRUMpOwogCWZyZWUodCk7CiAJbWMtPmlt YWdlID0gaTsK --0000000000007aaf3405c6fffde6 Content-Type: application/octet-stream; name="qk2-mouseclip.diff" Content-Disposition: attachment; filename="qk2-mouseclip.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kr203rgu5 LS0tIC91c3IvZ2xlbmRhL3FrMi8uZ2l0L2ZzL29iamVjdC9hNGM0YjQ1ZDhiMjEzNjczM2M3NmE0 Yjg2Yzc4OTZiZmE5MzlhZDI1L3RyZWUvZGF0LmgKKysrIGRhdC5oCkBAIC0yOTMwLDMgKzI5MzAs NCBAQAogCiBleHRlcm4gZWRpY3RfdCAqc3ZfcGxheWVyOwogZXh0ZXJuIGNoYXIgc3Zfb3V0cHV0 YnVmW1NWX09VVFBVVEJVRl9MRU5HVEhdOworZXh0ZXJuIGludCBtY3RsZmQ7Ci0tLSAvdXNyL2ds ZW5kYS9xazIvLmdpdC9mcy9vYmplY3QvYTRjNGI0NWQ4YjIxMzY3MzNjNzZhNGI4NmM3ODk2YmZh OTM5YWQyNS90cmVlL3N5cy5jCisrKyBzeXMuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlICJm bnMuaCIKIAogdm9pZCBLQkRfVXBkYXRlKHZvaWQpOworaW50IG1jdGxmZDsKIAogbWFpbnN0YWNr c2l6ZSA9IDUxMioxMDI0OwogaW50IGN1cnRpbWU7CkBAIC0zOTgsNiArMzk5LDcgQEAKIAlpbnQg dGltZSwgb2xkdGltZSwgbmV3dGltZTsKIAogCXNldGZjcihnZXRmY3IoKSAmIH4oRlBPVkZMfEZQ VU5GTHxGUElOVkFMfEZQWkRJVikpOwkvKiBhc3N1bWVkIGlnbm9yZWQgaW4gY29kZSAqLworCW1j dGxmZCA9IG9wZW4oIi9kZXYvbW91c2VjdGwiLCBPV1JJVEUpOwogCW5vdGlmeShjcm9hayk7CiAK IAlzcmFuZChnZXRwaWQoKSk7Ci0tLSAvdXNyL2dsZW5kYS9xazIvLmdpdC9mcy9vYmplY3QvYTRj NGI0NWQ4YjIxMzY3MzNjNzZhNGI4NmM3ODk2YmZhOTM5YWQyNS90cmVlL3ZpZC5jCisrKyB2aWQu YwpAQCAtODYsNiArODYsNyBAQAogCQlzeXNmYXRhbCgiYWxsb2NpbWFnZTogJXIiKTsKIAl2aWQu YnVmZmVyID0gZmI7CiAJdmlkLnJvd2J5dGVzID0gdmlkLndpZHRoICogc2l6ZW9mICpmYnBhbDsK KwlmcHJpbnQobWN0bGZkLCAiY2xpcCAlZCAlZCAlZCAlZCIsIHNjcmVlbi0+ci5taW4ueCwgc2Ny ZWVuLT5yLm1pbi55LCBzY3JlZW4tPnIubWF4LngsIHNjcmVlbi0+ci5tYXgueSk7CiAJY2VudGVy ID0gYWRkcHQoc2NyZWVuLT5yLm1pbiwgUHQodmlkLndpZHRoLzIsIHZpZC5oZWlnaHQvMikpOwog CXAgPSBQdCh2aWQud2lkdGgvNCwgdmlkLmhlaWdodC80KTsKIAlncmFiciA9IFJwdChzdWJwdChj ZW50ZXIsIHApLCBhZGRwdChjZW50ZXIsIHApKTsK --0000000000007aaf3405c6fffde6--