Re: pop up windows
Steven J Abner <[email protected]> Sun, 16 Feb 2025 18:57:30 -0500
| Newsgroups | gmane.comp.freedesktop.xcb |
|---|---|
| Message-ID | <[email protected]> |
--=-3hZ/YvcT6wA2NL7ABgWE Content-Type: text/plain; charset=us-ascii; format=flowed Ready to have your minds blown! I've created another demo. Had to prove to myself that once and for all my conclusions. You're not going to believe me, but on my system XGrabPointer() works but XUngrabPointer() doesn't. You must use xcb_ungrab_pointer() to ungrab. However I do use XUngrabPointer() in another code along with focus stuff and have released grab. This demo was only a window that just grabs pointer and ungrabs it. On button press, grab pointer, on next button press ungrab. Be warned, had to reboot when using XUngrabPointer(). It is commented out in favor of working xcb_ungrab_pointer(). KaBoooom Steve gcc -ansi -pedantic -Wall -Wno-unknown-pragmas -g -o xgrab xgrab.c -lxcb -lX11 -lX11-xcb --=-3hZ/YvcT6wA2NL7ABgWE Content-Type: text/x-csrc Content-Disposition: attachment; filename=xgrab.c Content-Transfer-Encoding: base64 I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5o PgojaW5jbHVkZSA8c3RkYm9vbC5oPgojaW5jbHVkZSA8aW50dHlwZXMuaD4KI2luY2x1ZGUgPGxp bWl0cy5oPgojaW5jbHVkZSA8cG9sbC5oPgoKI2RlZmluZSBVU0VfWExJQiAxCiNpZiBVU0VfWExJ QgojaW5jbHVkZSA8WDExL1hsaWIteGNiLmg+IC8qIEEgbXVzdCBmb3IgWEdyYWJQb2ludGVyICov CkRpc3BsYXkgKmRpc3BsYXk7CmJvb2wgZ3JhYmJlZCA9IGZhbHNlOwpib29sIG9uY2UgPSB0cnVl OwovKiBnY2MgLWFuc2kgLXBlZGFudGljIC1XYWxsIC1Xbm8tdW5rbm93bi1wcmFnbWFzIC1nCiAt byB4Z3JhYiB4Z3JhYi5jIC1seGNiIC1sWDExIC1sWDExLXhjYiAqLwojZWxzZQojaW5jbHVkZSA8 eGNiL3hjYi5oPiAgICAgIC8qIGhhcyBjb3JyZWN0IHN5cy90eXBlcyAqLwovKiBnY2MgLWFuc2kg LXBlZGFudGljIC1XYWxsIC1Xbm8tdW5rbm93bi1wcmFnbWFzIC1nIC1vIHhncmFiIHhncmFiLmMg LWx4Y2IgKi8KI2VuZGlmCgoKdHlwZWRlZiBzdHJ1Y3QgX1BoeEludGVyZmFjZSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUGh4SW50ZXJmYWNlOwp0eXBlZGVmIHN0cnVjdCBfUGh4UmVjdGFu Z2xlIHsgaW50MTZfdCB4LCB5LCB3LCBoOyB9ICAgICBQaHhSZWN0YW5nbGU7Cgp4Y2JfY29ubmVj dGlvbl90ICAgICAqY29ubmVjdGlvbiA9IE5VTEw7CnhjYl9hdG9tX3QgV01fUFJPVE9DT0xTOwp4 Y2JfYXRvbV90IFdNX0RFTEVURV9XSU5ET1c7CgpzdHJ1Y3QgX1BoeEludGVyZmFjZSB7CiBQaHhS ZWN0YW5nbGUgIG1ldGVfYm94OwogeGNiX3dpbmRvd190ICB3aW5kb3c7Cn0gaWZhY2UwID0geyB7 MH0sIDAgfTsKCiNkZWZpbmUgREVCVUcoYSxiKSBcCiAgcHJpbnRmKCIlZCAlc1xuIiwgYSwgYik7 CgovKiBzZXQgYWxsIGV2ZW50cyBvbiAqLwp1aW50NjRfdCBkZWJ1Z19mbGFncyA9ICh1aW50NjRf dCkweEZGRkZGRkZGRkZGRkZGRkY7CnN0YXRpYyB2b2lkCl9kZWJ1Z19ldmVudCh4Y2JfZ2VuZXJp Y19ldmVudF90ICpudnQpIHsKCiAgdWludDhfdCByZXNwb25zZSA9IG52dC0+cmVzcG9uc2VfdHlw ZSAmICh1aW50OF90KX4weDA4MDsKICB1aW50NjRfdCBvbl9iaXQgPSAodWludDY0X3QpMSA8PCBy ZXNwb25zZTsKICBpZiAoKGRlYnVnX2ZsYWdzICYgb25fYml0KSA9PSAwKSAgcmV0dXJuOwoKICBz d2l0Y2ggKHJlc3BvbnNlKSB7CiAgICBjYXNlIFhDQl9LRVlfUFJFU1M6IHsgICAgICAgICAvKiBy ZXNwb25zZV90eXBlIDIgKi8KICAgICAgeGNiX2tleV9wcmVzc19ldmVudF90ICprcCA9ICh4Y2Jf a2V5X3ByZXNzX2V2ZW50X3QqKW52dDsKICAgICAgREVCVUcoa3AtPmV2ZW50LCAiS0VZX1BSRVNT Iik7CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfS0VZX1JFTEVBU0U6IHsgICAgICAg LyogcmVzcG9uc2VfdHlwZSAzICovCiAgICAgIHhjYl9rZXlfcHJlc3NfZXZlbnRfdCAqa3AgPSAo eGNiX2tleV9wcmVzc19ldmVudF90KiludnQ7CiAgICAgIERFQlVHKGtwLT5ldmVudCwgIktFWV9S RUxFQVNFIik7CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfQlVUVE9OX1BSRVNTOiB7 ICAgICAgLyogcmVzcG9uc2VfdHlwZSA0ICovCiAgICAgIHhjYl9idXR0b25fcHJlc3NfZXZlbnRf dCAqYnA7CiAgICAgIGJwID0gKHhjYl9idXR0b25fcHJlc3NfZXZlbnRfdCopbnZ0OwogICAgICBE RUJVRyhicC0+ZXZlbnQsICJCVVRUT05fUFJFU1MiKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBj YXNlIFhDQl9CVVRUT05fUkVMRUFTRTogeyAgICAvKiByZXNwb25zZV90eXBlIDUgKi8KICAgICAg eGNiX2J1dHRvbl9wcmVzc19ldmVudF90ICpicDsKICAgICAgYnAgPSAoeGNiX2J1dHRvbl9wcmVz c19ldmVudF90KiludnQ7CiAgICAgIERFQlVHKGJwLT5ldmVudCwgIkJVVFRPTl9SRUxFQVNFIik7 CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfTU9USU9OX05PVElGWTogeyAgICAgLyog cmVzcG9uc2VfdHlwZSA2ICovCiAgICAgIHhjYl9tb3Rpb25fbm90aWZ5X2V2ZW50X3QgKm1vdGlv bgogICAgICAgID0gKHhjYl9tb3Rpb25fbm90aWZ5X2V2ZW50X3QqKW52dDsKICAgICAgREVCVUco bW90aW9uLT5ldmVudCwgIk1PVElPTl9OT1RJRlkiKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBj YXNlIFhDQl9FTlRFUl9OT1RJRlk6IHsgICAgICAvKiByZXNwb25zZV90eXBlIDcgKi8KICAgICAg eGNiX2VudGVyX25vdGlmeV9ldmVudF90ICp4aW5nCiAgICAgICAgPSAoeGNiX2VudGVyX25vdGlm eV9ldmVudF90KiludnQ7CiAgICAgIERFQlVHKHhpbmctPmV2ZW50LCAiRU5URVJfTk9USUZZIik7 CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfTEVBVkVfTk9USUZZOiB7ICAgICAgLyog cmVzcG9uc2VfdHlwZSA4ICovCiAgICAgIHhjYl9lbnRlcl9ub3RpZnlfZXZlbnRfdCAqeGluZwog ICAgICAgID0gKHhjYl9lbnRlcl9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBERUJVRyh4aW5n LT5ldmVudCwgIkxFQVZFX05PVElGWSIpOwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENC X0ZPQ1VTX0lOOiB7ICAgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgOSAqLwogICAgICB4Y2JfZm9j dXNfaW5fZXZlbnRfdCAqZm9jdXMgPSAoeGNiX2ZvY3VzX2luX2V2ZW50X3QqKW52dDsKICAgICAg REVCVUcoZm9jdXMtPmV2ZW50LCAiRk9DVVNfSU4iKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBj YXNlIFhDQl9GT0NVU19PVVQ6IHsgICAgICAgICAvKiByZXNwb25zZV90eXBlIDEwICovCiAgICAg IHhjYl9mb2N1c19pbl9ldmVudF90ICpmb2N1cyA9ICh4Y2JfZm9jdXNfaW5fZXZlbnRfdCopbnZ0 OwogICAgICBERUJVRyhmb2N1cy0+ZXZlbnQsICJGT0NVU19PVVQiKTsKICAgICAgYnJlYWs7CiAg ICB9CiAgICBjYXNlIFhDQl9FWFBPU0U6IHsgICAgICAgICAgICAvKiByZXNwb25zZV90eXBlIDEy ICovCiAgICAgIHhjYl9leHBvc2VfZXZlbnRfdCAqZXhwb3NlID0gKHhjYl9leHBvc2VfZXZlbnRf dCopbnZ0OwogICAgICBERUJVRyhleHBvc2UtPndpbmRvdywgIkVYUE9TRSIpOwogICAgICBicmVh azsKICAgIH0KICAgIGNhc2UgWENCX1ZJU0lCSUxJVFlfTk9USUZZOiB7IC8qIHJlc3BvbnNlX3R5 cGUgMTUgKi8KICAgICAgeGNiX3Zpc2liaWxpdHlfbm90aWZ5X2V2ZW50X3QgKnNlZW4KICAgICAg ICA9ICh4Y2JfdmlzaWJpbGl0eV9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBERUJVRyhzZWVu LT53aW5kb3csICJWSVNJQklMSVRZX05PVElGWSIpOwogICAgICBicmVhazsKICAgIH0KICAgIGNh c2UgWENCX0RFU1RST1lfTk9USUZZOiB7ICAgIC8qIHJlc3BvbnNlX3R5cGUgIDE3ICovCiAgICAg ICAgLyogYXNzdW1lIGEga2lsbCwgZGVsZXRlIGFsbCB3aW5kb3dzIChkbyB0aGVpciB0aGluZykK ICAgICAgICAgICBzZW5kIGZhbHNlIHRvIGV4aXQgbG9vcCAqLwogICAgICB4Y2JfZGVzdHJveV9u b3RpZnlfZXZlbnRfdCAqZGVzdHJveQogICAgICAgID0gKHhjYl9kZXN0cm95X25vdGlmeV9ldmVu dF90KiludnQ7CiAgICAgIERFQlVHKGRlc3Ryb3ktPndpbmRvdywgIlhDQl9ERVNUUk9ZX05PVElG WSIpOwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENCX1VOTUFQX05PVElGWTogeyAgICAg IC8qIHJlc3BvbnNlX3R5cGUgMTggKi8KICAgICAgeGNiX3VubWFwX25vdGlmeV9ldmVudF90ICp1 bm1hcAogICAgICAgID0gKHhjYl91bm1hcF9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBERUJV Ryh1bm1hcC0+d2luZG93LCAiWENCX1VOTUFQX05PVElGWSIpOwogICAgICBicmVhazsKICAgIH0K ICAgIGNhc2UgWENCX01BUF9OT1RJRlk6IHsgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgMTkgKi8K ICAgICAgeGNiX21hcF9ub3RpZnlfZXZlbnRfdCAqbWFwCiAgICAgICAgPSAoeGNiX21hcF9ub3Rp ZnlfZXZlbnRfdCopbnZ0OwogICAgICAgREVCVUcobWFwLT53aW5kb3csICJYQ0JfTUFQX05PVElG WSIpOwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENCX1JFUEFSRU5UX05PVElGWTogeyAg IC8qIHJlc3BvbnNlX3R5cGUgMjEgKi8KICAgICAgeGNiX3JlcGFyZW50X25vdGlmeV9ldmVudF90 ICpycAogICAgICAgID0gKHhjYl9yZXBhcmVudF9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBE RUJVRyhycC0+d2luZG93LCAiWENCX1JFUEFSRU5UX05PVElGWSIpOwogICAgICBicmVhazsKICAg IH0KICAgIGNhc2UgWENCX0NPTkZJR1VSRV9OT1RJRlk6IHsgIC8qIHJlc3BvbnNlX3R5cGUgMjIg Ki8KICAgICAgeGNiX2NvbmZpZ3VyZV9ub3RpZnlfZXZlbnRfdCAqY29uZmlndXJlCiAgICAgICAg PSAoeGNiX2NvbmZpZ3VyZV9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBERUJVRyhjb25maWd1 cmUtPmV2ZW50LCAiQ09ORklHVVJFX05PVElGWSIpOwogICAgICBicmVhazsKICAgIH0KICAgIGNh c2UgWENCX1BST1BFUlRZX05PVElGWTogeyAgIC8qIHJlc3BvbnNlX3R5cGUgMjggKi8KICAgICAg eGNiX3Byb3BlcnR5X25vdGlmeV9ldmVudF90ICpwcm9wCiAgICAgICAgPSAoeGNiX3Byb3BlcnR5 X25vdGlmeV9ldmVudF90KiludnQ7CiAgICAgIERFQlVHKHByb3AtPndpbmRvdywgIlhDQl9QUk9Q RVJUWV9OT1RJRlkiKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIFhDQl9TRUxFQ1RJT05f Q0xFQVI6IHsgICAvKiByZXNwb25zZV90eXBlIDI5ICovCiAgICAgIHhjYl9zZWxlY3Rpb25fY2xl YXJfZXZlbnRfdCAqY2xlYXIKICAgICAgICA9ICh4Y2Jfc2VsZWN0aW9uX2NsZWFyX2V2ZW50X3Qq KW52dDsKICAgICAgREVCVUcoY2xlYXItPm93bmVyLCAiWENCX1NFTEVDVElPTl9DTEVBUiIpOwog ICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENCX1NFTEVDVElPTl9SRVFVRVNUOiB7IC8qIHJl c3BvbnNlX3R5cGUgMzAgKi8KICAgICAgeGNiX3NlbGVjdGlvbl9yZXF1ZXN0X2V2ZW50X3QgKnJl cXVlc3QKICAgICAgICA9ICh4Y2Jfc2VsZWN0aW9uX3JlcXVlc3RfZXZlbnRfdCopbnZ0OwogICAg ICBERUJVRyhyZXF1ZXN0LT5vd25lciwgIlhDQl9TRUxFQ1RJT05fUkVRVUVTVCIpOwogICAgICBi cmVhazsKICAgIH0KICAgIGNhc2UgWENCX1NFTEVDVElPTl9OT1RJRlk6IHsgIC8qIHJlc3BvbnNl X3R5cGUgMzEgKi8KICAgICAgeGNiX3NlbGVjdGlvbl9ub3RpZnlfZXZlbnRfdCAqc2VsZWN0aW9u CiAgICAgICAgPSAoeGNiX3NlbGVjdGlvbl9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBERUJV RyhzZWxlY3Rpb24tPnJlcXVlc3RvciwgIlhDQl9TRUxFQ1RJT05fTk9USUZZIik7CiAgICAgIGJy ZWFrOwogICAgfQogICAgY2FzZSBYQ0JfQ0xJRU5UX01FU1NBR0U6IHsgICAgLyogcmVzcG9uc2Vf dHlwZSAzMyAqLwogICAgICB4Y2JfY2xpZW50X21lc3NhZ2VfZXZlbnRfdCAqbWVzc2FnZQogICAg ICAgID0gKHhjYl9jbGllbnRfbWVzc2FnZV9ldmVudF90KiludnQ7CiAgICAgIERFQlVHKG1lc3Nh Z2UtPndpbmRvdywgIlhDQl9DTElFTlRfTUVTU0FHRSIpOwogICAgICBicmVhazsKICAgIH0KICAg IGRlZmF1bHQ6CiAgICAgIGlmIChudnQtPnJlc3BvbnNlX3R5cGUgPT0gMCkgewogICAgICAgIHhj Yl9nZW5lcmljX2Vycm9yX3QgKmVyciA9ICh4Y2JfZ2VuZXJpY19lcnJvcl90KiludnQ7CiAgICAg ICAgaWYgKGVyci0+ZXJyb3JfY29kZSA9PSAodWludDhfdCkxNDMpCiAgICAgICAgICBwdXRzKCJT SUdURVJNIHJlY2VpdmVkIik7CiAgICAgICAgZWxzZQogICAgICAgICAgcHJpbnRmKCJlcnJvcjog JSJQUkl1OCJcbiIsIGVyci0+ZXJyb3JfY29kZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAg ICAgICAvKiBVbmtub3duIGV2ZW50IHR5cGUsIHVzZSB0byB0cmFjayBjb2RpbmcgcHJvYmxlbXMg Ki8KICAgICAgcHJpbnRmKCJVbmtub3duIGV2ZW50OiAlIlBSSXU4IlxuIiwgbnZ0LT5yZXNwb25z ZV90eXBlKTsKICAgICAgYnJlYWs7CiAgfQp9CgoKUGh4SW50ZXJmYWNlICoKX2ludGVyZmFjZV9m b3IoeGNiX3dpbmRvd190IHdpbmRvdykgewogIHJldHVybiAmaWZhY2UwOwp9CgpzdGF0aWMgYm9v bApfZXZlbnRfbW91c2UoeGNiX2dlbmVyaWNfZXZlbnRfdCAqbnZ0KSB7CgogIGJvb2wgbG9jdXMg PSAoKG52dC0+cmVzcG9uc2VfdHlwZSAmICh1aW50OF90KX4weDgwKSA9PSBYQ0JfQlVUVE9OX1BS RVNTKTsKICB4Y2JfYnV0dG9uX3ByZXNzX2V2ZW50X3QgKm1vdXNlID0gKHhjYl9idXR0b25fcHJl c3NfZXZlbnRfdCopbnZ0OwoKICBpZiAoIWxvY3VzKSB7CiNpZiBVU0VfWExJQgogICAgaWYgKCFn cmFiYmVkKSB7CiAgICAgIGdyYWJiZWQgPSB0cnVlOwogICAgICBwdXRzKCJncmFiIHBvaW50ZXIi KTsKICAgICAgaWYgKEdyYWJTdWNjZXNzICE9IFhHcmFiUG9pbnRlcihkaXNwbGF5LCBtb3VzZS0+ ZXZlbnQsIHRydWUsCiAgICAgICAgICAgICBCdXR0b25QcmVzc01hc2t8QnV0dG9uUmVsZWFzZU1h c2t8UG9pbnRlck1vdGlvbk1hc2ssCiAgICAgICAgICAgICBHcmFiTW9kZUFzeW5jLCBHcmFiTW9k ZUFzeW5jLCBOb25lLCBOb25lLCBDdXJyZW50VGltZSkpIHsKICAgICAgICBwdXRzKCJncmFiIGZh aWxlZCIpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG9uY2UpIHsKICAgICAgcHV0cygidW5ncmFi IHBvaW50ZXIiKTsKICAgICAgeGNiX3VuZ3JhYl9wb2ludGVyKGNvbm5lY3Rpb24sIFhDQl9DVVJS RU5UX1RJTUUpOwogICAgICAvKlhVbmdyYWJQb2ludGVyKGRpc3BsYXksIEN1cnJlbnRUaW1lKTsq LwogICAgICBvbmNlID0gZmFsc2U7CiAgICB9CiNlbHNlCiAgICBQaHhJbnRlcmZhY2UgKmlmYWNl ID0gX2ludGVyZmFjZV9mb3IobW91c2UtPmV2ZW50KTsKICAgIHhjYl9ncmFiX3BvaW50ZXJfY29v a2llX3QgZ3JhYl9jb29raWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAgICB4Y2JfZ3JhYl9wb2ludGVyX3JlcGx5X3QgKmdyYWJfcmVwbHk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICB4Y2JfZ2VuZXJpY19lcnJvcl90ICpn cmFiX2Vycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgcHV0cygiZ3JhYiBwb2ludGVyIik7CiAgICBncmFiX2Nvb2tpZSA9IHhjYl9ncmFiX3Bv aW50ZXIoY29ubmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAxLAogICAgICAgICAg ICAgICAgICAgICAgICAgIGlmYWNlLT53aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAg WENCX0JVVFRPTl9QUkVTU3xYQ0JfQlVUVE9OX1JFTEVBU0V8WENCX01PVElPTl9OT1RJRlksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgWENCX0dSQUJfTU9ERV9BU1lOQywKICAgICAgICAgICAg ICAgICAgICAgICAgICBYQ0JfR1JBQl9NT0RFX0FTWU5DLCBYQ0JfTk9ORSwKICAgICAgICAgICAg ICAgICAgICAgICAgICBYQ0JfTk9ORSwgWENCX0NVUlJFTlRfVElNRSk7CiAgICBncmFiX3JlcGx5 ID0geGNiX2dyYWJfcG9pbnRlcl9yZXBseShjb25uZWN0aW9uLCBncmFiX2Nvb2tpZSwgJmdyYWJf ZXJyb3IpOyAgICAKICAgIGlmICghZ3JhYl9yZXBseSB8fCBncmFiX3JlcGx5LT5zdGF0dXMgIT0g WENCX0dSQUJfU1RBVFVTX1NVQ0NFU1MpIHsgICAgICAgICAgCiAgICAgIHB1dHMoImdyYWIgZmFp bGVkIik7CiAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgfQojZW5kaWYKICB9IGVsc2Ugewoj aWYgIVVTRV9YTElCCiAgIC8qeGNiX3VuZ3JhYl9wb2ludGVyKGNvbm5lY3Rpb24sIFhDQl9DVVJS RU5UX1RJTUUpOyovCiNlbmRpZgogIH0KICByZXR1cm4gdHJ1ZTsKfQoKc3RhdGljIGJvb2wKX2V2 ZW50X2NvbmZpZ3VyZSh4Y2JfZ2VuZXJpY19ldmVudF90ICpudnQpIHsKCiAgeGNiX2NvbmZpZ3Vy ZV9ub3RpZnlfZXZlbnRfdCAqY29uZmlndXJlCiAgICA9ICh4Y2JfY29uZmlndXJlX25vdGlmeV9l dmVudF90KiludnQ7CiAgeGNiX3dpbmRvd190IHdpbmRvdyA9IGNvbmZpZ3VyZS0+ZXZlbnQ7CiAg UGh4SW50ZXJmYWNlICppZmFjZSA9IF9pbnRlcmZhY2VfZm9yKHdpbmRvdyk7CgogIGlmICgqKHVp bnQ2NF90KikmaWZhY2UtPm1ldGVfYm94LnggPT0gKih1aW50NjRfdCopJmNvbmZpZ3VyZS0+eCkK ICAgIHJldHVybiB0cnVlOwoKICAgIC8qIERvIGludGVybmFsIGNvbmZpZ3VyYXRpb24gKi8KCiAg ICAvKiBTZXQgbWV0ZV9ib3ggaWYgbW92ZSBvY2N1cnJlZCAqLwogIGlmICgoY29uZmlndXJlLT54 IHwgY29uZmlndXJlLT55KSAhPSAwKSB7CiAgICBpZiAoIChpZmFjZS0+bWV0ZV9ib3gueCAhPSBj b25maWd1cmUtPngpCiAgICAgICAgfHwgKGlmYWNlLT5tZXRlX2JveC55ICE9IGNvbmZpZ3VyZS0+ eSkgKSB7CiAgICAgICAgLyogTmVlZGVkLCBpZiB3YW50IGFjY3VyYXRlIHBvc2l0aW9uaW5nLiBX TSBpcyB1bnJlbGlhYmxlICovCiAgICAgIHhjYl9zY3JlZW5fdCAqc2NyZWVuCiAgICAgICAgPSB4 Y2Jfc2V0dXBfcm9vdHNfaXRlcmF0b3IoeGNiX2dldF9zZXR1cChjb25uZWN0aW9uKSkuZGF0YTsK ICAgICAgeGNiX3RyYW5zbGF0ZV9jb29yZGluYXRlc19yZXBseV90ICpjZmcKICAgICAgICA9IHhj Yl90cmFuc2xhdGVfY29vcmRpbmF0ZXNfcmVwbHkoY29ubmVjdGlvbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICB4Y2JfdHJhbnNsYXRlX2Nvb3JkaW5hdGVzKGNvbm5lY3Rpb24sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LCBzY3JlZW4tPnJvb3QsIDAsIDAp LCBOVUxMKTsKICAgICAgaWZhY2UtPm1ldGVfYm94LnggPSBjZmctPmRzdF94OwogICAgICBpZmFj ZS0+bWV0ZV9ib3gueSA9IGNmZy0+ZHN0X3k7CiAgICAgIGZyZWUoY2ZnKTsKICAgIH0KICB9CiAg cmV0dXJuIHRydWU7Cn0KCnN0YXRpYyBpbnQzMl90Cl9wcm9jZXNzX3RpbWVycyh2b2lkKSB7CiAg cmV0dXJuIElOVF9NQVg7Cn0KCnN0YXRpYyBib29sCl9wcm9jZXNzX2V2ZW50KHhjYl9nZW5lcmlj X2V2ZW50X3QgKm52dCkgewoKICBfZGVidWdfZXZlbnQobnZ0KTsKCiAgc3dpdGNoIChudnQtPnJl c3BvbnNlX3R5cGUgJiAodWludDhfdCl+MHg4MCkgewoKICAgIGNhc2UgWENCX0tFWV9QUkVTUzog ICAgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgMiAqLwogICAgY2FzZSBYQ0JfS0VZX1JFTEVBU0U6 IHsgICAgICAgLyogcmVzcG9uc2VfdHlwZSAzICovCiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNh c2UgWENCX0JVVFRPTl9QUkVTUzogICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgNCAqLwogICAgY2Fz ZSBYQ0JfQlVUVE9OX1JFTEVBU0U6IHsgICAgLyogcmVzcG9uc2VfdHlwZSA1ICovCiAgICAgIF9l dmVudF9tb3VzZShudnQpOwogICAgICBicmVhazsKICAgIH0KCiAgICBjYXNlIFhDQl9NT1RJT05f Tk9USUZZOiB7ICAgICAvKiByZXNwb25zZV90eXBlIDYgKi8KICAgIGNhc2UgWENCX0VOVEVSX05P VElGWTogICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgNyAqLwogICAgICBicmVhazsKICAgIH0KCiAg ICBjYXNlIFhDQl9MRUFWRV9OT1RJRlk6IHsgICAgICAvKiByZXNwb25zZV90eXBlIDggKi8KICAg ICAgZGVidWdfZmxhZ3MgfD0gKCh1aW50NjRfdCkxIDw8IFhDQl9NT1RJT05fTk9USUZZKTsKICAg ICAgYnJlYWs7CiAgICB9CgogICAgY2FzZSBYQ0JfRk9DVVNfSU46IHsgICAgICAgICAgLyogcmVz cG9uc2VfdHlwZSA5ICovCiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0ZPQ1VTX09V VDogeyAgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgMTAgKi8KI2lmIFVTRV9YTElCCiAgICAgIGlm IChncmFiYmVkICYmIG9uY2UpIHsKICAgICAgICBwdXRzKCJ1bmdyYWIgcG9pbnRlciIpOwogICAg ICAgIFhVbmdyYWJQb2ludGVyKGRpc3BsYXksIEN1cnJlbnRUaW1lKTsKICAgICAgICBvbmNlID0g ZmFsc2U7CiAgICAgIH0KI2VuZGlmCiAgICAgIGJyZWFrOwogICAgfQoKCiAgICBjYXNlIFhDQl9F WFBPU0U6IHsgICAgICAgICAgICAvKiByZXNwb25zZV90eXBlIDEyICovCiAgICBjYXNlIFhDQl9W SVNJQklMSVRZX05PVElGWTogICAvKiByZXNwb25zZV90eXBlIDE1ICovCiAgICAgIGJyZWFrOwog ICAgfQoKICAgIGNhc2UgWENCX0RFU1RST1lfTk9USUZZOiB7ICAgIC8qIHJlc3BvbnNlX3R5cGUg MTcgKi8KICAgICAgZnJlZShudnQpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAgIC8q IHRoZXNlIDQgYmVjYXVzZSBvZiBYQ0JfRVZFTlRfTUFTS19TVFJVQ1RVUkVfTk9USUZZICovCiAg ICBjYXNlIFhDQl9VTk1BUF9OT1RJRlk6IHsgICAgICAvKiByZXNwb25zZV90eXBlIDE4ICovCiAg ICBjYXNlIFhDQl9NQVBfTk9USUZZOiAgICAgICAgICAvKiByZXNwb25zZV90eXBlIDE5ICovCiAg ICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfUkVQQVJFTlRfTk9USUZZOiB7ICAgLyogcmVz cG9uc2VfdHlwZSAyMSAqLwogICAgICAgIC8qIHBvc2l0aW9uIGFmdGVyIG1hcCwgdG8gZGVzaWdu IHVzZXIgcmVxdWVzdGVkIG9mIHdpbmRvdwogICAgICAgICAqIHNldCBvbmNlIGFuZCB3aGVuIHdp bmRvdyBtYW5hZ2VyIGFza3MgdG8gcmVwYXJlbnQKICAgICAgICAgKiBkb250IG5lZWQgZHVyaW5n IGljb24vZGVpY29uaWZ5CiAgICAgICAgICogZG9lc250IHN0b3AgV00gY29uZmlndXJlcywgYnV0 IHdpbGwgYmUgc2VudCBhZnRlciBtYXAgbm90aWZ5ICovCiAgICAgIHhjYl9yZXBhcmVudF9ub3Rp ZnlfZXZlbnRfdCAqcnAKICAgICAgICA9ICh4Y2JfcmVwYXJlbnRfbm90aWZ5X2V2ZW50X3QqKW52 dDsKICAgICAgUGh4SW50ZXJmYWNlICppZmFjZSA9IF9pbnRlcmZhY2VfZm9yKHJwLT53aW5kb3cp OwogICAgICB1aW50MzJfdCB2YWx1ZXNbMl07CiAgICAgIHZhbHVlc1swXSA9IGlmYWNlLT5tZXRl X2JveC54OwogICAgICB2YWx1ZXNbMV0gPSBpZmFjZS0+bWV0ZV9ib3gueTsKICAgICAgeGNiX2Nv bmZpZ3VyZV93aW5kb3coY29ubmVjdGlvbiwgaWZhY2UtPndpbmRvdywKICAgICAgICAgICAgICAg ICAgIFhDQl9DT05GSUdfV0lORE9XX1ggfCBYQ0JfQ09ORklHX1dJTkRPV19ZLCB2YWx1ZXMpOwog ICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENCX0NPTkZJR1VSRV9OT1RJRlk6IHsgIC8qIHJl c3BvbnNlX3R5cGUgMjIgKi8KICAgICAgX2V2ZW50X2NvbmZpZ3VyZShudnQpOwogICAgICBicmVh azsKICAgIH0KCiAgICBjYXNlIFhDQl9QUk9QRVJUWV9OT1RJRlk6IHsgICAvKiByZXNwb25zZV90 eXBlIDI4ICovCiAgICBjYXNlIFhDQl9TRUxFQ1RJT05fQ0xFQVI6ICAgICAvKiByZXNwb25zZV90 eXBlIDI5ICovCiAgICBjYXNlIFhDQl9TRUxFQ1RJT05fUkVRVUVTVDogICAvKiByZXNwb25zZV90 eXBlIDMwICovCiAgICBjYXNlIFhDQl9TRUxFQ1RJT05fTk9USUZZOiAgICAvKiByZXNwb25zZV90 eXBlIDMxICovCiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0NMSUVOVF9NRVNTQUdF OiB7ICAgIC8qIHJlc3BvbnNlX3R5cGUgMzMgKi8KICAgICAgeGNiX2NsaWVudF9tZXNzYWdlX2V2 ZW50X3QgKmNtCiAgICAgICAgPSAoeGNiX2NsaWVudF9tZXNzYWdlX2V2ZW50X3QqKW52dDsKICAg ICAgaWYgKGNtLT50eXBlICE9IFdNX1BST1RPQ09MUykgIGdvdG8gcmVwb3J0OwogICAgICB4Y2Jf dW5tYXBfd2luZG93KGNvbm5lY3Rpb24sIGlmYWNlMC53aW5kb3cpOwogICAgICB4Y2JfZGVzdHJv eV93aW5kb3coY29ubmVjdGlvbiwgaWZhY2UwLndpbmRvdyk7CiAgICAgIGJyZWFrOwogICAgfQoK ICAgIGRlZmF1bHQ6CiAgICAgIGlmIChudnQtPnJlc3BvbnNlX3R5cGUgPT0gMCkgewogICAgICAg IHhjYl9nZW5lcmljX2Vycm9yX3QgKmVyciA9ICh4Y2JfZ2VuZXJpY19lcnJvcl90KiludnQ7CiAg ICAgICAgcHJpbnRmKCJlcnJvcjogJSJQUkl1OCJcbiIsIGVyci0+ZXJyb3JfY29kZSk7CiAgICAg ICAgYnJlYWs7CiAgICAgIH0KcmVwb3J0OgogICAgICAgIC8qIFVua25vd24gZXZlbnQgdHlwZSwg dXNlIHRvIHRyYWNrIGNvZGluZyBwcm9ibGVtcyAqLwogICAgICBwcmludGYoIlVua25vd24gZXZl bnQ6ICUiUFJJdTgiXG4iLCBudnQtPnJlc3BvbnNlX3R5cGUpOwogICAgICBicmVhazsKCiAgfSAv KiBlbmQgc3dpdGNoKHJlc3BvbnNlX3R5cGUpICovCiAgICAvKiBudnQgbm8gbG9uZ2VyIG5lZWRl ZCAqLwogIGZyZWUobnZ0KTsKICAgIC8qIGNyaXRpY2FsISBvdGhlcndpc2Ugd29udCBwcm9jZXNz IGFueXRoaW5nIGRvbmUgKi8KICB4Y2JfZmx1c2goY29ubmVjdGlvbik7CiAgcmV0dXJuIHRydWU7 Cn0KCnN0YXRpYyB2b2lkCnhjYl9tYWluKHZvaWQpIHsKCiAgICAvKiBzZXQgYWxsIGJlZm9yZSB0 aHJvdWdoIHRvIFhzZXJ2ZXIgKi8KICB4Y2JfZmx1c2goY29ubmVjdGlvbik7CgogIGRvIHsKICAg IGludCB0aW1lb3V0OwogICAgeGNiX2dlbmVyaWNfZXZlbnRfdCAqZXZlbnQ7CiAgICB3aGlsZSAo KGV2ZW50ID0geGNiX3BvbGxfZm9yX2V2ZW50KGNvbm5lY3Rpb24pKSAhPSBOVUxMKQogICAgICAg IC8qIF9wcm9jZXNzX2V2ZW50KCkgcmV0dXJucyAncnVubmluZycgZm9yIG1haW4gbG9vcC4gKi8K ICAgICAgaWYgKF9wcm9jZXNzX2V2ZW50KGV2ZW50KSA9PSBmYWxzZSkgIGdvdG8gY2xlYW51cDsK ICAgIGRvIHsKICAgICAgICAvKiBfcHJvY2Vzc190aW1lcnMoKSBydW5zIGFueSB0aW1lcnMgdGhh dCBhcmUgaW1tZWRpYXRlbHkgcGVuZGluZywKICAgICAgICAgICBhbmQgcmV0dXJucyB0aGUgbnVt YmVyIG9mIG1pbGxpc2Vjb25kcyB1bnRpbCB0aGUgbmV4dCB0aW1lcgogICAgICAgICAgIGluIHRo ZSBxdWV1ZSBpcyByZWFkeS4KICAgICAgICAgICBfcHJvY2Vzc190aW1lcnMoKSByZXR1cm5zIElO VF9NQVggaWYgdGhlcmUgYXJlIG5vIHRpbWVycy4gKi8KICAgICAgICAvKiBfcHJvY2Vzc190aW1l cnMoKSBhbHNvIHJlbW92ZXMgZnJvbSB0aW1lb3V0IGl0cyBydW4gdGltZS4gKi8KICAgICAgdGlt ZW91dCA9IF9wcm9jZXNzX3RpbWVycygpOwogICAgICBpZiAoKGV2ZW50ID0geGNiX3BvbGxfZm9y X3F1ZXVlZF9ldmVudChjb25uZWN0aW9uKSkgPT0gTlVMTCkgIGJyZWFrOwogICAgICAgIGlmIChf cHJvY2Vzc19ldmVudChldmVudCkgPT0gZmFsc2UpICBnb3RvIGNsZWFudXA7CiAgICB9IHdoaWxl ICgxKTsKICAgIGlmICh0aW1lb3V0ID4gNikgewogICAgICBzdHJ1Y3QgcG9sbGZkIHBmZFsxXTsK ICAgICAgcGZkLT5mZCA9IHhjYl9nZXRfZmlsZV9kZXNjcmlwdG9yKGNvbm5lY3Rpb24pOwogICAg ICBwZmQtPmV2ZW50cyA9IFBPTExJTjsKICAgICAgcGZkLT5yZXZlbnRzID0gUE9MTE9VVDsKICAg ICAgcG9sbChwZmQsIDEsIHRpbWVvdXQpOwogICAgfQogIH0gd2hpbGUgKDEpOwogICAgLyogcmVj ZWl2ZWQgWENCX0RFU1RST1lfTk9USUZZICovCmNsZWFudXA6CiAgcmV0dXJuOwp9Cgp2b2lkCnVp X3dpbmRvd19uYW1lKHhjYl93aW5kb3dfdCB3aW5kb3cpIHsKCiAgeGNiX2ludGVybl9hdG9tX2Nv b2tpZV90IGNvb2tpZQogICAgPSB4Y2JfaW50ZXJuX2F0b20oY29ubmVjdGlvbiwgMSwgNywgIldN X05BTUUiKTsKICB4Y2JfaW50ZXJuX2F0b21fcmVwbHlfdCAqcmVwbHkKICAgID0geGNiX2ludGVy bl9hdG9tX3JlcGx5KGNvbm5lY3Rpb24sIGNvb2tpZSwgTlVMTCk7CiAgeGNiX2ludGVybl9hdG9t X2Nvb2tpZV90IGNvb2tpZTIKICAgID0geGNiX2ludGVybl9hdG9tKGNvbm5lY3Rpb24sIDAsIDYs ICJTVFJJTkciKTsKICB4Y2JfaW50ZXJuX2F0b21fcmVwbHlfdCAqcmVwbHkyCiAgICA9IHhjYl9p bnRlcm5fYXRvbV9yZXBseShjb25uZWN0aW9uLCBjb29raWUyLCBOVUxMKTsKCiAgY2hhciB0aXRs ZVsxNl07CiAgc3ByaW50Zih0aXRsZSwgIiVkIiwgd2luZG93KTsKICB4Y2JfY2hhbmdlX3Byb3Bl cnR5KGNvbm5lY3Rpb24sIFhDQl9QUk9QX01PREVfUkVQTEFDRSwgd2luZG93LAogICAgICAgICAg ICAgICAgICAgICAgIHJlcGx5LT5hdG9tLCByZXBseTItPmF0b20sIDgsCiAgICAgICAgICAgICAg ICAgICAgICAgc3RybGVuKHRpdGxlKSwgdGl0bGUpOwogIGZyZWUocmVwbHkpOwogIGZyZWUocmVw bHkyKTsKfQoKc3RhdGljIHZvaWQKX3dpbmRvd19ldmVudF9kZWxldGUoeGNiX2Nvbm5lY3Rpb25f dCAqY29ubmVjdGlvbiwgeGNiX3dpbmRvd190IHdpbmRvdykgewoKICAgIC8qIGFsbG93IGRlbGV0 ZSB3aW5kb3cgc28gY2FuIHF1aXQgYXBwbGljYXRpb24uIEF2b2lkIF5DLiAqLwogIHhjYl9jaGFu Z2VfcHJvcGVydHkoY29ubmVjdGlvbiwgWENCX1BST1BfTU9ERV9SRVBMQUNFLCB3aW5kb3csCiAg ICAgICAgICAgICAgICAgICAgICBXTV9QUk9UT0NPTFMsIFhDQl9BVE9NX0FUT00sIDMyLCAxLAog ICAgICAgICAgICAgICAgICAgICAgJldNX0RFTEVURV9XSU5ET1cpOwp9CgpzdGF0aWMgeGNiX3dp bmRvd190CnVpX3dpbmRvd19jcmVhdGUoUGh4UmVjdGFuZ2xlIGNvbmZpZ3VyZSkgewoKICB4Y2Jf c2NyZWVuX3QgKnNjcmVlbjsKICB4Y2Jfd2luZG93X3Qgd2luZG93OwogIHVpbnQzMl90IG1hc2s7 CiAgdWludDMyX3QgdmFsdWVzWzJdOwoKICBpZiAoY29ubmVjdGlvbiA9PSBOVUxMKSB7CiAgICB4 Y2JfaW50ZXJuX2F0b21fY29va2llX3QgYzAsIGMxOwogICAgeGNiX2ludGVybl9hdG9tX3JlcGx5 X3QgKnIwLCAqcjE7CiNpZiBVU0VfWExJQgogICAgZGlzcGxheSA9IFhPcGVuRGlzcGxheShOVUxM KTsKICAgIGNvbm5lY3Rpb24gPSBYR2V0WENCQ29ubmVjdGlvbihkaXNwbGF5KTsKI2Vsc2UKICAg IGNvbm5lY3Rpb24gPSB4Y2JfY29ubmVjdChOVUxMLCBOVUxMKTsKI2VuZGlmCiAgICBjMCA9IHhj Yl9pbnRlcm5fYXRvbShjb25uZWN0aW9uLCAwLCAxMiwgIldNX1BST1RPQ09MUyIpOwogICAgYzEg PSB4Y2JfaW50ZXJuX2F0b20oY29ubmVjdGlvbiwgMCwgMTYsICJXTV9ERUxFVEVfV0lORE9XIik7 CiAgICByMCA9IHhjYl9pbnRlcm5fYXRvbV9yZXBseShjb25uZWN0aW9uLCBjMCwgTlVMTCk7CiAg ICByMSA9IHhjYl9pbnRlcm5fYXRvbV9yZXBseShjb25uZWN0aW9uLCBjMSwgTlVMTCk7CiAgICBX TV9QUk9UT0NPTFMgICAgID0gcjAtPmF0b207ICBmcmVlKCh2b2lkKilyMCk7CiAgICBXTV9ERUxF VEVfV0lORE9XID0gcjEtPmF0b207ICBmcmVlKCh2b2lkKilyMSk7CiAgfQoKICBzY3JlZW4gPSB4 Y2Jfc2V0dXBfcm9vdHNfaXRlcmF0b3IoeGNiX2dldF9zZXR1cChjb25uZWN0aW9uKSkuZGF0YTsK ICAgIC8qIENyZWF0ZSB0aGUgd2luZG93ICovCiAgd2luZG93ID0geGNiX2dlbmVyYXRlX2lkKGNv bm5lY3Rpb24pOwoKICBtYXNrICAgICAgPSBYQ0JfQ1dfQkFDS19QSVhFTCB8IFhDQl9DV19FVkVO VF9NQVNLOwogIHZhbHVlc1swXSA9IHNjcmVlbi0+d2hpdGVfcGl4ZWw7CiAgdmFsdWVzWzFdID0g WENCX0VWRU5UX01BU0tfRVhQT1NVUkUgICAgICAgfCBYQ0JfRVZFTlRfTUFTS19CVVRUT05fUFJF U1MgICB8CiAgICAgICAgICAgICAgWENCX0VWRU5UX01BU0tfQlVUVE9OX1JFTEVBU0UgfCBYQ0Jf RVZFTlRfTUFTS19QT0lOVEVSX01PVElPTiB8CiAgICAgICAgICAgICAgWENCX0VWRU5UX01BU0tf RU5URVJfV0lORE9XICAgfCBYQ0JfRVZFTlRfTUFTS19MRUFWRV9XSU5ET1cgICB8CiAgICAgICAg ICAgICAgWENCX0VWRU5UX01BU0tfS0VZX1BSRVNTICAgICAgfCBYQ0JfRVZFTlRfTUFTS19LRVlf UkVMRUFTRSAgICB8CiAgICAgICAgICAgICAgWENCX0VWRU5UX01BU0tfRk9DVVNfQ0hBTkdFICAg fCBYQ0JfRVZFTlRfTUFTS19TVFJVQ1RVUkVfTk9USUZZIHwKICAgICAgICAgICAgICBYQ0JfRVZF TlRfTUFTS19WSVNJQklMSVRZX0NIQU5HRTsKCiAgICAvKiBpZ25vcmVzIHgsIHksIGJvcmRlcl93 aWR0aCAodmlydXMpICovCiAgeGNiX2NyZWF0ZV93aW5kb3coY29ubmVjdGlvbiwKICAgICAgICAg ICAgICAgICAgICBzY3JlZW4tPnJvb3RfZGVwdGgsICAgICAgICAgICAgLyogZGVwdGggICAgICAg ICAgKi8KICAgICAgICAgICAgICAgICAgICB3aW5kb3csICAgICAgICAgICAgICAgICAgICAgICAg LyogZ2VuZXJhdGVkIGlkICAgKi8KICAgICAgICAgICAgICAgICAgICBzY3JlZW4tPnJvb3QsICAg ICAgICAgICAgICAgICAgLyogcGFyZW50IHdpbmRvdyAgKi8KICAgICAgICAgICAgICAgICAgICBj b25maWd1cmUueCwgICAgICAgICAgICAgICAgICAgLyogeCwgeSAgICAgICAgICAgKi8KICAgICAg ICAgICAgICAgICAgICBjb25maWd1cmUueSwKICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUu dywgICAgICAgICAgICAgICAgICAgLyogd2lkdGgsIGhlaWdodCAgKi8KICAgICAgICAgICAgICAg ICAgICBjb25maWd1cmUuaCwKICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogYm9yZGVyX3dpZHRoICAgKi8KICAgICAgICAgICAgICAgICAgICBYQ0Jf V0lORE9XX0NMQVNTX0lOUFVUX09VVFBVVCwgLyogY2xhc3MgICAgICAgICAgKi8KICAgICAgICAg ICAgICAgICAgICBzY3JlZW4tPnJvb3RfdmlzdWFsLCAgICAgICAgICAgLyogdmlzdWFsICAgICAg ICAgKi8KICAgICAgICAgICAgICAgICAgICBtYXNrLCB2YWx1ZXMpOyAgICAgICAgICAgICAgICAg LyogbWFza3MgKi8KICBfd2luZG93X2V2ZW50X2RlbGV0ZShjb25uZWN0aW9uLCB3aW5kb3cpOwog IGlmYWNlMC5tZXRlX2JveCA9IGNvbmZpZ3VyZTsKICBpZmFjZTAud2luZG93ID0gd2luZG93Owog IHJldHVybiB3aW5kb3c7Cn0KCmludAptYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKCiAg eGNiX3dpbmRvd190IHdpbmRvdzsKCiAgICAvKiB3aW5kb3cgc2l6ZSBhbmQgcG9zaXRpb24gKi8K ICBQaHhSZWN0YW5nbGUgY29uZmlndXJlID0geyA4MDAsIDIwMCwgMzAwLCAyMDAgfTsKCiAgICAv KiB0dXJuIG9ubHkgbGVhdmUgb24sIHdpbGwgdHVybiBvbiBhZnRlciBsZWF2ZSAqLwogIGRlYnVn X2ZsYWdzID0gKCh1aW50NjRfdCkxIDw8IFhDQl9MRUFWRV9OT1RJRlkpOwogIGRlYnVnX2ZsYWdz IHw9ICgodWludDY0X3QpMSA8PCBYQ0JfQlVUVE9OX1BSRVNTKTsKICBkZWJ1Z19mbGFncyB8PSAo KHVpbnQ2NF90KTEgPDwgWENCX0JVVFRPTl9SRUxFQVNFKTsKCiAgICAvKiBBICd0b3Btb3N0JyBk ZWNvcmF0ZWQgd2luZG93ICovCiAgd2luZG93ID0gdWlfd2luZG93X2NyZWF0ZShjb25maWd1cmUp OwogIGlmICh3aW5kb3cgPT0gMCkgIGV4aXQoRVhJVF9GQUlMVVJFKTsKCiAgdWlfd2luZG93X25h bWUod2luZG93KTsKCiAgICAvKiBNYXAgdGhlIHdpbmRvdyBvbiB0aGUgc2NyZWVuICovCiAgeGNi X21hcF93aW5kb3coY29ubmVjdGlvbiwgd2luZG93KTsKCiAgICAvKiBSdW4gZXZlbnQgbG9vcCAq LwogIHhjYl9tYWluKCk7CgogIHJldHVybiBFWElUX1NVQ0NFU1M7Cn0K --=-3hZ/YvcT6wA2NL7ABgWE--