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 AD3E43858C78 for ; Mon, 12 Jun 2023 15:33:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AD3E43858C78 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=1686584003; 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; bh=KhDJ6zqZyuJU4pxZpP74nMwvJkFnIKwY3FJ9znhaW0g=; b=LZXflQBM1KtfW8CDPY5MJHNCk3kGneeCe8XZJeKOihFqhVdxyK/NhyeMSqi66wPrGnWxFs hoUO+gTON0mI1ngVpFVbetrKboRqlmuLSfviU6LQ3TxCMAFLDeJOaH/nxPYNnOuK2VJOQT RWifZDYb3fneeZBM5kzDRLcldXGwAGU= Received: from mail-oi1-f200.google.com (mail-oi1-f200.google.com [209.85.167.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-570-Pr6Di9CeP4iI_aBkfoyxYQ-1; Mon, 12 Jun 2023 11:33:21 -0400 X-MC-Unique: Pr6Di9CeP4iI_aBkfoyxYQ-1 Received: by mail-oi1-f200.google.com with SMTP id 5614622812f47-39aa9617c6bso2425147b6e.1 for ; Mon, 12 Jun 2023 08:33:21 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686584000; x=1689176000; h=subject:from:cc:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=0b5GSsjoKmV85Fxg5Q+pSQar09PcscYJupMzWDm0zQU=; b=jnAsiZCV/apVzsOKf6pGozx6chflGvnV2bwqFim8Wk6L8m30oYYe/uP+pTdlMdjknY vSjRRt5Li8a8Bup87xsQWN9kzb0uiPAMQRi6bMen/EVlkXjKuKpRCyv+a4/vU+VvXgBi 4tbfJCYnaGkYg5Btp5eYHZy1AZhcX30mK2dsqK0xH0sN+7AGAHKy/m4rHDVvozLITLDa 9zDsfaDVkmuLei43NzWAR6IUeX0MDKwhYF7Kbxv4+clLxnDfewEpo5juCVaMmVT94WnX CrOn6JdmKV5oSNIQGKgCFNF3yLUtzpHD0AhG9NnAveqXTLwoTURcF722/HHb8/cNh5f5 hFbw== X-Gm-Message-State: AC+VfDwX+n2irdO8FXoAW2JPvLjANTOopNoKYpNkYOUa/Yu6hLCm55XA NWHfPkrTRKUxllucKgIzX4Db6IRk3RPH2lji5rHi4HvffouZ58XUpvO+o/MyDNNMi5D+T5kZUt5 5BrBWbstmt2O+5hkNh9jDfNt3/j+OaF9G0LlD3R9cCIfBQ/J6dJuzw/r2/GswwQxZVpc/IyBcqg Ba+g== X-Received: by 2002:a05:6808:1905:b0:39a:bd0e:449 with SMTP id bf5-20020a056808190500b0039abd0e0449mr5657313oib.26.1686584000292; Mon, 12 Jun 2023 08:33:20 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6lEqnM2Y22RPrKyGxc1spWqKEabrAOE+7qnU/zJhtpdfTbhQeOyi1i3MdGUEkMjmsx76h5bw== X-Received: by 2002:a05:6808:1905:b0:39a:bd0e:449 with SMTP id bf5-20020a056808190500b0039abd0e0449mr5657276oib.26.1686583999831; Mon, 12 Jun 2023 08:33:19 -0700 (PDT) Received: from ?IPV6:2607:fea8:51df:4200::ca58? ([2607:fea8:51df:4200::ca58]) by smtp.gmail.com with ESMTPSA id g16-20020ac84690000000b003f8e6071e43sm3504711qto.3.2023.06.12.08.33.19 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 12 Jun 2023 08:33:19 -0700 (PDT) Message-ID: Date: Mon, 12 Jun 2023 11:33:18 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 To: gcc-patches Cc: "hernandez, aldy" From: Andrew MacLeod Subject: [COMMITTED 15/17] - Provide a default range_operator via range_op_handler. X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------JZElflDFCBEzcd4vACj06pwZ" Content-Language: en-US X-Spam-Status: No, score=-12.2 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,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,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. --------------JZElflDFCBEzcd4vACj06pwZ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit This provides range_op_handler with a default range_operator, so you no longer need to check if it has a valid handler or not. The valid check now turns into a "is this something other than a default operator" check.   IT means you can now simply invoke fold without checking.. ie instead of range_op_handler handler(CONVERT_EXPR); if (handler &&  handler.fold_range (......)) we can simply write if (range_op_handler(CONVERT_EXPR).fold_range (....)) The new method range_op() will return the a pointer to the custom range_operator, or NULL if its the default.   THis allos use of range_op_handler() to behave as if you were indexing a range table/ if that happens to be needed. Bootstraps on x86_64-pc-linux-gnu with no regressions.  Pushed. Andrew --------------JZElflDFCBEzcd4vACj06pwZ Content-Type: text/x-patch; charset=UTF-8; name="0015-Provide-a-default-range_operator-via-range_op_handle.patch" Content-Disposition: attachment; filename*0="0015-Provide-a-default-range_operator-via-range_op_handle.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAzYzQzOTk2NTdkMzVhMGI1YmY3Y2FlYjg4YzZkZGMwNDYxMzIyZDNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgTWFjTGVvZCA8YW1hY2xlb2RAcmVkaGF0LmNvbT4K RGF0ZTogU2F0LCAxMCBKdW4gMjAyMyAxNjo1OTozOCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggMTUv MTddIFByb3ZpZGUgYSBkZWZhdWx0IHJhbmdlX29wZXJhdG9yIHZpYSByYW5nZV9vcF9oYW5kbGVy LgoKcmFuZ2Vfb3BfaGFuZGxlciBub3cgcHJvdmlkZXMgYSBkZWZhdWx0IHJhbmdlX29wZXJhdG9y IGZvciBhbnkgb3Bjb2RlLApzbyB0aGVyZSBpcyBubyBsb25nZXIgYSBuZWVkIHRvIGNoZWNrIGZv ciBhIHZhbGlkIG9wZXJhdG9yLgoKCSogZ2ltcGxlLXJhbmdlLW9wLmNjIChnaW1wbGVfcmFuZ2Vf b3BfaGFuZGxlcik6IFNldCBtX29wZXJhdG9yCgltYW51YWxseSBhcyB0aGVyZSBpcyBubyBhY2Nl c3MgdG8gdGhlIGRlZmF1bHQgb3BlcmF0b3IuCgkoY2ZuX2NvcHlzaWduOjpmb2xkX3JhbmdlKTog RG9uJ3QgY2hlY2sgZm9yIHZhbGlkaXR5LgoJKGNmbl91YnNhbjo6Zm9sZF9yYW5nZSk6IERpdHRv LgoJKGdpbXBsZV9yYW5nZV9vcF9oYW5kbGVyOjptYXliZV9idWlsdGluX2NhbGwpOiBEb24ndCBz ZXQgdG8gTlVMTC4KCSogcmFuZ2Utb3AuY2MgKGRlZmF1bHRfb3BlcmF0b3IpOiBOZXcuCgkocmFu Z2Vfb3BfaGFuZGxlcjo6cmFuZ2Vfb3BfaGFuZGxlcik6IFVzZSBkZWZhdWx0X29wZXJhdG9yCglp bnN0ZWFkIG9mIE5VTEwuCgkocmFuZ2Vfb3BfaGFuZGxlcjo6b3BlcmF0b3IgYm9vbCk6IE1vdmUg ZnJvbSBoZWFkZXIsIGNvbXBhcmUKCWFnYWluc3QgZGVmYXVsdCBvcGVyYXRvci4KCShyYW5nZV9v cF9oYW5kbGVyOjpyYW5nZV9vcCk6IE5ldy4KCSogcmFuZ2Utb3AuaCAocmFuZ2Vfb3BfaGFuZGxl cjo6b3BlcmF0b3IgYm9vbCk6IE1vdmUuCi0tLQogZ2NjL2dpbXBsZS1yYW5nZS1vcC5jYyB8IDI4 ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIGdjYy9yYW5nZS1vcC5jYyAgICAgICAgfCAz MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogZ2NjL3JhbmdlLW9wLmggICAgICAg ICB8ICAzICsrLQogMyBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXJhbmdlLW9wLmNjIGIvZ2NjL2dpbXBsZS1y YW5nZS1vcC5jYwppbmRleCA0Y2JjOTgxZWUwNC4uMDIxYTkxMDhlY2YgMTAwNjQ0Ci0tLSBhL2dj Yy9naW1wbGUtcmFuZ2Utb3AuY2MKKysrIGIvZ2NjL2dpbXBsZS1yYW5nZS1vcC5jYwpAQCAtMTIw LDIxICsxMjAsMjIgQEAgZ2ltcGxlX3JhbmdlX29wX2hhbmRsZXI6OnN1cHBvcnRlZF9wIChnaW1w bGUgKnMpCiAvLyBDb25zdHJ1Y3QgYSBoYW5kbGVyIG9iamVjdCBmb3Igc3RhdGVtZW50IFMuCiAK IGdpbXBsZV9yYW5nZV9vcF9oYW5kbGVyOjpnaW1wbGVfcmFuZ2Vfb3BfaGFuZGxlciAoZ2ltcGxl ICpzKQotICA6IHJhbmdlX29wX2hhbmRsZXIgKGdldF9jb2RlIChzKSkKIHsKKyAgcmFuZ2Vfb3Bf aGFuZGxlciBvcGVyIChnZXRfY29kZSAocykpOwogICBtX3N0bXQgPSBzOwogICBtX29wMSA9IE5V TExfVFJFRTsKICAgbV9vcDIgPSBOVUxMX1RSRUU7CiAKLSAgaWYgKG1fb3BlcmF0b3IpCisgIGlm IChvcGVyKQogICAgIHN3aXRjaCAoZ2ltcGxlX2NvZGUgKG1fc3RtdCkpCiAgICAgICB7CiAJY2Fz ZSBHSU1QTEVfQ09ORDoKIAkgIG1fb3AxID0gZ2ltcGxlX2NvbmRfbGhzIChtX3N0bXQpOwogCSAg bV9vcDIgPSBnaW1wbGVfY29uZF9yaHMgKG1fc3RtdCk7CiAJICAvLyBDaGVjayB0aGF0IG9wZXJh bmRzIGFyZSBzdXBwb3J0ZWQgdHlwZXMuICBPbmUgY2hlY2sgaXMgZW5vdWdoLgotCSAgaWYgKCFW YWx1ZV9SYW5nZTo6c3VwcG9ydHNfdHlwZV9wIChUUkVFX1RZUEUgKG1fb3AxKSkpCi0JICAgIG1f b3BlcmF0b3IgPSBOVUxMOworCSAgaWYgKFZhbHVlX1JhbmdlOjpzdXBwb3J0c190eXBlX3AgKFRS RUVfVFlQRSAobV9vcDEpKSkKKwkgICAgbV9vcGVyYXRvciA9IG9wZXIucmFuZ2Vfb3AgKCk7CisJ ICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChtX29wZXJhdG9yKTsKIAkgIHJldHVybjsKIAljYXNlIEdJ TVBMRV9BU1NJR046CiAJICBtX29wMSA9IGdpbXBsZV9yYW5nZV9iYXNlX29mX2Fzc2lnbm1lbnQg KG1fc3RtdCk7CkBAIC0xNTMsNyArMTU0LDkgQEAgZ2ltcGxlX3JhbmdlX29wX2hhbmRsZXI6Omdp bXBsZV9yYW5nZV9vcF9oYW5kbGVyIChnaW1wbGUgKnMpCiAJICAgIG1fb3AyID0gZ2ltcGxlX2Fz c2lnbl9yaHMyIChtX3N0bXQpOwogCSAgLy8gQ2hlY2sgdGhhdCBvcGVyYW5kcyBhcmUgc3VwcG9y dGVkIHR5cGVzLiAgT25lIGNoZWNrIGlzIGVub3VnaC4KIAkgIGlmICgobV9vcDEgJiYgIVZhbHVl X1JhbmdlOjpzdXBwb3J0c190eXBlX3AgKFRSRUVfVFlQRSAobV9vcDEpKSkpCi0JICAgIG1fb3Bl cmF0b3IgPSBOVUxMOworCSAgICByZXR1cm47CisJICBtX29wZXJhdG9yID0gb3Blci5yYW5nZV9v cCAoKTsKKwkgIGdjY19jaGVja2luZ19hc3NlcnQgKG1fb3BlcmF0b3IpOwogCSAgcmV0dXJuOwog CWRlZmF1bHQ6CiAJICBnY2NfdW5yZWFjaGFibGUgKCk7CkBAIC0xNjUsNiArMTY4LDcgQEAgZ2lt cGxlX3JhbmdlX29wX2hhbmRsZXI6OmdpbXBsZV9yYW5nZV9vcF9oYW5kbGVyIChnaW1wbGUgKnMp CiAgICAgbWF5YmVfYnVpbHRpbl9jYWxsICgpOwogICBlbHNlCiAgICAgbWF5YmVfbm9uX3N0YW5k YXJkICgpOworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChtX29wZXJhdG9yKTsKIH0KIAogLy8gQ2Fs Y3VsYXRlIHdoYXQgd2UgY2FuIGRldGVybWluZSBvZiB0aGUgcmFuZ2Ugb2YgdGhpcyB1bmFyeQpA QCAtMzY0LDExICszNjgsMTAgQEAgcHVibGljOgogCQkJICAgY29uc3QgZnJhbmdlICZyaCwgcmVs YXRpb25fdHJpbykgY29uc3Qgb3ZlcnJpZGUKICAgewogICAgIGZyYW5nZSBuZWc7Ci0gICAgcmFu Z2Vfb3BfaGFuZGxlciBhYnNfb3AgKEFCU19FWFBSKTsKLSAgICByYW5nZV9vcF9oYW5kbGVyIG5l Z19vcCAoTkVHQVRFX0VYUFIpOwotICAgIGlmICghYWJzX29wIHx8ICFhYnNfb3AuZm9sZF9yYW5n ZSAociwgdHlwZSwgbGgsIGZyYW5nZSAodHlwZSkpKQorICAgIGlmICghcmFuZ2Vfb3BfaGFuZGxl ciAoQUJTX0VYUFIpLmZvbGRfcmFuZ2UgKHIsIHR5cGUsIGxoLCBmcmFuZ2UgKHR5cGUpKSkKICAg ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW5lZ19vcCB8fCAhbmVnX29wLmZvbGRfcmFuZ2Ug KG5lZywgdHlwZSwgciwgZnJhbmdlICh0eXBlKSkpCisgICAgaWYgKCFyYW5nZV9vcF9oYW5kbGVy IChORUdBVEVfRVhQUikuZm9sZF9yYW5nZSAobmVnLCB0eXBlLCByLAorCQkJCQkJICAgIGZyYW5n ZSAodHlwZSkpKQogICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCBzaWduYml0OwpAQCAt MTA3MywxNCArMTA3NiwxMSBAQCBwdWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChp cmFuZ2UgJnIsIHRyZWUgdHlwZSwgY29uc3QgaXJhbmdlICZsaCwKIAkJCSAgIGNvbnN0IGlyYW5n ZSAmcmgsIHJlbGF0aW9uX3RyaW8gcmVsKSBjb25zdAogICB7Ci0gICAgcmFuZ2Vfb3BfaGFuZGxl ciBoYW5kbGVyIChtX2NvZGUpOwotICAgIGdjY19jaGVja2luZ19hc3NlcnQgKGhhbmRsZXIpOwot CiAgICAgYm9vbCBzYXZlZF9mbGFnX3dyYXB2ID0gZmxhZ193cmFwdjsKICAgICAvLyBQcmV0ZW5k IHRoZSBhcml0aG1ldGljIGlzIHdyYXBwaW5nLiAgSWYgdGhlcmUgaXMgYW55IG92ZXJmbG93LAog ICAgIC8vIHdlJ2xsIGNvbXBsYWluLCBidXQgd2lsbCBhY3R1YWxseSBkbyB3cmFwcGluZyBvcGVy YXRpb24uCiAgICAgZmxhZ193cmFwdiA9IDE7Ci0gICAgYm9vbCByZXN1bHQgPSBoYW5kbGVyLmZv bGRfcmFuZ2UgKHIsIHR5cGUsIGxoLCByaCwgcmVsKTsKKyAgICBib29sIHJlc3VsdCA9IHJhbmdl X29wX2hhbmRsZXIgKG1fY29kZSkuZm9sZF9yYW5nZSAociwgdHlwZSwgbGgsIHJoLCByZWwpOwog ICAgIGZsYWdfd3JhcHYgPSBzYXZlZF9mbGFnX3dyYXB2OwogCiAgICAgLy8gSWYgZm9yIGJvdGgg YXJndW1lbnRzIHZycF92YWx1ZWl6ZSByZXR1cm5lZCBub24tTlVMTCwgdGhpcyBzaG91bGQKQEAg LTEyMzAsOCArMTIzMCw2IEBAIGdpbXBsZV9yYW5nZV9vcF9oYW5kbGVyOjptYXliZV9idWlsdGlu X2NhbGwgKCkKIAltX29wZXJhdG9yID0gJm9wX2Nmbl9jb25zdGFudF9wOwogICAgICAgZWxzZSBp ZiAoZnJhbmdlOjpzdXBwb3J0c19wIChUUkVFX1RZUEUgKG1fb3AxKSkpCiAJbV9vcGVyYXRvciA9 ICZvcF9jZm5fY29uc3RhbnRfZmxvYXRfcDsKLSAgICAgIGVsc2UKLQltX29wZXJhdG9yID0gTlVM TDsKICAgICAgIGJyZWFrOwogCiAgICAgQ0FTRV9GTFRfRk4gKENGTl9CVUlMVF9JTl9TSUdOQklU KToKZGlmZiAtLWdpdCBhL2djYy9yYW5nZS1vcC5jYyBiL2djYy9yYW5nZS1vcC5jYwppbmRleCAz ODJmNWQ1MGZmYS4uYTI3MWUwMGZhMDcgMTAwNjQ0Ci0tLSBhL2djYy9yYW5nZS1vcC5jYworKysg Yi9nY2MvcmFuZ2Utb3AuY2MKQEAgLTEyMSwxNiArMTIxLDQ0IEBAIHJhbmdlX29wX3RhYmxlOjpy YW5nZV9vcF90YWJsZSAoKQogICAvLyBzZXQgKE1BWF9FWFBSLCBvcF9tYXgpOwogfQogCisvLyBJ bnN0YW50aWF0ZSBhIGRlZmF1bHQgcmFuZ2Ugb3BlcmF0b3IgZm9yIG9wY29kZXMgd2l0aCBubyBl bnRyeS4KKworcmFuZ2Vfb3BlcmF0b3IgZGVmYXVsdF9vcGVyYXRvcjsKKworLy8gQ3JlYXRlIGEg ZGVmYXVsdCByYW5nZV9vcF9oYW5kbGVyLgorCiByYW5nZV9vcF9oYW5kbGVyOjpyYW5nZV9vcF9o YW5kbGVyICgpCiB7Ci0gIG1fb3BlcmF0b3IgPSBOVUxMOworICBtX29wZXJhdG9yID0gJmRlZmF1 bHRfb3BlcmF0b3I7CiB9CiAKLS8vIENvbnN0cnVjdGluZyB3aXRob3V0IGEgdHlwZSBtdXN0IGNv bWUgZnJvbSB0aGUgdW5pZmllZCB0YWJsZS4KKy8vIENyZWF0ZSBhIHJhbmdlX29wX2hhbmRsZXIg Zm9yIENPREUuICBVc2UgYSBkZWZhdWx0IG9wZXJhdG9lciBpZiBDT0RFCisvLyBkb2VzIG5vdCBo YXZlIGFuIGVudHJ5LgogCiByYW5nZV9vcF9oYW5kbGVyOjpyYW5nZV9vcF9oYW5kbGVyICh0cmVl X2NvZGUgY29kZSkKIHsKICAgbV9vcGVyYXRvciA9IG9wZXJhdG9yX3RhYmxlW2NvZGVdOworICBp ZiAoIW1fb3BlcmF0b3IpCisgICAgbV9vcGVyYXRvciA9ICZkZWZhdWx0X29wZXJhdG9yOworfQor CisvLyBSZXR1cm4gVFJVRSBpZiB0aGlzIGhhbmRsZXIgaGFzIGEgbm9uLWRlZmF1bHQgb3BlcmF0 b3IuCisKK3JhbmdlX29wX2hhbmRsZXI6Om9wZXJhdG9yIGJvb2wgKCkgY29uc3QKK3sKKyAgcmV0 dXJuIG1fb3BlcmF0b3IgIT0gJmRlZmF1bHRfb3BlcmF0b3I7Cit9CisKKy8vIFJldHVybiBhIHBv aW50ZXIgdG8gdGhlIHJhbmdlIG9wZXJhdG9yIGFzc29jYWl0ZWQgd2l0aCB0aGlzIGhhbmRsZXIu CisvLyBJZiBpdCBpcyBhIGRlZmF1bHQgb3BlcmF0b3IsIHJldHVybiBOVUxMLgorLy8gVGhpcyBp cyB0aGUgZXF1aXZhbGVudCBvZiBpbmRleGluZyB0aGUgcmFuZ2UgdGFibGUuCisKK3JhbmdlX29w ZXJhdG9yICoKK3JhbmdlX29wX2hhbmRsZXI6OnJhbmdlX29wICgpIGNvbnN0Cit7CisgIGlmICht X29wZXJhdG9yICE9ICZkZWZhdWx0X29wZXJhdG9yKQorICAgIHJldHVybiBtX29wZXJhdG9yOwor ICByZXR1cm4gTlVMTDsKIH0KIAogLy8gQ3JlYXRlIGEgZGlzcGF0Y2ggcGF0dGVybiBmb3IgdmFs dWUgcmFuZ2UgZGlzY3JpbWluYXRvcnMgTEhTLCBPUDEsIGFuZCBPUDIuCmRpZmYgLS1naXQgYS9n Y2MvcmFuZ2Utb3AuaCBiL2djYy9yYW5nZS1vcC5oCmluZGV4IDMyODkxMGQwZWM1Li44MjQzMjU4 ZWVhNSAxMDA2NDQKLS0tIGEvZ2NjL3JhbmdlLW9wLmgKKysrIGIvZ2NjL3JhbmdlLW9wLmgKQEAg LTE4Niw3ICsxODYsOCBAQCBjbGFzcyByYW5nZV9vcF9oYW5kbGVyCiBwdWJsaWM6CiAgIHJhbmdl X29wX2hhbmRsZXIgKCk7CiAgIHJhbmdlX29wX2hhbmRsZXIgKGVudW0gdHJlZV9jb2RlIGNvZGUp OwotICBpbmxpbmUgb3BlcmF0b3IgYm9vbCAoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yICE9 IE5VTEw7IH0KKyAgb3BlcmF0b3IgYm9vbCAoKSBjb25zdDsKKyAgcmFuZ2Vfb3BlcmF0b3IgKnJh bmdlX29wICgpIGNvbnN0OwogCiAgIGJvb2wgZm9sZF9yYW5nZSAodnJhbmdlICZyLCB0cmVlIHR5 cGUsCiAJCSAgIGNvbnN0IHZyYW5nZSAmbGgsCi0tIAoyLjQwLjEKCg== --------------JZElflDFCBEzcd4vACj06pwZ--