Move a window
Steven J Abner <[email protected]> Fri, 30 May 2025 17:11:17 -0400
| Newsgroups | gmane.comp.freedesktop.xcb |
|---|---|
| Message-ID | <[email protected]> |
--=-fgyiyzLbA+FdDsDhKErp Content-Type: text/plain; charset=us-ascii; format=flowed Please, I'm begging for help! After over a month of finding a kernel bug, building Xorg/mesa from scratch, rewriting code, to eliminate this bug or secret, I've created a program to demonstrate. I need the secret handshake or password to get any window manager, except the great! twm to run this. To build: gcc -ansi -pedantic -Wall -g -o xmove xmove.c -lxcb To run for bare xorg: with no-wm either in xinitrc: cd <where built> ./xmove or with xterm: exec $xterm -geometry 120X62+850+0 -name login and from xterm: cd <where built> ./xmove with twm: $twm & exec $xterm -geometry 120X62+850+0 -name login and from xterm: cd <where built> ./xmove from any OS with (arrrg) window manager: use console, not xinitrc Don't say _NET_WM_MOVERESIZE because it doesn't work on every window manager. And on the 3 tested this 'grab' won't work. It has confines placed on it from moving past edges or 'STRUT's where cursor gets separated from drag point (mouse location). PS freedesktop link from EWMH doesn't work, not that the managers follow, and I don't expect a reply from stack exchange. Steve --=-fgyiyzLbA+FdDsDhKErp Content-Type: text/x-csrc Content-Disposition: attachment; filename=xmove.c Content-Transfer-Encoding: base64 LyoKICogTW92ZSB3aW5kb3cgZGVtbwogKiBTdGV2ZW4gSiBBYm5lciAyMDI1CiAqLwojaW5jbHVk ZSA8eGNiL3hjYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5j bHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzdGRib29sLmg+CiNpbmNsdWRlIDxpbnR0eXBlcy5o PgojaW5jbHVkZSA8bGltaXRzLmg+CiNpbmNsdWRlIDxwb2xsLmg+CgovKiBnY2MgLWFuc2kgLXBl ZGFudGljIC1XYWxsIC1Xbm8tdW5rbm93bi1wcmFnbWFzIC1nIFwKIC1vIHhtb3ZlIHhtb3ZlLmMg LWx4Y2IgKi8KCnR5cGVkZWYgc3RydWN0IF9QaHhJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBoeEludGVyZmFjZTsKdHlwZWRlZiBzdHJ1Y3QgX1BoeFJlY3RhbmdsZSB7IGlu dDE2X3QgeCwgeSwgdywgaDsgfSAgICAgUGh4UmVjdGFuZ2xlOwoKeGNiX2Nvbm5lY3Rpb25fdCAg ICAgKmNvbm5lY3Rpb24gPSBOVUxMOwp4Y2JfYXRvbV90IFdNX1BST1RPQ09MUzsKeGNiX2F0b21f dCBXTV9ERUxFVEVfV0lORE9XOwppbnQxNl90IHhyb290LCB5cm9vdDsKCnN0cnVjdCBfUGh4SW50 ZXJmYWNlIHsKIFBoeFJlY3RhbmdsZSAgbWV0ZV9ib3g7CiB4Y2Jfd2luZG93X3QgIHdpbmRvdzsK fSBpZmFjZTAgPSB7IHswfSwgMCB9OwoKI2lmIChfX1NURENfVkVSU0lPTl9fIDw9IDE5OTkwMUwp CiAjZGVmaW5lIFJFQ1RBTkdMRShhLGIsYyxkLGUpIFwKICBhLnggPSBiLCBhLnkgPSBjLCBhLncg PSBkLCBhLmggPSBlCiNlbHNlCiAjZGVmaW5lIFJFQ1RBTkdMRShhLGIsYyxkLGUpIFwKICBhID0g KFBoeFJlY3RhbmdsZSl7IGIsIGMsIGQsIGUgfQojZW5kaWYKCnN0YXRpYyBib29sCmV2ZW50X2tl eWJvYXJkKHhjYl9nZW5lcmljX2V2ZW50X3QgKm52dCkgewoKICB4Y2Jfa2V5X3ByZXNzX2V2ZW50 X3QgKmtwID0gKHhjYl9rZXlfcHJlc3NfZXZlbnRfdCopbnZ0OwogIHhjYl9jbGllbnRfbWVzc2Fn ZV9ldmVudF90ICptZXNzYWdlOwogIG1lc3NhZ2UgPSBjYWxsb2MoMzIsIDEpOwogIG1lc3NhZ2Ut PnJlc3BvbnNlX3R5cGUgID0gWENCX0NMSUVOVF9NRVNTQUdFOwogIG1lc3NhZ2UtPmZvcm1hdCAg ICAgICAgID0gMzI7CiAgbWVzc2FnZS0+d2luZG93ICAgICAgICAgPSBrcC0+ZXZlbnQ7CiAgbWVz c2FnZS0+dHlwZSAgICAgICAgICAgPSBXTV9QUk9UT0NPTFM7CiAgbWVzc2FnZS0+ZGF0YS5kYXRh MzJbMF0gPSBXTV9ERUxFVEVfV0lORE9XOwogIG1lc3NhZ2UtPmRhdGEuZGF0YTMyWzFdID0ga3At PnRpbWU7CiAgeGNiX3NlbmRfZXZlbnQoY29ubmVjdGlvbiwgZmFsc2UsIG1lc3NhZ2UtPndpbmRv dywKICAgICAgICAgICAgICAgICAgICAgWENCX0VWRU5UX01BU0tfTk9fRVZFTlQsIChjaGFyKilt ZXNzYWdlKTsKICB4Y2JfZmx1c2goY29ubmVjdGlvbik7CiAgcmV0dXJuIHRydWU7Cn0KCnN0YXRp YyBib29sCmV2ZW50X21vdXNlKHhjYl9nZW5lcmljX2V2ZW50X3QgKm52dCkgewoKICBib29sIGxv Y3VzID0gKChudnQtPnJlc3BvbnNlX3R5cGUgJiAodWludDhfdCl+MHg4MCkgPT0gWENCX0JVVFRP Tl9QUkVTUyk7CiAgeGNiX2J1dHRvbl9wcmVzc19ldmVudF90ICptb3VzZQogICAgPSAoeGNiX2J1 dHRvbl9wcmVzc19ldmVudF90KiludnQ7CgogIGlmIChsb2N1cykgewogICAgeGNiX2dyYWJfcG9p bnRlcl9jb29raWVfdCBjMDsKICAgIHhjYl9ncmFiX3BvaW50ZXJfcmVwbHlfdCAqcjA7CgogICAg eHJvb3QgPSBtb3VzZS0+cm9vdF94OwogICAgeXJvb3QgPSBtb3VzZS0+cm9vdF95OwogICAgYzAg PSB4Y2JfZ3JhYl9wb2ludGVyKGNvbm5lY3Rpb24sIDEsIG1vdXNlLT5ldmVudCwKICAgICAgICBY Q0JfRVZFTlRfTUFTS19CVVRUT05fUFJFU1MgfCBYQ0JfRVZFTlRfTUFTS19CVVRUT05fUkVMRUFT RQogICAgICAgICAgIHwgWENCX0VWRU5UX01BU0tfUE9JTlRFUl9NT1RJT04sCiAgICAgICAgWENC X0dSQUJfTU9ERV9BU1lOQywgWENCX0dSQUJfTU9ERV9BU1lOQywKICAgICAgICBYQ0JfTk9ORSwg WENCX05PTkUsIG1vdXNlLT50aW1lKTsKICAgIHIwID0geGNiX2dyYWJfcG9pbnRlcl9yZXBseShj b25uZWN0aW9uLCBjMCwgTlVMTCk7CiAgICBpZiAoKHIwID09IE5VTEwpIHx8IChyMC0+c3RhdHVz ICE9IFhDQl9HUkFCX1NUQVRVU19TVUNDRVNTKSkgewogICAgICBwdXRzKCJncmFiIGZhaWxlZCIp OwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfSBlbHNlIHsKICAgIHhjYl91bmdyYWJfcG9p bnRlcihjb25uZWN0aW9uLCBtb3VzZS0+dGltZSk7CiAgfQogIHJldHVybiB0cnVlOwp9CgpzdGF0 aWMgYm9vbApldmVudF9tb3Rpb24oeGNiX2dlbmVyaWNfZXZlbnRfdCAqbnZ0KSB7CgogIHhjYl9t b3Rpb25fbm90aWZ5X2V2ZW50X3QgKm1vdGlvbgogICAgPSAoeGNiX21vdGlvbl9ub3RpZnlfZXZl bnRfdCopbnZ0OwoKICBpZiAoISEobW90aW9uLT5zdGF0ZSAmIFhDQl9CVVRUT05fTUFTS18xKSkg ewogICAgaW50MzJfdCB2YWx1ZXNbMl07CiAgICB4Y2JfcXVlcnlfcG9pbnRlcl9jb29raWVfdCBj MAogICAgICA9IHhjYl9xdWVyeV9wb2ludGVyKGNvbm5lY3Rpb24sIGlmYWNlMC53aW5kb3cpOwog ICAgeGNiX3F1ZXJ5X3BvaW50ZXJfcmVwbHlfdCAqcjAKICAgICAgPSB4Y2JfcXVlcnlfcG9pbnRl cl9yZXBseShjb25uZWN0aW9uLCBjMCwgTlVMTCk7CiAgICB4Y2JfZmx1c2goY29ubmVjdGlvbik7 CiAgICB2YWx1ZXNbMF0gPSAoaWZhY2UwLm1ldGVfYm94LnggKz0gKHIwLT5yb290X3ggLSB4cm9v dCkpOwogICAgdmFsdWVzWzFdID0gKGlmYWNlMC5tZXRlX2JveC55ICs9IChyMC0+cm9vdF95IC0g eXJvb3QpKTsKICAgIHhyb290ID0gcjAtPnJvb3RfeDsKICAgIHlyb290ID0gcjAtPnJvb3RfeTsK ICAgIGZyZWUocjApOwogICAgeGNiX2NvbmZpZ3VyZV93aW5kb3coY29ubmVjdGlvbiwgbW90aW9u LT5ldmVudCwKICAgICAgICAgICAgICAgICBYQ0JfQ09ORklHX1dJTkRPV19YIHwgWENCX0NPTkZJ R19XSU5ET1dfWSwgdmFsdWVzKTsKICAgIHhjYl9mbHVzaChjb25uZWN0aW9uKTsKICB9CiAgcmV0 dXJuIHRydWU7Cn0KCnN0YXRpYyBpbnQzMl90CnByb2Nlc3NfdGltZXJzKHZvaWQpIHsKICByZXR1 cm4gSU5UX01BWDsKfQoKc3RhdGljIGJvb2wKcHJvY2Vzc19ldmVudCh4Y2JfZ2VuZXJpY19ldmVu dF90ICpudnQpIHsKCiAgc3dpdGNoIChudnQtPnJlc3BvbnNlX3R5cGUgJiAodWludDhfdCl+MHg4 MCkgewoKICAgIGNhc2UgWENCX0tFWV9QUkVTUzogeyAgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUg MiAqLwogICAgICBldmVudF9rZXlib2FyZChudnQpOwogICAgICBicmVhazsKICAgIH0KICAgIGNh c2UgWENCX0tFWV9SRUxFQVNFOiB7ICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgMyAqLwogICAgICBi cmVhazsKICAgIH0KCiAgICBjYXNlIFhDQl9CVVRUT05fUFJFU1M6ICAgICAgICAvKiByZXNwb25z ZV90eXBlIDQgKi8KICAgIGNhc2UgWENCX0JVVFRPTl9SRUxFQVNFOiB7ICAgIC8qIHJlc3BvbnNl X3R5cGUgNSAqLwogICAgICBldmVudF9tb3VzZShudnQpOwogICAgICBicmVhazsKICAgIH0KCiAg ICBjYXNlIFhDQl9NT1RJT05fTk9USUZZOiB7ICAgICAvKiByZXNwb25zZV90eXBlIDYgKi8KICAg ICAgZXZlbnRfbW90aW9uKG52dCk7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0VO VEVSX05PVElGWTogICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgNyAqLwogICAgY2FzZSBYQ0JfTEVB VkVfTk9USUZZOiB7ICAgICAgLyogcmVzcG9uc2VfdHlwZSA4ICovCiAgICAgIGJyZWFrOwogICAg fQoKICAgIGNhc2UgWENCX0ZPQ1VTX0lOOiB7ICAgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgOSAq LwogICAgICB4Y2Jfc2V0X2lucHV0X2ZvY3VzKGNvbm5lY3Rpb24sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgWENCX0lOUFVUX0ZPQ1VTX1BBUkVOVCwKICAgICAgICAgICAgICAgICAgICAgICAg ICBpZmFjZTAud2luZG93LCBYQ0JfQ1VSUkVOVF9USU1FKTsKICAgICAgYnJlYWs7CiAgICB9CiAg ICBjYXNlIFhDQl9GT0NVU19PVVQ6IHsgICAgICAgICAvKiByZXNwb25zZV90eXBlIDEwICovCiAg ICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0VYUE9TRTogeyAgICAgICAgICAgIC8qIHJl c3BvbnNlX3R5cGUgMTIgKi8KICAgICAgYnJlYWs7CiAgICB9CgogICAgY2FzZSBYQ0JfVklTSUJJ TElUWV9OT1RJRlk6IHsgLyogcmVzcG9uc2VfdHlwZSAxNSAqLwogICAgICBicmVhazsKICAgIH0K CiAgICBjYXNlIFhDQl9ERVNUUk9ZX05PVElGWTogeyAgICAvKiByZXNwb25zZV90eXBlIDE3ICov CiAgICAgICAgLyogYXNzdW1lIGEga2lsbCwgZGVsZXRlIGFsbCB3aW5kb3dzIChkbyB0aGVpciB0 aGluZykKICAgICAgICAgICBzZW5kIGZhbHNlIHRvIGV4aXQgbG9vcCAqLwogICAgICBmcmVlKG52 dCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgICAgLyogdGhlc2UgNCBiZWNhdXNlIG9m IFhDQl9FVkVOVF9NQVNLX1NUUlVDVFVSRV9OT1RJRlkgKi8KICAgIGNhc2UgWENCX1VOTUFQX05P VElGWTogeyAgICAgIC8qIHJlc3BvbnNlX3R5cGUgMTggKi8KICAgICAgYnJlYWs7CiAgICB9CiAg ICBjYXNlIFhDQl9NQVBfTk9USUZZOiB7ICAgICAgICAvKiByZXNwb25zZV90eXBlIDE5ICovCiAg ICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfUkVQQVJFTlRfTk9USUZZOiB7ICAgLyogcmVz cG9uc2VfdHlwZSAyMSAqLwogICAgICAgIC8qIHBvc2l0aW9uIGFmdGVyIG1hcCwgdG8gZGVzaWdu IHVzZXIgcmVxdWVzdGVkIG9mIHdpbmRvdwogICAgICAgICAqIHNldCBvbmNlIGFuZCB3aGVuIHdp bmRvdyBtYW5hZ2VyIGFza3MgdG8gcmVwYXJlbnQKICAgICAgICAgKiBkb250IG5lZWQgZHVyaW5n IGljb24vZGVpY29uaWZ5CiAgICAgICAgICogZG9lc250IHN0b3AgV00gY29uZmlndXJlcywgYnV0 IHdpbGwgYmUgc2VudCBhZnRlciBtYXAgbm90aWZ5ICovCiAgICAgIHVpbnQzMl90IHZhbHVlc1sy XTsKICAgICAgdmFsdWVzWzBdID0gaWZhY2UwLm1ldGVfYm94Lng7CiAgICAgIHZhbHVlc1sxXSA9 IGlmYWNlMC5tZXRlX2JveC55OwogICAgICB4Y2JfY29uZmlndXJlX3dpbmRvdyhjb25uZWN0aW9u LCBpZmFjZTAud2luZG93LAogICAgICAgICAgICAgICAgICAgWENCX0NPTkZJR19XSU5ET1dfWCB8 IFhDQl9DT05GSUdfV0lORE9XX1ksIHZhbHVlcyk7CiAgICAgIGJyZWFrOwogICAgfQogCiAgIGNh c2UgWENCX0NPTkZJR1VSRV9OT1RJRlk6IHsgIC8qIHJlc3BvbnNlX3R5cGUgMjIgKi8KICAgICAg IGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX1BST1BFUlRZX05PVElGWTogeyAgIC8qIHJlc3Bv bnNlX3R5cGUgMjggKi8KICAgIGNhc2UgWENCX1NFTEVDVElPTl9DTEVBUjogICAgIC8qIHJlc3Bv bnNlX3R5cGUgMjkgKi8KICAgIGNhc2UgWENCX1NFTEVDVElPTl9SRVFVRVNUOiAgIC8qIHJlc3Bv bnNlX3R5cGUgMzAgKi8KICAgIGNhc2UgWENCX1NFTEVDVElPTl9OT1RJRlk6ICAgIC8qIHJlc3Bv bnNlX3R5cGUgMzEgKi8KICAgICAgYnJlYWs7CiAgICB9CgogICAgY2FzZSBYQ0JfQ0xJRU5UX01F U1NBR0U6IHsgICAgLyogcmVzcG9uc2VfdHlwZSAzMyAqLwogICAgICB4Y2JfY2xpZW50X21lc3Nh Z2VfZXZlbnRfdCAqY20KICAgICAgICA9ICh4Y2JfY2xpZW50X21lc3NhZ2VfZXZlbnRfdCopbnZ0 OwogICAgICBpZiAoY20tPnR5cGUgIT0gV01fUFJPVE9DT0xTKSAgZ290byByZXBvcnQ7CiAgICAg IHhjYl91bm1hcF93aW5kb3coY29ubmVjdGlvbiwgaWZhY2UwLndpbmRvdyk7CiAgICAgIHhjYl9k ZXN0cm95X3dpbmRvdyhjb25uZWN0aW9uLCBpZmFjZTAud2luZG93KTsKICAgICAgYnJlYWs7CiAg ICB9CgogICAgZGVmYXVsdDoKICAgICAgaWYgKG52dC0+cmVzcG9uc2VfdHlwZSA9PSAwKSB7CiAg ICAgICAgeGNiX2dlbmVyaWNfZXJyb3JfdCAqZXJyID0gKHhjYl9nZW5lcmljX2Vycm9yX3QqKW52 dDsKICAgICAgICBwcmludGYoImVycm9yOiAlIlBSSXU4IlxuIiwgZXJyLT5lcnJvcl9jb2RlKTsK ICAgICAgICBicmVhazsKICAgICAgfQpyZXBvcnQ6CiAgICAgICAgLyogVW5rbm93biBldmVudCB0 eXBlLCB1c2UgdG8gdHJhY2sgY29kaW5nIHByb2JsZW1zICovCiAgICAgIHByaW50ZigiVW5rbm93 biBldmVudDogJSJQUkl1OCJcbiIsIG52dC0+cmVzcG9uc2VfdHlwZSk7CiAgICAgIGJyZWFrOwoK ICB9IC8qIGVuZCBzd2l0Y2gocmVzcG9uc2VfdHlwZSkgKi8KICAgIC8qIG52dCBubyBsb25nZXIg bmVlZGVkICovCiAgZnJlZShudnQpOwogICAgLyogY3JpdGljYWwhIG90aGVyd2lzZSB3b250IHBy b2Nlc3MgYW55dGhpbmcgZG9uZSAqLwogIHhjYl9mbHVzaChjb25uZWN0aW9uKTsKICByZXR1cm4g dHJ1ZTsKfQoKc3RhdGljIHZvaWQKeGNiX21haW4odm9pZCkgewoKICAgIC8qIHNldCBhbGwgYmVm b3JlIHRocm91Z2ggdG8gWHNlcnZlciAqLwogIHhjYl9mbHVzaChjb25uZWN0aW9uKTsKCiAgZG8g ewogICAgaW50IHRpbWVvdXQ7CiAgICB4Y2JfZ2VuZXJpY19ldmVudF90ICpldmVudDsKICAgIHdo aWxlICgoZXZlbnQgPSB4Y2JfcG9sbF9mb3JfZXZlbnQoY29ubmVjdGlvbikpICE9IE5VTEwpCiAg ICAgICAgLyogX3Byb2Nlc3NfZXZlbnQoKSByZXR1cm5zICdydW5uaW5nJyBmb3IgbWFpbiBsb29w LiAqLwogICAgICBpZiAocHJvY2Vzc19ldmVudChldmVudCkgPT0gZmFsc2UpICBnb3RvIGNsZWFu dXA7CiAgICBkbyB7CiAgICAgICAgLyogX3Byb2Nlc3NfdGltZXJzKCkgcnVucyBhbnkgdGltZXJz IHRoYXQgYXJlIGltbWVkaWF0ZWx5IHBlbmRpbmcsCiAgICAgICAgICAgYW5kIHJldHVybnMgdGhl IG51bWJlciBvZiBtaWxsaXNlY29uZHMgdW50aWwgdGhlIG5leHQgdGltZXIKICAgICAgICAgICBp biB0aGUgcXVldWUgaXMgcmVhZHkuCiAgICAgICAgICAgX3Byb2Nlc3NfdGltZXJzKCkgcmV0dXJu cyBJTlRfTUFYIGlmIHRoZXJlIGFyZSBubyB0aW1lcnMuICovCiAgICAgICAgLyogX3Byb2Nlc3Nf dGltZXJzKCkgYWxzbyByZW1vdmVzIGZyb20gdGltZW91dCBpdHMgcnVuIHRpbWUuICovCiAgICAg IHRpbWVvdXQgPSBwcm9jZXNzX3RpbWVycygpOwogICAgICBpZiAoKGV2ZW50ID0geGNiX3BvbGxf Zm9yX3F1ZXVlZF9ldmVudChjb25uZWN0aW9uKSkgPT0gTlVMTCkgIGJyZWFrOwogICAgICAgIGlm IChwcm9jZXNzX2V2ZW50KGV2ZW50KSA9PSBmYWxzZSkgIGdvdG8gY2xlYW51cDsKICAgIH0gd2hp bGUgKDEpOwogICAgaWYgKHRpbWVvdXQgPiA2KSB7CiAgICAgIHN0cnVjdCBwb2xsZmQgcGZkWzFd OwogICAgICBwZmQtPmZkID0geGNiX2dldF9maWxlX2Rlc2NyaXB0b3IoY29ubmVjdGlvbik7CiAg ICAgIHBmZC0+ZXZlbnRzID0gUE9MTElOOwogICAgICBwZmQtPnJldmVudHMgPSBQT0xMT1VUOwog ICAgICBwb2xsKHBmZCwgMSwgdGltZW91dCk7CiAgICB9CiAgfSB3aGlsZSAoMSk7CiAgICAvKiBy ZWNlaXZlZCBYQ0JfREVTVFJPWV9OT1RJRlkgKi8KY2xlYW51cDoKICByZXR1cm47Cn0KCnZvaWQK dWlfd2luZG93X25hbWUoeGNiX3dpbmRvd190IHdpbmRvdykgewoKICB4Y2JfaW50ZXJuX2F0b21f Y29va2llX3QgY29va2llCiAgICA9IHhjYl9pbnRlcm5fYXRvbShjb25uZWN0aW9uLCAxLCA3LCAi V01fTkFNRSIpOwogIHhjYl9pbnRlcm5fYXRvbV9yZXBseV90ICpyZXBseQogICAgPSB4Y2JfaW50 ZXJuX2F0b21fcmVwbHkoY29ubmVjdGlvbiwgY29va2llLCBOVUxMKTsKICB4Y2JfaW50ZXJuX2F0 b21fY29va2llX3QgY29va2llMgogICAgPSB4Y2JfaW50ZXJuX2F0b20oY29ubmVjdGlvbiwgMCwg NiwgIlNUUklORyIpOwogIHhjYl9pbnRlcm5fYXRvbV9yZXBseV90ICpyZXBseTIKICAgID0geGNi X2ludGVybl9hdG9tX3JlcGx5KGNvbm5lY3Rpb24sIGNvb2tpZTIsIE5VTEwpOwoKICBjaGFyIHRp dGxlWzE2XTsKICBzcHJpbnRmKHRpdGxlLCAiJWQiLCB3aW5kb3cpOwogIHhjYl9jaGFuZ2VfcHJv cGVydHkoY29ubmVjdGlvbiwgWENCX1BST1BfTU9ERV9SRVBMQUNFLCB3aW5kb3csCiAgICAgICAg ICAgICAgICAgICAgICAgcmVwbHktPmF0b20sIHJlcGx5Mi0+YXRvbSwgOCwKICAgICAgICAgICAg ICAgICAgICAgICBzdHJsZW4odGl0bGUpLCB0aXRsZSk7CiAgZnJlZShyZXBseSk7CiAgZnJlZShy ZXBseTIpOwp9CgpzdGF0aWMgdm9pZApfd2luZG93X2V2ZW50X2RlbGV0ZSh4Y2JfY29ubmVjdGlv bl90ICpjb25uZWN0aW9uLCB4Y2Jfd2luZG93X3Qgd2luZG93KSB7CgogICAgLyogYWxsb3cgZGVs ZXRlIHdpbmRvdyBzbyBjYW4gcXVpdCBhcHBsaWNhdGlvbi4gQXZvaWQgXkMuICovCiAgeGNiX2No YW5nZV9wcm9wZXJ0eShjb25uZWN0aW9uLCBYQ0JfUFJPUF9NT0RFX1JFUExBQ0UsIHdpbmRvdywK ICAgICAgICAgICAgICAgICAgICAgIFdNX1BST1RPQ09MUywgWENCX0FUT01fQVRPTSwgMzIsIDEs CiAgICAgICAgICAgICAgICAgICAgICAmV01fREVMRVRFX1dJTkRPVyk7Cn0KCnN0YXRpYyB4Y2Jf d2luZG93X3QKX3dpbmRvd19jcmVhdGUoUGh4UmVjdGFuZ2xlIGNvbmZpZ3VyZSkgewoKICB4Y2Jf c2NyZWVuX3QgKnNjcmVlbjsKICB4Y2Jfd2luZG93X3Qgd2luZG93OwogIHVpbnQzMl90IG1hc2s7 CiAgdWludDMyX3QgdmFsdWVzWzJdOwoKICBpZiAoY29ubmVjdGlvbiA9PSBOVUxMKSB7CiAgICB4 Y2JfaW50ZXJuX2F0b21fY29va2llX3QgYzAsIGMxOwogICAgeGNiX2ludGVybl9hdG9tX3JlcGx5 X3QgKnIwLCAqcjE7CiAgICBjb25uZWN0aW9uID0geGNiX2Nvbm5lY3QoTlVMTCwgTlVMTCk7CiAg ICBjMCA9IHhjYl9pbnRlcm5fYXRvbShjb25uZWN0aW9uLCAwLCAxMiwgIldNX1BST1RPQ09MUyIp OwogICAgYzEgPSB4Y2JfaW50ZXJuX2F0b20oY29ubmVjdGlvbiwgMCwgMTYsICJXTV9ERUxFVEVf V0lORE9XIik7CiAgICByMCA9IHhjYl9pbnRlcm5fYXRvbV9yZXBseShjb25uZWN0aW9uLCBjMCwg TlVMTCk7CiAgICByMSA9IHhjYl9pbnRlcm5fYXRvbV9yZXBseShjb25uZWN0aW9uLCBjMSwgTlVM TCk7CiAgICBXTV9QUk9UT0NPTFMgICAgID0gcjAtPmF0b207ICBmcmVlKCh2b2lkKilyMCk7CiAg ICBXTV9ERUxFVEVfV0lORE9XID0gcjEtPmF0b207ICBmcmVlKCh2b2lkKilyMSk7CiAgfQoKICBz Y3JlZW4gPSB4Y2Jfc2V0dXBfcm9vdHNfaXRlcmF0b3IoeGNiX2dldF9zZXR1cChjb25uZWN0aW9u KSkuZGF0YTsKICAgIC8qIENyZWF0ZSB0aGUgd2luZG93ICovCiAgd2luZG93ID0geGNiX2dlbmVy YXRlX2lkKGNvbm5lY3Rpb24pOwoKICBtYXNrICAgICAgPSBYQ0JfQ1dfQkFDS19QSVhFTCB8IFhD Ql9DV19FVkVOVF9NQVNLOwogIHZhbHVlc1swXSA9IHNjcmVlbi0+d2hpdGVfcGl4ZWw7CiAgdmFs dWVzWzFdID0gWENCX0VWRU5UX01BU0tfRVhQT1NVUkUgICAgICAgfCBYQ0JfRVZFTlRfTUFTS19C VVRUT05fUFJFU1MgICB8CiAgICAgICAgICAgICAgWENCX0VWRU5UX01BU0tfQlVUVE9OX1JFTEVB U0UgfCBYQ0JfRVZFTlRfTUFTS19QT0lOVEVSX01PVElPTiB8CiAgICAgICAgICAgICAgWENCX0VW RU5UX01BU0tfRU5URVJfV0lORE9XICAgfCBYQ0JfRVZFTlRfTUFTS19MRUFWRV9XSU5ET1cgICB8 CiAgICAgICAgICAgICAgWENCX0VWRU5UX01BU0tfS0VZX1BSRVNTICAgICAgfCBYQ0JfRVZFTlRf TUFTS19LRVlfUkVMRUFTRSAgICB8CiAgICAgICAgICAgICAgWENCX0VWRU5UX01BU0tfRk9DVVNf Q0hBTkdFICAgfCBYQ0JfRVZFTlRfTUFTS19TVFJVQ1RVUkVfTk9USUZZIHwKICAgICAgICAgICAg ICBYQ0JfRVZFTlRfTUFTS19WSVNJQklMSVRZX0NIQU5HRTsKCiAgICAvKiBpZ25vcmVzIHgsIHks IGJvcmRlcl93aWR0aCAodmlydXMpICovCiAgeGNiX2NyZWF0ZV93aW5kb3coY29ubmVjdGlvbiwK ICAgICAgICAgICAgICAgICAgICBzY3JlZW4tPnJvb3RfZGVwdGgsICAgICAgICAgICAgLyogZGVw dGggICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICB3aW5kb3csICAgICAgICAgICAgICAg ICAgICAgICAgLyogZ2VuZXJhdGVkIGlkICAgKi8KICAgICAgICAgICAgICAgICAgICBzY3JlZW4t PnJvb3QsICAgICAgICAgICAgICAgICAgLyogcGFyZW50IHdpbmRvdyAgKi8KICAgICAgICAgICAg ICAgICAgICBjb25maWd1cmUueCwgICAgICAgICAgICAgICAgICAgLyogeCwgeSAgICAgICAgICAg Ki8KICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUueSwKICAgICAgICAgICAgICAgICAgICBj b25maWd1cmUudywgICAgICAgICAgICAgICAgICAgLyogd2lkdGgsIGhlaWdodCAgKi8KICAgICAg ICAgICAgICAgICAgICBjb25maWd1cmUuaCwKICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogYm9yZGVyX3dpZHRoICAgKi8KICAgICAgICAgICAgICAg ICAgICBYQ0JfV0lORE9XX0NMQVNTX0lOUFVUX09VVFBVVCwgLyogY2xhc3MgICAgICAgICAgKi8K ICAgICAgICAgICAgICAgICAgICBzY3JlZW4tPnJvb3RfdmlzdWFsLCAgICAgICAgICAgLyogdmlz dWFsICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBtYXNrLCB2YWx1ZXMpOyAgICAgICAg ICAgICAgICAgLyogbWFza3MgKi8KCnsKICB1aW50MzJfdCB2YWx1ZV9saXN0OwogIHhjYl9mb250 X3QgZm9udDsKICB4Y2JfY3Vyc29yX3QgY3Vyc29yOwogIGZvbnQgPSB4Y2JfZ2VuZXJhdGVfaWQo Y29ubmVjdGlvbik7CiAgeGNiX29wZW5fZm9udChjb25uZWN0aW9uLCBmb250LCBzdHJsZW4gKCJj dXJzb3IiKSwgImN1cnNvciIpOwogIGN1cnNvciA9IHhjYl9nZW5lcmF0ZV9pZChjb25uZWN0aW9u KTsKICB4Y2JfY3JlYXRlX2dseXBoX2N1cnNvcihjb25uZWN0aW9uLCBjdXJzb3IsIGZvbnQsIGZv bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzMiwgMTMyICsgMSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgMCwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwg MCk7CiAgdmFsdWVfbGlzdCA9IGN1cnNvcjsKICB4Y2JfY2hhbmdlX3dpbmRvd19hdHRyaWJ1dGVz KGNvbm5lY3Rpb24sIHdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDQl9D V19DVVJTT1IsICZ2YWx1ZV9saXN0KTsKfQogIF93aW5kb3dfZXZlbnRfZGVsZXRlKGNvbm5lY3Rp b24sIHdpbmRvdyk7CiAgcmV0dXJuIHdpbmRvdzsKfQoKeGNiX3dpbmRvd190CnVpX3dpbmRvd19j cmVhdGUoUGh4UmVjdGFuZ2xlIGNvbmZpZ3VyZSkgewoKICB4Y2Jfd2luZG93X3Qgd2luZG93ID0g X3dpbmRvd19jcmVhdGUoY29uZmlndXJlKTsKICBpZiAod2luZG93ID09IDApICByZXR1cm4gMDsK CiAgaWZhY2UwLm1ldGVfYm94ID0gY29uZmlndXJlOwogIGlmYWNlMC53aW5kb3cgPSB3aW5kb3c7 CiAgcmV0dXJuIHdpbmRvdzsKfQoKaW50Cm1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgewoK ICB4Y2Jfd2luZG93X3Qgd2luZG93OwoKICAgIC8qIHdpbmRvdyBzaXplIGFuZCBwb3NpdGlvbiAq LwogIFBoeFJlY3RhbmdsZSBjb25maWd1cmUgPSB7IDgwMCwgMjAwLCAzMDAsIDIwMCB9OwogICAg LyogQSAndG9wbW9zdCcgZGVjb3JhdGVkIHdpbmRvdyAqLwogIHdpbmRvdyA9IHVpX3dpbmRvd19j cmVhdGUoY29uZmlndXJlKTsKICBpZiAod2luZG93ID09IDApICBleGl0KEVYSVRfRkFJTFVSRSk7 CgogIHVpX3dpbmRvd19uYW1lKHdpbmRvdyk7CgogICAgLyogTWFwIHRoZSB3aW5kb3cgb24gdGhl IHNjcmVlbiAqLwogIHhjYl9tYXBfd2luZG93KGNvbm5lY3Rpb24sIHdpbmRvdyk7CgogICAgLyog UnVuIGV2ZW50IGxvb3AgKi8KICB4Y2JfbWFpbigpOwoKICByZXR1cm4gRVhJVF9TVUNDRVNTOwp9 Cg== --=-fgyiyzLbA+FdDsDhKErp--