X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-2.7 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_63,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: sourceware.org Message-ID: <49A85971.6070300@cwilson.fastmail.fm> Date: Fri, 27 Feb 2009 16:21:53 -0500 From: Charles Wilson User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.19) Gecko/20081209 Thunderbird/2.0.0.19 Mnenhy/0.7.6.666 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: [1.7] rebaseall doesn't solve the problem References: <499F6682 DOT 1090204 AT cwilson DOT fastmail DOT fm> <20090224100616 DOT GC6035 AT calimero DOT vinschen DOT de> In-Reply-To: <20090224100616.GC6035@calimero.vinschen.de> Content-Type: multipart/mixed; boundary="------------000701020409080206070409" Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com --------------000701020409080206070409 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Corinna Vinschen wrote: >> which means that locale.nls extends all the way down to 0x005E1000, so >> Cwd.dll can't go at 0x00860000. > > Hm? Isn't that end_of_mapped_region = mapped_location + mapped_size? You're right. I was confused by the upside-down chart I was looking at. > I'm wondering if that's a result of ASLR in Vista. The document > http://taossa.com.nyud.net:8080/archive/bh08sotirovdowd.pdf describes, > starting at page 11, a registry key to influence Vista's ASLR behaviour. > Does that change the behaviour for you? It *changes* the behavior, but doesn't fix it. the default case is key not present, or key present and equal to anything other than 0 or -1/0xffffffff. In this case, only those DLLs explicitly marked ASLR-compatible are supposed to be relocated -- subject to the other normal relocation rules. with the registry key set to 0 (disable ASLR, even if the DLL says it is ASLR-compatible), I get the same behavior as before: can't remap Cwd.dll. with the registry key set to -1/0xffffffff (force ASLR for all DLLs), I get slightly different behavior: can't allocate stack. Presumably this is because cygwin1.dll itself falls victim to relocation in this situation (verified this by looking at cygwin1.dll's load address). > If so, there's nothing Cygwin can do against that. In the long run, > only a native fork() implementation would help. Well, maybe not! From the document you referenced: Since Windows relies on relocations instead of position independent code, a DLL must be loaded at the same address in each process that uses it to allow the physical memory used by the DLL to be shared. To facilitate this behaviour, a global bitmap called _MiImageBitMap is used to represent the address space from 0x50000000 to 0x78000000. The bitmap is 0x2800 bits in length with each bit representing 64KB of memory. As each DLL is loaded, its position is recorded by setting the appropriate bits in the bitmap to mark the memory where the DLL is being mapped. When the same DLL is loaded in another process, its section object is reused and it is mapped at the same virtual addresses. So, by marking a particular (or all but cygwin1.dll?) DLL as ASLR-compatibile, we may be able to coerce the Windows runtime loader into ensuring that the DLLs are loaded at the same memory location for all concurrent processes (unless the parent has filled up the space from 0x50000000 to 0x78000000, and so is forced to put an ASLR-compatible DLL somewhere else that is not tracked by _MiImageBitMap). I wrote a little utility to explicitly mark a DLL as ASLR-compatible. Using it on Cwd.dll -- the offending one in my situation -- I was able to eliminate the problem! I've created it as a patch to the rebase package: 'aslr.exe' is a separate utility and doesn't actually use the imagebase library. I've also modified rebaseall to optionally call it after rebase. It seems to work okay; I've manually used it on a dozen or so DLLs -- but I'm still a little nervous about running it on EVERYTHING in my installation, since it doesn't quite have the history behind it that rebase does. Another pair of eyes (or dozen) looking at the code would be nice... Patch attached. Jason? -- Chuck --------------000701020409080206070409 Content-Type: application/x-patch; name="rebase-2.4.4-1.aslr.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="rebase-2.4.4-1.aslr.patch" ZGlmZiAtTnVhciByZWJhc2UtMi40LjQtMS1vcmlnL0NoYW5nZXMgcmViYXNl LTIuNC40LTEvQ2hhbmdlcwotLS0gcmViYXNlLTIuNC40LTEtb3JpZy9DaGFu Z2VzCTIwMDUtMDctMjggMDk6Mjk6NDkuMDAwMDAwMDAwIC0wNDAwCisrKyBy ZWJhc2UtMi40LjQtMS9DaGFuZ2VzCTIwMDktMDItMjcgMTY6MTM6MzIuMTU2 MzAxMzAwIC0wNTAwCkBAIC0xLDUgKzEsMjQgQEAKICRJZDogQ2hhbmdlcyx2 IDEuMyAyMDA1LzA3LzI4IDEzOjI5OjQ0IGp0IEV4cCAkCiAKKyAgICAqIE5l dyBhc2xyIHV0aWxpdHkgYWxsb3dzIHRvIG1hbmlwdWxhdGUgdGhlIGZvbGxv d2luZworICAgICAgZmxhZ3MgaW4gRExMczoKKyAgICAgICAgIC1hIDEgIC0t PiBFbmFibGUgQWRkcmVzcyBTcGFjZSBMYXlvdXQgUmFuZG9taXphdGlvbgor ICAgICAgICAgLWEgMCAgLS0+IERpc2FibGUgQWRkcmVzcyBTcGFjZSBMYXlv dXQgUmFuZG9taXphdGlvbgorICAgICAgICAgLW4gMSAgLS0+IEluZGljYXRl IHRoYXQgRExMIGlzIGNvbXBhdGlibGUgd2l0aCBERVAgKE5YOiBubyBleGVj dXRlKQorICAgICAgICAgLW4gMCAgLS0+IERvbid0IGluZGljYXRlIGNvbXBh dGliaWxpdHkgd2l0aCBERVAKKyAgICAgICAgIC10IDEgIC0tPiBJbmRpY2F0 ZSB0aGF0IERMTCBpcyAndGVybWluYWwtc2VydmljZXMgYXdhcmUnCisgICAg ICAgICAtdCAwICAtLT4gRG9uJ3QgaW5kaWNhdGUgJ3Rlcm1pbmFsLXNlcnZp Y2VzJyBhd2FyZW5lc3MKKyAgICAgIEJ5IGRlZmF1bHQsIGN5Z3dpbiBETExz IGhhdmUgMCBmb3IgYWxsIHRocmVlIGZsYWdzLiBVc2luZyAKKyAgICAgIC1u MS8tdDEgaXMgdW50ZXN0ZWQsIGJ1dCAtYTEgbWF5IGJlIHVzZWZ1bCBvbiBX aW5kb3dzIFZpc3RhCisgICAgICBhbmQgYWJvdmUuIFRoaXMgaXMgaGlnaGx5 IGV4cGVyaW1lbnRhbDsgVVNFIEFUIFlPVVIgT1dOIFJJU0shCisKKyAgICAg IFJ1biB0aGUgdXRpbGl0eSB3aXRob3V0IGFueSBhcmd1bWVudHMgdG8gc2Vl IHRoZSBjdXJyZW50CisgICAgICBmbGFnIHNldHRpbmdzIGZvciBhIGdpdmVu IERMTCBvciBsaXN0IG9mIERMTHMuCisKK1RoZSBmb2xsb3dpbmcgYXJlIHRo ZSBjaGFuZ2VzIHRvIHJlYmFzZWFsbDoKKyAgICAqIEV4Y2x1ZGUgY3lnbHNh NjQuZGxsIGZyb20gcmViYXNlIGxpc3QKKyAgICAqIE9wdGlvbmFsbHkgcnVu ICdhc2xyIC1hIDEnIG9uIGVhY2ggZmlsZSBhZnRlciByZWJhc2luZworCiAy LjQ6CiA9PT0KIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBjaGFuZ2VzIHRvIHJl YmFzZWFsbDoKZGlmZiAtTnVhciByZWJhc2UtMi40LjQtMS1vcmlnL01ha2Vm aWxlIHJlYmFzZS0yLjQuNC0xL01ha2VmaWxlCi0tLSByZWJhc2UtMi40LjQt MS1vcmlnL01ha2VmaWxlCTIwMDgtMDYtMDcgMTY6NDA6NDkuMDAwMDAwMDAw IC0wNDAwCisrKyByZWJhc2UtMi40LjQtMS9NYWtlZmlsZQkyMDA5LTAyLTI3 IDE2OjExOjQ4LjMzOTEwMTMwMCAtMDUwMApAQCAtMTgsNyArMTgsNyBAQAog SU5TVEFMTCA9IGluc3RhbGwKIENGTEFHUyA9IC1PMiAtSSBpbWFnZWhlbHBl cgogCi1hbGw6IHJlYmFzZQorYWxsOiByZWJhc2UgYXNscgogCiAuUEhPTlk6 IGltYWdlaGVscGVyCiAKQEAgLTMwLDEyICszMCwyMCBAQAogCS1ETElCX1ZF UlNJT049JyIkKExpYlZlcnNpb24pIicgXAogCS1jIC1vICRAICQ8CiAKK2Fz bHI6IGFzbHIubworCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgYXNsci5vCisK K2FzbHIubzogYXNsci5jIE1ha2VmaWxlCisJJChDQykgJChDRkxBR1MpIC1E VkVSU0lPTj0nIiQoVmVyc2lvbikiJyBcCisJLWMgLW8gJEAgJDwKKwogaW1h Z2VoZWxwZXI6CiAJJChNQUtFKSAtQyBpbWFnZWhlbHBlciBpbWFnZWhlbHBl cgogCiBpbnN0YWxsOiBhbGwKIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikk KEJJTkRJUikKIAkkKElOU1RBTEwpIC1tIDc1NSByZWJhc2UgJChERVNURElS KSQoQklORElSKQorCSQoSU5TVEFMTCkgLW0gNzU1IGFzbHIgJChERVNURElS KSQoQklORElSKQogCSQoSU5TVEFMTCkgLW0gNzU1IHJlYmFzZWFsbCAkKERF U1RESVIpJChCSU5ESVIpCiAJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChE T0NESVIpCiAJJChJTlNUQUxMKSAtbSA2NDQgUkVBRE1FICQoREVTVERJUikk KERPQ0RJUikvcmViYXNlLSQoVmVyc2lvbikuUkVBRE1FCmRpZmYgLU51YXIg cmViYXNlLTIuNC40LTEtb3JpZy9SRUFETUUgcmViYXNlLTIuNC40LTEvUkVB RE1FCi0tLSByZWJhc2UtMi40LjQtMS1vcmlnL1JFQURNRQkyMDA4LTA2LTA3 IDE2OjUwOjQ5LjAwMDAwMDAwMCAtMDQwMAorKysgcmViYXNlLTIuNC40LTEv UkVBRE1FCTIwMDktMDItMjcgMTY6MTA6MzAuMDcwNTAxMzAwIC0wNTAwCkBA IC00OSw2ICs0OSwzMCBAQAogZnVuY3Rpb25hbGl0eSB3aWxsIGJlIGFkZGVk IHRvIEN5Z3dpbidzIHNldHVwLmV4ZSwgc28gdGhhdCByZWJhc2luZyB3aWxs CiBoYXBwZW4gYXV0b21hdGljYWxseS4KIAorT24gVmlzdGEgYW5kIG5ld2Vy LCBpdCBpcyBwb3NzaWJsZSB0byBlbXBsb3kgdGhlIEFkZHJlc3MgU3BhY2Ug TGF5b3V0CitSYW5kb21pemF0aW9uIGZhY2l0aWxpdHkgdG8gaGVscCBzb2x2 ZSB0aGUgaW1hZ2UgbG9hZCBhZGRyZXNzIGNsYXNoaW5nCitwcm9ibGVtOgor CisgICAgU2luY2UgV2luZG93cyByZWxpZXMgb24gcmVsb2NhdGlvbnMgaW5z dGVhZCBvZiBwb3NpdGlvbgorICAgIGluZGVwZW5kZW50IGNvZGUsIGEgRExM IG11c3QgYmUgbG9hZGVkIGF0IHRoZSBzYW1lIGFkZHJlc3MKKyAgICBpbiBl YWNoIHByb2Nlc3MgdGhhdCB1c2VzIGl0IHRvIGFsbG93IHRoZSBwaHlzaWNh bCBtZW1vcnkKKyAgICB1c2VkIGJ5IHRoZSBETEwgdG8gYmUgc2hhcmVkLiBU byBmYWNpbGl0YXRlIHRoaXMgYmVoYXZpb3VyLAorICAgIGEgZ2xvYmFsIGJp dG1hcCBjYWxsZWQgX01pSW1hZ2VCaXRNYXAgaXMgdXNlZCB0byByZXByZXNl bnQKKyAgICB0aGUgYWRkcmVzcyBzcGFjZSBmcm9tIDB4NTAwMDAwMDAgdG8g MHg3ODAwMDAwMC4gVGhlIGJpdG1hcAorICAgIGlzIDB4MjgwMCBiaXRzIGlu IGxlbmd0aCB3aXRoIGVhY2ggYml0IHJlcHJlc2VudGluZyA2NEtCCisgICAg b2YgbWVtb3J5LiBBcyBlYWNoIERMTCBpcyBsb2FkZWQsIGl0cyBwb3NpdGlv biBpcyByZWNvcmRlZAorICAgIGJ5IHNldHRpbmcgdGhlIGFwcHJvcHJpYXRl IGJpdHMgaW4gdGhlIGJpdG1hcCB0byBtYXJrIHRoZQorICAgIG1lbW9yeSB3 aGVyZSB0aGUgRExMIGlzIGJlaW5nIG1hcHBlZC4gV2hlbiB0aGUgc2FtZSBE TEwKKyAgICBpcyBsb2FkZWQgaW4gYW5vdGhlciBwcm9jZXNzLCBpdHMgc2Vj dGlvbiBvYmplY3QgaXMgcmV1c2VkCisgICAgYW5kIGl0IGlzIG1hcHBlZCBh dCB0aGUgc2FtZSB2aXJ0dWFsIGFkZHJlc3Nlcy4KKyAgICBodHRwOi8vdGFv c3NhLmNvbS5ueXVkLm5ldDo4MDgwL2FyY2hpdmUvYmgwOHNvdGlyb3Zkb3dk LnBkZgorCitUaHVzLCBJRiBhbGwgY3lnd2luIGRsbHMgKGV4Y2VwdCBjeWd3 aW4xLmRsbCkgLS0gb3IsIGF0IGxlYXN0IHRoZQorb25lcyBmb3Igd2hpY2gg eW91IG9mdGVuIGdldCB0aGUgKioqIHVuYWJsZSB0byByZW1hcCAqKiogZXJy b3IgLS0KK2FyZSBtYXJrZWQgQVNMUi1jb21wYXRpYmxlLCB0aGVuIHRoZSBX aW5kb3dzIHJ1bnRpbWUgbG9hZGVyIGNhbiBiZQorY29lcmNlZCBpbnRvIGVu c3VyaW5nIHRoYXQgdGhlIERMTHMgYXJlIGxvYWRlZCBhdCB0aGUgc2FtZSBt ZW1vcnkKK2xvY2F0aW9uIGZvciBhbGwgY29uY3VycmVudCBwcm9jZXNzZXMu CisKIFJlcXVpcmVtZW50czoKIAogVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBv ciBsYXRlciBhcmUgcmVxdWlyZWQgdG8gYnVpbGQgYW5kL29yIGV4ZWN1dGUK QEAgLTgxLDEwICsxMDUsMTIgQEAKIAogVGhlIGZvbGxvd2luZyBpcyB0aGUg cmViYXNlYWxsIGNvbW1hbmQgbGluZSBzeW50YXg6CiAKLSAgICByZWJhc2Vh bGwgWy1iIEJhc2VBZGRyZXNzXSBbLW8gT2Zmc2V0XSBbLVQgRmlsZUxpc3Qg fCAtXSBbLXZdCisgICAgcmViYXNlYWxsIFstYV0gWy1BIEFzbHJPcHRzXSBb LWIgQmFzZUFkZHJlc3NdIFstbyBPZmZzZXRdIFstVCBGaWxlTGlzdCB8IC1d IFstdl0KIAogd2hlcmU6CiAKKyAgICAtYSA9PiBhbHNvIHJ1biBhc2xyIHV0 aWxpdHkgb24gZWFjaCBETEwgYWZ0ZXIgcmViYXNpbmcKKyAgICAtQSA9PiBz cGVjaWZ5IGV4cGxpY2l0IG9wdGlvbnMgZm9yIGFzbHIgKGRlZmF1bHQ6IC1h IDEpCiAgICAgLWIgPT4gYmFzZSBhZGRyZXNzIHVzZWQgYnkgcmViYXNlIChk ZWZhdWx0OiAweDcwMDAwMDAwKQogICAgIC1vID0+IG9mZnNldCBiZXR3ZWVu IGVhY2ggRExMIHJlYmFzZWQgKGRlZmF1bHQ6IDB4MTAwMDApCiAgICAgLXMg PT4gc3BlY2lmeSBETEwgc3VmZml4LCB1c2UgbXVsdGlwbGUgaWYgbmVjZXNz YXJ5IChkZWZhdWx0OiBkbGwsIHNvKQpAQCAtMTA0LDYgKzEzMCwyNSBAQAog ICAgIC1WID0+IGRpc3BsYXkgdmVyc2lvbiBhbmQgZXhpdAogICAgIC12ID0+ IHZlcmJvc2UgKGRlZmF1bHQ6IG9mZikKIAorVGhlIGZvbGxvd2luZyBpcyB0 aGUgYXNsciBjb21tYW5kIGxpbmUgc3ludGF4OgorCisgICAgYXNsciBbLWEg Qk9PTF0gWy1uIEJPT0xdIFstdCBCT09MXSBbLVZ2XSBbLVQgRmlsZUxpc3Qg fCAtXSBGaWxlcy4uLgorCit3aGVyZToKKworICAgIC1hID0+IG1vZGlmeSBB ZGRyZXNzIFNwYWNlIExheW91dCBSYW5kb21pemF0aW9uIGZsYWcKKyAgICAt biA9PiBtb2RpZnkgTlggQ29tcGF0aWJpbGl0eSBmbGFnCisgICAgLXQgPT4g bW9kaWZ5IFRlcm1pbmFsIFNlcnZlciBBd2FyZSBmbGFnCisgICAgLVQgPT4g c3BlY2lmeSBmaWxlbGlzdCAob3Igc3RkaW4pIHRvIGxpc3QgYWRkaXRpb25h bCBmaWxlcworICAgIC1WID0+IGRpc3BsYXkgdmVyc2lvbiBhbmQgZXhpdAor ICAgIC12ID0+IHZlcmJvc2UgKGRlZmF1bHQ6IG9mZikKKworICAgIEJPT0wg bWF5IGJlIDAsIGZhbHNlLCBubywgZiBvciBuOiBleHBsaWNpdGx5IG1hcmtz IHRoZSBhc3NvY2lhdGVkCisgICAgZmFjaWxpdHkgZGlzYWJsZWQuICBCT09M IG1heSBhbHNvIGJlIGEgbm9uLXplcm8gaW50ZWdlciwgdHJ1ZSwgeWVzLAor ICAgIHQsIG9yIHk6IGV4cGxpY2l0bHkgbWFya3MgdGhlIGFzc29jaWF0ZWQg ZmFjaWxpdHkgZW5hYmxlZC4gSWYgYXNscgorICAgIGlzIGV4ZWN1dGVkIHdp dGggbm9uZSBvZiAtYS8tbi8tdCwgdGhlbiBpdCB3aWxsIHNpbXBseSBkaXNw bGF5IHRoZQorICAgIGN1cnJlbnQgc3RhdHVzIG9mIHRob3NlIGZsYWdzIGZv ciBlYWNoIERMTC4KKwogU291cmNlOgogCiBDeWd3aW4gcmViYXNlIGJ1aWxk cyBPT1RCIHVuZGVyIEN5Z3dpbi4gIFdpdGggbWlub3IgTWFrZWZpbGUgdHdl YWtpbmcsCkBAIC0xMzEsNiArMTc2LDkgQEAKIAogNC4gcmViYXNlIHNraXBz IHJlYWQtb25seSBETExzLgogCitJc3N1ZXMgIzEsICMyLCBhbmQgIzQgYWxz byBhcHBseSB0byB0aGUgYXNsciB1dGlsaXR5LgorCisKIEhvbWVwYWdlOgog CiBUaGUgcHJpbWFyeSByZWJhc2Ugd2ViIHNpdGUgaXM6CmRpZmYgLU51YXIg cmViYXNlLTIuNC40LTEtb3JpZy9hc2xyLmMgcmViYXNlLTIuNC40LTEvYXNs ci5jCi0tLSByZWJhc2UtMi40LjQtMS1vcmlnL2FzbHIuYwkxOTY5LTEyLTMx IDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgcmViYXNlLTIuNC40LTEv YXNsci5jCTIwMDktMDItMjcgMTU6MjY6MzAuMzc5OTAxMzAwIC0wNTAwCkBA IC0wLDAgKzEsNDk5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENo YXJsZXMgV2lsc29uCisgKiBCYXNlZCBvbiByZWJhc2UuYyBieSBKYXNvbiBU aXNobGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv cgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiBBIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGNhbiBiZSBmb3VuZCBhdAorICogaHR0cDovL3d3dy5nbnUub3JnLworICov CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNp bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNp bmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5j bHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVk ZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUg PHdpbmRvd3MuaD4KKworI2lmbmRlZiBJTUFHRV9ETExDSEFSQUNURVJJU1RJ Q1NfTlhfQ09NUEFUCisjZGVmaW5lIElNQUdFX0RMTENIQVJBQ1RFUklTVElD U19OWF9DT01QQVQgMHgwMTAwCisjZW5kaWYKKworQk9PTCBkb19tYXJrIChj b25zdCBjaGFyICpwYXRobmFtZSk7Cit2b2lkIHBhcnNlX2FyZ3MgKGludCBh cmdjLCBjaGFyICphcmd2W10pOworQk9PTCBzdHJpbmdfdG9fYm9vbCAgKGNv bnN0IGNoYXIgKnN0cmluZywgQk9PTCAqdmFsdWUpOworQk9PTCBzdHJpbmdf dG9fdWxvbmcgKGNvbnN0IGNoYXIgKnN0cmluZywgdW5zaWduZWQgbG9uZyAq dmFsdWUpOwordm9pZCB1c2FnZSAoKTsKK0JPT0wgZ2V0X2NoYXJhY3Rlcmlz dGljcyhjb25zdCBjaGFyICpwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICBCT09MKiBoYXNfcmVsb2NfaW5mbywKKyAgICAgICAgICAgICAg ICAgICAgICAgICBXT1JEKiBwZV9kbGxfY2hhcmFjdGVyaXN0aWNzKTsKK0JP T0wgc2V0X2NoYXJhY3RlcmlzdGljcyhjb25zdCBjaGFyICpwYXRobmFtZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICBXT1JEIHBlX2RsbF9jaGFyYWN0 ZXJpc3RpY3MpOworY29uc3QgY2hhciAqIGRsbF9jaGFyc190b19zdHJpbmcg KFdPUkQgcGVfZGxsX2NoYXJhY3RlcmlzdGljcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBXT1JEIGZsYWcsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIHBzdHIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIG5z dHIpOworc3RhdGljIEJPT0wgcGVfZ2V0MTYgKGludCBmZCwgb2ZmX3Qgb2Zm c2V0LCB1bnNpZ25lZCBzaG9ydCogdmFsdWUpOworc3RhdGljIEJPT0wgcGVf Z2V0MzIgKGludCBmZCwgb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nKiB2 YWx1ZSk7CitzdGF0aWMgQk9PTCBwZV9zZXQxNiAoaW50IGZkLCBvZmZfdCBv ZmZzZXQsIHVuc2lnbmVkIHNob3J0IHZhbHVlKTsKK0ZJTEUgKmZpbGVfbGlz dF9mb3BlbiAoY29uc3QgY2hhciAqZmlsZV9saXN0KTsKK2NoYXIgKmZpbGVf bGlzdF9mZ2V0cyAoY2hhciAqYnVmLCBpbnQgc2l6ZSwgRklMRSAqZmlsZSk7 CitpbnQgZmlsZV9saXN0X2ZjbG9zZSAoRklMRSAqZmlsZSk7Cit2b2lkIHZl cnNpb24gKCk7CisKK2ludCBtYXJrX2FzbHIgPSAwOyAvKiAwOiBkbyBub3Ro aW5nOyAxOiBtYXJrOyAtMTogdW5tYXJrICovCitpbnQgbWFya19ueCAgID0g MDsgLyogMDogZG8gbm90aGluZzsgMTogbWFyazsgLTE6IHVubWFyayAqLwor aW50IG1hcmtfdHMgICA9IDA7IC8qIDA6IGRvIG5vdGhpbmc7IDE6IG1hcms7 IC0xOiB1bm1hcmsgKi8KK2ludCBhcmdzX2luZGV4ID0gMDsKK2ludCB2ZXJi b3NlID0gMDsKK2NvbnN0IGNoYXIgKmZpbGVfbGlzdCA9IDA7Citjb25zdCBj aGFyICpzdGRpbl9maWxlX2xpc3QgPSAiLSI7CisKK2ludAorbWFpbiAoaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgaW50IGkgPSAwOworCisgIHBh cnNlX2FyZ3MgKGFyZ2MsIGFyZ3YpOworCisgIC8qIE9wZXJhdGUgb24gZmls ZXMgaW4gZmlsZSBsaXN0LCBpZiBzcGVjaWZpZWQuICovCisgIGlmIChmaWxl X2xpc3QpCisgICAgeworICAgICAgQk9PTCBzdGF0dXMgPSBUUlVFOworICAg ICAgY2hhciBmaWxlbmFtZVtNQVhfUEFUSCArIDJdOworICAgICAgRklMRSAq ZmlsZSA9IGZpbGVfbGlzdF9mb3BlbiAoZmlsZV9saXN0KTsKKyAgICAgIGlm ICghZmlsZSkKKwlleGl0ICgyKTsKKworICAgICAgd2hpbGUgKGZpbGVfbGlz dF9mZ2V0cyAoZmlsZW5hbWUsIE1BWF9QQVRIICsgMiwgZmlsZSkpCisJewor CSAgc3RhdHVzID0gZG9fbWFyayAoZmlsZW5hbWUpOworCSAgaWYgKCFzdGF0 dXMpCisJICAgIGJyZWFrOworCX0KKworICAgICAgZmlsZV9saXN0X2ZjbG9z ZSAoZmlsZSk7CisgICAgICBpZiAoIXN0YXR1cykKKwlleGl0ICgyKTsKKyAg ICB9CisKKyAgLyogT3BlcmF0ZSBvbiBmaWxlcyBsaXN0ZWQgYXMgY29tbWFu ZCBsaW5lIGFyZ3VtZW50cy4gKi8KKyAgZm9yIChpID0gYXJnc19pbmRleDsg aSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpmaWxl bmFtZSA9IGFyZ3ZbaV07CisgICAgICBCT09MIHN0YXR1cyA9IGRvX21hcmsg KGZpbGVuYW1lKTsKKyAgICAgIGlmICghc3RhdHVzKQorCWV4aXQgKDIpOwor ICAgIH0KKworICBleGl0ICgwKTsKK30KKworQk9PTAorZG9fbWFyayAoY29u c3QgY2hhciAqcGF0aG5hbWUpCit7CisgIEJPT0wgbWFya19hbnkgPSAobWFy a19hc2xyICE9IDAgfHwgbWFya19ueCAhPSAwIHx8IG1hcmtfdHMgIT0gMCk7 CisgIEJPT0wgc3RhdHVzLCBzdGF0dXMyOworICBCT09MIGhhc19yZWxvY19p bmZvOworICBXT1JEIG9sZF9kbGxfY2hhcmFjdGVyaXN0aWNzOworICBXT1JE IG5ld19kbGxfY2hhcmFjdGVyaXN0aWNzOworCisgIC8qIFNraXAgaWYgZmls ZSBkb2VzIG5vdCBleGlzdCAqLworICBpZiAoYWNjZXNzIChwYXRobmFtZSwg Rl9PSykgPT0gLTEpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAi JXM6IHNraXBwZWQgYmVjYXVzZSBub25leGlzdGVudFxuIiwgcGF0aG5hbWUp OworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgIGlmICghbWFya19h bnkpCisgICAgeworICAgICAgLyogU2tpcCBpZiBub3Qgd3JpdGFibGUuICov CisgICAgICBpZiAoYWNjZXNzIChwYXRobmFtZSwgV19PSykgPT0gLTEpCisg ICAgICAgIHsKKyAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogc2tp cHBlZCBiZWNhdXNlIG5vdCB3cml0YWJsZVxuIiwgcGF0aG5hbWUpOworICAg ICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorCisgIGlm ICghZ2V0X2NoYXJhY3RlcmlzdGljcyAocGF0aG5hbWUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmhhc19yZWxvY19pbmZvLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZvbGRfZGxsX2NoYXJhY3RlcmlzdGljcykp CisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAgICAg ICAgIiVzOiBza2lwcGVkIGJlY2F1c2UgY291bGQgbm90IHJlYWQgZmlsZSBj aGFyYWN0ZXJpc3RpY3NcbiIsCisgICAgICAgICAgICAgICBwYXRobmFtZSk7 CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgIG5ld19kbGxfY2hhcmFj dGVyaXN0aWNzID0gb2xkX2RsbF9jaGFyYWN0ZXJpc3RpY3M7CisgIAorICBp ZiAobWFya19hbnkpCisgICAgeworICAgICAgaWYgKGhhc19yZWxvY19pbmZv KQorICAgICAgICB7CisgICAgICAgICAgaWYgKG1hcmtfYXNsciA+IDApCisg ICAgICAgICAgICBuZXdfZGxsX2NoYXJhY3RlcmlzdGljcyB8PSBJTUFHRV9E TExfQ0hBUkFDVEVSSVNUSUNTX0RZTkFNSUNfQkFTRTsKKyAgICAgICAgICBl bHNlIGlmIChtYXJrX2FzbHIgPCAwKQorICAgICAgICAgICAgbmV3X2RsbF9j aGFyYWN0ZXJpc3RpY3MgJj0gfklNQUdFX0RMTF9DSEFSQUNURVJJU1RJQ1Nf RFlOQU1JQ19CQVNFOworICAgIAorICAgICAgICAgIGlmIChtYXJrX254ID4g MCkKKyAgICAgICAgICAgIG5ld19kbGxfY2hhcmFjdGVyaXN0aWNzIHw9IElN QUdFX0RMTENIQVJBQ1RFUklTVElDU19OWF9DT01QQVQ7CisgICAgICAgICAg ZWxzZSBpZiAobWFya19ueCA8IDApCisgICAgICAgICAgICBuZXdfZGxsX2No YXJhY3RlcmlzdGljcyAmPSB+SU1BR0VfRExMQ0hBUkFDVEVSSVNUSUNTX05Y X0NPTVBBVDsKKyAgICAKKyAgICAgICAgICBpZiAobWFya190cyA+IDApCisg ICAgICAgICAgICBuZXdfZGxsX2NoYXJhY3RlcmlzdGljcyB8PSBJTUFHRV9E TExDSEFSQUNURVJJU1RJQ1NfVEVSTUlOQUxfU0VSVkVSX0FXQVJFOworICAg ICAgICAgIGVsc2UgaWYgKG1hcmtfdHMgPCAwKQorICAgICAgICAgICAgbmV3 X2RsbF9jaGFyYWN0ZXJpc3RpY3MgJj0gfklNQUdFX0RMTENIQVJBQ1RFUklT VElDU19URVJNSU5BTF9TRVJWRVJfQVdBUkU7CisgICAKKyAgICAgICAgICBp ZiAoIXNldF9jaGFyYWN0ZXJpc3RpY3MgKHBhdGhuYW1lLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2RsbF9jaGFyYWN0ZXJp c3RpY3MpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmcHJpbnRm IChzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICIlczogY291bGQg bm90IHVwZGF0ZSBjaGFyYWN0ZXJpc3RpY3NcbiIsCisgICAgICAgICAgICAg ICAgICAgICAgIHBhdGhuYW1lKTsKKyAgICAgICAgICAgICAgcmV0dXJuIEZB TFNFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisg ICAgICAgIHsKKyAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg IGZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICIlczog c2tpcHBlZCBiZWNhdXNlIGRvZXMgbm90IGNvbnRhaW4gcmVsb2NhdGlvbiBp bmZvXG4iLAorICAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUpOworICAg ICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorCisgIC8q IERpc3BsYXkgaW1hZ2UgY2hhcmFjdGVyaXN0aWNzLiAqLworICBpZiAodmVy Ym9zZSB8fCAhbWFya19hbnkpCisgICAgeworICAgICAgcHJpbnRmICgiJXM6 IG9sZCA9IDB4JTA0eCAlcyVzJXMsIG5ldyA9IDB4JTA0eCAlcyVzJXNcbiIs IHBhdGhuYW1lLAorICAgICAgICAgICAgICBvbGRfZGxsX2NoYXJhY3Rlcmlz dGljcywKKyAgICAgICAgICAgICAgZGxsX2NoYXJzX3RvX3N0cmluZyAob2xk X2RsbF9jaGFyYWN0ZXJpc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIElNQUdFX0RMTF9DSEFSQUNURVJJU1RJQ1NfRFlOQU1J Q19CQVNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi Wythc2xyXSIsIlstYXNscl0iKSwKKyAgICAgICAgICAgICAgZGxsX2NoYXJz X3RvX3N0cmluZyAob2xkX2RsbF9jaGFyYWN0ZXJpc3RpY3MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQUdFX0RMTENIQVJBQ1RF UklTVElDU19OWF9DT01QQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJbK254XSIsIlstbnhdIiksCisgICAgICAgICAgICAgIGRs bF9jaGFyc190b19zdHJpbmcgKG9sZF9kbGxfY2hhcmFjdGVyaXN0aWNzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFHRV9ETExD SEFSQUNURVJJU1RJQ1NfVEVSTUlOQUxfU0VSVkVSX0FXQVJFLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWyt0c19hd2FyZV0iLCJb LXRzX2F3YXJlXSIpLAorICAgICAgICAgICAgICBuZXdfZGxsX2NoYXJhY3Rl cmlzdGljcywKKyAgICAgICAgICAgICAgZGxsX2NoYXJzX3RvX3N0cmluZyAo bmV3X2RsbF9jaGFyYWN0ZXJpc3RpY3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIElNQUdFX0RMTF9DSEFSQUNURVJJU1RJQ1NfRFlO QU1JQ19CQVNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiWythc2xyXSIsIlstYXNscl0iKSwKKyAgICAgICAgICAgICAgZGxsX2No YXJzX3RvX3N0cmluZyAobmV3X2RsbF9jaGFyYWN0ZXJpc3RpY3MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQUdFX0RMTENIQVJB Q1RFUklTVElDU19OWF9DT01QQVQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJbK254XSIsIlstbnhdIiksCisgICAgICAgICAgICAg IGRsbF9jaGFyc190b19zdHJpbmcgKG5ld19kbGxfY2hhcmFjdGVyaXN0aWNz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFHRV9E TExDSEFSQUNURVJJU1RJQ1NfVEVSTUlOQUxfU0VSVkVSX0FXQVJFLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWyt0c19hd2FyZV0i LCJbLXRzX2F3YXJlXSIpKTsKKyAgICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9 CisKK2NvbnN0IGNoYXIgKgorZGxsX2NoYXJzX3RvX3N0cmluZyAoV09SRCBw ZV9kbGxfY2hhcmFjdGVyaXN0aWNzLAorICAgICAgICAgICAgICAgICAgICAg V09SRCBmbGFnLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq IHBzdHIsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogbnN0 cikKK3sKKyAgaWYgKChwZV9kbGxfY2hhcmFjdGVyaXN0aWNzICYgZmxhZykg PT0gZmxhZykKKyAgICByZXR1cm4gcHN0cjsKKyAgcmV0dXJuIG5zdHI7Cit9 Cit2b2lkCitwYXJzZV9hcmdzIChpbnQgYXJnYywgY2hhciAqYXJndltdKQor eworICBjb25zdCBjaGFyICphbk9wdGlvbnMgPSAiOmE6bjp0OlQ6dlYiOwor ICBpbnQgYW5PcHRpb24gPSAwOworICBCT09MIGJvb2xfdmFsdWU7CisKKyAg Zm9yIChhbk9wdGlvbjsgKGFuT3B0aW9uID0gZ2V0b3B0IChhcmdjLCBhcmd2 LCBhbk9wdGlvbnMpKSAhPSAtMTspCisgICAgeworICAgICAgc3dpdGNoIChh bk9wdGlvbikKKwl7CisJY2FzZSAnYSc6CisJICBpZiAoIXN0cmluZ190b19i b29sIChvcHRhcmcsICZib29sX3ZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiSW52YWxpZCBhcmd1bWVu dCBmb3IgLWE6ICVzXG4iLCBvcHRhcmcpOworCSAgICAgIHVzYWdlICgpOwor CSAgICAgIGV4aXQgKDEpOworICAgICAgICAgICAgfQorICAgICAgICAgIG1h cmtfYXNsciA9IChib29sX3ZhbHVlID8gMSA6IC0xKTsKKwkgIGJyZWFrOwor CWNhc2UgJ24nOgorCSAgaWYgKCFzdHJpbmdfdG9fYm9vbCAob3B0YXJnLCAm Ym9vbF92YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZw cmludGYgKHN0ZGVyciwgIkludmFsaWQgYXJndW1lbnQgZm9yIC1uOiAlc1xu Iiwgb3B0YXJnKTsKKwkgICAgICB1c2FnZSAoKTsKKwkgICAgICBleGl0ICgx KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBtYXJrX254ID0gKGJvb2xf dmFsdWUgPyAxIDogLTEpOworCSAgYnJlYWs7CisJY2FzZSAndCc6CisJICBp ZiAoIXN0cmluZ190b19ib29sIChvcHRhcmcsICZib29sX3ZhbHVlKSkKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAi SW52YWxpZCBhcmd1bWVudCBmb3IgLXQ6ICVzXG4iLCBvcHRhcmcpOworCSAg ICAgIHVzYWdlICgpOworCSAgICAgIGV4aXQgKDEpOworICAgICAgICAgICAg fQorICAgICAgICAgIG1hcmtfdHMgPSAoYm9vbF92YWx1ZSA/IDEgOiAtMSk7 CisJICBicmVhazsKKwljYXNlICdUJzoKKwkgIGZpbGVfbGlzdCA9IG9wdGFy ZzsKKwkgIGJyZWFrOworCWNhc2UgJ3YnOgorCSAgdmVyYm9zZSA9IFRSVUU7 CisJICBicmVhazsKKwljYXNlICdWJzoKKwkgIHZlcnNpb24gKCk7CisJICBl eGl0ICgxKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICB1c2FnZSAoKTsK KwkgIGV4aXQgKDEpOworCSAgYnJlYWs7CisJfQorICAgIH0KKworICBhcmdz X2luZGV4ID0gb3B0aW5kOworfQorCitCT09MCitzdHJpbmdfdG9fYm9vbCAo Y29uc3QgY2hhciAqc3RyaW5nLCBCT09MICp2YWx1ZSkKK3sKKyAgdW5zaWdu ZWQgbG9uZyBudW1iZXIgPSAwOworICBpZiAoIXN0cmluZyB8fCAhKnN0cmlu ZykKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKCFzdHJpbmdfdG9fdWxv bmcgKHN0cmluZywgJm51bWJlcikpCisgICAgeworICAgICAgc2l6ZV90IGxl biA9IHN0cmxlbiAoc3RyaW5nKTsKKyAgICAgIGlmICggKGxlbiA9PSA0ICYm IHN0cmNhc2VjbXAgKHN0cmluZywgInRydWUiKSA9PSAwKQorICAgICAgICAg fHwobGVuID09IDMgJiYgc3RyY2FzZWNtcCAoc3RyaW5nLCAieWVzIikgPT0g MCkgCisgICAgICAgICB8fChsZW4gPT0gMSAmJiBzdHJjYXNlY21wIChzdHJp bmcsICJ0IikgPT0gMCkKKyAgICAgICAgIHx8KGxlbiA9PSAxICYmIHN0cmNh c2VjbXAgKHN0cmluZywgInkiKSA9PSAwKSkgCisgICAgICAgIHsKKyAgICAg ICAgICAqdmFsdWUgPSBUUlVFOworICAgICAgICB9CisgICAgICBlbHNlIGlm ICggKGxlbiA9PSA1ICYmIHN0cmNhc2VjbXAgKHN0cmluZywgImZhbHNlIikg PT0gMCkKKyAgICAgICAgIHx8KGxlbiA9PSAyICYmIHN0cmNhc2VjbXAgKHN0 cmluZywgIm5vIikgPT0gMCkgCisgICAgICAgICB8fChsZW4gPT0gMSAmJiBz dHJjYXNlY21wIChzdHJpbmcsICJmIikgPT0gMCkgCisgICAgICAgICB8fChs ZW4gPT0gMSAmJiBzdHJjYXNlY21wIChzdHJpbmcsICJuIikgPT0gMCkpCisg ICAgICAgIHsKKyAgICAgICAgICAqdmFsdWUgPSBGQUxTRTsKKyAgICAgICAg fQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIEZB TFNFOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg KnZhbHVlID0gKG51bWJlciAhPSAwKTsKKyAgICB9CisgIHJldHVybiBUUlVF OyAKK30KKworQk9PTAorc3RyaW5nX3RvX3Vsb25nIChjb25zdCBjaGFyICpz dHJpbmcsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKQoreworICB1bnNpZ25lZCBs b25nIG51bWJlciA9IDA7CisgIGNoYXIgKiBlbmRwOworICBlcnJubyA9IDA7 CisKKyAgLyogbnVsbCBvciBlbXB0eSBpbnB1dCAqLworICBpZiAoIXN0cmlu ZyB8fCAhKnN0cmluZykKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgbnVtYmVy ID0gc3RydG91bCAoc3RyaW5nLCAmZW5kcCwgMCk7CisKKyAgLyogb3V0IG9m IHJhbmdlICovCisgIGlmIChFUkFOR0UgPT0gZXJybm8pCisgICAgcmV0dXJu IEZBTFNFOworCisgIC8qIG5vIHZhbGlkIG51bWVyaWMgaW5wdXQgKi8KKyAg aWYgKGVuZHAgPT0gc3RyaW5nKQorICAgIHJldHVybiBGQUxTRTsKKworICAv KiBub24tbnVtZXJpYyB0cmFpbGluZyBjaGFyYWN0ZXJzICovCisgIGlmICgq ZW5kcCAhPSAnXDAnKQorICAgIHJldHVybiBGQUxTRTsKKworICAqdmFsdWUg PSBudW1iZXI7CisgIHJldHVybiBUUlVFOworfQorCit2b2lkCit1c2FnZSAo KQoreworICBmcHJpbnRmIChzdGRlcnIsCisJICAgInVzYWdlOiBhc2xyIFst YSBCT09MXSBbLW4gQk9PTF0gWy10IEJPT0xdIFstVnZdICIKKwkgICAiWy1U IEZpbGVMaXN0IHwgLV0gRmlsZXMuLi5cbiIpOworfQorCitCT09MCitnZXRf Y2hhcmFjdGVyaXN0aWNzKGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorICAgICAg ICAgICAgICAgICAgICBCT09MKiBoYXNfcmVsb2NfaW5mbywKKyAgICAgICAg ICAgICAgICAgICAgV09SRCogcGVfZGxsX2NoYXJhY3RlcmlzdGljcykKK3sK KyAgdW5zaWduZWQgbG9uZyBwZV9oZWFkZXJfb2Zmc2V0LCBvcHRoZHJfb2Zz OworICBCT09MIHN0YXR1cyA9IEZBTFNFOworICBpbnQgZmQsIHNpemU7Cisg IERXT1JEIHBlX3NpZzsKKyAgV09SRCBwZV9jaGFyOworCisgIGZkID0gb3Bl biAocGF0aG5hbWUsIE9fUkRPTkxZfE9fQklOQVJZKTsKKyAgaWYgKGZkID09 IC0xKQorICAgIGdvdG8gZG9uZTsKKworICBpZiAoIXBlX2dldDMyIChmZCwg MHgzYywgJnBlX2hlYWRlcl9vZmZzZXQpKQorICAgIGdvdG8gZG9uZTsKKyAg b3B0aGRyX29mcyA9IHBlX2hlYWRlcl9vZmZzZXQgKyA0ICsgMjA7CisKKyAg cGVfc2lnID0gMDsKKyAgaWYgKCFwZV9nZXQzMiAoZmQsIHBlX2hlYWRlcl9v ZmZzZXQsICZwZV9zaWcpKQorICAgIGdvdG8gZG9uZTsKKyAgaWYgKHBlX3Np ZyAhPSBJTUFHRV9OVF9TSUdOQVRVUkUpCisgICAgZ290byBkb25lOworCisg IGlmICghcGVfZ2V0MTYgKGZkLCBwZV9oZWFkZXJfb2Zmc2V0ICsgNCArIDE4 LCAmcGVfY2hhcikpCisgICAgZ290byBkb25lOworCisgICpoYXNfcmVsb2Nf aW5mbyA9ICgocGVfY2hhciAmIElNQUdFX0ZJTEVfUkVMT0NTX1NUUklQUEVE KSA9PSAwKQorICAgID8gVFJVRSA6IEZBTFNFOworCisgIGlmICghcGVfZ2V0 MTYgKGZkLCBvcHRoZHJfb2ZzICsgNzAsIHBlX2RsbF9jaGFyYWN0ZXJpc3Rp Y3MpKQorICAgIGdvdG8gZG9uZTsKKworICBzdGF0dXMgPSBUUlVFOworCitk b25lOgorICBjbG9zZSAoZmQpOworICByZXR1cm4gc3RhdHVzOworfQorCitC T09MCitzZXRfY2hhcmFjdGVyaXN0aWNzKGNvbnN0IGNoYXIgKnBhdGhuYW1l LAorICAgICAgICAgICAgICAgICAgICBXT1JEIHBlX2RsbF9jaGFyYWN0ZXJp c3RpY3MpCit7CisgIHVuc2lnbmVkIGxvbmcgcGVfaGVhZGVyX29mZnNldCwg b3B0aGRyX29mczsKKyAgQk9PTCBzdGF0dXMgPSBGQUxTRTsKKyAgaW50IGZk LCBzaXplOworCisgIC8qIG5vIGV4dHJhIGNoZWNraW5nIG9mIGZpbGUncyBj b250ZW50cyBiZWxvdywgYmVjYXVzZQorICAgICBnZXRfY2hhcmFjdGVyaXN0 aWNzIGFscmVhZHkgZGlkIHRoYXQgKi8KKyAgZmQgPSBvcGVuIChwYXRobmFt ZSwgT19SRFdSfE9fQklOQVJZKTsKKyAgaWYgKGZkID09IC0xKQorICAgIGdv dG8gZG9uZTsKKworICBpZiAoIXBlX2dldDMyIChmZCwgMHgzYywgJnBlX2hl YWRlcl9vZmZzZXQpKQorICAgIGdvdG8gZG9uZTsKKyAgb3B0aGRyX29mcyA9 IHBlX2hlYWRlcl9vZmZzZXQgKyA0ICsgMjA7CisKKyAgaWYgKCFwZV9zZXQx NiAoZmQsIG9wdGhkcl9vZnMgKyA3MCwgcGVfZGxsX2NoYXJhY3RlcmlzdGlj cykpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAg ICAgICAgIkNBVEFTVFJPUElDIEVSUk9SOiBhdHRlbXB0IHRvIHdyaXRlIHRv IGZpbGUgZmFpbGVkISAlcyBjb3VsZCBiZSBjb3JydXB0ZWQ7IEhBTFRJTkcu XG4iLAorICAgICAgICAgICAgICAgcGF0aG5hbWUpOworICAgICAgY2xvc2Ug KGZkKTsKKyAgICAgIGV4aXQoMik7CisgICAgfQorCisgIHN0YXR1cyA9IFRS VUU7CisKK2RvbmU6CisgIGNsb3NlIChmZCk7CisgIHJldHVybiBzdGF0dXM7 CisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgQk9PTAorcGVfZ2V0MTYg KGludCBmZCwgb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCogdmFsdWUp Cit7CisgIHVuc2lnbmVkIGNoYXIgYlsyXTsKKyAgaWYgKGxzZWVrIChmZCwg b2Zmc2V0LCBTRUVLX1NFVCkgPT0gLTEpCisgICAgcmV0dXJuIEZBTFNFOwor ICBpZiAocmVhZCAoZmQsIGIsIDIpICE9IDIpCisgICAgcmV0dXJuIEZBTFNF OworICAqdmFsdWUgPSBiWzBdICsgKGJbMV08PDgpOworICByZXR1cm4gVFJV RTsKK30KKworc3RhdGljIEJPT0wKK3BlX2dldDMyIChpbnQgZmQsIG9mZl90 IG9mZnNldCwgdW5zaWduZWQgbG9uZyogdmFsdWUpCit7CisgIHVuc2lnbmVk IGNoYXIgYls0XTsKKyAgaWYgKGxzZWVrIChmZCwgb2Zmc2V0LCBTRUVLX1NF VCkgPT0gLTEpCisgICAgcmV0dXJuIEZBTFNFOworICBpZiAocmVhZCAoZmQs IGIsIDQpICE9IDQpCisgICAgcmV0dXJuIEZBTFNFOworICAqdmFsdWUgPSBi WzBdICsgKGJbMV08PDgpICsgKGJbMl08PDE2KSArIChiWzNdPDwyNCk7Cisg IHJldHVybiBUUlVFOworfQorCitzdGF0aWMgQk9PTAorcGVfc2V0MTYgKGlu dCBmZCwgb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKK3sK KyAgdW5zaWduZWQgY2hhciBiWzJdOworICBiWzBdID0gKHVuc2lnbmVkIGNo YXIpICh2YWx1ZSAmIDB4MDBmZik7CisgIGJbMV0gPSAodW5zaWduZWQgY2hh cikgKCh2YWx1ZT4+OCkgJiAweDAwZmYpOworICBpZiAobHNlZWsgKGZkLCBv ZmZzZXQsIFNFRUtfU0VUKSA9PSAtMSkKKyAgICByZXR1cm4gRkFMU0U7Cisg IGlmICh3cml0ZSAoZmQsIGIsIDIpICE9IDIpCisgICAgcmV0dXJuIEZBTFNF OworICByZXR1cm4gVFJVRTsKK30KKworRklMRSAqCitmaWxlX2xpc3RfZm9w ZW4gKGNvbnN0IGNoYXIgKmZpbGVfbGlzdCkKK3sKKyAgRklMRSAqZmlsZSA9 IHN0ZGluOworICBpZiAoc3RyY21wKGZpbGVfbGlzdCwgc3RkaW5fZmlsZV9s aXN0KSAhPSAwKQorICAgIHsKKyAgICAgIGZpbGUgPSBmb3BlbiAoZmlsZV9s aXN0LCAiciIpOworICAgICAgaWYgKCFmaWxlKQorCWZwcmludGYgKHN0ZGVy ciwgImNhbm5vdCByZWFkICVzXG4iLCBmaWxlX2xpc3QpOworICAgIH0KKyAg cmV0dXJuIGZpbGU7Cit9CisKK2NoYXIgKgorZmlsZV9saXN0X2ZnZXRzIChj aGFyICpidWYsIGludCBzaXplLCBGSUxFICpmaWxlKQoreworICBjaGFyICpz dGF0dXMgPSBmZ2V0cyAoYnVmLCBzaXplLCBmaWxlKTsKKyAgaWYgKHN0YXR1 cykKKyAgICB7CisgICAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuIChidWYp OworICAgICAgaWYgKGJ1ZltsZW5ndGggLSAxXSA9PSAnXG4nKQorCWJ1Zlts ZW5ndGggLSAxXSA9ICdcMCc7CisgICAgfQorICByZXR1cm4gc3RhdHVzOwor fQorCitpbnQKK2ZpbGVfbGlzdF9mY2xvc2UgKEZJTEUgKmZpbGUpCit7Cisg IGludCBzdGF0dXMgPSAwOworICBpZiAoc3RyY21wKGZpbGVfbGlzdCwgc3Rk aW5fZmlsZV9saXN0KSAhPSAwKQorICAgIHN0YXR1cyA9IGZjbG9zZSAoZmls ZSk7CisgIHJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQKK3ZlcnNpb24gKCkK K3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiYXNsciB2ZXJzaW9uICVzXG4iLCBW RVJTSU9OKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiQ29weXJpZ2h0IChjKSAy MDA5ICBDaGFybGVzIFdpbHNvblxuIik7Cit9CmRpZmYgLU51YXIgcmViYXNl LTIuNC40LTEtb3JpZy9yZWJhc2VhbGwgcmViYXNlLTIuNC40LTEvcmViYXNl YWxsCi0tLSByZWJhc2UtMi40LjQtMS1vcmlnL3JlYmFzZWFsbAkyMDA4LTA2 LTA3IDE3OjQ4OjM2LjAwMDAwMDAwMCAtMDQwMAorKysgcmViYXNlLTIuNC40 LTEvcmViYXNlYWxsCTIwMDktMDItMjcgMTY6MTY6NTcuMzA1MzAxMzAwIC0w NTAwCkBAIC0xOSwxNyArMTksMTkgQEAKICMgRGVmaW5lIGNvbnN0YW50cwog UEFUSD0vYmluCiBQcm9ncmFtTmFtZT1gYmFzZW5hbWUgJDBgCi1Qcm9ncmFt T3B0aW9ucz0nYjpvOnM6VDp2JworUHJvZ3JhbU9wdGlvbnM9J2FBOmI6bzpz OlQ6dicKIERlZmF1bHRCYXNlQWRkcmVzcz0weDcwMDAwMDAwCiBEZWZhdWx0 T2Zmc2V0PTB4MTAwMDAKIERlZmF1bHRWZXJib3NlPQogRGVmYXVsdEZpbGVM aXN0PQogRGVmYXVsdFN1ZmZpeGVzPSdkbGx8c28nCitEZWZhdWx0QXNsck9w dHM9Ii1hIDEiCitEZWZhdWx0RG9Bc2xyPQogCiAjIERlZmluZSBmdW5jdGlv bnMKIHVzYWdlKCkKIHsKLSAgICBlY2hvICJ1c2FnZTogJFByb2dyYW1OYW1l IFstYiBCYXNlQWRkcmVzc10gWy1vIE9mZnNldF0gWy1zIERsbFN1ZmZpeF0g Wy1UIEZpbGVMaXN0IHwgLV0gWy12XSIKKyAgICBlY2hvICJ1c2FnZTogJFBy b2dyYW1OYW1lIFstYV0gWy1BIGFzbHJfb3B0c10gWy1iIEJhc2VBZGRyZXNz XSBbLW8gT2Zmc2V0XSBbLXMgRGxsU3VmZml4XSBbLVQgRmlsZUxpc3QgfCAt XSBbLXZdIgogICAgIGV4aXQgMQogfQogCkBAIC00OCw2ICs1MCw4IEBACiBW ZXJib3NlPSREZWZhdWx0VmVyYm9zZQogRmlsZUxpc3Q9JERlZmF1bHRGaWxl TGlzdAogU3VmZml4ZXM9JERlZmF1bHRTdWZmaXhlcworQXNsck9wdGlvbnM9 JERlZmF1bHRBc2xyT3B0cworRG9Bc2xyPSREZWZhdWx0RG9Bc2xyCiAKICMg VmVyaWZ5IG9ubHkgYXNoIHByb2Nlc3NlcyBhcmUgcnVubmluZwogZ3JlcCAt RSAtcSAtaSAtdiAnL2FzaCguZXhlKT8kJyAvcHJvYy9bMC05XSovZXhlbmFt ZQpAQCAtNjQsNiArNjgsMTAgQEAKIHdoaWxlIGdldG9wdHMgJFByb2dyYW1P cHRpb25zIE9wdGlvbiAiJEAiCiBkbwogICAgIGNhc2UgJE9wdGlvbiBpbgor ICAgIGEpCisJRG9Bc2xyPXllczs7CisgICAgQSkKKwlBc2xyT3B0cz0iJE9Q VEFSRyI7OwogICAgIGIpCiAJQmFzZUFkZHJlc3M9JE9QVEFSRzs7CiAgICAg bykKQEAgLTEwNyw3ICsxMTUsNyBAQAogIyBDcmVhdGUgcmViYXNlIGxpc3QK IGZpbmQgL2V0Yy9zZXR1cCAtbmFtZSAnKi5sc3QuZ3onIHwgeGFyZ3MgZ3pp cCAtZCAtYyB8CiAgICAgZ3JlcCAtRSAiXC4oJFN1ZmZpeGVzKVwkIiB8Ci0g ICAgc2VkIC1lICcvY3lnd2luMS5kbGwkL2QnIC1lICdzL14vXC8vJyA+IiRU bXBGaWxlIgorICAgIHNlZCAtZSAnL2N5Z3dpbjEuZGxsJC9kJyAtZSAnL2N5 Z2xzYTY0LmRsbCQvZCcgLWUgJ3MvXi9cLy8nID4iJFRtcEZpbGUiCiAKICMg QXBwZW5kIHVzZXIgc3VwcGxpZWQgZmlsZSBsaXN0LCBpZiBhbnkKIGlmIFsg LW4gIiRGaWxlTGlzdCIgXQpAQCAtMTE4LDYgKzEyNiwxMCBAQAogIyBSZWJh c2UgZmlsZXMKIHJlYmFzZSAkVmVyYm9zZSAtZCAtYiAkQmFzZUFkZHJlc3Mg LW8gJE9mZnNldCAtVCAiJFRtcEZpbGUiCiBFeGl0Q29kZT0kPworaWYgdGVz dCAieCRFeGl0Q29kZSIgPSAieDAiICYmIHRlc3QgLW4gIiREb0FzbHIiCisg IGFzbHIgJFZlcmJvc2UgJEFzbHJPcHRzIC1UICIkVG1wRmlsZSIKKyAgRXhp dENvZGU9JD8KK2ZpCiAKICMgQ2xlYW4gdXAKIGNsZWFudXAK --------------000701020409080206070409 Content-Type: text/plain; charset=us-ascii -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ --------------000701020409080206070409--