From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from forward501c.mail.yandex.net (forward501c.mail.yandex.net [178.154.239.209]) by sourceware.org (Postfix) with ESMTPS id 090033858D33 for ; Fri, 31 Mar 2023 11:04:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 090033858D33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=yandex.ru Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yandex.ru Received: from mail-nwsmtp-smtp-production-main-44.sas.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-44.sas.yp-c.yandex.net [IPv6:2a02:6b8:c14:440b:0:640:fa3a:0]) by forward501c.mail.yandex.net (Yandex) with ESMTP id 012D05F25B; Fri, 31 Mar 2023 14:04:52 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-44.sas.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id n4IdnWCDZGk0-rkBnRD0C; Fri, 31 Mar 2023 14:04:51 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1680260691; bh=9s0vpMfgjNDI0UK5NwXBd2+xgH0cATzSw530uV7oCB4=; h=In-Reply-To:References:To:Subject:Message-ID:Date:From; b=dO5L6bf4OdGAKeDMSln66xVWgNGHHfjCP11pheNxyMhGLg6enhmjFYhXcZtx3w9tU AB7xr1EWP0fqJVa0Tzy1ls1GupxuRqLPkFDe6v0dIk8N9BB9aogD/dcJneVqQqt4Mg w/qJFSrAvwhfbSrGPZUmJw9EgDMpCJOldQOly8tU= Authentication-Results: mail-nwsmtp-smtp-production-main-44.sas.yp-c.yandex.net; dkim=pass header.i=@yandex.ru Content-Type: multipart/mixed; boundary="------------QJZYxGE0F001hWo0qv0M0wnl" Message-ID: <09b644bc-3d6e-39cf-02c2-af5c5a72e248@yandex.ru> Date: Fri, 31 Mar 2023 16:04:48 +0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: [PATCH v9 0/13] implement dlmem() function Content-Language: en-US To: Carlos O'Donell , libc-alpha@sourceware.org, Jonathon Anderson References: <20230318165110.3672749-1-stsp2@yandex.ru> <481ef2c5-a59f-dea4-7f5f-2fcd229a4c25@redhat.com> <7fab954f-4a3d-0df0-8211-a9697f3966c1@yandex.ru> <81d75bd3-147e-f85a-9955-0c7f0f2dfbeb@redhat.com> From: stsp In-Reply-To: <81d75bd3-147e-f85a-9955-0c7f0f2dfbeb@redhat.com> X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,NICE_REPLY_A,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------QJZYxGE0F001hWo0qv0M0wnl Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi Carlos, Jonathon. 29.03.2023 23:13, Carlos O'Donell пишет: > The most important thing is the reasons for the change and that should come first. Done, please see the attachment. > This needs to explain the workload that requires the API. > > Why that workload is generic. > > Any core system library, like glibc, is not the place for *all* APIs, but the > place for the most generic building blocks for ISO C, POSIX, BSD, GNU, and > Linux APIs. I hope I've got that suggestion rightly. Please see if my current description is adequate. And on the other front... I studied and documented (in the attachment) all the cases where my impl fails to arrange an elf segments properly... I have to admit such cases were possible. :( I documented them and their mitigations in the "Limitations" section. Let me know if this is now adequate. --------------QJZYxGE0F001hWo0qv0M0wnl Content-Type: text/x-patch; charset=UTF-8; name="0000-cover-letter.patch" Content-Disposition: attachment; filename="0000-cover-letter.patch" Content-Transfer-Encoding: base64 RnJvbSA0NmU1MDk1ZWJmZTYzYmU0ZGNkODEzYzQyMzdkNmE0OTFhM2Y5NzY4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBTdGFzIFNlcmdlZXYgPHN0c3AyQHlhbmRleC5ydT4K RGF0ZTogTW9uLCAxMyBGZWIgMjAyMyAxODoxNTozNCArMDUwMApTdWJqZWN0OiBbUEFUQ0gg djEwIDAvMTJdIGltcGxlbWVudCBkbG1lbSgpIGZ1bmN0aW9uCgpUaGlzIHBhdGNoLXNldCBp bXBsZW1lbnRzIHRoZSBkbG1lbSgpIGZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIGxvYWQKdGhl IHNvbGliIGZyb20gcGFnZS1hbGlnbmVkIG1lbW9yeSBidWZmZXIuIEl0IHN1aXRzIGFzIGEg YnVpbGRpbmcKYmxvY2sgZm9yIGltcGxlbWVudGluZyB0aGUgZnVuY3Rpb25zIGxpa2UgZmRs b3BlbigpIGFuZCBkbG9wZW5fd2l0aF9vZmZzZXQoKSwKd2hpY2ggYXJlIGRlbW8taW1wbGVt ZW50ZWQgaW4gYSB0ZXN0LWNhc2UgY2FsbGVkIHRzdC1kbG1lbS1leHRmbnMuClRoZSByZWFz b25zIHdoeSBpdCBzdWl0cyB3ZWxsIGZvciBzdWNoIGZpbGUtYmFzZWQgbG9hZGVycywgYXJl IGJlbG93OgoxLiBJdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgZmlsZSBhc3NvY2lhdGlvbiBv ZiB0aGUgb3JpZ2luYWwgc29saWIKICAgYnVmZmVyIGlmIGl0IHdhcyBtbWFwJ2VkIGZyb20g YSBmaWxlLgoyLiBJdCBhbGxvd3MgdG8gcHJvdmlkZSBhIHNvbGliIG5hbWUsIHdoaWNoIGNh biBiZSB0aGUgZmlsZSBuYW1lLgoKV2l0aCB0aGUgYWJvdmUgcHJvcGVydGllcywgdGhlICJk aXJlY3QiIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucwpnaXZlcyBubyBhZHZh bnRhZ2VzIG92ZXIgaW1wbGVtZW50aW5nIHRoZW0gd2l0aCBkbG1lbSgpLgoKSW4gYWRkaXRp b24sIGRsbWVtKCkgaGFzIGxvdHMgb2Ygb3B0aW9uYWwgZnVuY3Rpb25hbGl0eSBmb3IgdGhl IGZpbmUtZ3JhaW5lZApjb250cm9sIG92ZXIgdGhlIGxvYWRpbmcgcHJvY2Vzcy4gSXQgYWxs b3dzIHlvdSB0byBzZXQgbnNpZCAobGlrZSBkbG1vcGVuKCkpLApzcGVjaWZ5IHRoZSBzb2xp YiByZWxvY2F0aW9uIGFkZHJlc3MgYW5kIGV2ZW4gcmVsb2NhdGUgdGhlIHNvbGliIGludG8K dGhlIHVzZXIncyBidWZmZXIuIFRoYXQgImFkdmFuY2VkIiBmdW5jdGlvbmFsaXR5IGlzIG9u bHkgbmVlZGVkIGZvciB0aGUKdmVyeSBzcGVjaWZpYyB1c2UtY2FzZXMsIGxpa2UgdmlydHVh bGl6ZWQgZW52aXJvbm1lbnRzIHdoZXJlIHRoZSByZWxvY2F0aW9uCmFkZHJlc3MgbWF5IGhh dmUgYSBzcGVjaWFsIGNvbnN0cmFpbnRzLCBlZyBNQVBfMzJCSVQuIEluIGFsbCBvdGhlciBj YXNlcwppdCBpcyBhZHZpc2VkIHRvIHNldCB0aGUgImRsbV9hcmdzIiBwb2ludGVyIG9mIGRs bWVtKCkgY2FsbCB0byBOVUxMLCBidXQKc2VlICJMaW1pdGF0aW9ucyIgYmVsb3cgdG8gZmlu ZCBvdXQgd2hlbiBpdHMgbm90IHRoZSBjYXNlLgoKVGhlIEFQSSBsb29rcyBhcyBiZWxvdzoK Ci8qIENhbGxiYWNrIGZvciBkbG1lbS4gKi8KdHlwZWRlZiB2b2lkICoKKGRsbWVtX3ByZW1h cF90KSAodm9pZCAqbWFwcHJlZiwgc2l6ZV90IG1hcGxlbmd0aCwgc2l6ZV90IG1hcGFsaWdu LAoJICAgICAgICAgIHZvaWQgKmNvb2tpZSk7CgovKiBEbyBub3QgcmVwbGFjZSBtYXBwaW5n IGNyZWF0ZWQgYnkgcHJlbWFwIGNhbGxiYWNrLgogICBkbG1lbSgpIHdpbGwgdGhlbiB1c2Ug bWVtY3B5KCkuICovCiNkZWZpbmUgRExNRU1fRE9OVFJFUExBQ0UgMQoKc3RydWN0IGRsbWVt X2FyZ3MgewogIC8qIE9wdGlvbmFsIG5hbWUgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGxvYWRl ZCBvYmplY3QuICovCiAgY29uc3QgY2hhciAqc29uYW1lOwogIC8qIE5hbWVzcGFjZSB3aGVy ZSB0byBsb2FkIHRoZSBvYmplY3QuICovCiAgTG1pZF90IG5zaWQ7CiAgLyogZGxtZW0tc3Bl Y2lmaWMgZmxhZ3MuICovCiAgdW5zaWduZWQgaW50IGZsYWdzOwogIC8qIE9wdGlvbmFsIHBy ZW1hcCBjYWxsYmFjay4gKi8KICBkbG1lbV9wcmVtYXBfdCAqcHJlbWFwOwogIC8qIE9wdGlv bmFsIGFyZ3VtZW50IGZvciBwcmVtYXAgY2FsbGJhY2suICovCiAgdm9pZCAqY29va2llOwp9 OwoKLyogTGlrZSBgZGxtb3BlbicsIGJ1dCBsb2FkcyBzaGFyZWQgb2JqZWN0IGZyb20gbWVt b3J5IGJ1ZmZlci4gICovCmV4dGVybiB2b2lkICpkbG1lbSAoY29uc3QgdW5zaWduZWQgY2hh ciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IG1vZGUsCgkJICAgIHN0cnVjdCBkbG1lbV9h cmdzICpkbG1fYXJncyk7CgoKSW4gbW9zdCBjYXNlcyBkbG1fYXJncyBzaG91bGQganVzdCBi ZSBzZXQgdG8gTlVMTC4gSXQgcHJvdmlkZXMgdGhlCmFkdmFuY2VkIGZ1bmN0aW9uYWxpdHks IG1vc3Qgb2Ygd2hpY2ggaXMgb2J2aW91cyAoc29uYW1lLCBuc2lkKS4KVGhlIHByZW1hcCBj YWxsYmFjayBhbGxvd3MgdG8gc2V0IHRoZSByZWxvY2F0aW9uIGFkZHJlc3MgZm9yIHRoZSBz b2xpYi4KTW9yZSBzbywgaWYgRExNRU1fRE9OVFJFUExBQ0UgZmxhZyBpcyB1c2VkLCB0aGVu IHRoZSBtYXBwaW5nIGVzdGFibGlzaGVkCmJ5IHRoZSBwcmVtYXAgY2FsbGJhY2ssIHdpbGwg bm90IGJlIHJlcGxhY2VkIHdpdGggdGhlIGZpbGUtYmFja2VkIG1hcHBpbmcuCkluIHRoYXQg Y2FzZSBkbG1lbSgpIGhhdmUgdG8gdXNlIG1lbWNweSgpLCB3aGljaCBpcyBsaWtlbHkgZXZl biBmYXN0ZXIKdGhhbiBtbWFwcygpIGJ1dCBkb2Vzbid0IGVuZCB1cCB3aXRoIHRoZSBwcm9w ZXIgL3Byb2Mvc2VsZi9tYXBfZmlsZXMKb3IgL3Byb2Mvc2VsZi9tYXBzIGVudHJpZXMuIFNv IGZvciBleGFtcGxlIGlmIHRoZSBwcmVtYXAgY2FsbGJhY2sgdXNlcwpNQVBfU0hBUkVELCB0 aGVuIHdpdGggdGhlIHVzZSBvZiB0aGUgRExNRU1fRE9OVFJFUExBQ0UgZmxhZyB5b3UgY2Fu IGdldAp5b3VyIHNvbGliIHJlbG9jYXRlZCBpbnRvIGEgc2hhcmVkIG1lbW9yeSBidWZmZXIu CgpMaW1pdGF0aW9uczoKCi0gSWYgeW91IG5lZWQgdG8gbG9hZCB0aGUgc29saWIgZnJvbSBh bm9ueW1vdXNseS1tYXBwZWQgYnVmZmVyLCB5b3UgbmVlZAogIHRvIHVzZSBNQVBfU0hBUkVE fE1BUF9BTk9OWU1PVVMgbW1hcCBmbGFncyB3aGVuIGNyZWF0aW5nIHRoYXQgYnVmZmVyLgog IElmIGl0IGlzIG5vdCBwb3NzaWJsZSBpbiB5b3VyIHVzZS1jYXNlIGFuZCB0aGUgYnVmZmVy IHdhcyBjcmVhdGVkCiAgd2l0aCBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTIGZsYWdzLCB0 aGVuIERMTUVNX0RPTlRSRVBMQUNFIGZsYWcKICBuZWVkcyB0byBiZSBzZXQgd2hlbiBjYWxs aW5nIGRsbWVtKCkuCiAgRmFpbHVyZSB0byBmb2xsb3cgdGhhdCBndWlkZS1saW5lIHJlc3Vs dHMgaW4gYW4gVUIgKGxvYWRlciB3aWxsIG5vdAogIGJlIGFibGUgdG8gcHJvcGVybHkgbGF5 IG91dCBhbiBlbGYgc2VnbWVudHMpLgoKLSBJZiB5b3UgdXNlIGEgcHJpdmF0ZSBmaWxlLWJh Y2tlZCBtYXBwaW5nLCB0aGVuIGl0IHNob3VsZG4ndCBiZQogIG1vZGlmaWVkIGJ5IGhhbmRz IGJlZm9yZSBwYXNzaW5nIHRvIGRsbWVtKCkuIEkuZS4geW91IGNhbid0IGFwcGx5CiAgbXBy b3RlY3QoKSB0byBpdCB0byBjaGFuZ2UgcHJvdGVjdGlvbiBiaXRzLCBhbmQgeW91IGNhbid0 IGFwcGx5CiAgbWVtbW92ZSgpIHRvIGl0IHRvIG1vdmUgdGhlIHNvbGliIHRvIHRoZSBiZWdp bm5pbmcgb2YgdGhlIGJ1ZmZlciwKICBhbmQgc28gb24uIGRsbWVtKCkgY2FuIG9ubHkgd29y ayB3aXRoICJ2aXJnaW4iIHByaXZhdGUgZmlsZS1iYWNrZWQKICBtYXBwaW5ncy4gWW91IGNh biBzZXQgRExNRU1fRE9OVFJFUExBQ0UgZmxhZyBhcyBhIHdvcmstYXJvdW5kIGlmCiAgdGhl IG1hcHBpbmcgaXMgYWxyZWFkeSBjb3JydXB0ZWQuCiAgRmFpbHVyZSB0byBmb2xsb3cgdGhh dCBndWlkZS1saW5lIHJlc3VsdHMgaW4gYW4gVUIgKGxvYWRlciB3aWxsIG5vdAogIGJlIGFi bGUgdG8gcHJvcGVybHkgbGF5IG91dCBhbiBlbGYgc2VnbWVudHMpLgoKLSBUaGUgbmVlZCBv ZiBtYXBwaW5nIHRoZSBlbnRpcmUgc29saWIgKHdpdGggZGVidWcgaW5mbyBldGMpIG1heQog IHJlcHJlc2VudCBhIHByb2JsZW0gb24gYSAzMmJpdCBhcmNoaXRlY3R1cmVzIGlmIHRoZSBz b2xpYiBoYXMgYW4KICBhYnN1cmRseSBsYXJnZSBzaXplLCBsaWtlIDNHYiBvciBtb3JlLgoK LSBGb3IgdGhlIHZlcnkgc2FtZSByZWFzb24gdGhlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlv biBvZiBBbmRyb2lkJ3MKICBkbG9wZW5fd2l0aF9vZmZzZXQoKSBpcyBkaWZmaWN1bHQsIGFz IGluIHRoYXQgY2FzZSB5b3UnZCBuZWVkIHRvCiAgbWFwIHRoZSBlbnRpcmUgZmlsZSBjb250 YWluZXIsIHN0YXJ0aW5nIGZyb20gdGhlIG5lZWRlZCBvZmZzZXQuCiAgVGhlIGRlbW8gaW1w bGVtZW50YXRpb24gaW4gdGhpcyBwYXRjaCBpbXBsZW1lbnRzIGRsb3Blbl93aXRoX29mZnNl dDQoKQogIHRoYXQgaGFzIGFuIGFkZGl0aW9uYWwgImxlbmd0aCIgYXJndW1lbnQgd2hlcmUg dGhlIHNvbGliIGxlbmd0aAogIHNob3VsZCBiZSBwYXNzZWQuCgotIEFzIGxpbnV4IGRvZXNu J3QgaW1wbGVtZW50IE1BUF9VTkFMSUdORUQgYXMgc29tZSB1bml4ZXMgZGlkLCB0aGUKICBl ZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2YgZGxvcGVuX3dpdGhfb2Zmc2V0NCgpIGlzIGRp ZmZpY3VsdAogIGlmIHRoZSBvZmZzZXQgaXMgbm90IHBhZ2UtYWxpZ25lZC4gRGVtbyBpbiB0 aGlzIGV4YW1wbGUgZml4ZXMgdGhlCiAgYWxpZ25tZW50IGJ5IGhhbmRzLCB1c2luZyB0aGUg TUFQX1NIQVJFRHxNQVBfQU5PTllNT1VTIGludGVybWVkaWF0ZQogIGJ1ZmZlci4gVGhlIGFs aWdubWVudCBjYW5ub3QgYmUgZml4ZWQgaW4gYW4gZXhpc3RpbmcgYnVmZmVyIHdpdGgKICBt ZW1tb3ZlKCksIGFzIHRoYXQgd2lsbCBtYWtlIHRoZSBmaWxlLWJhY2tlZCBtYXBwaW5nIHVu YWNjZXB0YWJsZQogIGZvciB0aGUgdXNlIHdpdGggZGxtZW0oKS4gSSBzdXNwZWN0IHRoYXQg Z29vZ2xlJ3MgZGxvcGVuX3dpdGhfb2Zmc2V0KCkKICBoYXMgc2ltaWxhciBsaW1pdGF0aW9u IGJlY2F1c2UgbW1hcCgpIHdpdGggdW5hbGlnbmVkIG9mZnNldCBpcwogIG5vdCBwb3NzaWJs ZSBpbiBhbnkgaW1wbGVtZW50YXRpb24sIGJlIGl0IGEgImRpcmVjdCIgaW1wbGVtZW50YXRp b24KICBvciAib3Zlci1kbG1lbSIgaW1wbGVtZW50YXRpb24uCgpDaGFuZ2VzIGluIHYxMDoK LSBhZGRyZXNzZWQgcmV2aWV3IGNvbW1lbnRzIG9mIEFkaGVtZXJ2YWwgWmFuZWxsYQotIGZp eGVkIGEgZmV3IGJ1Z3MgaW4gYW4gZWxmIHJlbG9jYXRpb24gbWFjaGluZXJ5IGFmdGVyIHZh cmlvdXMgaG90IGRpc2N1c3Npb25zCi0gYWRkZWQgYSBuZXcgdGVzdCB0c3QtZGxtZW0tZXh0 Zm5zIHRoYXQgZGVtby1pbXBsZW1lbnRzIGRsb3Blbl93aXRoX29mZnNldDQoKQogIGFuZCBm ZGxvcGVuKCkKLSBzdHVkaWVkIGFuZCBkb2N1bWVudGVkIGFsbCBsaW1pdGF0aW9ucywgbW9z dCBpbXBvcnRhbnRseSB0aG9zZSBsZWFkaW5nIHRvIFVCCgpDaGFuZ2VzIGluIHY5OgotIHVz ZSAiemVyby1jb3B5IiBtYWNoaW5lcnkgaW5zdGVhZCBvZiBtZW1jcHkoKS4gSXQgd29ya3Mg b24gbGludXggNS4xMwogIGFuZCBuZXdlciwgZmFsbGluZyBiYWNrIHRvIG1lbWNweSgpIG90 aGVyd2lzZS4gU3VnZ2VzdGVkIGJ5IEZsb3JpYW4gV2VpbWVyLgotIGltcGxlbWVudCBmZGxv cGVuKCkgdXNpbmcgdGhlIGFib3ZlIGZ1bmN0aW9uYWxpdHkuIEl0IGlzIGluIGEgbmV3IHRl c3QKICB0c3QtZGxtZW0tZmRsb3Blbi4gU3VnZ2VzdGVkIGJ5IENhcmxvcyBPJ0RvbmVsbC4K LSBhZGQgRExNRU1fRE9OVFJFUExBQ0UgZmxhZyB0aGF0IGRvZXNuJ3QgcmVwbGFjZSB0aGUg YmFja2luZy1zdG9yZSBtYXBwaW5nLgogIEl0IHN3aXRjaGVzIGJhY2sgdG8gbWVtY3B5KCku IFRlc3QtY2FzZSBpcyBjYWxsZWQgdHN0LWRsbWVtLXNobS4KCkNoYW5nZXMgaW4gdjg6Ci0g ZHJvcCBhdWRpdCBtYWNoaW5lcnkgYW5kIGluc3RlYWQgYWRkIGFuIGV4dHJhIGFyZyAob3B0 aW9uYWwgcG9pbnRlcgogIHRvIGEgc3RydWN0KSB0byBkbG1lbSgpIGl0c2VsZiB0aGF0IGFs bG93cyB0byBpbnN0YWxsIGEgY3VzdG9tIHByZW1hcAogIGNhbGxiYWNrIG9yIHRvIHNwZWNp ZnkgbnNpZC4gQXVkaXQgbWFjaGluZXJ5IHdhcyBtZWFudCB0byBhbGxvdwogIGNvbnRyb2xp bmcgb3ZlciB0aGUgcHJlLWV4aXN0aW5nIEFQSXMgbGlrZSBkbG9wZW4oKSwgYnV0IGlmIHNv bWVvbmUKICBldmVyIG5lZWRzIHN1Y2ggZXh0ZW5zaW9ucyB0byBkbG9wZW4oKSwgaGUgY2Fu IHRyaXZpYWxseSBpbXBsZW1lbnQKICBkbG9wZW4oKSBvbiB0b3Agb2YgZGxtZW0oKS4KCkNo YW5nZXMgaW4gdjc6Ci0gYWRkIF9kbF9hdWRpdF9wcmVtYXAgYXVkaXQgZXh0ZW5zaW9uIGFu ZCBpdHMgdXNhZ2UgZXhhbXBsZQoKQ2hhbmdlcyBpbiB2NjoKLSB1c2UgX19zdHJkdXAoIiIp IGZvciBsX25hbWUgYXMgc3VnZ2VzdGVkIGJ5IEFuZHJlYXMgU2Nod2FiCgpDaGFuZ2VzIGlu IHY1OgotIGFkZGVkIF9kbF9hdWRpdF9wcmVtYXBfZGxtZW0gYXVkaXQgZXh0ZW5zaW9uIGZv ciBkbG1lbQotIGFkZGVkIHRzdC1hdWRpdG1vZC1kbG1lbS5jIHRlc3QtY2FzZSB0aGF0IGZl ZWRzIHNobSBmZCB0byBkbG1lbSgpCgpDaGFuZ2VzIGluIHY0OgotIHJlLXRhcmdldCB0byBH TElCQ18yLjM4Ci0gYWRkIHRzdC1hdWRpdGRsbWVtLmMgdGVzdC1jYXNlIHRvIHRlc3QgYXVk aXRpbmcKLSBkcm9wIGxlbmd0aCBwYWdlLWFsaWduaW5nIGluIHRzdC1kbG1lbTogbW1hcCgp IGFsaWducyBsZW5ndGggb24gaXRzIG93bgotIGJ1Z2ZpeDogaW4gZG9fbW1hcGNweSgpIGFs bG93IG1tYXBzIHBhc3QgZW5kIG9mIGJ1ZmZlcgoKQ2hhbmdlcyBpbiB2MzoKLSBDaGFuZ2Vk IHByb3RvdHlwZSBvZiBkbG1lbSgpIChhbmQgYWxsIHRoZSBpbnRlcm5hbCBtYWNoaW5lcnkp IHRvCiAgdXNlICJjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIiIGluc3RlYWQgb2YgImNv bnN0IGNoYXIgKmJ1ZmZlciIuCgpDaGFuZ2VzIGluIHYyOgotIHVzZSA8c3VwcG9ydC90ZXN0 LWRyaXZlci5jPiBpbnN0ZWFkIG9mICIuLi90ZXN0LXNrZWxldG9uLmMiCi0gcmUtdGFyZ2V0 IHRvIEdMSUJDXzIuMzcKLSB1cGRhdGUgYWxsIGxpYmMuYWJpbGlzdCBmaWxlcwoKLS0gCjIu MzcuMgoK --------------QJZYxGE0F001hWo0qv0M0wnl--