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 3DACC3858427 for ; Fri, 26 Aug 2022 15:55:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3DACC3858427 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=1661529351; 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=m6o2uC6lpe7yHvIHkSP7LXMQYzNq7OfGGN1N+f5rijI=; b=ErCEGesD71Vb3dS/0GUQ15KCkNOxKmpcL3dnPs4Ga0pyfWs1DowWSFcZO7Cp/EQlBRPX1o jArE26WllvzxEJVlgXNVACJNcqm+qweWbIktvvsPa0KM6Uo9qFHh+xSF3pZ3XVJRgoK+Mt OKRxPbyIw7xvZ9Iq6c+L5jrfGp7tE2c= Received: from mail-ot1-f69.google.com (mail-ot1-f69.google.com [209.85.210.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-294-10jgYeCWOaGqU_NH87XsZw-1; Fri, 26 Aug 2022 11:55:48 -0400 X-MC-Unique: 10jgYeCWOaGqU_NH87XsZw-1 Received: by mail-ot1-f69.google.com with SMTP id y3-20020a056830208300b00638fdcc4bedso901459otq.14 for ; Fri, 26 Aug 2022 08:55:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=m6o2uC6lpe7yHvIHkSP7LXMQYzNq7OfGGN1N+f5rijI=; b=HlYxYz2oMLuYjekyB/TFPi32Egu4NC2+uBFSVrLbVHaJLgImZ1yikuS+5ikp5SQ45H kmpAvv2zQu4FMuxu+wLL8cqnHi62jsRp5ijEAr90PuiM6bnQvyRtZpXBZoUOaec+ZaYY vyC1G1BhLaY/D2dFeL4og+XP+fut8QAlEl6yuZF5lF0pcE5JrifP6hS03GN7EbNyLN77 Lo9E4PNSFwLJPCiBfKmeVd8LK/8CXeUmjvCdmIiz26fwTLSWqDYSk4uZoo22FR88BOqL KGoB7uHMPy8xNJDbmkbPTUP35xsQWaUrzO1whgsAAIj9wjVAlYbLw/hhQzI4QoSKQnZp VHSw== X-Gm-Message-State: ACgBeo3rK4S19sq1uVChXXeMrxcjhRC5SoCOe3YazPeROyrTaDZgDrPL I+zellhVJQwHcrZbpOhoKH1uWaVe72QDZbyTy6N/UtLLzyH5Ayz1xW8OJz3WvC5Jk9lVaxVOh85 kxigZTAKspy+X51a6czWX52X2PFBjrxcAQA== X-Received: by 2002:a05:6870:b617:b0:10d:f7ce:50df with SMTP id cm23-20020a056870b61700b0010df7ce50dfmr2196104oab.36.1661529347895; Fri, 26 Aug 2022 08:55:47 -0700 (PDT) X-Google-Smtp-Source: AA6agR7NvU42P2IS53DpGbmMrexwcNOGIdSTHmpXZmm8IUO/Z48/+cS/5VGKyQPGcvFABfQEytArTKVl3EkuZtr1WVQ= X-Received: by 2002:a05:6870:b617:b0:10d:f7ce:50df with SMTP id cm23-20020a056870b61700b0010df7ce50dfmr2196093oab.36.1661529347697; Fri, 26 Aug 2022 08:55:47 -0700 (PDT) MIME-Version: 1.0 References: <20220823114224.904934-1-aldyh@redhat.com> In-Reply-To: <20220823114224.904934-1-aldyh@redhat.com> From: Aldy Hernandez Date: Fri, 26 Aug 2022 17:55:36 +0200 Message-ID: Subject: Re: [PATCH] Add support for floating point endpoints to frange. To: GCC patches Cc: Andrew MacLeod , Jakub Jelinek , Andrew Pinski X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="0000000000008e1b1805e726f238" X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,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: --0000000000008e1b1805e726f238 Content-Type: text/plain; charset="UTF-8" [pinskia: I'm CCing you as the author of the match.pd pattern.] So, as I wrap up the work here (latest patch attached), I see there's another phiopt regression (not spaceship related). I was hoping someone could either give me a hand, or offer some guidance. The failure is in gcc.dg/tree-ssa/phi-opt-24.c. We fail to transform the following into -A: /* { dg-options "-O2 -fno-signed-zeros -fdump-tree-phiopt" } */ float f0(float A) { // A == 0? A : -A same as -A if (A == 0) return A; return -A; } This is because the abs/negative match.pd pattern here: /* abs/negative simplifications moved from fold_cond_expr_with_comparison, Need to handle (A - B) case as fold_cond_expr_with_comparison does. Need to handle UN* comparisons. ... ... Sees IL that has the 0.0 propagated. Instead of: [local count: 1073741824]: if (A_2(D) == 0.0) goto ; [34.00%] else goto ; [66.00%] [local count: 708669601]: _3 = -A_2(D); [local count: 1073741824]: # _1 = PHI It now sees: [local count: 1073741824]: # _1 = PHI <0.0(2), _3(3)> which it leaves untouched, causing the if conditional to survive. Is this something that can be done by improving the match.pd pattern, or should be done elsewhere? Thanks. Aldy --0000000000008e1b1805e726f238 Content-Type: text/x-patch; charset="US-ASCII"; name="0006-Add-support-for-floating-point-endpoints-to-frange.patch" Content-Disposition: attachment; filename="0006-Add-support-for-floating-point-endpoints-to-frange.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7anhh9e0 RnJvbSBhMWY2NDAxN2RlZmFmNmQ1ODQxYjU0ZThiYzg2N2Q2MzczOGE5ZjVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogVHVlLCAyMyBBdWcgMjAyMiAxMzozNjozMyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBz dXBwb3J0IGZvciBmbG9hdGluZyBwb2ludCBlbmRwb2ludHMgdG8gZnJhbmdlLgoKVGhlIGN1cnJl bnQgaW1wbGVtZW50YXRpb24gb2YgZnJhbmdlIGlzIGp1c3QgYSB0eXBlIHdpdGggc29tZSBiaXRz IHRvCnJlcHJlc2VudCBOQU4gYW5kIElORi4gIFdlIGNhbiBkbyBiZXR0ZXIgYW5kIHJlcHJlc2Vu dCBlbmRwb2ludHMgdG8KdWx0aW1hdGVseSBzb2x2ZSBsb25nc3RhbmRpbmcgUFJzIHN1Y2ggYXMg UFIyNDAyMS4gIFRoaXMgcGF0Y2ggYWRkcwp0aGVzZSBlbmRwb2ludHMuICBJbiBmb2xsb3ctdXAg cGF0Y2hlcyBJIHdpbGwgYWRkIHN1cHBvcnQgZm9yCnJlbGF0aW9uYWwgb3BlcmF0b3JzIHVzaW5n IHRoZW0sIGFzIHdlbGwgYXMgYSBiYXJlIGJvbmVzIFBMVVNfRVhQUgpyYW5nZS1vcC1mbG9hdCBl bnRyeSB0byBzb2x2ZSB0aGUgUFIuCgpJIGhhdmUgY2hvc2VuIHRvIHVzZSBSRUFMX1ZBTFVFX1RZ UEVzIGZvciB0aGUgZW5kcG9pbnRzLCBzaW5jZSB0aGF0J3MKd2hhdCB3ZSB1c2UgdW5kZXJuZWF0 aCB0aGUgdHJlZXMuICBUaGlzIHdpbGwgYmUgc29tZXdoYXQgYW5hbG9nb3VzIHRvCm91ciBldmVu dHVhbCB1c2Ugb2Ygd2lkZS1pbnRzIGluIHRoZSBpcmFuZ2UuICBObyBzZW5zZSBnb2luZyB0aHJv dWdoCmFkZGVkIGxldmVscyBvZiBpbmRpcmVjdGlvbiBpZiB3ZSBjYW4gYXZvaWQgaXQuICBUaGF0 LCBwbHVzIHJlYWwuKgphbHJlYWR5IGhhcyBhIG5pY2UgQVBJIGZvciBkZWFsaW5nIHdpdGggZmxv YXRzLgoKV2l0aCB0aGlzIHBhdGNoLCByYW5nZXMgd2lsbCBiZSBjbG9zZWQgZmxvYXQgcG9pbnQg aW50ZXJ2YWxzLCB3aGljaAptYWtlIHRoZSBpbXBsZW1lbnRhdGlvbiBzaW1wbGVyLCBzaW5jZSB3 ZSBkb24ndCBoYXZlIHRvIGtlZXAgdHJhY2sgb2YKb3Blbi9jbG9zZWQgaW50ZXJ2YWxzLiAgVGhp cyBpcyBjb25zZXJ2YXRpdmUgZW5vdWdoIGZvciB1c2UgaW4gdGhlCnJhbmdlciB3b3JsZCwgYXMg d2UnZCByYXRoZXIgZXJyIG9uIHRoZSBzaWRlIG9mIG1vcmUgZWxlbWVudHMgaW4gYQpyYW5nZSwg dGhhbiBsZXNzLgoKRm9yIGV4YW1wbGUsIGV2ZW4gdGhvdWdoIHdlIGNhbm5vdCBwcmVjaXNlbHkg cmVwcmVzZW50IHRoZSBvcGVuCmludGVydmFsICgzLjAsIDUuMCkgd2l0aCB0aGlzIGFwcHJvYWNo LCBpdCBpcyBwZXJmZWN0YWJseSByZWFzb25hYmxlCnRvIHJlcHJlc2VudCBpdCBhcyBbMy4wLCA1 LjBdIHNpbmNlIHRoZSBjbG9zZWQgaW50ZXJ2YWwgaXMgYSBzdXBlciBzZXQKb2YgdGhlIG9wZW4g b25lLiAgSW4gdGhlIFZSUC9yYW5nZXIgd29ybGQsIGl0IGlzIGFsd2F5cyBiZXR0ZXIgdG8KZXJy IG9uIHRoZSBzaWRlIG9mIG1vcmUgaW5mb3JtYXRpb24gaW4gYSByYW5nZSwgdGhhbiBub3QuICBB ZnRlciBhbGwsCndoZW4gd2UgZG9uJ3Qga25vdyBhbnl0aGluZyBhYm91dCBhIHJhbmdlLCB3ZSBq dXN0IHVzZSBWQVJZSU5HIHdoaWNoCmlzIGEgZmFuY3kgdGVybSBmb3IgYSByYW5nZSBzcGFubmlu ZyB0aGUgZW50aXJlIGRvbWFpbi4KClNpbmNlIFJFQUxfVkFMVUVfVFlQRXMgaGF2ZSBwcm9wZXJs eSBkZWZpbmVkIGluZmluaXR5IGFuZCBOQU4Kc2VtYW50aWNzLCBhbGwgdGhlIG1hdGggY2FuIGJl IG1hZGUgdG8gd29yazoKClstSU5GLCAzLjBdICFOQU4JPT4gTnVtYmVycyA8PSAzLjAgKE5BTiBj YW5ub3QgaGFwcGVuKQpbMy4wLCArSU5GXQkJPT4gTnVtYmVycyA+PSAzLjAgKE5BTiBpcyBwb3Nz aWJsZSkKWy1JTkYsICtJTkZdCQk9PiBWQVJZSU5HIChOQU4gaXMgcG9zc2libGUpClstSU5GLCAr SU5GXSAhTkFOCT0+IEVudGlyZSBkb21haW4uICBOQU4gY2Fubm90IGhhcHBlbi4KCkFsc28sIHNp bmNlIFJFQUxfVkFMVUVfVFlQRXMgY2FuIHJlcHJlc2VudCB0aGUgbWluaW11bSBhbmQgbWF4aW11 bQpyZXByZXNlbnRhYmxlIHZhbHVlcyBvZiBhIFRZUEVfTU9ERSwgd2UgY2FuIGRpc2FtYmlndWF0 ZSBiZXR3ZWVuIHRoZW0KYW5kIG5lZ2F0aXZlIGFuZCBwb3NpdGl2ZSBpbmZpbml0eSAoc2VlIGdl dF9tYXhfZmxvYXQgaW4gcmVhbC5jYykuCgpUaGlzIGFsc28gbWFrZXMgdGhlIG1hdGggYWxsIHdv cmsuICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB3ZSBrbm93Cm5vdGhpbmcgYWJvdXQgeCBhbmQgeSAo VkFSWUlORykuICBPbiB0aGUgVFJVRSBzaWRlIG9mIHggPiB5LCB3ZSBjYW4KZGVkdWNlIHRoYXQ6 CgoJKGEpIHggY2Fubm90IGJlIE5BTgoJKGIpIHkgY2Fubm90IGJlIE5BTgoJKGMpIHkgY2Fubm90 IGJlICtJTkYuCgooYykgbWVhbnMgdGhhdCB3ZSBjYW4gZHJvcCB0aGUgdXBwZXIgYm91bmQgb2Yg InkiIGZyb20gK0lORiB0byB0aGUKbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVlIGZvciBpdHMg dHlwZS4KCkhhdmluZyBlbmRwb2ludHMgd2l0aCBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb24gZm9y IGluZmluaXR5IGFuZCB0aGUKbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVlcywgbWVhbnMgd2Ug Y2FuIGRyb3AgdGhlICstSU5GIHByb3BlcnRpZXMKd2UgY3VycmVudGx5IGhhdmUgaW4gdGhlIGZy YW5nZS4gIEkgd2lsbCBkbyB0aGlzIGFzIGEgZm9sbG93LXVwIHBhdGNoLAphcyB3ZWxsIGFzIGNv bnRyaWJ1dGluZyBtb3JlIGRldGFpbGVkIHJlbGF0aW9uYWwgb3BlcmF0b3JzLgoKZ2NjL0NoYW5n ZUxvZzoKCgkqIHZhbHVlLXJhbmdlLXByZXR0eS1wcmludC5jYyAodnJhbmdlX3ByaW50ZXI6OnZp c2l0KTogQWRhcHQgZm9yCgllbmRwb2ludHMuCgkqIHZhbHVlLXJhbmdlLmNjIChmcmFuZ2U6OnNl dCk6IFNhbWUuCgkoZnJhbmdlOjpub3JtYWxpemVfa2luZCk6IFNhbWUuCgkoZnJhbmdlOjpvcGVy YXRvcj0pOiBTYW1lLgoJKGZyYW5nZTo6dmVyaWZ5X3JhbmdlKTogU2FtZS4KCShmcmFuZ2U6OnVu aW9uXyk6IEFkYXB0IGZvciBlbmRwb2ludHMgYW5kIHNwZWNpYWwgY2FzZSBOQU4KCXJhbmdlcy4K CShmcmFuZ2U6OmludGVyc2VjdCk6IFNhbWUuCgkoZnJhbmdlOjpvcGVyYXRvcj09KTogU3BlY2lh bCBjYXNlIE5BTiByYW5nZXMuCgkoZnJhbmdlOjpjb250YWluc19wKTogTmV3LgoJKGZyYW5nZTo6 c2luZ2xldG9uX3ApOiBOZXcuCgkoZnJhbmdlX2Zsb2F0KTogTmV3LgoJKGZyYW5nZV9uYW4pOiBO ZXcuCgkoZWFybHlfbmFuX3Jlc29sdmUpOiBOZXcuCgkocmVhbF9tYXhfcmVwcmVzZW50YWJsZSk6 IE5ldy4KCShyZWFsX21pbl9yZXByZXNlbnRhYmxlKTogTmV3LgoJKHJhbmdlX3Rlc3RzX2Zsb2F0 cyk6IE5ldy4KCShyYW5nZV90ZXN0cyk6IENhbGwgcmFuZ2VfdGVzdHNfZmxvYXRzLgoJKiB2YWx1 ZS1yYW5nZS5oIChmcmFuZ2U6Omxvd2VyX2JvdW5kKTogTmV3LgoJKGZyYW5nZTo6dXBwZXJfYm91 bmQpOiBOZXcuCgkodnJwX3ZhbF9taW4pOiBVc2UgcmVhbF9pbmYgd2l0aCBhIHNpZ24gYXJndW1l bnQuCgkoZnJhbmdlOjpmcmFuZ2UpOiBOZXcuCgkoZnJhbmdlOjpzZXRfdmFyeWluZyk6IEFkYXB0 IGZvciBlbmRwb2ludHMuCgkoZnJhbmdlOjpzZXRfdW5kZWZpbmVkKTogQWRhcHQgZm9yIGVuZHBv aW50cy4KLS0tCiBnY2MvcmFuZ2Utb3AtZmxvYXQuY2MgICAgICAgICAgIHwgIDE2ICstCiBnY2Mv dmFsdWUtcmFuZ2UtcHJldHR5LXByaW50LmNjIHwgIDEyICstCiBnY2MvdmFsdWUtcmFuZ2Utc3Rv cmFnZS5jYyAgICAgIHwgIDEyICsKIGdjYy92YWx1ZS1yYW5nZS5jYyAgICAgICAgICAgICAgfCA0 NTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIGdjYy92YWx1ZS1yYW5nZS5oICAg ICAgICAgICAgICAgfCAgNTggKysrLQogNSBmaWxlcyBjaGFuZ2VkLCA1MzkgaW5zZXJ0aW9ucygr KSwgMTQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL3JhbmdlLW9wLWZsb2F0LmNjIGIv Z2NjL3JhbmdlLW9wLWZsb2F0LmNjCmluZGV4IGZmOWZlMzEyYWNmLi40NTc4MDY2YTc4YiAxMDA2 NDQKLS0tIGEvZ2NjL3JhbmdlLW9wLWZsb2F0LmNjCisrKyBiL2djYy9yYW5nZS1vcC1mbG9hdC5j YwpAQCAtMTUwLDYgKzE1MCwxOCBAQCByYW5nZV9vcGVyYXRvcl9mbG9hdDo6b3AxX29wMl9yZWxh dGlvbiAoY29uc3QgaXJhbmdlICZsaHMgQVRUUklCVVRFX1VOVVNFRCkgY29ucwogICByZXR1cm4g VlJFTF9WQVJZSU5HOwogfQogCisvLyBTZXQgUiB0byBbTkFOLCBOQU5dLgorCitzdGF0aWMgaW5s aW5lIHZvaWQKK2ZyYW5nZV9zZXRfbmFuIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSkKK3sKKyAgUkVB TF9WQUxVRV9UWVBFIHJ2OworICBib29sIHJlcyA9IHJlYWxfbmFuICgmcnYsICIiLCAxLCBUWVBF X01PREUgKHR5cGUpKTsKKyAgaWYgKGZsYWdfY2hlY2tpbmcpCisgICAgZ2NjX2Fzc2VydCAocmVz KTsKKyAgci5zZXQgKHR5cGUsIHJ2LCBydik7Cit9CisKIC8vIFJldHVybiBUUlVFIGlmIE9QMSBh bmQgT1AyIGFyZSBrbm93biB0byBiZSBmcmVlIG9mIE5BTnMuCiAKIHN0YXRpYyBpbmxpbmUgYm9v bApAQCAtMjc1LDcgKzI4Nyw3IEBAIGZvcGVyYXRvcl9lcXVhbDo6b3AxX3JhbmdlIChmcmFuZ2Ug JnIsIHRyZWUgdHlwZSwKICAgICAgIHIuc2V0X3ZhcnlpbmcgKHR5cGUpOwogICAgICAgLy8gVGhl IEZBTFNFIHNpZGUgb2Ygb3AxID09IG9wMSBpbXBsaWVzIG9wMSBpcyBhIE5BTi4KICAgICAgIGlm IChyZWwgPT0gVlJFTF9FUSkKLQlyLnNldF9uYW4gKGZwX3Byb3A6OllFUyk7CisJZnJhbmdlX3Nl dF9uYW4gKHIsIHR5cGUpOwogICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgpAQCAtNjM2LDcg KzY0OCw3IEBAIGZvcGVyYXRvcl91bm9yZGVyZWQ6Om9wMV9yYW5nZSAoZnJhbmdlICZyLCB0cmVl IHR5cGUsCiAgICAgICAvLyBTaW5jZSBhdCBsZWFzdCBvbmUgb3BlcmFuZCBtdXN0IGJlIE5BTiwg aWYgb25lIG9mIHRoZW0gaXMKICAgICAgIC8vIG5vdCwgdGhlIG90aGVyIG11c3QgYmUuCiAgICAg ICBpZiAob3AyLmdldF9uYW4gKCkubm9fcCAoKSkKLQlyLnNldF9uYW4gKGZwX3Byb3A6OllFUyk7 CisJZnJhbmdlX3NldF9uYW4gKHIsIHR5cGUpOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJS U19GQUxTRToKZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yYW5nZS1wcmV0dHktcHJpbnQuY2MgYi9n Y2MvdmFsdWUtcmFuZ2UtcHJldHR5LXByaW50LmNjCmluZGV4IGNiZjUwZDNkODU0Li4xYTAyNmMy MmY5OSAxMDA2NDQKLS0tIGEvZ2NjL3ZhbHVlLXJhbmdlLXByZXR0eS1wcmludC5jYworKysgYi9n Y2MvdmFsdWUtcmFuZ2UtcHJldHR5LXByaW50LmNjCkBAIC0xMjIsMTkgKzEyMiwyOSBAQCB2cmFu Z2VfcHJpbnRlcjo6cHJpbnRfaXJhbmdlX2JpdG1hc2tzIChjb25zdCBpcmFuZ2UgJnIpIGNvbnN0 CiB2b2lkCiB2cmFuZ2VfcHJpbnRlcjo6dmlzaXQgKGNvbnN0IGZyYW5nZSAmcikgY29uc3QKIHsK KyAgdHJlZSB0eXBlID0gci50eXBlICgpOworCiAgIHBwX3N0cmluZyAocHAsICJbZnJhbmdlXSAi KTsKICAgaWYgKHIudW5kZWZpbmVkX3AgKCkpCiAgICAgewogICAgICAgcHBfc3RyaW5nIChwcCwg IlVOREVGSU5FRCIpOwogICAgICAgcmV0dXJuOwogICAgIH0KLSAgZHVtcF9nZW5lcmljX25vZGUg KHBwLCByLnR5cGUgKCksIDAsIFRERl9OT05FLCBmYWxzZSk7CisgIGR1bXBfZ2VuZXJpY19ub2Rl IChwcCwgdHlwZSwgMCwgVERGX05PTkUsIGZhbHNlKTsKICAgcHBfc3RyaW5nIChwcCwgIiAiKTsK ICAgaWYgKHIudmFyeWluZ19wICgpKQogICAgIHsKICAgICAgIHBwX3N0cmluZyAocHAsICJWQVJZ SU5HIik7CiAgICAgICByZXR1cm47CiAgICAgfQorICBwcF9jaGFyYWN0ZXIgKHBwLCAnWycpOwor ICBkdW1wX2dlbmVyaWNfbm9kZSAocHAsCisJCSAgICAgYnVpbGRfcmVhbCAodHlwZSwgci5sb3dl cl9ib3VuZCAoKSksIDAsIFRERl9OT05FLCBmYWxzZSk7CisgIHBwX3N0cmluZyAocHAsICIsICIp OworICBkdW1wX2dlbmVyaWNfbm9kZSAocHAsCisJCSAgICAgYnVpbGRfcmVhbCAodHlwZSwgci51 cHBlcl9ib3VuZCAoKSksIDAsIFRERl9OT05FLCBmYWxzZSk7CisgIHBwX3N0cmluZyAocHAsICJd ICIpOworCiAgIHByaW50X2ZyYW5nZV9wcm9wICgiTkFOIiwgci5nZXRfbmFuICgpKTsKICAgcHJp bnRfZnJhbmdlX3Byb3AgKCJJTkYiLCByLmdldF9pbmYgKCkpOwogICBwcmludF9mcmFuZ2VfcHJv cCAoIk5JTkYiLCByLmdldF9uaW5mICgpKTsKZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yYW5nZS1z dG9yYWdlLmNjIGIvZ2NjL3ZhbHVlLXJhbmdlLXN0b3JhZ2UuY2MKaW5kZXggZWEzYjgzY2E2NDEu LmFkZjIzYzM5ZjBkIDEwMDY0NAotLS0gYS9nY2MvdmFsdWUtcmFuZ2Utc3RvcmFnZS5jYworKysg Yi9nY2MvdmFsdWUtcmFuZ2Utc3RvcmFnZS5jYwpAQCAtMjYxLDYgKzI2MSwxOCBAQCBmcmFuZ2Vf c3RvcmFnZV9zbG90OjpnZXRfZnJhbmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSkgY29uc3QKIHsK ICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoci5zdXBwb3J0c190eXBlX3AgKHR5cGUpKTsKIAorICAv LyBGSVhNRTogTkFOcyBnZXQgc3BlY2lhbCB0cmVhdG1lbnQsIGJlY2F1c2Ugd2UgbmVlZCBbTkFO LCBOQU5dIGluCisgIC8vIHRoZSByYW5nZSB0byBwcm9wZXJseSByZXByZXNlbnQgaXQsIG5vdCBq dXN0IHRoZSBOQU4gZmxhZyBpbiB0aGUKKyAgLy8gcHJvcGVydHkgYml0cy4gIFRoaXMgd2lsbCBn byBhd2F5IHdoZW4gd2Ugc3RyZWFtIG91dCB0aGUKKyAgLy8gZW5kcG9pbnRzLgorICBpZiAobV9w cm9wcy5nZXRfbmFuICgpLnllc19wICgpKQorICAgIHsKKyAgICAgIFJFQUxfVkFMVUVfVFlQRSBy djsKKyAgICAgIHJlYWxfbmFuICgmcnYsICIiLCAxLCBUWVBFX01PREUgKHR5cGUpKTsKKyAgICAg IHIuc2V0ICh0eXBlLCBydiwgcnYpOworICAgICAgcmV0dXJuOworICAgIH0KKwogICByLnNldF92 YXJ5aW5nICh0eXBlKTsKICAgci5tX3Byb3BzID0gbV9wcm9wczsKICAgci5ub3JtYWxpemVfa2lu ZCAoKTsKZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yYW5nZS5jYyBiL2djYy92YWx1ZS1yYW5nZS5j YwppbmRleCBlZGQxMGJmNTc5NC4uMmMxYWVkZWNlMzcgMTAwNjQ0Ci0tLSBhL2djYy92YWx1ZS1y YW5nZS5jYworKysgYi9nY2MvdmFsdWUtcmFuZ2UuY2MKQEAgLTI5MSw2ICsyOTEsOCBAQCBmcmFu Z2U6OnNldCAodHJlZSBtaW4sIHRyZWUgbWF4LCB2YWx1ZV9yYW5nZV9raW5kIGtpbmQpCiAgIG1f a2luZCA9IGtpbmQ7CiAgIG1fdHlwZSA9IFRSRUVfVFlQRSAobWluKTsKICAgbV9wcm9wcy5zZXRf dmFyeWluZyAoKTsKKyAgbV9taW4gPSAqVFJFRV9SRUFMX0NTVF9QVFIgKG1pbik7CisgIG1fbWF4 ID0gKlRSRUVfUkVBTF9DU1RfUFRSIChtYXgpOwogCiAgIGJvb2wgaXNfbWluID0gdnJwX3ZhbF9p c19taW4gKG1pbik7CiAgIGJvb2wgaXNfbWF4ID0gdnJwX3ZhbF9pc19tYXggKG1heCk7CkBAIC0z MzYsNiArMzM4LDE2IEBAIGZyYW5nZTo6c2V0ICh0cmVlIG1pbiwgdHJlZSBtYXgsIHZhbHVlX3Jh bmdlX2tpbmQga2luZCkKICAgICB2ZXJpZnlfcmFuZ2UgKCk7CiB9CiAKKy8vIFNldHRlciBmb3Ig ZnJhbmdlIGZyb20gUkVBTF9WQUxVRV9UWVBFIGVuZHBvaW50cy4KKwordm9pZAorZnJhbmdlOjpz ZXQgKHRyZWUgdHlwZSwKKwkgICAgIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAmbWluLCBjb25zdCBS RUFMX1ZBTFVFX1RZUEUgJm1heCwKKwkgICAgIHZhbHVlX3JhbmdlX2tpbmQga2luZCkKK3sKKyAg c2V0IChidWlsZF9yZWFsICh0eXBlLCBtaW4pLCBidWlsZF9yZWFsICh0eXBlLCBtYXgpLCBraW5k KTsKK30KKwogLy8gTm9ybWFsaXplIHJhbmdlIHRvIFZBUllJTkcgb3IgVU5ERUZJTkVELCBvciB2 aWNlIHZlcnNhLiAgUmV0dXJuCiAvLyBUUlVFIGlmIGFueXRoaW5nIGNoYW5nZWQuCiAvLwpAQCAt MzQ3LDcgKzM1OSw5IEBAIGZyYW5nZTo6c2V0ICh0cmVlIG1pbiwgdHJlZSBtYXgsIHZhbHVlX3Jh bmdlX2tpbmQga2luZCkKIGJvb2wKIGZyYW5nZTo6bm9ybWFsaXplX2tpbmQgKCkKIHsKLSAgaWYg KG1fa2luZCA9PSBWUl9SQU5HRSkKKyAgaWYgKG1fa2luZCA9PSBWUl9SQU5HRQorICAgICAgJiYg cmVhbF9pc2luZiAoJm1fbWluLCAxKQorICAgICAgJiYgcmVhbF9pc2luZiAoJm1fbWF4LCAwKSkK ICAgICB7CiAgICAgICAvLyBObyBGUCBwcm9wZXJ0aWVzIHNldCBtZWFucyB2YXJ5aW5nLgogICAg ICAgaWYgKG1fcHJvcHMudmFyeWluZ19wICgpKQpAQCAtMzcwLDEyICszODQsMzIgQEAgZnJhbmdl Ojpub3JtYWxpemVfa2luZCAoKQogICAgICAgaWYgKCFtX3Byb3BzLnZhcnlpbmdfcCAoKSkKIAl7 CiAJICBtX2tpbmQgPSBWUl9SQU5HRTsKKwkgIHJlYWxfaW5mICgmbV9taW4sIDEpOworCSAgcmVh bF9pbmYgKCZtX21heCwgMCk7CiAJICByZXR1cm4gdHJ1ZTsKIAl9CiAgICAgfQogICByZXR1cm4g ZmFsc2U7CiB9CiAKKy8vIElmIGJvdGggb3BlcmFuZHMgYXJlIGRlZmluaXRlbHkgTkFOLCBkbyBu b3RoaW5nIGFzIHRoZXkgY29tYmluZQorLy8gcGVyZmVjdGx5LiAgSWYgT1RPSCwgb25seSBvbmUg aXMgYSBOQU4sIHNldCBSIHRvIFZBUllJTkcgYXMgdGhleQorLy8gY2FuJ3QgYmUgbmVpdGhlciB1 bmlvbmVkIG5vciBpbnRlcnNlY3RlZC4gIFJldHVybiBUUlVFIGlmIHdlCisvLyBjaGFuZ2VkIGFu eXRoaW5nLgorCitzdGF0aWMgaW5saW5lIGJvb2wKK2Vhcmx5X25hbl9yZXNvbHZlIChmcmFuZ2Ug JnIsIGNvbnN0IGZyYW5nZSAmb3RoZXIpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKHIuZ2V0 X25hbiAoKS55ZXNfcCAoKSB8fCBvdGhlci5nZXRfbmFuICgpLnllc19wICgpKTsKKworICAvLyBU aGVyZSdzIG5vdGhpbmcgdG8gZG8gZm9yIGJvdGggTkFOcy4KKyAgaWYgKHIuZ2V0X25hbiAoKS55 ZXNfcCAoKSA9PSBvdGhlci5nZXRfbmFuICgpLnllc19wICgpKQorICAgIHJldHVybiBmYWxzZTsK KyAgLy8gQnV0IG9ubHkgb25lIE5BTiBjb21wbGljYXRlcyB0aGluZ3MuCisgIHIuc2V0X3Zhcnlp bmcgKHIudHlwZSAoKSk7CisgIHJldHVybiB0cnVlOworfQorCiBib29sCiBmcmFuZ2U6OnVuaW9u XyAoY29uc3QgdnJhbmdlICZ2KQogewpAQCAtMzg4LDEzICs0MjIsMzggQEAgZnJhbmdlOjp1bmlv bl8gKGNvbnN0IHZyYW5nZSAmdikKICAgICAgICp0aGlzID0gcjsKICAgICAgIHJldHVybiB0cnVl OwogICAgIH0KKyAgLy8gPz8gV2UgY291bGQgZG8gYmV0dGVyIGhlcmUuICBbNSw2XSBVIE5BTiBz aG91bGQgYmUgWzUsNl0gd2l0aCB0aGUKKyAgLy8gTkFOIG1heWJlIGJpdHMgc2V0LiAgRm9yIG5v dywgdGhpcyBpcyBjb25zZXJ2YXRpdmVseSBjb3JyZWN0LgorICBpZiAoZ2V0X25hbiAoKS55ZXNf cCAoKSB8fCByLmdldF9uYW4gKCkueWVzX3AgKCkpCisgICAgcmV0dXJuIGVhcmx5X25hbl9yZXNv bHZlICgqdGhpcywgcik7CisKKyAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wcy51bmlvbl8gKHIubV9w cm9wcyk7CisKKyAgLy8gVGhlIHVuaW9uIG9mIHplcm9zIGRpZmZlcmluZyBpbiBzaWduIGFyZSBb LTAuMCwgKzAuMF0uCisgIGlmIChIT05PUl9TSUdORURfWkVST1MgKG1fdHlwZSkKKyAgICAgICYm IHplcm9fcCAoKSAmJiByLnplcm9fcCAoKQorICAgICAgJiYgKnRoaXMgIT0gcikKKyAgICB7Cisg ICAgICBtX21pbiA9IHJlYWxfdmFsdWVfbmVnYXRlICgmZGNvbnN0MCk7CisgICAgICBtX21heCA9 IGRjb25zdDA7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKLSAgYm9vbCByZXQgPSBtX3By b3BzLnVuaW9uXyAoci5tX3Byb3BzKTsKLSAgcmV0IHw9IG5vcm1hbGl6ZV9raW5kICgpOworICBp ZiAocmVhbF9sZXNzICgmci5tX21pbiwgJm1fbWluKSkKKyAgICB7CisgICAgICBtX21pbiA9IHIu bV9taW47CisgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisgIGlmIChyZWFsX2xlc3MgKCZt X21heCwgJnIubV9tYXgpKQorICAgIHsKKyAgICAgIG1fbWF4ID0gci5tX21heDsKKyAgICAgIGNo YW5nZWQgPSB0cnVlOworICAgIH0KKyAgY2hhbmdlZCB8PSBub3JtYWxpemVfa2luZCAoKTsKIAog ICBpZiAoZmxhZ19jaGVja2luZykKICAgICB2ZXJpZnlfcmFuZ2UgKCk7Ci0gIHJldHVybiByZXQ7 CisgIHJldHVybiBjaGFuZ2VkOwogfQogCiBib29sCkBAIC00MTQsMTMgKzQ3Myw0MyBAQCBmcmFu Z2U6OmludGVyc2VjdCAoY29uc3QgdnJhbmdlICZ2KQogICAgICAgKnRoaXMgPSByOwogICAgICAg cmV0dXJuIHRydWU7CiAgICAgfQorICBpZiAoZ2V0X25hbiAoKS55ZXNfcCAoKSB8fCByLmdldF9u YW4gKCkueWVzX3AgKCkpCisgICAgcmV0dXJuIGVhcmx5X25hbl9yZXNvbHZlICgqdGhpcywgcik7 CisKKyAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wcy5pbnRlcnNlY3QgKHIubV9wcm9wcyk7CisKKyAg Ly8gPz8gTm8gaWRlYSBob3cgdG8gaGFuZGxlIHRoZSBpbnRlcnNlY3Rpb24gb2YgemVyb3MgdGhh dCBkaWZmZXIgaW4KKyAgLy8gc2lnbi4gIFNldHRpbmcgWy0wLjAsICswLjBdIGlzIGF0IGxlYXN0 IGNvbnNlcnZhdGl2ZSBjb3JyZWN0LgorICBpZiAoSE9OT1JfU0lHTkVEX1pFUk9TIChtX3R5cGUp CisgICAgICAmJiB6ZXJvX3AgKCkgJiYgci56ZXJvX3AgKCkKKyAgICAgICYmICp0aGlzICE9IHIp CisgICAgeworICAgICAgbV9taW4gPSByZWFsX3ZhbHVlX25lZ2F0ZSAoJmRjb25zdDApOworICAg ICAgbV9tYXggPSBkY29uc3QwOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gIGJvb2wg cmV0ID0gbV9wcm9wcy5pbnRlcnNlY3QgKHIubV9wcm9wcyk7Ci0gIHJldCB8PSBub3JtYWxpemVf a2luZCAoKTsKKyAgaWYgKHJlYWxfbGVzcyAoJm1fbWluLCAmci5tX21pbikpCisgICAgeworICAg ICAgbV9taW4gPSByLm1fbWluOworICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgfQorICBpZiAo cmVhbF9sZXNzICgmci5tX21heCwgJm1fbWF4KSkKKyAgICB7CisgICAgICBtX21heCA9IHIubV9t YXg7CisgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisgIC8vIElmIHRoZSBlbmRwb2ludHMg YXJlIHN3YXBwZWQsIHRoZSByYW5nZXMgYXJlIGRpc2pvaW50LgorICBpZiAocmVhbF9sZXNzICgm bV9tYXgsICZtX21pbikpCisgICAgeworICAgICAgc2V0X3VuZGVmaW5lZCAoKTsKKyAgICAgIHJl dHVybiB0cnVlOworICAgIH0KKyAgY2hhbmdlZCB8PSBub3JtYWxpemVfa2luZCAoKTsKIAogICBp ZiAoZmxhZ19jaGVja2luZykKICAgICB2ZXJpZnlfcmFuZ2UgKCk7Ci0gIHJldHVybiByZXQ7Cisg IHJldHVybiBjaGFuZ2VkOwogfQogCiBmcmFuZ2UgJgpAQCAtNDI4LDYgKzUxNyw4IEBAIGZyYW5n ZTo6b3BlcmF0b3I9IChjb25zdCBmcmFuZ2UgJnNyYykKIHsKICAgbV9raW5kID0gc3JjLm1fa2lu ZDsKICAgbV90eXBlID0gc3JjLm1fdHlwZTsKKyAgbV9taW4gPSBzcmMubV9taW47CisgIG1fbWF4 ID0gc3JjLm1fbWF4OwogICBtX3Byb3BzID0gc3JjLm1fcHJvcHM7CiAKICAgaWYgKGZsYWdfY2hl Y2tpbmcpCkBAIC00NDYsNyArNTM3LDQ4IEBAIGZyYW5nZTo6b3BlcmF0b3I9PSAoY29uc3QgZnJh bmdlICZzcmMpIGNvbnN0CiAgICAgICBpZiAodmFyeWluZ19wICgpKQogCXJldHVybiB0eXBlc19j b21wYXRpYmxlX3AgKG1fdHlwZSwgc3JjLm1fdHlwZSk7CiAKLSAgICAgIHJldHVybiBtX3Byb3Bz ID09IHNyYy5tX3Byb3BzOworICAgICAgaWYgKG1fcHJvcHMuZ2V0X25hbiAoKS55ZXNfcCAoKQor CSAgfHwgc3JjLm1fcHJvcHMuZ2V0X25hbiAoKS55ZXNfcCAoKSkKKwlyZXR1cm4gZmFsc2U7CisK KyAgICAgIHJldHVybiAocmVhbF9pZGVudGljYWwgKCZtX21pbiwgJnNyYy5tX21pbikKKwkgICAg ICAmJiByZWFsX2lkZW50aWNhbCAoJm1fbWF4LCAmc3JjLm1fbWF4KQorCSAgICAgICYmIG1fcHJv cHMgPT0gc3JjLm1fcHJvcHMKKwkgICAgICAmJiB0eXBlc19jb21wYXRpYmxlX3AgKG1fdHlwZSwg c3JjLm1fdHlwZSkpOworICAgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCisvLyBSZXR1cm4gVFJV RSBpZiByYW5nZSBjb250YWlucyB0aGUgVFJFRV9SRUFMX0NTVF9QVFIgaW4gQ1NULgorCitib29s CitmcmFuZ2U6OmNvbnRhaW5zX3AgKHRyZWUgY3N0KSBjb25zdAoreworICBpZiAodW5kZWZpbmVk X3AgKCkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmICh2YXJ5aW5nX3AgKCkpCisgICAgcmV0 dXJuIHRydWU7CisKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAobV9raW5kID09IFZSX1JBTkdFKTsK KworICByZXR1cm4gKHJlYWxfY29tcGFyZSAoR0VfRVhQUiwgVFJFRV9SRUFMX0NTVF9QVFIgKGNz dCksICZtX21pbikKKwkgICYmIHJlYWxfY29tcGFyZSAoTEVfRVhQUiwgVFJFRV9SRUFMX0NTVF9Q VFIgKGNzdCksICZtX21heCkpOworfQorCisvLyBJZiByYW5nZSBpcyBhIHNpbmdsZXRvbiwgcGxh Y2UgaXQgaW4gUkVTVUxUIGFuZCByZXR1cm4gVFJVRS4gIElmCisvLyBSRVNVTFQgaXMgTlVMTCwg anVzdCByZXR1cm4gVFJVRS4KKworYm9vbAorZnJhbmdlOjpzaW5nbGV0b25fcCAodHJlZSAqcmVz dWx0KSBjb25zdAoreworICBpZiAobV9raW5kID09IFZSX1JBTkdFCisgICAgICAmJiByZWFsX2lk ZW50aWNhbCAoJm1fbWluLCAmbV9tYXgpCisgICAgICAmJiAhcmVhbF9pc25hbiAoJm1fbWluKSkK KyAgICB7CisgICAgICBpZiAocmVzdWx0KQorCSpyZXN1bHQgPSBidWlsZF9yZWFsIChtX3R5cGUs IG1fbWluKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgcmV0dXJuIGZhbHNlOwogfQpA QCAtNDY1LDEzICs1OTcsODIgQEAgZnJhbmdlOjp2ZXJpZnlfcmFuZ2UgKCkKICAgICAgIGdjY19j aGVja2luZ19hc3NlcnQgKG1fcHJvcHMudW5kZWZpbmVkX3AgKCkpOwogICAgICAgcmV0dXJuOwog ICAgIH0KKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIW1fcHJvcHMudW5kZWZpbmVkX3AgKCkpOwor CiAgIGlmICh2YXJ5aW5nX3AgKCkpCiAgICAgewogICAgICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAo bV9wcm9wcy52YXJ5aW5nX3AgKCkpOwogICAgICAgcmV0dXJuOwogICAgIH0KKworICAvLyBXZSBk b24ndCBzdXBwb3J0IHRoZSBpbnZlcnNlIG9mIGFuIGZyYW5nZSAoeWV0KS4KICAgZ2NjX2NoZWNr aW5nX2Fzc2VydCAobV9raW5kID09IFZSX1JBTkdFKTsKLSAgZ2NjX2NoZWNraW5nX2Fzc2VydCAo IW1fcHJvcHMudmFyeWluZ19wICgpICYmICFtX3Byb3BzLnVuZGVmaW5lZF9wICgpKTsKKworICBi b29sIGlzX25hbiA9IHJlYWxfaXNuYW4gKCZtX21pbikgfHwgcmVhbF9pc25hbiAoJm1fbWF4KTsK KyAgaWYgKGlzX25hbikKKyAgICB7CisgICAgICAvLyBJZiBlaXRoZXIgaXMgYSBOQU4sIGJvdGgg bXVzdCBiZSBhIE5BTi4KKyAgICAgIGdjY19jaGVja2luZ19hc3NlcnQgKHJlYWxfaWRlbnRpY2Fs ICgmbV9taW4sICZtX21heCkpOworICAgICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoZ2V0X25hbiAo KS55ZXNfcCAoKSk7CisgICAgfQorICBlbHNlCisgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGhh dmUgc3dhcHBlZCByYW5nZXMuCisgICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIXJlYWxfbGVzcyAo Jm1fbWF4LCAmbV9taW4pKTsKKworICAvLyBJZiB3ZSdyZSBhYnNvbHV0ZWx5IHN1cmUgd2UgaGF2 ZSBhIE5BTiwgdGhlIGVuZHBvaW50cyBzaG91bGQKKyAgLy8gcmVmbGVjdCB0aGlzLCBvdGhlcndp c2Ugd2UnZCBoYXZlIG1vcmUgdGhhbiBvbmUgd2F5IHRvIHJlcHJlc2VudAorICAvLyBhIE5BTi4K KyAgaWYgKG1fcHJvcHMuZ2V0X25hbiAoKS55ZXNfcCAoKSkKKyAgICB7CisgICAgICBnY2NfY2hl Y2tpbmdfYXNzZXJ0IChyZWFsX2lzbmFuICgmbV9taW4pKTsKKyAgICAgIGdjY19jaGVja2luZ19h c3NlcnQgKHJlYWxfaXNuYW4gKCZtX21heCkpOworICAgIH0KKworICAvLyBJZiBhbGwgdGhlIHBy b3BlcnRpZXMgYXJlIGNsZWFyLCB3ZSBiZXR0ZXIgbm90IHNwYW4gdGhlIGVudGlyZQorICAvLyBk b21haW4sIGJlY2F1c2UgdGhhdCB3b3VsZCBtYWtlIHVzIHZhcnlpbmcuCisgIGlmIChtX3Byb3Bz LnZhcnlpbmdfcCAoKSkKKyAgICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghcmVhbF9pc2luZiAoJm1f bWluLCAxKSB8fCAhcmVhbF9pc2luZiAoJm1fbWF4LCAwKSk7Cit9CisKKy8vIFdlIGNhbid0IGRv IG11Y2ggd2l0aCBub256ZXJvcyB5ZXQuCit2b2lkCitmcmFuZ2U6OnNldF9ub256ZXJvICh0cmVl IHR5cGUpCit7CisgIHNldF92YXJ5aW5nICh0eXBlKTsKK30KKworLy8gV2UgY2FuJ3QgZG8gbXVj aCB3aXRoIG5vbnplcm9zIHlldC4KK2Jvb2wKK2ZyYW5nZTo6bm9uemVyb19wICgpIGNvbnN0Cit7 CisgIHJldHVybiBmYWxzZTsKK30KKworLy8gU2V0IHJhbmdlIHRvIFsrMC4wLCArMC4wXS4KKwor dm9pZAorZnJhbmdlOjpzZXRfemVybyAodHJlZSB0eXBlKQoreworICB0cmVlIHplcm8gPSBidWls ZF96ZXJvX2NzdCAodHlwZSk7CisgIHNldCAoemVybywgemVybyk7Cit9CisKKy8vIE5vdGUgdGhh dCB0aGlzIHJldHVybnMgVFJVRSBmb3IgYW55IGNvbWJpbmF0aW9uIG9mIGEgKy0wLjAgcmFuZ2Uu CisKK2Jvb2wKK2ZyYW5nZTo6emVyb19wICgpIGNvbnN0Cit7CisgIHJldHVybiAobV9raW5kID09 IFZSX1JBTkdFCisJICAmJiByZWFsX2lzemVybyAoJm1fbWluKQorCSAgJiYgcmVhbF9pc3plcm8g KCZtX21heCkpOworfQorCit2b2lkCitmcmFuZ2U6OnNldF9ub25uZWdhdGl2ZSAodHJlZSB0eXBl KQoreworICB0cmVlIHplcm8gPSBidWlsZF96ZXJvX2NzdCAodHlwZSk7CisgIHRyZWUgaW5mID0g dnJwX3ZhbF9tYXggKHR5cGUpOworICBzZXQgKHplcm8sIGluZik7CiB9CiAKIC8vIEhlcmUgd2Ug Y29weSBiZXR3ZWVuIGFueSB0d28gaXJhbmdlJ3MuICBUaGUgcmFuZ2VzIGNhbiBiZSBsZWdhY3kg b3IKQEAgLTMzMDQsNiArMzUwNSwyNDEgQEAgcmFuZ2VfdGVzdHNfbm9uemVyb19iaXRzICgpCiAg IEFTU0VSVF9UUlVFIChyMC52YXJ5aW5nX3AgKCkpOwogfQogCisvLyBCdWlsZCBhbiBmcmFuZ2Ug ZnJvbSBzdHJpbmcgZW5kcG9pbnRzLgorCitzdGF0aWMgaW5saW5lIGZyYW5nZQorZnJhbmdlX2Zs b2F0IChjb25zdCBjaGFyICpsYiwgY29uc3QgY2hhciAqdWIsIHRyZWUgdHlwZSA9IGZsb2F0X3R5 cGVfbm9kZSkKK3sKKyAgUkVBTF9WQUxVRV9UWVBFIG1pbiwgbWF4OworICBnY2NfYXNzZXJ0IChy ZWFsX2Zyb21fc3RyaW5nICgmbWluLCBsYikgPT0gMCk7CisgIGdjY19hc3NlcnQgKHJlYWxfZnJv bV9zdHJpbmcgKCZtYXgsIHViKSA9PSAwKTsKKyAgcmV0dXJuIGZyYW5nZSAodHlwZSwgbWluLCBt YXgpOworfQorCisvLyBCdWlsZCBhIE5BTiBvZiB0eXBlIFRZUEUuCisKK3N0YXRpYyBpbmxpbmUg ZnJhbmdlCitmcmFuZ2VfbmFuICh0cmVlIHR5cGUgPSBmbG9hdF90eXBlX25vZGUpCit7CisgIFJF QUxfVkFMVUVfVFlQRSByOworCisgIGdjY19hc3NlcnQgKHJlYWxfbmFuICgmciwgIiIsIDEsIFRZ UEVfTU9ERSAodHlwZSkpKTsKKyAgcmV0dXJuIGZyYW5nZSAodHlwZSwgciwgcik7Cit9CisKKy8v IFNldCBSIHRvIG1heGltdW0gcmVwcmVzZW50YWJsZSB2YWx1ZSBmb3IgVFlQRS4KKworc3RhdGlj IGlubGluZSB2b2lkCityZWFsX21heF9yZXByZXNlbnRhYmxlIChSRUFMX1ZBTFVFX1RZUEUgKnIs IHRyZWUgdHlwZSkKK3sKKyAgY2hhciBidWZbMTI4XTsKKyAgZ2V0X21heF9mbG9hdCAoUkVBTF9N T0RFX0ZPUk1BVCAoVFlQRV9NT0RFICh0eXBlKSksCisJCSBidWYsIHNpemVvZiAoYnVmKSwgZmFs c2UpOworICByZWFsX2Zyb21fc3RyaW5nIChyLCBidWYpOworfQorCisvLyBTZXQgUiB0byBtaW5p bXVtIHJlcHJlc2VudGFibGUgdmFsdWUgZm9yIFRZUEUuCisKK3N0YXRpYyBpbmxpbmUgdm9pZAor cmVhbF9taW5fcmVwcmVzZW50YWJsZSAoUkVBTF9WQUxVRV9UWVBFICpyLCB0cmVlIHR5cGUpCit7 CisgIHJlYWxfbWF4X3JlcHJlc2VudGFibGUgKHIsIHR5cGUpOworICByZWFsX3ZhbHVlX25lZ2F0 ZSAocik7Cit9CisKK3N0YXRpYyB2b2lkCityYW5nZV90ZXN0c19uYW4gKCkKK3sKKyAgZnJhbmdl IHIwLCByMTsKKworICAvLyBFcXVhbCByYW5nZXMgYnV0IHdpdGggZGlmZmVyaW5nIE5BTiBiaXRz IGFyZSBub3QgZXF1YWwuCisgIHIxID0gZnJhbmdlX2Zsb2F0ICgiMTAiLCAiMTIiKTsKKyAgcjAg PSByMTsKKyAgQVNTRVJUX0VRIChyMCwgcjEpOworICByMC5zZXRfbmFuIChmcF9wcm9wOjpOTyk7 CisgIEFTU0VSVF9ORSAocjAsIHIxKTsKKyAgcjAuc2V0X25hbiAoZnBfcHJvcDo6WUVTKTsKKyAg QVNTRVJUX05FIChyMCwgcjEpOworICByMC5zZXRfbmFuIChmcF9wcm9wOjpWQVJZSU5HKTsKKyAg QVNTRVJUX0VRIChyMCwgcjEpOworCisgIC8vIE5BTiByYW5nZXMgYXJlIG5vdCBlcXVhbCB0byBl YWNoIG90aGVyLgorICByMCA9IGZyYW5nZV9uYW4gKCk7CisgIHIxID0gcjA7CisgIEFTU0VSVF9G QUxTRSAocjAgPT0gcjEpOworICBBU1NFUlRfRkFMU0UgKHIwID09IHIwKTsKKyAgQVNTRVJUX1RS VUUgKHIwICE9IHIwKTsKKworICAvLyBNYWtlIHN1cmUgTkFOIGFuZCBJTkYgaGF2ZSB0aGUgcmln aHQgcHJvcGVydGllcyBzZXQsIGFuZCB0aGF0CisgIC8vIGNvbWJpbmluZyB0aGVtIGRvZXNuJ3Qg Z2l2ZSBhbnkgY3JhenkgcmVzdWx0cy4KKyAgcjAgPSBmcmFuZ2VfbmFuICgpOworICBBU1NFUlRf VFJVRSAocjAuZ2V0X25hbiAoKS55ZXNfcCAoKSk7CisgIHIxID0gZnJhbmdlX2Zsb2F0ICgiK0lu ZiIsICIrSW5mIik7CisgIEFTU0VSVF9UUlVFIChyMS5nZXRfaW5mICgpLnllc19wICgpKTsKKyAg cjAudW5pb25fIChyMSk7CisgIC8vIFtJTkYsIElORl0gVSBOQU4gPSBWQVJZSU5HCisgIEFTU0VS VF9UUlVFIChyMC52YXJ5aW5nX3AgKCkpOworCisgIC8vIFtJTkYsIElORl0gXiBOQU4gPSBWQVJZ SU5HCisgIHIwID0gZnJhbmdlX25hbiAoKTsKKyAgcjEgPSBmcmFuZ2VfZmxvYXQgKCIrSW5mIiwg IitJbmYiKTsKKyAgcjAuaW50ZXJzZWN0IChyMSk7CisgIEFTU0VSVF9UUlVFIChyMC52YXJ5aW5n X3AgKCkpOworCisgIC8vIE5BTiBeIE5BTiA9IE5BTgorICByMCA9IGZyYW5nZV9uYW4gKCk7Cisg IHIxID0gZnJhbmdlX25hbiAoKTsKKyAgcjAuaW50ZXJzZWN0IChyMSk7CisgIEFTU0VSVF9UUlVF IChyMC5nZXRfbmFuICgpLnllc19wICgpKTsKKworICAvLyBWQVJZSU5HIF4gTkFOID0gTkFOLgor ICByMCA9IGZyYW5nZV9uYW4gKCk7CisgIHIxLnNldF92YXJ5aW5nIChmbG9hdF90eXBlX25vZGUp OworICByMC5pbnRlcnNlY3QgKHIxKTsKKyAgQVNTRVJUX1RSVUUgKHIwLmdldF9uYW4gKCkueWVz X3AgKCkpOworfQorCitzdGF0aWMgdm9pZAorcmFuZ2VfdGVzdHNfc2lnbmVkX3plcm9zICgpCit7 CisgIHRyZWUgemVybyA9IGJ1aWxkX3plcm9fY3N0IChmbG9hdF90eXBlX25vZGUpOworICB0cmVl IG5lZ196ZXJvID0gZm9sZF9idWlsZDEgKE5FR0FURV9FWFBSLCBmbG9hdF90eXBlX25vZGUsIHpl cm8pOworICBmcmFuZ2UgcjAsIHIxOworICBSRUFMX1ZBTFVFX1RZUEUgcSwgcjsKKworICAvLyA/ PyBJZiAtMC4wID09ICswLjAsIHRoZW4gYSByYW5nZSBvZiBbLTAuMCwgLTAuMF0gc2hvdWxkCisg IC8vIGNvbnRhaW4gKzAuMCBhbmQgdmljZSB2ZXJzYS4gIFdlIHByb2JhYmx5IG5lZWQgYSBwcm9w ZXJ0eSB0bworICAvLyB0cmFjayBzaWduZWQgemVyb3MgaW4gdGhlIGZyYW5nZSBsaWtlIHdlIGRv IGZvciBOQU4sIHRvCisgIC8vIHByb3Blcmx5IG1vZGVsIGFsbCB0aGlzLgorICByMCA9IGZyYW5n ZSAoemVybywgemVybyk7CisgIHIxID0gZnJhbmdlIChuZWdfemVybywgbmVnX3plcm8pOworICBB U1NFUlRfVFJVRSAocjAuY29udGFpbnNfcCAoemVybykpOworICBBU1NFUlRfVFJVRSAocjAuY29u dGFpbnNfcCAobmVnX3plcm8pKTsKKyAgQVNTRVJUX1RSVUUgKHIxLmNvbnRhaW5zX3AgKHplcm8p KTsKKyAgQVNTRVJUX1RSVUUgKHIxLmNvbnRhaW5zX3AgKG5lZ196ZXJvKSk7CisKKyAgLy8gWzAs MF0gVSBbLTAsLTBdID0gWy0wLDBdCisgIHIwID0gZnJhbmdlICh6ZXJvLCB6ZXJvKTsKKyAgcjEg PSBmcmFuZ2UgKG5lZ196ZXJvLCBuZWdfemVybyk7CisgIHIwLnVuaW9uXyAocjEpOworICBxID0g cjAubG93ZXJfYm91bmQgKCk7CisgIHIgPSByMC51cHBlcl9ib3VuZCAoKTsKKyAgQVNTRVJUX1RS VUUgKHJlYWxfaXN6ZXJvICgmcSwgMSkpOworICBBU1NFUlRfVFJVRSAocmVhbF9pc3plcm8gKCZy LCAwKSk7CisKKyAgLy8gWzAsMF0gVSBbLTAsLTBdID0gWy0wLDBdCisgIC8vCisgIC8vID8/IFVs dGltYXRlbHkgdGhpcyBjb3VsZCBiZSBbMC4wLCAwLjBdIHdpdGggdGhlIHNpZ25lZCB6ZXJvIGJp dAorICAvLyBzZXQgdG8gVkFSWUlORy4KKyAgcjAgPSBmcmFuZ2UgKHplcm8sIHplcm8pOworICBy MSA9IGZyYW5nZSAobmVnX3plcm8sIG5lZ196ZXJvKTsKKyAgcjAuaW50ZXJzZWN0IChyMSk7Cisg IEFTU0VSVF9UUlVFIChyZWFsX2lzemVybyAoJnIwLmxvd2VyX2JvdW5kICgpLCAxKSk7CisgIEFT U0VSVF9UUlVFIChyZWFsX2lzemVybyAoJnIwLnVwcGVyX2JvdW5kICgpLCAwKSk7Cit9CisKK3N0 YXRpYyB2b2lkCityYW5nZV90ZXN0c19mbG9hdHMgKCkKK3sKKyAgZnJhbmdlIHIwLCByMTsKKwor ICByYW5nZV90ZXN0c19uYW4gKCk7CisKKyAgaWYgKEhPTk9SX1NJR05FRF9aRVJPUyAoZmxvYXRf dHlwZV9ub2RlKSkKKyAgICByYW5nZV90ZXN0c19zaWduZWRfemVyb3MgKCk7CisKKyAgLy8gQSBy YW5nZSBvZiBbLUlORiwrSU5GXSBpcyBhY3R1YWxseSBWQVJZSU5HLi4uCisgIHIwID0gZnJhbmdl X2Zsb2F0ICgiLUluZiIsICIrSW5mIik7CisgIEFTU0VSVF9UUlVFIChyMC52YXJ5aW5nX3AgKCkp OworICAvLyAuLi51bmxlc3MgaXQgaGFzIHNvbWUgc3BlY2lhbCBwcm9wZXJ0eS4uLgorICByMC5z ZXRfbmFuIChmcF9wcm9wOjpOTyk7CisgIEFTU0VSVF9GQUxTRSAocjAudmFyeWluZ19wICgpKTsK KworICAvLyBUaGUgZW5kcG9pbnRzIG9mIGEgVkFSWUlORyBhcmUgKy1JTkYuCisgIFJFQUxfVkFM VUVfVFlQRSBpbmYsIG5pbmY7CisgIHJlYWxfaW5mICgmaW5mLCAwKTsKKyAgcmVhbF9pbmYgKCZu aW5mLCAxKTsKKyAgcjAuc2V0X3ZhcnlpbmcgKGZsb2F0X3R5cGVfbm9kZSk7CisgIEFTU0VSVF9U UlVFIChyZWFsX2lkZW50aWNhbCAoJnIwLmxvd2VyX2JvdW5kICgpLCAmbmluZikpOworICBBU1NF UlRfVFJVRSAocmVhbF9pZGVudGljYWwgKCZyMC51cHBlcl9ib3VuZCAoKSwgJmluZikpOworCisg IC8vIFRoZSBtYXhpbXVtIHJlcHJlc2VudGFibGUgcmFuZ2UgZm9yIGEgdHlwZSBpcyBzdGlsbCBh IHN1YnNldCBvZiBWQVJZSU5HLgorICBSRUFMX1ZBTFVFX1RZUEUgcSwgcjsKKyAgcmVhbF9taW5f cmVwcmVzZW50YWJsZSAoJnEsIGZsb2F0X3R5cGVfbm9kZSk7CisgIHJlYWxfbWF4X3JlcHJlc2Vu dGFibGUgKCZyLCBmbG9hdF90eXBlX25vZGUpOworICByMCA9IGZyYW5nZSAoZmxvYXRfdHlwZV9u b2RlLCBxLCByKTsKKyAgLy8gcjAgaXMgbm90IGEgdmFyeWluZywgYmVjYXVzZSBpdCBkb2VzIG5v dCBpbmNsdWRlIC1JTkYvK0lORi4KKyAgQVNTRVJUX0ZBTFNFIChyMC52YXJ5aW5nX3AgKCkpOwor ICAvLyBUaGUgdXBwZXIgYm91bmQgb2YgcjAgbXVzdCBiZSBsZXNzIHRoYW4gK0lORi4KKyAgQVNT RVJUX1RSVUUgKHJlYWxfbGVzcyAoJnIwLnVwcGVyX2JvdW5kICgpLCAmaW5mKSk7CisgIC8vIFRo ZSBsb3dlciBib3VuZCBvZiByMCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAtSU5GLgorICBBU1NFUlRf VFJVRSAocmVhbF9sZXNzICgmbmluZiwgJnIwLmxvd2VyX2JvdW5kICgpKSk7CisKKyAgLy8gRm9y IG1vc3QgYXJjaGl0ZWN0dXJlcywgd2hlcmUgZmxvYXQgYW5kIGRvdWJsZSBhcmUgZGlmZmVyZW50 CisgIC8vIHNpemVzLCBoYXZpbmcgdGhlIHNhbWUgZW5kcG9pbnRzIGRvZXMgbm90IG5lY2Vzc2Fy aWx5IG1lYW4gdGhlCisgIC8vIHJhbmdlcyBhcmUgZXF1YWwuCisgIGlmICghdHlwZXNfY29tcGF0 aWJsZV9wIChmbG9hdF90eXBlX25vZGUsIGRvdWJsZV90eXBlX25vZGUpKQorICAgIHsKKyAgICAg IHIwID0gZnJhbmdlX2Zsb2F0ICgiMy4wIiwgIjMuMCIsIGZsb2F0X3R5cGVfbm9kZSk7CisgICAg ICByMSA9IGZyYW5nZV9mbG9hdCAoIjMuMCIsICIzLjAiLCBkb3VibGVfdHlwZV9ub2RlKTsKKyAg ICAgIEFTU0VSVF9ORSAocjAsIHIxKTsKKyAgICB9CisKKyAgLy8gWzMsNV0gVSBbMTAsMTJdID0g WzMsMTJdLgorICByMCA9IGZyYW5nZV9mbG9hdCAoIjMiLCAiNSIpOworICByMSA9IGZyYW5nZV9m bG9hdCAoIjEwIiwgIjEyIik7CisgIHIwLnVuaW9uXyAocjEpOworICBBU1NFUlRfRVEgKHIwLCBm cmFuZ2VfZmxvYXQgKCIzIiwgIjEyIikpOworCisgIC8vIFs1LDEwXSBVIFs0LDhdID0gWzQsMTBd CisgIHIwID0gZnJhbmdlX2Zsb2F0ICgiNSIsICIxMCIpOworICByMSA9IGZyYW5nZV9mbG9hdCAo IjQiLCAiOCIpOworICByMC51bmlvbl8gKHIxKTsKKyAgQVNTRVJUX0VRIChyMCwgZnJhbmdlX2Zs b2F0ICgiNCIsICIxMCIpKTsKKworICAvLyBbMyw1XSBVIFs0LDEwXSA9IFszLDEwXQorICByMCA9 IGZyYW5nZV9mbG9hdCAoIjMiLCAiNSIpOworICByMSA9IGZyYW5nZV9mbG9hdCAoIjQiLCAiMTAi KTsKKyAgcjAudW5pb25fIChyMSk7CisgIEFTU0VSVF9FUSAocjAsIGZyYW5nZV9mbG9hdCAoIjMi LCAiMTAiKSk7CisKKyAgLy8gWzQsMTBdIFUgWzUsMTFdID0gWzQsMTFdCisgIHIwID0gZnJhbmdl X2Zsb2F0ICgiNCIsICIxMCIpOworICByMSA9IGZyYW5nZV9mbG9hdCAoIjUiLCAiMTEiKTsKKyAg cjAudW5pb25fIChyMSk7CisgIEFTU0VSVF9FUSAocjAsIGZyYW5nZV9mbG9hdCAoIjQiLCAiMTEi KSk7CisKKyAgLy8gWzMsMTJdIF4gWzEwLDEyXSA9IFsxMCwxMl0uCisgIHIwID0gZnJhbmdlX2Zs b2F0ICgiMyIsICIxMiIpOworICByMSA9IGZyYW5nZV9mbG9hdCAoIjEwIiwgIjEyIik7CisgIHIw LmludGVyc2VjdCAocjEpOworICBBU1NFUlRfRVEgKHIwLCBmcmFuZ2VfZmxvYXQgKCIxMCIsICIx MiIpKTsKKworICAvLyBbMTAsMTJdIF4gWzExLDExXSA9IFsxMSwxMV0KKyAgcjAgPSBmcmFuZ2Vf ZmxvYXQgKCIxMCIsICIxMiIpOworICByMSA9IGZyYW5nZV9mbG9hdCAoIjExIiwgIjExIik7Cisg IHIwLmludGVyc2VjdCAocjEpOworICBBU1NFUlRfRVEgKHIwLCBmcmFuZ2VfZmxvYXQgKCIxMSIs ICIxMSIpKTsKKworICAvLyBbMTAsMjBdIF4gWzUsMTVdID0gWzEwLDE1XQorICByMCA9IGZyYW5n ZV9mbG9hdCAoIjEwIiwgIjIwIik7CisgIHIxID0gZnJhbmdlX2Zsb2F0ICgiNSIsICAiMTUiKTsK KyAgcjAuaW50ZXJzZWN0IChyMSk7CisgIEFTU0VSVF9FUSAocjAsIGZyYW5nZV9mbG9hdCAoIjEw IiwgIjE1IikpOworCisgIC8vIFsxMCwyMF0gXiBbMTUsMjVdID0gWzE1LDIwXQorICByMCA9IGZy YW5nZV9mbG9hdCAoIjEwIiwgIjIwIik7CisgIHIxID0gZnJhbmdlX2Zsb2F0ICgiMTUiLCAiMjUi KTsKKyAgcjAuaW50ZXJzZWN0IChyMSk7CisgIEFTU0VSVF9FUSAocjAsIGZyYW5nZV9mbG9hdCAo IjE1IiwgIjIwIikpOworCisgIC8vIFsxMCwyMF0gXiBbMjEsMjVdID0gW10KKyAgcjAgPSBmcmFu Z2VfZmxvYXQgKCIxMCIsICIyMCIpOworICByMSA9IGZyYW5nZV9mbG9hdCAoIjIxIiwgIjI1Iik7 CisgIHIwLmludGVyc2VjdCAocjEpOworICBBU1NFUlRfVFJVRSAocjAudW5kZWZpbmVkX3AgKCkp OworfQorCiB2b2lkCiByYW5nZV90ZXN0cyAoKQogewpAQCAtMzMxMiw2ICszNzQ4LDcgQEAgcmFu Z2VfdGVzdHMgKCkKICAgcmFuZ2VfdGVzdHNfaW50X3JhbmdlX21heCAoKTsKICAgcmFuZ2VfdGVz dHNfc3RyaWN0X2VudW0gKCk7CiAgIHJhbmdlX3Rlc3RzX25vbnplcm9fYml0cyAoKTsKKyAgcmFu Z2VfdGVzdHNfZmxvYXRzICgpOwogICByYW5nZV90ZXN0c19taXNjICgpOwogfQogCmRpZmYgLS1n aXQgYS9nY2MvdmFsdWUtcmFuZ2UuaCBiL2djYy92YWx1ZS1yYW5nZS5oCmluZGV4IGYwMDc1ZDBm YjFhLi4xZTQ1OGUxNDQ2NiAxMDA2NDQKLS0tIGEvZ2NjL3ZhbHVlLXJhbmdlLmgKKysrIGIvZ2Nj L3ZhbHVlLXJhbmdlLmgKQEAgLTM0NSwyMSArMzQ1LDM1IEBAIGNsYXNzIGZyYW5nZSA6IHB1Ymxp YyB2cmFuZ2UKIHB1YmxpYzoKICAgZnJhbmdlICgpOwogICBmcmFuZ2UgKGNvbnN0IGZyYW5nZSAm KTsKKyAgZnJhbmdlICh0cmVlLCB0cmVlLCB2YWx1ZV9yYW5nZV9raW5kID0gVlJfUkFOR0UpOwor ICBmcmFuZ2UgKHRyZWUgdHlwZSwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICZtaW4sIGNvbnN0IFJF QUxfVkFMVUVfVFlQRSAmbWF4LAorCSAgdmFsdWVfcmFuZ2Vfa2luZCA9IFZSX1JBTkdFKTsKICAg c3RhdGljIGJvb2wgc3VwcG9ydHNfcCAoY29uc3RfdHJlZSB0eXBlKQogICB7CiAgICAgcmV0dXJu IFNDQUxBUl9GTE9BVF9UWVBFX1AgKHR5cGUpOwogICB9CiAgIHZpcnR1YWwgdHJlZSB0eXBlICgp IGNvbnN0IG92ZXJyaWRlOwogICB2aXJ0dWFsIHZvaWQgc2V0ICh0cmVlLCB0cmVlLCB2YWx1ZV9y YW5nZV9raW5kID0gVlJfUkFOR0UpIG92ZXJyaWRlOworICB2b2lkIHNldCAodHJlZSB0eXBlLCBj b25zdCBSRUFMX1ZBTFVFX1RZUEUgJiwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICYsCisJICAgIHZh bHVlX3JhbmdlX2tpbmQgPSBWUl9SQU5HRSk7CiAgIHZpcnR1YWwgdm9pZCBzZXRfdmFyeWluZyAo dHJlZSB0eXBlKSBvdmVycmlkZTsKICAgdmlydHVhbCB2b2lkIHNldF91bmRlZmluZWQgKCkgb3Zl cnJpZGU7CiAgIHZpcnR1YWwgYm9vbCB1bmlvbl8gKGNvbnN0IHZyYW5nZSAmKSBvdmVycmlkZTsK ICAgdmlydHVhbCBib29sIGludGVyc2VjdCAoY29uc3QgdnJhbmdlICYpIG92ZXJyaWRlOworICB2 aXJ0dWFsIGJvb2wgY29udGFpbnNfcCAodHJlZSkgY29uc3Qgb3ZlcnJpZGU7CisgIHZpcnR1YWwg Ym9vbCBzaW5nbGV0b25fcCAodHJlZSAqcmVzdWx0ID0gTlVMTCkgY29uc3Qgb3ZlcnJpZGU7CiAg IHZpcnR1YWwgYm9vbCBzdXBwb3J0c190eXBlX3AgKGNvbnN0X3RyZWUgdHlwZSkgY29uc3Qgb3Zl cnJpZGU7CiAgIHZpcnR1YWwgdm9pZCBhY2NlcHQgKGNvbnN0IHZyYW5nZV92aXNpdG9yICZ2KSBj b25zdCBvdmVycmlkZTsKKyAgdmlydHVhbCBib29sIHplcm9fcCAoKSBjb25zdDsKKyAgdmlydHVh bCBib29sIG5vbnplcm9fcCAoKSBjb25zdDsKKyAgdmlydHVhbCB2b2lkIHNldF9ub256ZXJvICh0 cmVlIHR5cGUpOworICB2aXJ0dWFsIHZvaWQgc2V0X3plcm8gKHRyZWUgdHlwZSk7CisgIHZpcnR1 YWwgdm9pZCBzZXRfbm9ubmVnYXRpdmUgKHRyZWUgdHlwZSk7CiAgIGZyYW5nZSYgb3BlcmF0b3I9 IChjb25zdCBmcmFuZ2UgJik7CiAgIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgZnJhbmdlICYpIGNv bnN0OwogICBib29sIG9wZXJhdG9yIT0gKGNvbnN0IGZyYW5nZSAmcikgY29uc3QgeyByZXR1cm4g ISgqdGhpcyA9PSByKTsgfQorICBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgJmxvd2VyX2JvdW5kICgp IGNvbnN0OworICBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgJnVwcGVyX2JvdW5kICgpIGNvbnN0Owog CiAgIC8vIEVhY2ggZnBfcHJvcCBjYW4gYmUgYWNjZXNzZWQgd2l0aCBnZXRfUFJPUCgpIGFuZCBz ZXRfUFJPUCgpLgogICBGUkFOR0VfUFJPUF9BQ0NFU1NPUihuYW4pCkBAIC0zNzEsOCArMzg1LDI0 IEBAIHByaXZhdGU6CiAKICAgZnJhbmdlX3Byb3BzIG1fcHJvcHM7CiAgIHRyZWUgbV90eXBlOwor ICBSRUFMX1ZBTFVFX1RZUEUgbV9taW47CisgIFJFQUxfVkFMVUVfVFlQRSBtX21heDsKIH07CiAK K2lubGluZSBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgJgorZnJhbmdlOjpsb3dlcl9ib3VuZCAoKSBj b25zdAoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghdW5kZWZpbmVkX3AgKCkpOworICByZXR1 cm4gbV9taW47Cit9CisKK2lubGluZSBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgJgorZnJhbmdlOjp1 cHBlcl9ib3VuZCAoKSBjb25zdAoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghdW5kZWZpbmVk X3AgKCkpOworICByZXR1cm4gbV9tYXg7Cit9CisKIC8vIGlzX2E8PiBhbmQgYXNfYTw+IGltcGxl bWVudGF0aW9uIGZvciB2cmFuZ2UuCiAKIC8vIEFueXRoaW5nIHdlIGhhdmVuJ3Qgc3BlY2lhbGl6 ZWQgaXMgYSBoYXJkIGZhaWwuCkBAIC0xMDUxLDggKzEwODEsOCBAQCB2cnBfdmFsX21pbiAoY29u c3RfdHJlZSB0eXBlKQogICBpZiAoZnJhbmdlOjpzdXBwb3J0c19wICh0eXBlKSkKICAgICB7CiAg ICAgICBSRUFMX1ZBTFVFX1RZUEUgcmVhbCwgcmVhbF9uaW5mOwotICAgICAgcmVhbF9pbmYgKCZy ZWFsKTsKLSAgICAgIHJlYWxfbmluZiA9IHJlYWxfdmFsdWVfbmVnYXRlICgmcmVhbCk7CisgICAg ICByZWFsX2luZiAoJnJlYWwsIDApOworICAgICAgcmVhbF9pbmYgKCZyZWFsX25pbmYsIDEpOwog ICAgICAgcmV0dXJuIGJ1aWxkX3JlYWwgKGNvbnN0X2Nhc3QgPHRyZWU+ICh0eXBlKSwgcmVhbF9u aW5mKTsKICAgICB9CiAgIHJldHVybiBOVUxMX1RSRUU7CkBAIC0xMDk2LDYgKzExMjYsMjYgQEAg ZnJhbmdlOjpmcmFuZ2UgKGNvbnN0IGZyYW5nZSAmc3JjKQogICAqdGhpcyA9IHNyYzsKIH0KIAor Ly8gZnJhbmdlIGNvbnN0cnVjdG9yIGZyb20gUkVBTF9WQUxVRV9UWVBFIGVuZHBvaW50cy4KKwor aW5saW5lCitmcmFuZ2U6OmZyYW5nZSAodHJlZSB0eXBlLAorCQljb25zdCBSRUFMX1ZBTFVFX1RZ UEUgJm1pbiwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICZtYXgsCisJCXZhbHVlX3JhbmdlX2tpbmQg a2luZCkKK3sKKyAgbV9kaXNjcmltaW5hdG9yID0gVlJfRlJBTkdFOworICBzZXQgKHR5cGUsIG1p biwgbWF4LCBraW5kKTsKK30KKworLy8gZnJhbmdlIGNvbnN0cnVjdG9yIGZyb20gdHJlZXMuCisK K2lubGluZQorZnJhbmdlOjpmcmFuZ2UgKHRyZWUgbWluLCB0cmVlIG1heCwgdmFsdWVfcmFuZ2Vf a2luZCBraW5kKQoreworICBtX2Rpc2NyaW1pbmF0b3IgPSBWUl9GUkFOR0U7CisgIHNldCAobWlu LCBtYXgsIGtpbmQpOworfQorCiBpbmxpbmUgdHJlZQogZnJhbmdlOjp0eXBlICgpIGNvbnN0CiB7 CkBAIC0xMTA3LDYgKzExNTcsOCBAQCBmcmFuZ2U6OnNldF92YXJ5aW5nICh0cmVlIHR5cGUpCiB7 CiAgIG1fa2luZCA9IFZSX1ZBUllJTkc7CiAgIG1fdHlwZSA9IHR5cGU7CisgIHJlYWxfaW5mICgm bV9taW4sIDEpOworICByZWFsX2luZiAoJm1fbWF4LCAwKTsKICAgbV9wcm9wcy5zZXRfdmFyeWlu ZyAoKTsKIH0KIApAQCAtMTExNiw2ICsxMTY4LDggQEAgZnJhbmdlOjpzZXRfdW5kZWZpbmVkICgp CiAgIG1fa2luZCA9IFZSX1VOREVGSU5FRDsKICAgbV90eXBlID0gTlVMTDsKICAgbV9wcm9wcy5z ZXRfdW5kZWZpbmVkICgpOworICBtZW1zZXQgKCZtX21pbiwgMCwgc2l6ZW9mIChtX21pbikpOwor ICBtZW1zZXQgKCZtX21heCwgMCwgc2l6ZW9mIChtX21heCkpOwogfQogCiAjZW5kaWYgLy8gR0ND X1ZBTFVFX1JBTkdFX0gKLS0gCjIuMzcuMQoK --0000000000008e1b1805e726f238--