pop up windows
Steven J Abner <[email protected]> Thu, 13 Feb 2025 14:37:05 -0500
| Newsgroups | gmane.comp.freedesktop.xcb |
|---|---|
| Message-ID | <[email protected]> |
--=-vuDi7qU9XqprIoS/tjas Content-Type: text/plain; charset=us-ascii; format=flowed Hoping xcb can help. I am attaching demo file to clarify. I broke down original as much as I could with minimalist debug code. Can send more if needed. I don't have a LFS system to test on, but my guess it will work like it should. The 2 systems tested on have the WM of 'GNOME Shell' and 'Compiz'. GNOME Shell will not focus out nor provide info on 'root' window to unmap or destroy pop up. Compiz on parent of transient does get focus out signal but only half way does it, visually provides a partial background look, but doesn't background. You can still move or resize while popup is foreground. I've tried both ICCCM and EWM suggestions and in multiple combinations, even silly stuff like setting parent to override-redirect when popup is mapped. Thing I haven't tried are using wmctrl to get PID, to get FD for interception of WMs. My hope is looking at demo, someone can spot what I'm doing wrong. Please, please look. Without this working I can't do combo buttons, menus, context menus, etc. Found older code of a tutorial that had this problem. Really looks silly moving window with menus off on their own. They should disappear when button pressed on title bar. GNOME Shell gets that right, where Compiz gets root window right. Steve gcc -ansi -pedantic -Wall -Wno-unknown-pragmas -g -o xpop xpop.c -lxcb && gdb xpop --=-vuDi7qU9XqprIoS/tjas Content-Type: text/x-csrc Content-Disposition: attachment; filename=xpop.c Content-Transfer-Encoding: base64 I2luY2x1ZGUgPHhjYi94Y2IuaD4gIC8qIGhhcyBjb3JyZWN0IHN5cy90eXBlcyAqLwojaW5jbHVk ZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNs dWRlIDxzdGRib29sLmg+CiNpbmNsdWRlIDxpbnR0eXBlcy5oPgojaW5jbHVkZSA8bGltaXRzLmg+ CiNpbmNsdWRlIDxwb2xsLmg+CgovKiBnY2MgLWFuc2kgLXBlZGFudGljIC1XYWxsIC1Xbm8tdW5r bm93bi1wcmFnbWFzIC1nIC1vIHhwb3AgeHBvcC5jIC1seGNiICovCgp0eXBlZGVmIHN0cnVjdCBf UGh4SW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHhJbnRlcmZhY2U7CnR5 cGVkZWYgc3RydWN0IF9QaHhSZWN0YW5nbGUgeyBpbnQxNl90IHgsIHksIHcsIGg7IH0gICAgIFBo eFJlY3RhbmdsZTsKCmJvb2wgICAgICAgICAgX3dpbmRvd19pc190cmFuc2llbnQoeGNiX3dpbmRv d190IHdpbmRvdyk7CnhjYl93aW5kb3dfdCAgdWlfZHJvcGRvd25fY3JlYXRlKFBoeFJlY3Rhbmds ZSBjb25maWd1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhjYl93aW5kb3df dCB0cmFuc2llbnRfZm9yX3dpbmRvdyk7CgoKeGNiX2Nvbm5lY3Rpb25fdCAgICAgKmNvbm5lY3Rp b24gPSBOVUxMOwp4Y2JfYXRvbV90IFdNX1BST1RPQ09MUzsKeGNiX2F0b21fdCBXTV9ERUxFVEVf V0lORE9XOwoKc3RydWN0IF9QaHhJbnRlcmZhY2UgewogYm9vbCAgICAgICAgICBtYXBwZWQ7CiBQ aHhSZWN0YW5nbGUgIG1ldGVfYm94OwogeGNiX3dpbmRvd190ICB3aW5kb3c7Cn0gaWZhY2UwID0g eyBmYWxzZSwgezB9LCAwIH0sIGlmYWNlMSA9IHsgZmFsc2UsIHswfSwgMCB9OwoKYm9vbCBTQklU X0ZPQ1VTX0NMSUNLID0gZmFsc2U7CmJvb2wgU0JJVF9SRUxFQVNFX0lHTk9SRSA9IGZhbHNlOwpQ aHhJbnRlcmZhY2UgKmhhc19mb2N1cyA9IE5VTEw7CgojaWYgKF9fU1REQ19WRVJTSU9OX18gPD0g MTk5OTAxTCkKICNkZWZpbmUgUkVDVEFOR0xFKGEsYixjLGQsZSkgXAogIGEueCA9IGIsIGEueSA9 IGMsIGEudyA9IGQsIGEuaCA9IGUKI2Vsc2UKICNkZWZpbmUgUkVDVEFOR0xFKGEsYixjLGQsZSkg XAogIGEgPSAoUGh4UmVjdGFuZ2xlKXsgYiwgYywgZCwgZSB9CiNlbmRpZgoKUGh4SW50ZXJmYWNl ICoKX2ludGVyZmFjZV9mb3IoeGNiX3dpbmRvd190IHdpbmRvdykgewogIGlmIChpZmFjZTAud2lu ZG93ID09IHdpbmRvdykKICAgIHJldHVybiAmaWZhY2UwOwogIHJldHVybiAmaWZhY2UxOwp9Cgpz dGF0aWMgYm9vbApfZXZlbnRfbW91c2UoeGNiX2dlbmVyaWNfZXZlbnRfdCAqbnZ0KSB7CgogIGJv b2wgbG9jdXMgPSAoKG52dC0+cmVzcG9uc2VfdHlwZSAmICh1aW50OF90KX4weDgwKSA9PSBYQ0Jf QlVUVE9OX1BSRVNTKTsKICB4Y2JfYnV0dG9uX3ByZXNzX2V2ZW50X3QgKm1vdXNlID0gKHhjYl9i dXR0b25fcHJlc3NfZXZlbnRfdCopbnZ0OwogIFBoeEludGVyZmFjZSAqaWZhY2UgPSBfaW50ZXJm YWNlX2Zvcihtb3VzZS0+ZXZlbnQpOwoKICBpZiAoIWxvY3VzKSB7CiAgICAgIC8qIGZpcnN0IGNs aWNrIGluIHVuZm9jdXNlZCB3aW5kb3cgdXNlZCB0byBicmluZyBBQk9WRSBhbmQgZm9jdXMgKi8K ICAgIGlmIChTQklUX0ZPQ1VTX0NMSUNLKSB7CiAgICAgIFNCSVRfRk9DVVNfQ0xJQ0sgPSBmYWxz ZTsKICAgICAgcHJpbnRmKCIgICAgICAgJWQsIFNCSVRfRk9DVVNfQ0xJQ0sgcmVzZXQuXG4iLCBp ZmFjZS0+d2luZG93KTsKICAgICAgU0JJVF9SRUxFQVNFX0lHTk9SRSA9IGZhbHNlOwogICAgICBw cmludGYoIiAgICAgICAlZCwgU0JJVF9SRUxFQVNFX0lHTk9SRSByZXNldC5cbiIsIGlmYWNlLT53 aW5kb3cpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgICAgLyogY29kZSBmb3IgYnV0dG9u IHJlbGVhc2UsIGRyYWcgY2FzZXMgKi8KICAgICAgLyogY2FzZXMgd2hlcmUgYnV0dG9uIHJlbGVh c2Ugc2hvdWxkIGJlIGlnbm9yZWQuICovCiAgICBpZiAoU0JJVF9SRUxFQVNFX0lHTk9SRSkgewog ICAgICBTQklUX1JFTEVBU0VfSUdOT1JFID0gZmFsc2U7CiAgICAgIHByaW50ZigiICAgICAgICVk LCBTQklUX1JFTEVBU0VfSUdOT1JFIHJlc2V0LlxuIiwgaWZhY2UtPndpbmRvdyk7CiAgICAgIHJl dHVybiB0cnVlOwogICAgfQogICAgICAvKiBjb2RlIGZvciBidXR0b24gcmVsZWFzZSwgbm9uLWRy YWcgcmVsYXRlZCAqLwogIH0gZWxzZSB7CiAgICBpZiAoaGFzX2ZvY3VzLT53aW5kb3cgIT0gbW91 c2UtPmV2ZW50KSB7CiAgICAgIHhjYl91bm1hcF93aW5kb3coY29ubmVjdGlvbiwgaWZhY2UxLndp bmRvdyk7CiAgICAgIGlmYWNlMS5tYXBwZWQgPSBmYWxzZTsKICAgICAgU0JJVF9SRUxFQVNFX0lH Tk9SRSA9IHRydWU7CiAgICAgIHByaW50ZigiICAgICAgICVkLCBTQklUX1JFTEVBU0VfSUdOT1JF IHNldC5cbiIsIGlmYWNlMC53aW5kb3cpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgICAg LyogY29kZSBmb3IgYnV0dG9uIHByZXNzICovCiAgICAgIC8qIFN0b3AgcHJvY2Vzc2luZyBtb3Vz ZSwgd2FzIHdpbmRvdyBiZWluZyBmb2N1c2VkIGJ5IGNsaWNrIGluIGNvbnRlbnQuICovCiAgICBp ZiAoU0JJVF9GT0NVU19DTElDSykgewogICAgICBwdXRzKCIgaWdub3JlIGJ1dHRvbiBwcmVzcyBT QklUX0ZPQ1VTX0NMSUNLIik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgICAgLyogYnV0 dG9uIHByZXNzIGluIGZvY3VzZWQgY29udGVudCAqLwogICAgaWYgKCFpZmFjZTEubWFwcGVkKSB7 CiAgICAgIGlmIChpZmFjZTEud2luZG93ID09IDApIHsKICAgICAgICB1aW50MzJfdCB2YWx1ZXNb Ml07CiAgICAgICAgUGh4UmVjdGFuZ2xlIHB1cF9ib3ggPSB7IDc1LCA3NSwgMjUwLCAyNTAgfTsK ICAgICAgICBpZmFjZTEud2luZG93ID0gdWlfZHJvcGRvd25fY3JlYXRlKHB1cF9ib3gsIGlmYWNl LT53aW5kb3cpOwogICAgICAgIHZhbHVlc1swXSA9IHB1cF9ib3gueCArIGlmYWNlMC5tZXRlX2Jv eC54OwogICAgICAgIHZhbHVlc1sxXSA9IHB1cF9ib3gueSArIGlmYWNlMC5tZXRlX2JveC55Owog ICAgICAgIHhjYl9jb25maWd1cmVfd2luZG93KGNvbm5lY3Rpb24sIGlmYWNlMS53aW5kb3csCiAg ICAgICAgICAgICAgICAgICAgIFhDQl9DT05GSUdfV0lORE9XX1ggfCBYQ0JfQ09ORklHX1dJTkRP V19ZLCB2YWx1ZXMpOwogICAgICAgIHhjYl9tYXBfd2luZG93KGNvbm5lY3Rpb24sIGlmYWNlMS53 aW5kb3cpOwogICAgICAgIGlmYWNlMS5tYXBwZWQgPSB0cnVlOwogICAgICAgIFNCSVRfUkVMRUFT RV9JR05PUkUgPSB0cnVlOwogICAgICAgIHByaW50ZigiICAgICAgICVkLCBTQklUX1JFTEVBU0Vf SUdOT1JFIHNldC5cbiIsIGlmYWNlMC53aW5kb3cpOwogICAgICB9IGVsc2UgewogICAgICAgIHVp bnQzMl90IHZhbHVlc1syXTsKICAgICAgICBQaHhSZWN0YW5nbGUgcHVwX2JveCA9IHsgNzUsIDc1 LCAyNTAsIDI1MCB9OwogICAgICAgIHZhbHVlc1swXSA9IHB1cF9ib3gueCArIGlmYWNlMC5tZXRl X2JveC54OwogICAgICAgIHZhbHVlc1sxXSA9IHB1cF9ib3gueSArIGlmYWNlMC5tZXRlX2JveC55 OwogICAgICAgIHhjYl9jb25maWd1cmVfd2luZG93KGNvbm5lY3Rpb24sIGlmYWNlMS53aW5kb3cs CiAgICAgICAgICAgICAgICAgICAgIFhDQl9DT05GSUdfV0lORE9XX1ggfCBYQ0JfQ09ORklHX1dJ TkRPV19ZLCB2YWx1ZXMpOwogICAgICAgIHhjYl9tYXBfd2luZG93KGNvbm5lY3Rpb24sIGlmYWNl MS53aW5kb3cpOwogICAgICAgIGlmYWNlMS5tYXBwZWQgPSB0cnVlOwogICAgICAgIFNCSVRfUkVM RUFTRV9JR05PUkUgPSB0cnVlOwogICAgICAgIHByaW50ZigiICAgICAgICVkLCBTQklUX1JFTEVB U0VfSUdOT1JFIHNldC5cbiIsIGlmYWNlMC53aW5kb3cpOwogICAgICB9CiAgICB9CiAgfQogICAg LyogY29tbW9uIG1vdXNlIGNvZGUgKi8KICByZXR1cm4gdHJ1ZTsKfQoKc3RhdGljIGJvb2wKX2V2 ZW50X2ZvY3VzKHhjYl9nZW5lcmljX2V2ZW50X3QgKm52dCkgewoKICBib29sIGxvY3VzID0gKChu dnQtPnJlc3BvbnNlX3R5cGUgJiAodWludDhfdCl+MHg4MCkgPT0gWENCX0ZPQ1VTX0lOKTsKICB4 Y2JfZm9jdXNfaW5fZXZlbnRfdCAqZm9jdXMgPSAoeGNiX2ZvY3VzX2luX2V2ZW50X3QqKW52dDsK CiAgaWYgKGxvY3VzKSB7CiAgICB4Y2JfcXVlcnlfcG9pbnRlcl9jb29raWVfdCBjMAogICAgICA9 IHhjYl9xdWVyeV9wb2ludGVyKGNvbm5lY3Rpb24sIGZvY3VzLT5ldmVudCk7CiAgICB4Y2JfcXVl cnlfcG9pbnRlcl9yZXBseV90ICpyMAogICAgICA9IHhjYl9xdWVyeV9wb2ludGVyX3JlcGx5KGNv bm5lY3Rpb24sIGMwLCBOVUxMKTsKICAgIGlmICggKHIwLT53aW5feCA+PSAwKSAmJiAocjAtPndp bl94IDwgaWZhY2UwLm1ldGVfYm94LncpCiAgICAgICAgJiYgKHIwLT53aW5feSA+PSAwKSAmJiAo cjAtPndpbl95IDwgaWZhY2UwLm1ldGVfYm94LmgpICkgewogICAgICBpZiAoKHIwLT5tYXNrICYg WENCX0tFWV9CVVRfTUFTS19CVVRUT05fMSkgIT0gMCkgewogICAgICAgIFNCSVRfRk9DVVNfQ0xJ Q0sgPSB0cnVlOwogICAgICAgIHByaW50ZigiICAgICAgICVkLCBTQklUX0ZPQ1VTX0NMSUNLIHNl dC5cbiIsIGZvY3VzLT5ldmVudCk7CiAgICAgIH0KICAgIH0KICAgIGZyZWUocjApOwogICAgaGFz X2ZvY3VzID0gX2ludGVyZmFjZV9mb3IoZm9jdXMtPmV2ZW50KTsKICB9IGVsc2UgewogICAgaWYg KCAoX3dpbmRvd19pc190cmFuc2llbnQoZm9jdXMtPmV2ZW50KSkgJiYgKGlmYWNlMS5tYXBwZWQp ICkgewogICAgICB4Y2JfdW5tYXBfd2luZG93KGNvbm5lY3Rpb24sIGlmYWNlMS53aW5kb3cpOwog ICAgICBpZmFjZTEubWFwcGVkID0gZmFsc2U7CiAgICB9CiAgICBoYXNfZm9jdXMgPSBOVUxMOwog IH0KICByZXR1cm4gdHJ1ZTsKfQoKYm9vbApfZXZlbnRfZXhwb3NlKHhjYl9nZW5lcmljX2V2ZW50 X3QgKm52dCkgewogIHJldHVybiB0cnVlOwp9CnN0YXRpYyBib29sCl9ldmVudF9jb25maWd1cmUo eGNiX2dlbmVyaWNfZXZlbnRfdCAqbnZ0KSB7CgogIHhjYl9jb25maWd1cmVfbm90aWZ5X2V2ZW50 X3QgKmNvbmZpZ3VyZQogICAgPSAoeGNiX2NvbmZpZ3VyZV9ub3RpZnlfZXZlbnRfdCopbnZ0Owog IHhjYl93aW5kb3dfdCB3aW5kb3cgPSBjb25maWd1cmUtPmV2ZW50OwogIFBoeEludGVyZmFjZSAq aWZhY2UgPSBfaW50ZXJmYWNlX2Zvcih3aW5kb3cpOwoKICBpZiAoKih1aW50NjRfdCopJmlmYWNl LT5tZXRlX2JveC54ID09ICoodWludDY0X3QqKSZjb25maWd1cmUtPngpCiAgICByZXR1cm4gdHJ1 ZTsKCiAgICAvKiBEbyBpbnRlcm5hbCBjb25maWd1cmF0aW9uICovCgogICAgLyogU2V0IG1ldGVf Ym94IGlmIG1vdmUgb2NjdXJyZWQgKi8KICBpZiAoKGNvbmZpZ3VyZS0+eCB8IGNvbmZpZ3VyZS0+ eSkgIT0gMCkgewogICAgaWYgKCAoaWZhY2UtPm1ldGVfYm94LnggIT0gY29uZmlndXJlLT54KQog ICAgICAgIHx8IChpZmFjZS0+bWV0ZV9ib3gueSAhPSBjb25maWd1cmUtPnkpICkgewogICAgICAg IC8qIE5lZWRlZCwgaWYgd2FudCBhY2N1cmF0ZSBwb3NpdGlvbmluZy4gV00gaXMgdW5yZWxpYWJs ZSAqLwogICAgICB4Y2Jfc2NyZWVuX3QgKnNjcmVlbgogICAgICAgID0geGNiX3NldHVwX3Jvb3Rz X2l0ZXJhdG9yKHhjYl9nZXRfc2V0dXAoY29ubmVjdGlvbikpLmRhdGE7CiAgICAgIHhjYl90cmFu c2xhdGVfY29vcmRpbmF0ZXNfcmVwbHlfdCAqY2ZnCiAgICAgICAgPSB4Y2JfdHJhbnNsYXRlX2Nv b3JkaW5hdGVzX3JlcGx5KGNvbm5lY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgeGNi X3RyYW5zbGF0ZV9jb29yZGluYXRlcyhjb25uZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHdpbmRvdywgc2NyZWVuLT5yb290LCAwLCAwKSwgTlVMTCk7CiAgICAg IGlmYWNlLT5tZXRlX2JveC54ID0gY2ZnLT5kc3RfeDsKICAgICAgaWZhY2UtPm1ldGVfYm94Lnkg PSBjZmctPmRzdF95OwogICAgICBmcmVlKGNmZyk7CiAgICB9CiAgfQogIHJldHVybiB0cnVlOwp9 CgpzdGF0aWMgaW50MzJfdApfcHJvY2Vzc190aW1lcnModm9pZCkgewogIHJldHVybiBJTlRfTUFY Owp9CgpzdGF0aWMgYm9vbApfcHJvY2Vzc19ldmVudCh4Y2JfZ2VuZXJpY19ldmVudF90ICpudnQp IHsKCiAgc3dpdGNoIChudnQtPnJlc3BvbnNlX3R5cGUgJiAodWludDhfdCl+MHg4MCkgewoKICAg IGNhc2UgWENCX0tFWV9QUkVTUzogICAgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgMiAqLwogICAg Y2FzZSBYQ0JfS0VZX1JFTEVBU0U6IHsgICAgICAgLyogcmVzcG9uc2VfdHlwZSAzICovCiAgICAg IGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0JVVFRPTl9QUkVTUzogICAgICAgIC8qIHJlc3Bv bnNlX3R5cGUgNCAqLwogICAgY2FzZSBYQ0JfQlVUVE9OX1JFTEVBU0U6IHsgICAgLyogcmVzcG9u c2VfdHlwZSA1ICovCiAgICAgIF9ldmVudF9tb3VzZShudnQpOwogICAgICBicmVhazsKICAgIH0K CiAgICBjYXNlIFhDQl9NT1RJT05fTk9USUZZOiB7ICAgICAvKiByZXNwb25zZV90eXBlIDYgKi8K ICAgIGNhc2UgWENCX0VOVEVSX05PVElGWTogICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgNyAqLwog ICAgY2FzZSBYQ0JfTEVBVkVfTk9USUZZOiAgICAgICAgLyogcmVzcG9uc2VfdHlwZSA4ICovCiAg ICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0ZPQ1VTX0lOOiAgICAgICAgICAgIC8qIHJl c3BvbnNlX3R5cGUgOSAqLwogICAgY2FzZSBYQ0JfRk9DVVNfT1VUOiB7ICAgICAgICAgLyogcmVz cG9uc2VfdHlwZSAxMCAqLwogICAgICBfZXZlbnRfZm9jdXMobnZ0KTsKICAgICAgYnJlYWs7CiAg ICB9CgogICAgY2FzZSBYQ0JfRVhQT1NFOiB7ICAgICAgICAgICAgLyogcmVzcG9uc2VfdHlwZSAx MiAqLwogICAgICBicmVhazsKICAgIH0KCiAgICBjYXNlIFhDQl9WSVNJQklMSVRZX05PVElGWTog eyAvKiByZXNwb25zZV90eXBlIDE1ICovCiAgICAgIHhjYl92aXNpYmlsaXR5X25vdGlmeV9ldmVu dF90ICpzZWVuCiAgICAgICAgPSAoeGNiX3Zpc2liaWxpdHlfbm90aWZ5X2V2ZW50X3QqKW52dDsK ICAgICAgaWYgKF93aW5kb3dfaXNfdHJhbnNpZW50KHNlZW4tPndpbmRvdykpIHsKICAgICAgICB4 Y2Jfc2V0X2lucHV0X2ZvY3VzKGNvbm5lY3Rpb24sIFhDQl9JTlBVVF9GT0NVU19QQVJFTlQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbi0+d2luZG93LCBYQ0JfQ1VSUkVO VF9USU1FKTsKICAgICAgfQogICAgICBicmVhazsKICAgIH0KCiAgICBjYXNlIFhDQl9ERVNUUk9Z X05PVElGWTogeyAgICAvKiByZXNwb25zZV90eXBlIDE3ICovCiAgICAgICAgLyogYXNzdW1lIGEg a2lsbCwgZGVsZXRlIGFsbCB3aW5kb3dzIChkbyB0aGVpciB0aGluZykKICAgICAgICAgICBzZW5k IGZhbHNlIHRvIGV4aXQgbG9vcCAqLwogICAgICB4Y2JfZGVzdHJveV9ub3RpZnlfZXZlbnRfdCAq ZGVzdHJveQogICAgICAgID0gKHhjYl9kZXN0cm95X25vdGlmeV9ldmVudF90KiludnQ7CiAgICAg ICBpZiAoIV93aW5kb3dfaXNfdHJhbnNpZW50KGRlc3Ryb3ktPndpbmRvdykpIHsKICAgICAgICBm cmVlKG52dCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGJyZWFrOwogICAg fQogICAgICAvKiB0aGVzZSA0IGJlY2F1c2Ugb2YgWENCX0VWRU5UX01BU0tfU1RSVUNUVVJFX05P VElGWSAqLwogICAgY2FzZSBYQ0JfVU5NQVBfTk9USUZZOiB7ICAgICAgLyogcmVzcG9uc2VfdHlw ZSAxOCAqLwogICAgY2FzZSBYQ0JfTUFQX05PVElGWTogICAgICAgICAgLyogcmVzcG9uc2VfdHlw ZSAxOSAqLwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENCX1JFUEFSRU5UX05PVElGWTog eyAgIC8qIHJlc3BvbnNlX3R5cGUgMjEgKi8KICAgICAgICAvKiBwb3NpdGlvbiBhZnRlciBtYXAs IHRvIGRlc2lnbiB1c2VyIHJlcXVlc3RlZCBvZiB3aW5kb3cKICAgICAgICAgKiBzZXQgb25jZSBh bmQgd2hlbiB3aW5kb3cgbWFuYWdlciBhc2tzIHRvIHJlcGFyZW50CiAgICAgICAgICogZG9udCBu ZWVkIGR1cmluZyBpY29uL2RlaWNvbmlmeQogICAgICAgICAqIGRvZXNudCBzdG9wIFdNIGNvbmZp Z3VyZXMsIGJ1dCB3aWxsIGJlIHNlbnQgYWZ0ZXIgbWFwIG5vdGlmeSAqLwogICAgICB4Y2JfcmVw YXJlbnRfbm90aWZ5X2V2ZW50X3QgKnJwCiAgICAgICAgPSAoeGNiX3JlcGFyZW50X25vdGlmeV9l dmVudF90KiludnQ7CiAgICAgIFBoeEludGVyZmFjZSAqaWZhY2UgPSBfaW50ZXJmYWNlX2Zvcihy cC0+d2luZG93KTsKICAgICAgdWludDMyX3QgdmFsdWVzWzJdOwogICAgICB2YWx1ZXNbMF0gPSBp ZmFjZS0+bWV0ZV9ib3gueDsKICAgICAgdmFsdWVzWzFdID0gaWZhY2UtPm1ldGVfYm94Lnk7CiAg ICAgIHhjYl9jb25maWd1cmVfd2luZG93KGNvbm5lY3Rpb24sIGlmYWNlLT53aW5kb3csCiAgICAg ICAgICAgICAgICAgICBYQ0JfQ09ORklHX1dJTkRPV19YIHwgWENCX0NPTkZJR19XSU5ET1dfWSwg dmFsdWVzKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIFhDQl9DT05GSUdVUkVfTk9USUZZ OiB7ICAvKiByZXNwb25zZV90eXBlIDIyICovCiAgICAgIF9ldmVudF9jb25maWd1cmUobnZ0KTsK ICAgICAgYnJlYWs7CiAgICB9CgogICAgY2FzZSBYQ0JfUFJPUEVSVFlfTk9USUZZOiB7ICAgLyog cmVzcG9uc2VfdHlwZSAyOCAqLwogICAgY2FzZSBYQ0JfU0VMRUNUSU9OX0NMRUFSOiAgICAgLyog cmVzcG9uc2VfdHlwZSAyOSAqLwogICAgY2FzZSBYQ0JfU0VMRUNUSU9OX1JFUVVFU1Q6ICAgLyog cmVzcG9uc2VfdHlwZSAzMCAqLwogICAgY2FzZSBYQ0JfU0VMRUNUSU9OX05PVElGWTogICAgLyog cmVzcG9uc2VfdHlwZSAzMSAqLwogICAgICBicmVhazsKICAgIH0KCiAgICBjYXNlIFhDQl9DTElF TlRfTUVTU0FHRTogeyAgICAvKiByZXNwb25zZV90eXBlIDMzICovCiAgICAgIHhjYl9jbGllbnRf bWVzc2FnZV9ldmVudF90ICpjbQogICAgICAgID0gKHhjYl9jbGllbnRfbWVzc2FnZV9ldmVudF90 KiludnQ7CiAgICAgIGlmIChjbS0+dHlwZSAhPSBXTV9QUk9UT0NPTFMpICBnb3RvIHJlcG9ydDsK ICAgICAgaWYgKF93aW5kb3dfaXNfdHJhbnNpZW50KGNtLT53aW5kb3cpKSB7CiAgICAgICAgcHV0 cygidW5leHBlY3RlZCIpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChpZmFjZTEud2luZG93 ICE9IDApIHsKICAgICAgICAgIHhjYl91bm1hcF93aW5kb3coY29ubmVjdGlvbiwgaWZhY2UxLndp bmRvdyk7CiAgICAgICAgICB4Y2JfZGVzdHJveV93aW5kb3coY29ubmVjdGlvbiwgaWZhY2UxLndp bmRvdyk7CiAgICAgICAgfQogICAgICAgIHhjYl91bm1hcF93aW5kb3coY29ubmVjdGlvbiwgaWZh Y2UwLndpbmRvdyk7CiAgICAgICAgeGNiX2Rlc3Ryb3lfd2luZG93KGNvbm5lY3Rpb24sIGlmYWNl MC53aW5kb3cpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGRlZmF1bHQ6CiAgICAg IGlmIChudnQtPnJlc3BvbnNlX3R5cGUgPT0gMCkgewogICAgICAgIHhjYl9nZW5lcmljX2Vycm9y X3QgKmVyciA9ICh4Y2JfZ2VuZXJpY19lcnJvcl90KiludnQ7CiAgICAgICAgcHJpbnRmKCJlcnJv cjogJSJQUkl1OCJcbiIsIGVyci0+ZXJyb3JfY29kZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0K cmVwb3J0OgogICAgICAgIC8qIFVua25vd24gZXZlbnQgdHlwZSwgdXNlIHRvIHRyYWNrIGNvZGlu ZyBwcm9ibGVtcyAqLwogICAgICBwcmludGYoIlVua25vd24gZXZlbnQ6ICUiUFJJdTgiXG4iLCBu dnQtPnJlc3BvbnNlX3R5cGUpOwogICAgICBicmVhazsKCiAgfSAvKiBlbmQgc3dpdGNoKHJlc3Bv bnNlX3R5cGUpICovCiAgICAvKiBudnQgbm8gbG9uZ2VyIG5lZWRlZCAqLwogIGZyZWUobnZ0KTsK ICAgIC8qIGNyaXRpY2FsISBvdGhlcndpc2Ugd29udCBwcm9jZXNzIGFueXRoaW5nIGRvbmUgKi8K ICB4Y2JfZmx1c2goY29ubmVjdGlvbik7CiAgcmV0dXJuIHRydWU7Cn0KCnN0YXRpYyB2b2lkCnhj Yl9tYWluKHZvaWQpIHsKCiAgICAvKiBzZXQgYWxsIGJlZm9yZSB0aHJvdWdoIHRvIFhzZXJ2ZXIg Ki8KICB4Y2JfZmx1c2goY29ubmVjdGlvbik7CgogIGRvIHsKICAgIGludCB0aW1lb3V0OwogICAg eGNiX2dlbmVyaWNfZXZlbnRfdCAqZXZlbnQ7CiAgICB3aGlsZSAoKGV2ZW50ID0geGNiX3BvbGxf Zm9yX2V2ZW50KGNvbm5lY3Rpb24pKSAhPSBOVUxMKQogICAgICAgIC8qIF9wcm9jZXNzX2V2ZW50 KCkgcmV0dXJucyAncnVubmluZycgZm9yIG1haW4gbG9vcC4gKi8KICAgICAgaWYgKF9wcm9jZXNz X2V2ZW50KGV2ZW50KSA9PSBmYWxzZSkgIGdvdG8gY2xlYW51cDsKICAgIGRvIHsKICAgICAgICAv KiBfcHJvY2Vzc190aW1lcnMoKSBydW5zIGFueSB0aW1lcnMgdGhhdCBhcmUgaW1tZWRpYXRlbHkg cGVuZGluZywKICAgICAgICAgICBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25k cyB1bnRpbCB0aGUgbmV4dCB0aW1lcgogICAgICAgICAgIGluIHRoZSBxdWV1ZSBpcyByZWFkeS4K ICAgICAgICAgICBfcHJvY2Vzc190aW1lcnMoKSByZXR1cm5zIElOVF9NQVggaWYgdGhlcmUgYXJl IG5vIHRpbWVycy4gKi8KICAgICAgICAvKiBfcHJvY2Vzc190aW1lcnMoKSBhbHNvIHJlbW92ZXMg ZnJvbSB0aW1lb3V0IGl0cyBydW4gdGltZS4gKi8KICAgICAgdGltZW91dCA9IF9wcm9jZXNzX3Rp bWVycygpOwogICAgICBpZiAoKGV2ZW50ID0geGNiX3BvbGxfZm9yX3F1ZXVlZF9ldmVudChjb25u ZWN0aW9uKSkgPT0gTlVMTCkgIGJyZWFrOwogICAgICAgIGlmIChfcHJvY2Vzc19ldmVudChldmVu dCkgPT0gZmFsc2UpICBnb3RvIGNsZWFudXA7CiAgICB9IHdoaWxlICgxKTsKICAgIGlmICh0aW1l b3V0ID4gNikgewogICAgICBzdHJ1Y3QgcG9sbGZkIHBmZFsxXTsKICAgICAgcGZkLT5mZCA9IHhj Yl9nZXRfZmlsZV9kZXNjcmlwdG9yKGNvbm5lY3Rpb24pOwogICAgICBwZmQtPmV2ZW50cyA9IFBP TExJTjsKICAgICAgcGZkLT5yZXZlbnRzID0gUE9MTE9VVDsKICAgICAgcG9sbChwZmQsIDEsIHRp bWVvdXQpOwogICAgfQogIH0gd2hpbGUgKDEpOwogICAgLyogcmVjZWl2ZWQgWENCX0RFU1RST1lf Tk9USUZZICovCmNsZWFudXA6CiAgcmV0dXJuOwp9Cgp2b2lkCnVpX3dpbmRvd19uYW1lKHhjYl93 aW5kb3dfdCB3aW5kb3cpIHsKCiAgeGNiX2ludGVybl9hdG9tX2Nvb2tpZV90IGNvb2tpZQogICAg PSB4Y2JfaW50ZXJuX2F0b20oY29ubmVjdGlvbiwgMSwgNywgIldNX05BTUUiKTsKICB4Y2JfaW50 ZXJuX2F0b21fcmVwbHlfdCAqcmVwbHkKICAgID0geGNiX2ludGVybl9hdG9tX3JlcGx5KGNvbm5l Y3Rpb24sIGNvb2tpZSwgTlVMTCk7CiAgeGNiX2ludGVybl9hdG9tX2Nvb2tpZV90IGNvb2tpZTIK ICAgID0geGNiX2ludGVybl9hdG9tKGNvbm5lY3Rpb24sIDAsIDYsICJTVFJJTkciKTsKICB4Y2Jf aW50ZXJuX2F0b21fcmVwbHlfdCAqcmVwbHkyCiAgICA9IHhjYl9pbnRlcm5fYXRvbV9yZXBseShj b25uZWN0aW9uLCBjb29raWUyLCBOVUxMKTsKCiAgY2hhciB0aXRsZVsxNl07CiAgc3ByaW50Zih0 aXRsZSwgIiVkIiwgd2luZG93KTsKICB4Y2JfY2hhbmdlX3Byb3BlcnR5KGNvbm5lY3Rpb24sIFhD Ql9QUk9QX01PREVfUkVQTEFDRSwgd2luZG93LAogICAgICAgICAgICAgICAgICAgICAgIHJlcGx5 LT5hdG9tLCByZXBseTItPmF0b20sIDgsCiAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHRp dGxlKSwgdGl0bGUpOwogIGZyZWUocmVwbHkpOwogIGZyZWUocmVwbHkyKTsKfQoKYm9vbApfd2lu ZG93X2lzX3RyYW5zaWVudCh4Y2Jfd2luZG93X3Qgd2luZG93KSB7CgogIHhjYl9nZXRfcHJvcGVy dHlfY29va2llX3QgY29va2llCiAgICA9IHhjYl9nZXRfcHJvcGVydHkoY29ubmVjdGlvbiwgMCwg d2luZG93LAogICAgICAgICAgICAgICAgICAgICAgIFhDQl9BVE9NX1dNX1RSQU5TSUVOVF9GT1Is IFhDQl9BVE9NX1dJTkRPVywgMCwgMSk7CiAgeGNiX2dldF9wcm9wZXJ0eV9yZXBseV90ICpyZXBs eQogICAgPSB4Y2JfZ2V0X3Byb3BlcnR5X3JlcGx5KGNvbm5lY3Rpb24sIGNvb2tpZSwgTlVMTCk7 CiAgYm9vbCB0cmFuc2llbnQgPSBmYWxzZTsKICBpZiAocmVwbHkgIT0gTlVMTCkgewogICAgaWYg KCAocmVwbHktPnR5cGUgPT0gWENCX0FUT01fV0lORE9XKQogICAgICAgICYmIChyZXBseS0+Zm9y bWF0ID09IDMyKQogICAgICAgICYmIChyZXBseS0+bGVuZ3RoICE9IDApICkgewogICAgICB0cmFu c2llbnQgPSB0cnVlOwogICAgfQogICAgZnJlZShyZXBseSk7CiAgfQogIHJldHVybiB0cmFuc2ll bnQ7Cn0KCnN0YXRpYyB2b2lkCl93aW5kb3dfZXZlbnRfZGVsZXRlKHhjYl9jb25uZWN0aW9uX3Qg KmNvbm5lY3Rpb24sIHhjYl93aW5kb3dfdCB3aW5kb3cpIHsKCiAgICAvKiBhbGxvdyBkZWxldGUg d2luZG93IHNvIGNhbiBxdWl0IGFwcGxpY2F0aW9uLiBBdm9pZCBeQy4gKi8KICB4Y2JfY2hhbmdl X3Byb3BlcnR5KGNvbm5lY3Rpb24sIFhDQl9QUk9QX01PREVfUkVQTEFDRSwgd2luZG93LAogICAg ICAgICAgICAgICAgICAgICAgV01fUFJPVE9DT0xTLCBYQ0JfQVRPTV9BVE9NLCAzMiwgMSwKICAg ICAgICAgICAgICAgICAgICAgICZXTV9ERUxFVEVfV0lORE9XKTsKfQoKc3RhdGljIHhjYl93aW5k b3dfdApfd2luZG93X2NyZWF0ZShQaHhSZWN0YW5nbGUgY29uZmlndXJlKSB7CgogIHhjYl9zY3Jl ZW5fdCAqc2NyZWVuOwogIHhjYl93aW5kb3dfdCB3aW5kb3c7CiAgdWludDMyX3QgbWFzazsKICB1 aW50MzJfdCB2YWx1ZXNbMl07CgogIGlmIChjb25uZWN0aW9uID09IE5VTEwpIHsKICAgIHhjYl9p bnRlcm5fYXRvbV9jb29raWVfdCBjMCwgYzE7CiAgICB4Y2JfaW50ZXJuX2F0b21fcmVwbHlfdCAq cjAsICpyMTsKICAgIGNvbm5lY3Rpb24gPSB4Y2JfY29ubmVjdChOVUxMLCBOVUxMKTsKICAgIGMw ID0geGNiX2ludGVybl9hdG9tKGNvbm5lY3Rpb24sIDAsIDEyLCAiV01fUFJPVE9DT0xTIik7CiAg ICBjMSA9IHhjYl9pbnRlcm5fYXRvbShjb25uZWN0aW9uLCAwLCAxNiwgIldNX0RFTEVURV9XSU5E T1ciKTsKICAgIHIwID0geGNiX2ludGVybl9hdG9tX3JlcGx5KGNvbm5lY3Rpb24sIGMwLCBOVUxM KTsKICAgIHIxID0geGNiX2ludGVybl9hdG9tX3JlcGx5KGNvbm5lY3Rpb24sIGMxLCBOVUxMKTsK ICAgIFdNX1BST1RPQ09MUyAgICAgPSByMC0+YXRvbTsgIGZyZWUoKHZvaWQqKXIwKTsKICAgIFdN X0RFTEVURV9XSU5ET1cgPSByMS0+YXRvbTsgIGZyZWUoKHZvaWQqKXIxKTsKICB9CiAgICAvKiBH ZXQgdGhlIGZpcnN0IHNjcmVlbiAqLwogIHNjcmVlbiA9IHhjYl9zZXR1cF9yb290c19pdGVyYXRv cih4Y2JfZ2V0X3NldHVwKGNvbm5lY3Rpb24pKS5kYXRhOwogICAgLyogQ3JlYXRlIHRoZSB3aW5k b3cgKi8KICB3aW5kb3cgPSB4Y2JfZ2VuZXJhdGVfaWQoY29ubmVjdGlvbik7CgogIG1hc2sgICAg ICA9IFhDQl9DV19CQUNLX1BJWEVMIHwgWENCX0NXX0VWRU5UX01BU0s7CiAgdmFsdWVzWzBdID0g c2NyZWVuLT53aGl0ZV9waXhlbDsKICB2YWx1ZXNbMV0gPSBYQ0JfRVZFTlRfTUFTS19FWFBPU1VS RSAgICAgICB8IFhDQl9FVkVOVF9NQVNLX0JVVFRPTl9QUkVTUyAgIHwKICAgICAgICAgICAgICBY Q0JfRVZFTlRfTUFTS19CVVRUT05fUkVMRUFTRSB8IFhDQl9FVkVOVF9NQVNLX1BPSU5URVJfTU9U SU9OIHwKICAgICAgICAgICAgICBYQ0JfRVZFTlRfTUFTS19FTlRFUl9XSU5ET1cgICB8IFhDQl9F VkVOVF9NQVNLX0xFQVZFX1dJTkRPVyAgIHwKICAgICAgICAgICAgICBYQ0JfRVZFTlRfTUFTS19L RVlfUFJFU1MgICAgICB8IFhDQl9FVkVOVF9NQVNLX0tFWV9SRUxFQVNFICAgIHwKICAgICAgICAg ICAgICBYQ0JfRVZFTlRfTUFTS19GT0NVU19DSEFOR0UgICB8IFhDQl9FVkVOVF9NQVNLX1NUUlVD VFVSRV9OT1RJRlkgfAogICAgICAgICAgICAgIFhDQl9FVkVOVF9NQVNLX1ZJU0lCSUxJVFlfQ0hB TkdFOwoKICAgIC8qIGlnbm9yZXMgeCwgeSwgYm9yZGVyX3dpZHRoICh2aXJ1cykgKi8KICB4Y2Jf Y3JlYXRlX3dpbmRvdyhjb25uZWN0aW9uLAogICAgICAgICAgICAgICAgICAgIHNjcmVlbi0+cm9v dF9kZXB0aCwgICAgICAgICAgICAvKiBkZXB0aCAgICAgICAgICAqLwogICAgICAgICAgICAgICAg ICAgIHdpbmRvdywgICAgICAgICAgICAgICAgICAgICAgICAvKiBnZW5lcmF0ZWQgaWQgICAqLwog ICAgICAgICAgICAgICAgICAgIHNjcmVlbi0+cm9vdCwgICAgICAgICAgICAgICAgICAvKiBwYXJl bnQgd2luZG93ICAqLwogICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZS54LCAgICAgICAgICAg ICAgICAgICAvKiB4LCB5ICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgIGNvbmZpZ3Vy ZS55LAogICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZS53LCAgICAgICAgICAgICAgICAgICAv KiB3aWR0aCwgaGVpZ2h0ICAqLwogICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZS5oLAogICAg ICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBib3JkZXJf d2lkdGggICAqLwogICAgICAgICAgICAgICAgICAgIFhDQl9XSU5ET1dfQ0xBU1NfSU5QVVRfT1VU UFVULCAvKiBjbGFzcyAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgIHNjcmVlbi0+cm9v dF92aXN1YWwsICAgICAgICAgICAvKiB2aXN1YWwgICAgICAgICAqLwogICAgICAgICAgICAgICAg ICAgIG1hc2ssIHZhbHVlcyk7ICAgICAgICAgICAgICAgICAvKiBtYXNrcyAqLwogIF93aW5kb3df ZXZlbnRfZGVsZXRlKGNvbm5lY3Rpb24sIHdpbmRvdyk7CiAgcmV0dXJuIHdpbmRvdzsKfQoKeGNi X3dpbmRvd190CnVpX3dpbmRvd19jcmVhdGUoUGh4UmVjdGFuZ2xlIGNvbmZpZ3VyZSkgewoKICB4 Y2Jfd2luZG93X3Qgd2luZG93ID0gX3dpbmRvd19jcmVhdGUoY29uZmlndXJlKTsKICBpZiAod2lu ZG93ID09IDApICByZXR1cm4gMDsKCiAgaWZhY2UwLm1ldGVfYm94ID0gY29uZmlndXJlOwogIGlm YWNlMC53aW5kb3cgPSB3aW5kb3c7CiAgcmV0dXJuIHdpbmRvdzsKfQoKeGNiX3dpbmRvd190CnVp X2Ryb3Bkb3duX2NyZWF0ZShQaHhSZWN0YW5nbGUgY29uZmlndXJlLCB4Y2Jfd2luZG93X3QgdHJh bnNpZW50X2Zvcl93aW5kb3cpIHsKCiAgdWludDMyX3QgdmFsdWVzW10gPSB7ICB0cnVlICB9Owog IHhjYl93aW5kb3dfdCB3aW5kb3cgPSBfd2luZG93X2NyZWF0ZShjb25maWd1cmUpOwogIGlmICh3 aW5kb3cgPT0gMCkgIHJldHVybiAwOwoKICB4Y2JfY2hhbmdlX3dpbmRvd19hdHRyaWJ1dGVzKGNv bm5lY3Rpb24sIHdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDQl9DV19P VkVSUklERV9SRURJUkVDVCwgdmFsdWVzKTsKCiAgeGNiX2NoYW5nZV9wcm9wZXJ0eShjb25uZWN0 aW9uLCBYQ0JfUFJPUF9NT0RFX1JFUExBQ0UsIHdpbmRvdywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBYQ0JfQVRPTV9XTV9UUkFOU0lFTlRfRk9SLCBYQ0JfQVRPTV9XSU5ET1csIDMyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICZ0cmFuc2llbnRfZm9yX3dpbmRvdyk7Cgog IGlmYWNlMS5tZXRlX2JveCA9IGNvbmZpZ3VyZTsKICBpZmFjZTEud2luZG93ID0gd2luZG93Owog IHJldHVybiB3aW5kb3c7Cn0KCgppbnQKbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7Cgog IHhjYl93aW5kb3dfdCB3aW5kb3c7CgogICAgLyogd2luZG93IHNpemUgYW5kIHBvc2l0aW9uICov CiAgUGh4UmVjdGFuZ2xlIGNvbmZpZ3VyZSA9IHsgODAwLCAyMDAsIDMwMCwgMjAwIH07CgogICAg LyogQSAndG9wbW9zdCcgZGVjb3JhdGVkIHdpbmRvdyAqLwogIHdpbmRvdyA9IHVpX3dpbmRvd19j cmVhdGUoY29uZmlndXJlKTsKICBpZiAod2luZG93ID09IDApICBleGl0KEVYSVRfRkFJTFVSRSk7 CgogIHVpX3dpbmRvd19uYW1lKHdpbmRvdyk7CgogICAgLyogTWFwIHRoZSB3aW5kb3cgb24gdGhl IHNjcmVlbiAqLwogIHhjYl9tYXBfd2luZG93KGNvbm5lY3Rpb24sIHdpbmRvdyk7CiAgaWZhY2Uw Lm1hcHBlZCA9IHRydWU7CgogICAgLyogUnVuIGV2ZW50IGxvb3AgKi8KICB4Y2JfbWFpbigpOwoK ICByZXR1cm4gRVhJVF9TVUNDRVNTOwp9Ci== --=-vuDi7qU9XqprIoS/tjas--