From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id E72AB3858439 for ; Tue, 16 May 2023 09:24:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E72AB3858439 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1684229080; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=AAk57hlytroPfFOyzLmuHwkL9+WW2stac1PkXPlPk20=; b=Tiln3FUcJVfhvP9l85k+g7YUr+H9qacsgTB2tJvx1expXIb10hsF9KlcYcoGrVbnteyarc rbWSacIS8egNzrjmHUkwv2XbxtzRdiaal0VmOjx2v78rvlYWq/9AoZ38ws911hN6W+08uS ZvAkjYll+0H8kJSWmEKBoU6A89p6414= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-190-jT2oY6uIP6CiOHE4_UrnYg-1; Tue, 16 May 2023 05:24:39 -0400 X-MC-Unique: jT2oY6uIP6CiOHE4_UrnYg-1 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-3f422dc5fafso63597005e9.0 for ; Tue, 16 May 2023 02:24:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684229078; x=1686821078; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=ANon2o9RE1waP6mHRr6TkZLUu3A5hPiZwSzQ99KFIn0=; b=OHpLgB/Job2K4opKksJf4X3Mr+70ZPek/MePgRwEvIlXXDXMlU9IiGZD5NEDCLAOHc rVZTWach/sj/t6CuFyF+V4qMhCDSYAWQNr9ZRP+U8Q0Z1mrCP4a1EgRg7nHYqhkMl+Ir ARpZwdEFI++3FBpX9vuUQcy+YX8o71dMpqkLS9UFLX9HIvbJsS5QIsjYQfXBXydocRww KC+9aZfZaG+SmCvyxD90Yjpm2ZxQ7Ma09UB1AIlY6ss+FWZXlEhw8W9LUrNTYpp/HI+M 5z1KPWyDWjx9B96zkfy/COtzJz85D8n84AFxsprrTz8QS3K2EnL9Gr25MgHs8IYZM44y dwfA== X-Gm-Message-State: AC+VfDw0necM9rdop5EwaM4pPqqhEW/xWb673ZmuHmfK8Z5NeoLvopec 3HjNCbsyxob9qawd1rRALuG7ReqIxe1oA0AA/w1b04c99xVgN4LzNf04ACZs9frG6pwvqL8+fGh DCAuheta9sfr2eeZwwA== X-Received: by 2002:a1c:7304:0:b0:3f3:888b:ab78 with SMTP id d4-20020a1c7304000000b003f3888bab78mr24562951wmb.37.1684229077923; Tue, 16 May 2023 02:24:37 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6v5h6OD0V4XT3lmWjyu5oZarjjpEC/K0k4E/u6y7/7t/XuQcxUfAcQkI0p8qv6YLyxfgD5HA== X-Received: by 2002:a1c:7304:0:b0:3f3:888b:ab78 with SMTP id d4-20020a1c7304000000b003f3888bab78mr24562937wmb.37.1684229077502; Tue, 16 May 2023 02:24:37 -0700 (PDT) Received: from [192.168.1.201] ([139.47.42.170]) by smtp.gmail.com with ESMTPSA id t22-20020a7bc3d6000000b003f427cba193sm1588642wmj.41.2023.05.16.02.24.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 16 May 2023 02:24:37 -0700 (PDT) Message-ID: Date: Tue, 16 May 2023 11:24:36 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH] Add auto-resizing capability to irange's [PR109695] From: Aldy Hernandez To: Jakub Jelinek Cc: GCC patches , Andrew MacLeod , Richard Biener , mjambor@suse.cz References: <20230515103523.100412-1-aldyh@redhat.com> <10c82daa-8cc3-8e8b-d99a-32b7741b6e3d@redhat.com> In-Reply-To: <10c82daa-8cc3-8e8b-d99a-32b7741b6e3d@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------s2danCMFmsv36LzyC9RX9izV" Content-Language: en-US X-Spam-Status: No, score=-9.9 required=5.0 tests=BAYES_00,BODY_8BITS,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_BARRACUDACENTRAL,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE 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. --------------s2danCMFmsv36LzyC9RX9izV Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 5/15/23 20:14, Aldy Hernandez wrote: > On 5/15/23 17:07, Aldy Hernandez wrote: >> >> >> On 5/15/23 12:42, Jakub Jelinek wrote: >>> On Mon, May 15, 2023 at 12:35:23PM +0200, Aldy Hernandez wrote: >>>> gcc/ChangeLog: >>>> >>>>     PR tree-optimization/109695 >>>>     * value-range.cc (irange::operator=): Resize range. >>>>     (irange::union_): Same. >>>>     (irange::intersect): Same. >>>>     (irange::invert): Same. >>>>     (int_range_max): Default to 3 sub-ranges and resize as needed. >>>>     * value-range.h (irange::maybe_resize): New. >>>>     (~int_range): New. >>>>     (int_range::int_range): Adjust for resizing. >>>>     (int_range::operator=): Same. >>> >>> LGTM. >>> >>> One question is if we shouldn't do it for GCC13/GCC12 as well, perhaps >>> changing it to some larger number than 3 when the members aren't >>> wide_ints >>> in there but just trees.  Sure, in 13/12 the problem is 10x less severe >>> than in current trunk, but still we have some cases where we run out of >>> stack because of it on some hosts. >> >> Sure, but that would require messing around with the gt_* GTY >> functions, and making sure we're allocating the trees from a sensible >> place, etc etc.  I'm less confident in my ability to mess with GTY >> stuff this late in the game. > > Hmmm, maybe backporting this isn't too bad.  The only time we'd have a > chunk on the heap is for int_range_max, which will never live in GC > space.  So I don't think we need to worry about GC at all. > > Although, legacy mode in GCC13 does get in a the way a bit.  Sigh. I've adapted the patch to GCC13 and tested it on x86-64 Linux. Please look over the new[] I do for trees to make sure I did things right. int_range_max on GCC13 is currently 4112 bytes. Here are the numbers for various defaults: < 2> = 64 bytes, 3.02% for VRP. < 3> = 80 bytes, 2.67% for VRP. < 8> = 160 bytes, 2.46% for VRP. <16> = 288 bytes, 2.40% for VRP. Note that we don't have any runway on GCC13, so this would be a net loss in performance for VRP. Threading shows about half as much of a drop than VRP. Overall compilation is within 0.2%, so not noticeable. I'm surprised 2 sub-ranges doesn't incur a bigger penalty, but 3 seems to be the happy medium. Anything more than that, and there's no difference. The patch defaults to 3 sub-ranges. I must say, 80 bytes looks mighty nice. It's up to you what to do with the patch. I'm chicken shit at heart and hate touching release compilers :). Aldy --------------s2danCMFmsv36LzyC9RX9izV Content-Type: text/x-patch; charset=UTF-8; name="0001-GCC13-Add-auto-resizing-capability-to-irange-s-PR109.patch" Content-Disposition: attachment; filename*0="0001-GCC13-Add-auto-resizing-capability-to-irange-s-PR109.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA3NzdhYTkzMGIxMDZmZWEyZGQ2ZWQ5ZmUyMmI0MmEyNzE3ZjE0NzJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogTW9uLCAxNSBNYXkgMjAyMyAxMjoyNTo1OCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFtHQ0Mx M10gQWRkIGF1dG8tcmVzaXppbmcgY2FwYWJpbGl0eSB0byBpcmFuZ2UncyBbUFIxMDk2OTVdCgpC YWNrcG9ydCB0aGUgZm9sbG93aW5nIGZyb20gdHJ1bmsuCgoJTm90ZSB0aGF0IHRoZSBwYXRjaCBo YXMgYmVlbiBhZGFwdGVkIHRvIHRyZWVzLgoKCVRoZSBudW1iZXJzIGZvciB2YXJpb3VzIHN1Yi1y YW5nZXMgb24gR0NDMTMgYXJlOgoJCTwgMj4gPSAgNjQgYnl0ZXMsIC0zLjAyJSBmb3IgVlJQLgoJ CTwgMz4gPSAgODAgYnl0ZXMsIC0yLjY3JSBmb3IgVlJQLgoJCTwgOD4gPSAxNjAgYnl0ZXMsIC0y LjQ2JSBmb3IgVlJQLgoJCTwxNj4gPSAyODggYnl0ZXMsIC0yLjQwJSBmb3IgVlJQLgoKPHRsZHI+ CldlIGNhbiBub3cgaGF2ZSBpbnRfcmFuZ2U8TiwgUkVTSVpBQkxFPWZhbHNlPiBmb3IgYXV0b21h dGljYWxseQpyZXNpemFibGUgcmFuZ2VzLiAgaW50X3JhbmdlX21heCBpcyBub3cgaW50X3Jhbmdl PDMsIHRydWU+CmZvciBhIDY5WCByZWR1Y3Rpb24gaW4gc2l6ZSBmcm9tIGN1cnJlbnQgdHJ1bmss IGFuZCA2LjlYIHJlZHVjdGlvbiBmcm9tCkdDQzEyLiAgVGhpcyBpbmN1cnMgYSA1JSBwZXJmb3Jt YW5jZSBwZW5hbHR5IGZvciBWUlAgdGhhdCBpcyBtb3JlIHRoYW4KY292ZXJlZCBieSBvdXIgPiAx MyUgaW1wcm92ZW1lbnRzIHJlY2VudGx5Lgo8L3RsZHI+CgppbnRfcmFuZ2VfbWF4IGlzIHRoZSB0 ZW1wb3JhcnkgcmFuZ2Ugb2JqZWN0IHdlIHVzZSBpbiB0aGUgcmFuZ2VyIGZvcgppbnRlZ2Vycy4g IFdpdGggdGhlIGNvbnZlcnNpb24gdG8gd2lkZV9pbnQsIHRoaXMgc3RydWN0dXJlIGJsb2F0ZWQg dXAKc2lnbmlmaWNhbnRseSBiZWNhdXNlIHdpZGVfaW50cyBhcmUgaHVnZSAoODAgYnl0ZXMgYSBw aWVjZSkgYW5kIGFyZQphYm91dCAxMCB0aW1lcyBhcyBiaWcgYXMgYSBwbGFpbiB0cmVlLiAgU2lu Y2UgdGhlIHRlbXBvcmFyeSBvYmplY3QKcmVxdWlyZXMgMjU1IHN1Yi1yYW5nZXMsIHRoYXQncyAy NTUgKiA4MCAqIDIsIHBsdXMgdGhlIGNvbnRyb2wgd29yZC4KVGhpcyBtZWFucyB0aGUgc3RydWN0 dXJlIGdyZXcgZnJvbSA0MTEyIGJ5dGVzIHRvIDQwOTEyIGJ5dGVzLgoKVGhpcyBwYXRjaCBhZGRz IHRoZSBhYmlsaXR5IHRvIHJlc2l6ZSByYW5nZXMgYXMgbmVlZGVkLCBkZWZhdWx0aW5nIHRvCm5v IHJlc2l6aW5nLCB3aGlsZSBpbnRfcmFuZ2VfbWF4IG5vdyBkZWZhdWx0cyB0byAzIHN1Yi1yYW5n ZXMgKGluc3RlYWQKb2YgMjU1KSBhbmQgZ3Jvd3MgdG8gMjU1IHdoZW4gdGhlIHJhbmdlIGJlaW5n IGNhbGN1bGF0ZWQgZG9lcyBub3QgZml0LgoKRm9yIGV4YW1wbGU6CgppbnRfcmFuZ2U8MT4gZm9v OwkvLyAxIHN1Yi1yYW5nZSB3aXRoIG5vIHJlc2l6aW5nLgppbnRfcmFuZ2U8NT4gZm9vOwkvLyA1 IHN1Yi1yYW5nZXMgd2l0aCBubyByZXNpemluZy4KaW50X3JhbmdlPDUsIHRydWU+IGZvbzsJLy8g NSBzdWItcmFuZ2VzIHdpdGggcmVzaXppbmcuCgpJIHJhbiBzb21lIHRlc3RzIGFuZCBmb3VuZCB0 aGF0IDMgc3ViLXJhbmdlcyBjb3ZlciA5OSUgb2YgY2FzZXMsIHNvCkkndmUgc2V0IHRoZSBpbnRf cmFuZ2VfbWF4IGRlZmF1bHQgdG8gdGhhdDoKCgl0eXBlZGVmIGludF9yYW5nZTwzLCAvKlJFU0la QUJMRT0qL3RydWU+IGludF9yYW5nZV9tYXg7CgpXZSBkb24ndCBib3RoZXIgZ3Jvd2luZyBpbmNy ZW1lbnRhbGx5LCBzaW5jZSB0aGUgZGVmYXVsdCBjb3ZlcnMgbW9zdApjYXNlcyBhbmQgd2UgaGF2 ZSBhIDI1NSBoYXJkLWxpbWl0LiAgVGhpcyBoYXJkIGxpbWl0IGNvdWxkIGJlIHJlZHVjZWQKdG8g MTI4LCBzaW5jZSBteSB0ZXN0cyBuZXZlciBzYXcgYSByYW5nZSBuZWVkaW5nIG1vcmUgdGhhbiAx MjQsIGJ1dCB3ZQpjb3VsZCBkbyB0aGF0IGFzIGEgZm9sbG93LXVwIGlmIG5lZWRlZC4KCldpdGgg My1zdWJyYW5nZXMsIGludF9yYW5nZV9tYXggaXMgbm93IDU5MiBieXRlcyB2ZXJzdXMgNDA5MTIg Zm9yCnRydW5rLCBhbmQgdmVyc3VzIDQxMTIgYnl0ZXMgZm9yIEdDQzEyISAgVGhlIHBlbmFsdHkg aXMgNS4wNCUgZm9yIFZSUAphbmQgMy4wMiUgZm9yIHRocmVhZGluZywgd2l0aCBubyBub3RpY2Vh YmxlIGNoYW5nZSBpbiBvdmVyYWxsCmNvbXBpbGF0aW9uICgwLjI3JSkuICBUaGlzIGlzIG1vcmUg dGhhbiBjb3ZlcmVkIGJ5IG91ciAxMy4yNiUKaW1wcm92ZW1lbnRzIGZvciB0aGUgbGVnYWN5IHJl bW92YWwgKyB3aWRlX2ludCBjb252ZXJzaW9uLgoKSSB0aGluayB0aGlzIGFwcHJvYWNoIGlzIGEg Z29vZCBhbHRlcm5hdGl2ZSwgd2hpbGUgcHJvdmlkaW5nIHVzIHdpdGgKZmxleGliaWxpdHkgZ29p bmcgZm9yd2FyZC4gIEZvciBleGFtcGxlLCB3ZSBjb3VsZCB0cnkgZGVmYXVsdGluZyB0byBhCjgg c3ViLXJhbmdlcyBmb3IgYSBub3RpY2VhYmxlIGltcHJvdmVtZW50IGluIFZSUC4gIFdlIGNvdWxk IGFsc28gdXNlCmxhcmdlIHN1Yi1yYW5nZXMgZm9yIHN3aXRjaCBhbmFseXNpcyB0byBhdm9pZCBy ZXNpemluZy4KCkFub3RoZXIgYXBwcm9hY2ggSSB0cmllZCB3YXMgYWx3YXlzIHJlc2l6aW5nLiAg V2l0aCB0aGlzLCB3ZSBjb3VsZApkcm9wIHRoZSB3aG9sZSBpbnRfcmFuZ2U8Tj4gbm9uc2Vuc2Us IGFuZCBoYXZlIGlyYW5nZSBqdXN0IGhvbGQgYQpyZXNpemFibGUgcmFuZ2UuICBUaGlzIHNpbXBs aWZpZWQgdGhpbmdzLCBidXQgaW5jdXJyZWQgYSA3JSBwZW5hbHR5IG9uCmlwYV9jcC4gIFRoaXMg d2FzIGhhcmQgdG8gcGlucG9pbnQsIGFuZCBJJ20gbm90IGVudGlyZWx5IGNvbnZpbmNlZAp0aGlz IHdhc24ndCBzb21lIGFydGlmYWN0IG9mIHZhbGdyaW5kLiAgSG93ZXZlciwgdW50aWwgd2UncmUg c3VyZSwKbGV0J3MgYXZvaWQgbWFzc2l2ZSBjaGFuZ2VzLCBlc3BlY2lhbGx5IHNpbmNlIElQQSBj aGFuZ2VzIGFyZSBjb21pbmcKdXAuCgpGb3IgdGhlIGN1cmlvdXMsIGEgcGFydGljdWxhciBob3Qg c3BvdCBmb3IgSVBBIGluIHRoaXMgYXJlYSB3YXM6CgppcGNwX3ZyX2xhdHRpY2U6Om1lZXRfd2l0 aF8xIChjb25zdCB2YWx1ZV9yYW5nZSAqb3RoZXJfdnIpCnsKLi4uCi4uLgogIHZhbHVlX3Jhbmdl IHNhdmUgKG1fdnIpOwogIG1fdnIudW5pb25fICgqb3RoZXJfdnIpOwogIHJldHVybiBtX3ZyICE9 IHNhdmU7Cn0KClRoZSBwcm9ibGVtIGlzbid0IHRoZSByZXNpemluZyAoc2luY2Ugd2UgZG8gdGhh dCBhdCBtb3N0IG9uY2UpIGJ1dCB0aGUKZmFjdCB0aGF0IGZvciBzb21lIGZ1bmN0aW9ucyB3aXRo IGxvdHMgb2YgY2FsbGVycyB3ZSBlbmQgdXAgYSBodWdlCnJhbmdlIHRoYXQgZ2V0cyBjb3BpZWQg YW5kIGNvbXBhcmVkIGZvciBldmVyeSBtZWV0IG9wZXJhdGlvbi4gIE1heWJlCnRoZSBJUEEgYWxn b3JpdGhtIGNvdWxkIGJlIGFkanVzdGVkIHNvbWVob3c/Py4KCkFueXdob29vLi4uIGZvciBub3cg dGhlcmUgaXMgbm90aGluZyB0byB3b3JyeSBhYm91dCwgc2luY2UgdmFsdWVfcmFuZ2UKc3RpbGwg aGFzIDIgc3VicmFuZ2VzIGFuZCBpcyBub3QgcmVzaXphYmxlLiAgQnV0IHdlIHNob3VsZCBwcm9i YWJseQp0aGluayB3aGF0IGlmIGFueXRoaW5nIHdlIHdhbnQgdG8gZG8gaGVyZSwgYXMgSSBlbnZp c2lvbiBJUEEgdXNpbmcKaW5maW5pdGUgcmFuZ2VzIGhlcmUgKHdlbGwsIGludF9yYW5nZV9tYXgp IGFuZCBoYW5kbGluZyBmcmFuZ2UncywgZXRjLgoKZ2NjL0NoYW5nZUxvZzoKCglQUiB0cmVlLW9w dGltaXphdGlvbi8xMDk2OTUKCSogdmFsdWUtcmFuZ2UuY2MgKGlyYW5nZTo6b3BlcmF0b3I9KTog UmVzaXplIHJhbmdlLgoJKGlyYW5nZTo6dW5pb25fKTogU2FtZS4KCShpcmFuZ2U6OmludGVyc2Vj dCk6IFNhbWUuCgkoaXJhbmdlOjppbnZlcnQpOiBTYW1lLgoJKGludF9yYW5nZV9tYXgpOiBEZWZh dWx0IHRvIDMgc3ViLXJhbmdlcyBhbmQgcmVzaXplIGFzIG5lZWRlZC4KCSogdmFsdWUtcmFuZ2Uu aCAoaXJhbmdlOjptYXliZV9yZXNpemUpOiBOZXcuCgkofmludF9yYW5nZSk6IE5ldy4KCShpbnRf cmFuZ2U6OmludF9yYW5nZSk6IEFkanVzdCBmb3IgcmVzaXppbmcuCgkoaW50X3JhbmdlOjpvcGVy YXRvcj0pOiBTYW1lLgotLS0KIGdjYy92YWx1ZS1yYW5nZS1zdG9yYWdlLmggfCAgMiArLQogZ2Nj L3ZhbHVlLXJhbmdlLmNjICAgICAgICB8IDE1ICsrKysrKwogZ2NjL3ZhbHVlLXJhbmdlLmggICAg ICAgICB8IDk2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogMyBmaWxl cyBjaGFuZ2VkLCA4MyBpbnNlcnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9nY2MvdmFsdWUtcmFuZ2Utc3RvcmFnZS5oIGIvZ2NjL3ZhbHVlLXJhbmdlLXN0b3JhZ2UuaApp bmRleCA2ZGEzNzdlYmQyZS4uMWVkNmYxY2NkNjEgMTAwNjQ0Ci0tLSBhL2djYy92YWx1ZS1yYW5n ZS1zdG9yYWdlLmgKKysrIGIvZ2NjL3ZhbHVlLXJhbmdlLXN0b3JhZ2UuaApAQCAtMTg0LDcgKzE4 NCw3IEBAIHZyYW5nZV9hbGxvY2F0b3I6OmFsbG9jX2lyYW5nZSAodW5zaWduZWQgbnVtX3BhaXJz KQogICAvLyBBbGxvY2F0ZSB0aGUgaXJhbmdlIGFuZCByZXF1aXJlZCBtZW1vcnkgZm9yIHRoZSB2 ZWN0b3IuCiAgIHZvaWQgKnIgPSBhbGxvYyAoc2l6ZW9mIChpcmFuZ2UpKTsKICAgdHJlZSAqbWVt ID0gc3RhdGljX2Nhc3QgPHRyZWUgKj4gKGFsbG9jIChuYnl0ZXMpKTsKLSAgcmV0dXJuIG5ldyAo cikgaXJhbmdlIChtZW0sIG51bV9wYWlycyk7CisgIHJldHVybiBuZXcgKHIpIGlyYW5nZSAobWVt LCBudW1fcGFpcnMsIC8qcmVzaXphYmxlPSovZmFsc2UpOwogfQogCiBpbmxpbmUgZnJhbmdlICoK ZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yYW5nZS5jYyBiL2djYy92YWx1ZS1yYW5nZS5jYwppbmRl eCBlYzgyNmMyZmUxYi4uNzUzZjVlOGNjNzYgMTAwNjQ0Ci0tLSBhL2djYy92YWx1ZS1yYW5nZS5j YworKysgYi9nY2MvdmFsdWUtcmFuZ2UuY2MKQEAgLTgzMSw2ICs4MzEsMTAgQEAgaXJhbmdlOjpv cGVyYXRvcj0gKGNvbnN0IGlyYW5nZSAmc3JjKQogICAgICAgY29weV90b19sZWdhY3kgKHNyYyk7 CiAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQorCisgIGludCBuZWVkZWQgPSBzcmMubnVtX3Bh aXJzICgpOworICBtYXliZV9yZXNpemUgKG5lZWRlZCk7CisKICAgaWYgKHNyYy5sZWdhY3lfbW9k ZV9wICgpKQogICAgIHsKICAgICAgIGNvcHlfbGVnYWN5X3RvX211bHRpX3JhbmdlIChzcmMpOwpA QCAtMjUwNiw2ICsyNTEwLDcgQEAgaXJhbmdlOjppcmFuZ2VfdW5pb24gKGNvbnN0IGlyYW5nZSAm cikKICAgLy8gTm93IGl0IHNpbXBseSBuZWVkcyB0byBiZSBjb3BpZWQsIGFuZCBpZiB0aGVyZSBh cmUgdG9vIG1hbnkKICAgLy8gcmFuZ2VzLCBtZXJnZSBzb21lLiAgV2Ugd29udCBkbyBhbnkgYW5h bHlzaXMgYXMgdG8gd2hhdCB0aGUKICAgLy8gImJlc3QiIG1lcmdlcyBhcmUsIHNpbXBseSBjb21i aW5lIHRoZSBmaW5hbCByYW5nZXMgaW50byBvbmUuCisgIG1heWJlX3Jlc2l6ZSAoaSAvIDIpOwog ICBpZiAoaSA+IG1fbWF4X3JhbmdlcyAqIDIpCiAgICAgewogICAgICAgcmVzW21fbWF4X3Jhbmdl cyAqIDIgLSAxXSA9IHJlc1tpIC0gMV07CkBAIC0yNjA1LDYgKzI2MTAsMTEgQEAgaXJhbmdlOjpp cmFuZ2VfaW50ZXJzZWN0IChjb25zdCBpcmFuZ2UgJnIpCiAgIGlmIChyLmlyYW5nZV9jb250YWlu c19wICgqdGhpcykpCiAgICAgcmV0dXJuIGludGVyc2VjdF9ub256ZXJvX2JpdHMgKHIpOwogCisg IC8vID8/IFdlIGNvdWxkIHByb2JhYmx5IGNvbWUgdXAgd2l0aCBzb21ldGhpbmcgc21hcnRlciB0 aGFuIHRoZQorICAvLyB3b3JzdCBjYXNlIHNjZW5hcmlvIGhlcmUuCisgIGludCBuZWVkZWQgPSBu dW1fcGFpcnMgKCkgKyByLm51bV9wYWlycyAoKTsKKyAgbWF5YmVfcmVzaXplIChuZWVkZWQpOwor CiAgIHNpZ25vcCBzaWduID0gVFlQRV9TSUdOIChUUkVFX1RZUEUobV9iYXNlWzBdKSk7CiAgIHVu c2lnbmVkIGJsZF9wYWlyID0gMDsKICAgdW5zaWduZWQgYmxkX2xpbSA9IG1fbWF4X3JhbmdlczsK QEAgLTI4MzEsNiArMjg0MSwxMSBAQCBpcmFuZ2U6OmludmVydCAoKQogICAgICAgbV9udW1fcmFu Z2VzID0gMTsKICAgICAgIHJldHVybjsKICAgICB9CisKKyAgLy8gQXQgdGhpcyBwb2ludCwgd2Ug bmVlZCBvbmUgZXh0cmEgc3ViLXJhbmdlIHRvIHJlcHJlc2VudCB0aGUKKyAgLy8gaW52ZXJzZS4K KyAgbWF5YmVfcmVzaXplIChtX251bV9yYW5nZXMgKyAxKTsKKwogICAvLyBUaGUgYWxnb3JpdGht IGlzIGFzIGZvbGxvd3MuICBUbyBjYWxjdWxhdGUgSU5WRVJUIChbYSxiXVtjLGRdKSwgd2UKICAg Ly8gZ2VuZXJhdGUgWy1NSU4sIGEtMV1bYisxLCBjLTFdW2QrMSwgTUFYXS4KICAgLy8KZGlmZiAt LWdpdCBhL2djYy92YWx1ZS1yYW5nZS5oIGIvZ2NjL3ZhbHVlLXJhbmdlLmgKaW5kZXggOTY5YjJi Njg0MTguLjk2ZTU5ZWNmYTcyIDEwMDY0NAotLS0gYS9nY2MvdmFsdWUtcmFuZ2UuaAorKysgYi9n Y2MvdmFsdWUtcmFuZ2UuaApAQCAtMTcyLDcgKzE3Miw4IEBAIHB1YmxpYzoKICAgYm9vbCBsZWdh Y3lfdmVyYm9zZV9pbnRlcnNlY3QgKGNvbnN0IGlyYW5nZSAqKTsJLy8gREVQUkVDQVRFRAogCiBw cm90ZWN0ZWQ6Ci0gIGlyYW5nZSAodHJlZSAqLCB1bnNpZ25lZCk7CisgIHZvaWQgbWF5YmVfcmVz aXplIChpbnQgbmVlZGVkKTsKKyAgaXJhbmdlICh0cmVlICosIHVuc2lnbmVkIG5yYW5nZXMsIGJv b2wgcmVzaXphYmxlKTsKICAgLy8gcG90ZW50aWFsIHByb21vdGlvbiB0byBwdWJsaWM/CiAgIHRy ZWUgdHJlZV9sb3dlcl9ib3VuZCAodW5zaWduZWQgPSAwKSBjb25zdDsKICAgdHJlZSB0cmVlX3Vw cGVyX2JvdW5kICh1bnNpZ25lZCkgY29uc3Q7CkBAIC0yMDAsNiArMjAxLDggQEAgcHJvdGVjdGVk OgogICB2b2lkIGNvcHlfdG9fbGVnYWN5IChjb25zdCBpcmFuZ2UgJik7CiAgIHZvaWQgY29weV9s ZWdhY3lfdG9fbXVsdGlfcmFuZ2UgKGNvbnN0IGlyYW5nZSAmKTsKIAorICAvLyBIYXJkIGxpbWl0 IG9uIG1heCByYW5nZXMgYWxsb3dlZC4KKyAgc3RhdGljIGNvbnN0IGludCBIQVJEX01BWF9SQU5H RVMgPSAyNTU7CiBwcml2YXRlOgogICBmcmllbmQgdm9pZCBndF9nZ2NfbXggKGlyYW5nZSAqKTsK ICAgZnJpZW5kIHZvaWQgZ3RfcGNoX254IChpcmFuZ2UgKik7CkBAIC0yMTQsMTUgKzIxNywyMSBA QCBwcml2YXRlOgogCiAgIGJvb2wgaW50ZXJzZWN0IChjb25zdCB3aWRlX2ludCYgbGIsIGNvbnN0 IHdpZGVfaW50JiB1Yik7CiAgIHVuc2lnbmVkIGNoYXIgbV9udW1fcmFuZ2VzOworICBib29sIG1f cmVzaXphYmxlOwogICB1bnNpZ25lZCBjaGFyIG1fbWF4X3JhbmdlczsKICAgdHJlZSBtX25vbnpl cm9fbWFzazsKK3Byb3RlY3RlZDoKICAgdHJlZSAqbV9iYXNlOwogfTsKIAogLy8gSGVyZSB3ZSBk ZXNjcmliZSBhbiBpcmFuZ2Ugd2l0aCBOIHBhaXJzIG9mIHJhbmdlcy4gIFRoZSBzdG9yYWdlIGZv cgogLy8gdGhlIHBhaXJzIGlzIGVtYmVkZGVkIGluIHRoZSBjbGFzcyBhcyBhbiBhcnJheS4KKy8v CisvLyBJZiBSRVNJWkFCTEUgaXMgdHJ1ZSwgdGhlIHN0b3JhZ2Ugd2lsbCBiZSByZXNpemVkIG9u IHRoZSBoZWFwIHdoZW4KKy8vIHRoZSBudW1iZXIgb2YgcmFuZ2VzIG5lZWRlZCBnb2VzIHBhc3Qg TiB1cCB0byBhIG1heCBvZgorLy8gSEFSRF9NQVhfUkFOR0VTLiAgVGhpcyBuZXcgc3RvcmFnZSBp cyBmcmVlZCB1cG9uIGRlc3RydWN0aW9uLgogCi10ZW1wbGF0ZTx1bnNpZ25lZCBOPgordGVtcGxh dGU8dW5zaWduZWQgTiwgYm9vbCBSRVNJWkFCTEUgPSBmYWxzZT4KIGNsYXNzIEdUWSgodXNlcikp IGludF9yYW5nZSA6IHB1YmxpYyBpcmFuZ2UKIHsKIHB1YmxpYzoKQEAgLTIzMyw3ICsyNDIsNyBA QCBwdWJsaWM6CiAgIGludF9yYW5nZSAodHJlZSB0eXBlKTsKICAgaW50X3JhbmdlIChjb25zdCBp bnRfcmFuZ2UgJik7CiAgIGludF9yYW5nZSAoY29uc3QgaXJhbmdlICYpOwotICB2aXJ0dWFsIH5p bnRfcmFuZ2UgKCkgPSBkZWZhdWx0OworICB2aXJ0dWFsIH5pbnRfcmFuZ2UgKCk7CiAgIGludF9y YW5nZSYgb3BlcmF0b3I9IChjb25zdCBpbnRfcmFuZ2UgJik7CiBwcml2YXRlOgogICB0ZW1wbGF0 ZSA8dW5zaWduZWQgWD4gZnJpZW5kIHZvaWQgZ3RfZ2djX214IChpbnRfcmFuZ2U8WD4gKik7CkBA IC00NzIsNiArNDgxLDM4IEBAIGlzX2EgPGZyYW5nZT4gKHZyYW5nZSAmdikKICAgcmV0dXJuIHYu bV9kaXNjcmltaW5hdG9yID09IFZSX0ZSQU5HRTsKIH0KIAorLy8gRm9yIHJlc2l6YWJsZSByYW5n ZXMsIHJlc2l6ZSB0aGUgcmFuZ2UgdXAgdG8gSEFSRF9NQVhfUkFOR0VTIGlmIHRoZQorLy8gTkVF REVEIHBhaXJzIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBjYXBhY2l0eSBvZiB0aGUgcmFu Z2UuCisKK2lubGluZSB2b2lkCitpcmFuZ2U6Om1heWJlX3Jlc2l6ZSAoaW50IG5lZWRlZCkKK3sK KyAgaWYgKCFtX3Jlc2l6YWJsZSB8fCBtX21heF9yYW5nZXMgPT0gSEFSRF9NQVhfUkFOR0VTKQor ICAgIHJldHVybjsKKworICBpZiAobmVlZGVkID4gbV9tYXhfcmFuZ2VzKQorICAgIHsKKyAgICAg IG1fbWF4X3JhbmdlcyA9IEhBUkRfTUFYX1JBTkdFUzsKKyAgICAgIHRyZWUgKm5ld21lbSA9IG5l dyB0cmVlW21fbWF4X3JhbmdlcyAqIDJdOworICAgICAgbWVtY3B5IChuZXdtZW0sIG1fYmFzZSwg c2l6ZW9mICh0cmVlKSAqIG51bV9wYWlycyAoKSAqIDIpOworICAgICAgbV9iYXNlID0gbmV3bWVt OworICAgIH0KK30KKwordGVtcGxhdGU8dW5zaWduZWQgTiwgYm9vbCBSRVNJWkFCTEU+Citpbmxp bmUKK2ludF9yYW5nZTxOLCBSRVNJWkFCTEU+Ojp+aW50X3JhbmdlICgpCit7CisgIGlmIChSRVNJ WkFCTEUgJiYgbV9iYXNlICE9IG1fcmFuZ2VzKQorICAgIGRlbGV0ZSBtX2Jhc2U7Cit9CisKKy8v IFRoaXMgaXMgYW4gImluZmluaXRlIiBwcmVjaXNpb24gaXJhbmdlIGZvciB1c2UgaW4gdGVtcG9y YXJ5CisvLyBjYWxjdWxhdGlvbnMuICBJdCBzdGFydHMgd2l0aCBhIHNlbnNpYmxlIGRlZmF1bHQg Y292ZXJpbmcgOTklIG9mCisvLyB1c2VzLCBhbmQgZ29lcyB1cCB0byBIQVJEX01BWF9SQU5HRVMg d2hlbiBuZWVkZWQuICBBbnkgYWxsb2NhdGVkCisvLyBzdG9yYWdlIGlzIGZyZWVkIHVwb24gZGVz dHJ1Y3Rpb24uCit0eXBlZGVmIGludF9yYW5nZTwzLCAvKlJFU0laQUJMRT0qL3RydWU+IGludF9y YW5nZV9tYXg7CisKIGNsYXNzIHZyYW5nZV92aXNpdG9yCiB7CiBwdWJsaWM6CkBAIC00OTAsMTAg KzUzMSw2IEBAIHB1YmxpYzoKIC8vIFRoZXJlIGFyZSBjb3B5IG9wZXJhdG9ycyB0byBzZWFtbGVz c2x5IGNvcHkgdG8vZnJvIG11bHRpLXJhbmdlcy4KIHR5cGVkZWYgaW50X3JhbmdlPDE+IHZhbHVl X3JhbmdlOwogCi0vLyBUaGlzIGlzIGFuICJpbmZpbml0ZSIgcHJlY2lzaW9uIGlyYW5nZSBmb3Ig dXNlIGluIHRlbXBvcmFyeQotLy8gY2FsY3VsYXRpb25zLgotdHlwZWRlZiBpbnRfcmFuZ2U8MjU1 PiBpbnRfcmFuZ2VfbWF4OwotCiAvLyBUaGlzIGlzIGFuICJpbmZpbml0ZSIgcHJlY2lzaW9uIHJh bmdlIG9iamVjdCBmb3IgdXNlIGluIHRlbXBvcmFyeQogLy8gY2FsY3VsYXRpb25zIGZvciBhbnkg b2YgdGhlIGhhbmRsZWQgdHlwZXMuICBUaGUgb2JqZWN0IGNhbiBiZQogLy8gdHJhbnNwYXJlbnRs eSB1c2VkIGFzIGEgdnJhbmdlLgpAQCAtODcyLDY0ICs5MDksNjUgQEAgZ3RfcGNoX254IChpbnRf cmFuZ2U8Tj4gKngsIGd0X3BvaW50ZXJfb3BlcmF0b3Igb3AsIHZvaWQgKmNvb2tpZSkKIC8vIENv bnN0cnVjdG9ycyBmb3IgaXJhbmdlCiAKIGlubGluZQotaXJhbmdlOjppcmFuZ2UgKHRyZWUgKmJh c2UsIHVuc2lnbmVkIG5yYW5nZXMpCitpcmFuZ2U6OmlyYW5nZSAodHJlZSAqYmFzZSwgdW5zaWdu ZWQgbnJhbmdlcywgYm9vbCByZXNpemFibGUpCiB7CiAgIG1fZGlzY3JpbWluYXRvciA9IFZSX0lS QU5HRTsKICAgbV9iYXNlID0gYmFzZTsKICAgbV9tYXhfcmFuZ2VzID0gbnJhbmdlczsKKyAgbV9y ZXNpemFibGUgPSByZXNpemFibGU7CiAgIHNldF91bmRlZmluZWQgKCk7CiB9CiAKIC8vIENvbnN0 cnVjdG9ycyBmb3IgaW50X3JhbmdlPD4uCiAKLXRlbXBsYXRlPHVuc2lnbmVkIE4+Cit0ZW1wbGF0 ZTx1bnNpZ25lZCBOLCBib29sIFJFU0laQUJMRT4KIGlubGluZQotaW50X3JhbmdlPE4+OjppbnRf cmFuZ2UgKCkKLSAgOiBpcmFuZ2UgKG1fcmFuZ2VzLCBOKQoraW50X3JhbmdlPE4sIFJFU0laQUJM RT46OmludF9yYW5nZSAoKQorICA6IGlyYW5nZSAobV9yYW5nZXMsIE4sIFJFU0laQUJMRSkKIHsK IH0KIAotdGVtcGxhdGU8dW5zaWduZWQgTj4KLWludF9yYW5nZTxOPjo6aW50X3JhbmdlIChjb25z dCBpbnRfcmFuZ2UgJm90aGVyKQotICA6IGlyYW5nZSAobV9yYW5nZXMsIE4pCit0ZW1wbGF0ZTx1 bnNpZ25lZCBOLCBib29sIFJFU0laQUJMRT4KK2ludF9yYW5nZTxOLCBSRVNJWkFCTEU+OjppbnRf cmFuZ2UgKGNvbnN0IGludF9yYW5nZSAmb3RoZXIpCisgIDogaXJhbmdlIChtX3JhbmdlcywgTiwg UkVTSVpBQkxFKQogewogICBpcmFuZ2U6Om9wZXJhdG9yPSAob3RoZXIpOwogfQogCi10ZW1wbGF0 ZTx1bnNpZ25lZCBOPgotaW50X3JhbmdlPE4+OjppbnRfcmFuZ2UgKHRyZWUgbWluLCB0cmVlIG1h eCwgdmFsdWVfcmFuZ2Vfa2luZCBraW5kKQotICA6IGlyYW5nZSAobV9yYW5nZXMsIE4pCit0ZW1w bGF0ZTx1bnNpZ25lZCBOLCBib29sIFJFU0laQUJMRT4KK2ludF9yYW5nZTxOLCBSRVNJWkFCTEU+ OjppbnRfcmFuZ2UgKHRyZWUgbWluLCB0cmVlIG1heCwgdmFsdWVfcmFuZ2Vfa2luZCBraW5kKQor ICA6IGlyYW5nZSAobV9yYW5nZXMsIE4sIFJFU0laQUJMRSkKIHsKICAgaXJhbmdlOjpzZXQgKG1p biwgbWF4LCBraW5kKTsKIH0KIAotdGVtcGxhdGU8dW5zaWduZWQgTj4KLWludF9yYW5nZTxOPjo6 aW50X3JhbmdlICh0cmVlIHR5cGUpCi0gIDogaXJhbmdlIChtX3JhbmdlcywgTikKK3RlbXBsYXRl PHVuc2lnbmVkIE4sIGJvb2wgUkVTSVpBQkxFPgoraW50X3JhbmdlPE4sIFJFU0laQUJMRT46Omlu dF9yYW5nZSAodHJlZSB0eXBlKQorICA6IGlyYW5nZSAobV9yYW5nZXMsIE4sIFJFU0laQUJMRSkK IHsKICAgc2V0X3ZhcnlpbmcgKHR5cGUpOwogfQogCi10ZW1wbGF0ZTx1bnNpZ25lZCBOPgotaW50 X3JhbmdlPE4+OjppbnRfcmFuZ2UgKHRyZWUgdHlwZSwgY29uc3Qgd2lkZV9pbnQgJndtaW4sIGNv bnN0IHdpZGVfaW50ICZ3bWF4LAordGVtcGxhdGU8dW5zaWduZWQgTiwgYm9vbCBSRVNJWkFCTEU+ CitpbnRfcmFuZ2U8TiwgUkVTSVpBQkxFPjo6aW50X3JhbmdlICh0cmVlIHR5cGUsIGNvbnN0IHdp ZGVfaW50ICZ3bWluLCBjb25zdCB3aWRlX2ludCAmd21heCwKIAkJCSB2YWx1ZV9yYW5nZV9raW5k IGtpbmQpCi0gIDogaXJhbmdlIChtX3JhbmdlcywgTikKKyAgOiBpcmFuZ2UgKG1fcmFuZ2VzLCBO LCBSRVNJWkFCTEUpCiB7CiAgIHRyZWUgbWluID0gd2lkZV9pbnRfdG9fdHJlZSAodHlwZSwgd21p bik7CiAgIHRyZWUgbWF4ID0gd2lkZV9pbnRfdG9fdHJlZSAodHlwZSwgd21heCk7CiAgIHNldCAo bWluLCBtYXgsIGtpbmQpOwogfQogCi10ZW1wbGF0ZTx1bnNpZ25lZCBOPgotaW50X3JhbmdlPE4+ OjppbnRfcmFuZ2UgKGNvbnN0IGlyYW5nZSAmb3RoZXIpCi0gIDogaXJhbmdlIChtX3Jhbmdlcywg TikKK3RlbXBsYXRlPHVuc2lnbmVkIE4sIGJvb2wgUkVTSVpBQkxFPgoraW50X3JhbmdlPE4sIFJF U0laQUJMRT46OmludF9yYW5nZSAoY29uc3QgaXJhbmdlICZvdGhlcikKKyAgOiBpcmFuZ2UgKG1f cmFuZ2VzLCBOLCBSRVNJWkFCTEUpCiB7CiAgIGlyYW5nZTo6b3BlcmF0b3I9IChvdGhlcik7CiB9 CiAKLXRlbXBsYXRlPHVuc2lnbmVkIE4+Ci1pbnRfcmFuZ2U8Tj4mCi1pbnRfcmFuZ2U8Tj46Om9w ZXJhdG9yPSAoY29uc3QgaW50X3JhbmdlICZzcmMpCit0ZW1wbGF0ZTx1bnNpZ25lZCBOLCBib29s IFJFU0laQUJMRT4KK2ludF9yYW5nZTxOLCBSRVNJWkFCTEU+JgoraW50X3JhbmdlPE4sIFJFU0la QUJMRT46Om9wZXJhdG9yPSAoY29uc3QgaW50X3JhbmdlICZzcmMpCiB7CiAgIGlyYW5nZTo6b3Bl cmF0b3I9IChzcmMpOwogICByZXR1cm4gKnRoaXM7Ci0tIAoyLjQwLjAKCg== --------------s2danCMFmsv36LzyC9RX9izV--