From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 39626 invoked by alias); 4 Oct 2016 20:42:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 39611 invoked by uid 89); 4 Oct 2016 20:42:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=1.0 required=5.0 tests=AWL,BAYES_50,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM autolearn=no version=3.3.2 spammy=tuv, TUV, concepts, TUP X-HELO: mail-oi0-f54.google.com Received: from mail-oi0-f54.google.com (HELO mail-oi0-f54.google.com) (209.85.218.54) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 04 Oct 2016 20:42:53 +0000 Received: by mail-oi0-f54.google.com with SMTP id n132so184428258oih.1 for ; Tue, 04 Oct 2016 13:42:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=8+wCaqjj2TChNSrnS2iHvzTTI3p2aMIMJPA4MHDjMPg=; b=ASVJpw2lus+EsdYWDFMexDoYZBYmbrHQZPBJasRylb6mmf4ySAIQIjtx0Yvn8YYDy0 uClGS8ikl1gF1Ij4s/44ULeWztAT0o4jXER1PrcUINZhoNXDGb2v3ULZ5/fRAH9bkxYd d/l8IvlF83lh4X2OKVHTyTu7/mOl9slGipXK0B1k9sbImx9MrV9dWPZSGqeKM4SBTQWU ZWjp6ZVrU9kbFT9OtSZGV6Oc0PrBNV7SpNs9TU64LRqKhnAPKbwCqKUn/JFg7pSCgmhx bN82TPMSZXwbPdksmGeGBqrmyZa0cIhbbEOx+TbjWL1ijShuojywrIb8zP2hwn8hp6Eh a3ng== X-Gm-Message-State: AA6/9RlZl1j/sWuRQXg2mB2zgnhRCANPW2imVXITn3GpL1MLOUEJNEb6HYHi+KarVWI1HupxFllYSEjVrywvd8mu X-Received: by 10.202.192.69 with SMTP id q66mr5036620oif.52.1475613770109; Tue, 04 Oct 2016 13:42:50 -0700 (PDT) MIME-Version: 1.0 Received: by 10.182.105.167 with HTTP; Tue, 4 Oct 2016 13:42:29 -0700 (PDT) From: Jason Merrill Date: Tue, 04 Oct 2016 20:42:00 -0000 Message-ID: Subject: C++ PATCH for C++17 class template placeholders To: gcc-patches List Content-Type: multipart/mixed; boundary=001a113d4536982adc053e101af5 X-IsSubscribed: yes X-SW-Source: 2016-10/txt/msg00190.txt.bz2 --001a113d4536982adc053e101af5 Content-Type: text/plain; charset=UTF-8 Content-length: 291 C++17 adds the ability to omit the template arguments for a class template when declaring a variable with an initializer, much like auto but supporting a wider variety of initialization. This is intended to replace functions like make_tuple. Tested x86_64-pc-linux-gnu, applying to trunk. --001a113d4536982adc053e101af5 Content-Type: text/plain; charset=US-ASCII; name="class-ded.diff" Content-Disposition: attachment; filename="class-ded.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_itvybfvw0 Content-length: 56767 Y29tbWl0IGJlYjM2OGZhOTJhNmViOGI1NTgwOWFiNDQyZjU5ZTJmY2EwNzFj YjcKQXV0aG9yOiBKYXNvbiBNZXJyaWxsIDxqYXNvbkByZWRoYXQuY29tPgpE YXRlOiAgIFR1ZSBPY3QgNCAxNjowMzoxNyAyMDE2IC0wNDAwCgogICAgSW1w bGVtZW50IFAwMDkxUjIsIFRlbXBsYXRlIGFyZ3VtZW50IGRlZHVjdGlvbiBm b3IgY2xhc3MgdGVtcGxhdGVzLgogICAgCiAgICAqIHBhcnNlci5jIChjcF9w YXJzZXJfc2ltcGxlX3R5cGVfc3BlY2lmaWVyKTogUGFyc2UgY2xhc3MgcGxh Y2Vob2xkZXIuCiAgICBVc2UgdGhlIGxvY2F0aW9uIG9mIHRoZSBiZWdpbm5p bmcgb2YgdGhlIHR5cGUtc3BlY2lmaWVyLgogICAgKGNwX3BhcnNlcl9pbml0 X2RlY2xhcmF0b3IpOiBQYXJzZSBkZWR1Y3Rpb24gZ3VpZGUuCiAgICAoY3Bf cGFyc2VyX2RpYWdub3NlX2ludmFsaWRfdHlwZV9uYW1lKTogTWVudGlvbiBj bGFzcyBkZWR1Y3Rpb24uCiAgICAoY3BfcGFyc2VyX3R5cGVfaWRfMSk6IERv bid0IGFjY2VwdCBjbGFzcyBwbGFjZWhvbGRlciBhcyB0ZW1wbGF0ZSBhcmcu CiAgICAqIGNwLXRyZWUuaCAoQ0xBU1NfUExBQ0VIT0xERVJfVEVNUExBVEUp OiBOZXcuCiAgICAqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBDaGVjayBm b3IgdW5pbml0aWFsaXplZCBhdXRvIGhlcmUuCiAgICAoc3RhcnRfZGVjbF8x KTogTm90IGhlcmUuCiAgICAoY3BfZmluaXNoX2RlY2wpOiBPciBoZXJlLiAg RG9uJ3QgY29sbGFwc2UgYSBsaXN0IHdoZW4gZG9pbmcKICAgIGNsYXNzIGRl ZHVjdGlvbi4KICAgIChncm9rZm5kZWNsKTogQ2hlY2sgZGVkdWN0aW9uIGd1 aWRlIHNjb3BlIGFuZCBib2R5LgogICAgKiBlcnJvci5jIChkdW1wX2RlY2ws IGR1bXBfZnVuY3Rpb25fZGVjbCwgZHVtcF9mdW5jdGlvbl9uYW1lKToKICAg IEhhbmRsZSBkZWR1Y3Rpb24gZ3VpZGVzLgogICAgKiBwdC5jIChtYWtlX3Rl bXBsYXRlX3BsYWNlaG9sZGVyLCBkb19jbGFzc19kZWR1Y3Rpb24pOiBOZXcu CiAgICAoYnVpbGRfZGVkdWN0aW9uX2d1aWRlLCByZXdyaXRlX3RlbXBsYXRl X3Bhcm0pOiBOZXcuCiAgICAoZGd1aWRlX25hbWUsIGRndWlkZV9uYW1lX3As IGRlZHVjdGlvbl9ndWlkZV9wKTogTmV3LgogICAgKGRvX2F1dG9fZGVkdWN0 aW9uKTogQ2FsbCBkb19jbGFzc19kZWR1Y3Rpb24uCiAgICAoc3BsaWNlX2xh dGVfcmV0dXJuX3R5cGUsIGlzX2F1dG8pOiBIYW5kbGUgY2xhc3MgcGxhY2Vo b2xkZXJzLgogICAgKHRlbXBsYXRlX3Bhcm1zX2xldmVsX3RvX2FyZ3MpOiBT cGxpdCBmcm9tIHRlbXBsYXRlX3Bhcm1zX3RvX2FyZ3MuCiAgICAodHN1YnN0 X3RlbXBsYXRlX3Bhcm1zX2xldmVsKTogU3BsaXQgZnJvbSB0c3Vic3RfdGVt cGxhdGVfcGFybXMuCiAgICAqIHR5cGVjazIuYyAoYnVpbGRfZnVuY3Rpb25h bF9jYXN0KTogSGFuZGxlIGNsYXNzIHBsYWNlaG9sZGVyLgoKZGlmZiAtLWdp dCBhL2djYy9jcC9jcC10cmVlLmggYi9nY2MvY3AvY3AtdHJlZS5oCmluZGV4 IDg1NzAyYzUuLjNmYmUxZDkgMTAwNjQ0Ci0tLSBhL2djYy9jcC9jcC10cmVl LmgKKysrIGIvZ2NjL2NwL2NwLXRyZWUuaApAQCAtMTE5OSw2ICsxMTk5LDcg QEAgZXh0ZXJuIEdUWSgoKSkgdHJlZSBjcF9nbG9iYWxfdHJlZXNbQ1BUSV9N QVhdOwogI2RlZmluZSB2cHRyX2lkZW50aWZpZXIJCQljcF9nbG9iYWxfdHJl ZXNbQ1BUSV9WUFRSX0lERU5USUZJRVJdCiAvKiBUaGUgbmFtZSBvZiB0aGUg c3RkIG5hbWVzcGFjZS4gICovCiAjZGVmaW5lIHN0ZF9pZGVudGlmaWVyCQkJ Y3BfZ2xvYmFsX3RyZWVzW0NQVElfU1REX0lERU5USUZJRVJdCisvKiBUaGUg bmFtZSBvZiBhIEMrKzE3IGRlZHVjdGlvbiBndWlkZS4gICovCiAjZGVmaW5l IGxhbmdfbmFtZV9jCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfTEFOR19OQU1F X0NdCiAjZGVmaW5lIGxhbmdfbmFtZV9jcGx1c3BsdXMJCWNwX2dsb2JhbF90 cmVlc1tDUFRJX0xBTkdfTkFNRV9DUExVU1BMVVNdCiAKQEAgLTUxMDQsNiAr NTEwNSwxMCBAQCBlbnVtIG92ZXJsb2FkX2ZsYWdzIHsgTk9fU1BFQ0lBTCA9 IDAsIERUT1JfRkxBRywgVFlQRU5BTUVfRkxBRyB9OwogI2RlZmluZSBURU1Q TEFURV9UWVBFX1BBUkFNRVRFUl9QQUNLKE5PREUpIFwKICAgKFRFTVBMQVRF X1BBUk1fUEFSQU1FVEVSX1BBQ0sgKFRFTVBMQVRFX1RZUEVfUEFSTV9JTkRF WCAoTk9ERSkpKQogCisvKiBGb3IgYSBDKysxNyBjbGFzcyBkZWR1Y3Rpb24g cGxhY2Vob2xkZXIsIHRoZSB0ZW1wbGF0ZSBpdCByZXByZXNlbnRzLiAgKi8K KyNkZWZpbmUgQ0xBU1NfUExBQ0VIT0xERVJfVEVNUExBVEUoTk9ERSkgXAor ICAoREVDTF9JTklUSUFMIChUWVBFX05BTUUgKFRFTVBMQVRFX1RZUEVfUEFS TV9DSEVDSyAoTk9ERSkpKSkKKwogLyogQ29udGV4dHMgaW4gd2hpY2ggYXV0 byBkZWR1Y3Rpb24gb2NjdXJzLiBUaGVzZSBmbGFncyBhcmUKICAgIHVzZWQg dG8gY29udHJvbCBkaWFnbm9zdGljcyBpbiBkb19hdXRvX2RlZHVjdGlvbi4g ICovCiAKQEAgLTYwMjcsNiArNjAzMiw3IEBAIGV4dGVybiBpbnQgbnVtX3Rl bXBsYXRlX2hlYWRlcnNfZm9yX2NsYXNzCSh0cmVlKTsKIGV4dGVybiB2b2lk IGNoZWNrX3RlbXBsYXRlX3ZhcmlhYmxlCQkodHJlZSk7CiBleHRlcm4gdHJl ZSBtYWtlX2F1dG8JCQkJKHZvaWQpOwogZXh0ZXJuIHRyZWUgbWFrZV9kZWNs dHlwZV9hdXRvCQkJKHZvaWQpOworZXh0ZXJuIHRyZWUgbWFrZV90ZW1wbGF0 ZV9wbGFjZWhvbGRlcgkJKHRyZWUpOwogZXh0ZXJuIHRyZWUgZG9fYXV0b19k ZWR1Y3Rpb24gICAgICAgICAgICAgICAgICAgKHRyZWUsIHRyZWUsIHRyZWUp OwogZXh0ZXJuIHRyZWUgZG9fYXV0b19kZWR1Y3Rpb24gICAgICAgICAgICAg ICAgICAgKHRyZWUsIHRyZWUsIHRyZWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN1YnN0X2ZsYWdzX3Qs CkBAIC02MTU4LDYgKzYxNjQsOSBAQCBleHRlcm4gdm9pZCByZWdpc3Rlcl9s b2NhbF9zcGVjaWFsaXphdGlvbiAgICAgICAodHJlZSwgdHJlZSk7CiBleHRl cm4gdHJlZSByZXRyaWV2ZV9sb2NhbF9zcGVjaWFsaXphdGlvbiAgICAgICAo dHJlZSk7CiBleHRlcm4gdHJlZSBleHRyYWN0X2ZucGFybV9wYWNrICAgICAg ICAgICAgICAgICAodHJlZSwgdHJlZSAqKTsKIGV4dGVybiB0cmVlIHRlbXBs YXRlX3Bhcm1fdG9fYXJnICAgICAgICAgICAgICAgICh0cmVlKTsKK2V4dGVy biB0cmVlIGRndWlkZV9uYW1lCQkJCSh0cmVlKTsKK2V4dGVybiBib29sIGRn dWlkZV9uYW1lX3AJCQkodHJlZSk7CitleHRlcm4gYm9vbCBkZWR1Y3Rpb25f Z3VpZGVfcAkJCSh0cmVlKTsKIAogLyogaW4gcmVwby5jICovCiBleHRlcm4g dm9pZCBpbml0X3JlcG8JCQkJKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZ2NjL2Nw L2RlY2wuYyBiL2djYy9jcC9kZWNsLmMKaW5kZXggYzhmNzY2Ni4uNjY0NjA2 MiAxMDA2NDQKLS0tIGEvZ2NjL2NwL2RlY2wuYworKysgYi9nY2MvY3AvZGVj bC5jCkBAIC01MTQwLDcgKzUxNDAsNyBAQCBzdGFydF9kZWNsXzEgKHRyZWUg ZGVjbCwgYm9vbCBpbml0aWFsaXplZCkKICAgZWxzZSBpZiAoYWdncmVnYXRl X2RlZmluaXRpb25fcCAmJiAhY29tcGxldGVfcCkKICAgICB7CiAgICAgICBp ZiAodHlwZV91c2VzX2F1dG8gKHR5cGUpKQotCWVycm9yICgiZGVjbGFyYXRp b24gb2YgJXEjRCBoYXMgbm8gaW5pdGlhbGl6ZXIiLCBkZWNsKTsKKwlnY2Nf dW5yZWFjaGFibGUgKCk7CiAgICAgICBlbHNlCiAJZXJyb3IgKCJhZ2dyZWdh dGUgJXEjRCBoYXMgaW5jb21wbGV0ZSB0eXBlIGFuZCBjYW5ub3QgYmUgZGVm aW5lZCIsCiAJICAgICAgIGRlY2wpOwpAQCAtNjY5NSwxMiArNjY5NSwxMSBA QCBjcF9maW5pc2hfZGVjbCAodHJlZSBkZWNsLCB0cmVlIGluaXQsIGJvb2wg aW5pdF9jb25zdF9leHByX3AsCiAJICAgICAgcmV0dXJuOwogCSAgICB9CiAK LQkgIGVycm9yICgiZGVjbGFyYXRpb24gb2YgJXEjRCBoYXMgbm8gaW5pdGlh bGl6ZXIiLCBkZWNsKTsKLQkgIFRSRUVfVFlQRSAoZGVjbCkgPSBlcnJvcl9t YXJrX25vZGU7Ci0JICByZXR1cm47CisJICBnY2NfdW5yZWFjaGFibGUgKCk7 CiAJfQogICAgICAgZF9pbml0ID0gaW5pdDsKLSAgICAgIGlmIChUUkVFX0NP REUgKGRfaW5pdCkgPT0gVFJFRV9MSVNUKQorICAgICAgaWYgKFRSRUVfQ09E RSAoZF9pbml0KSA9PSBUUkVFX0xJU1QKKwkgICYmICFDTEFTU19QTEFDRUhP TERFUl9URU1QTEFURSAoYXV0b19ub2RlKSkKIAlkX2luaXQgPSBidWlsZF94 X2NvbXBvdW5kX2V4cHJfZnJvbV9saXN0IChkX2luaXQsIEVMS19JTklULAog CQkJCQkJICB0Zl93YXJuaW5nX29yX2Vycm9yKTsKICAgICAgIGRfaW5pdCA9 IHJlc29sdmVfbm9uZGVkdWNlZF9jb250ZXh0IChkX2luaXQsIHRmX3dhcm5p bmdfb3JfZXJyb3IpOwpAQCAtODE4Miw3ICs4MTgxLDI3IEBAIGdyb2tmbmRl Y2wgKHRyZWUgY3R5cGUsCiAJfQogICAgIH0KIAotICBpZiAoSURFTlRJRklF Ul9PUE5BTUVfUCAoREVDTF9OQU1FIChkZWNsKSkKKyAgaWYgKGRlZHVjdGlv bl9ndWlkZV9wIChkZWNsKSkKKyAgICB7CisgICAgICBpZiAoIURFQ0xfTkFN RVNQQUNFX1NDT1BFX1AgKGRlY2wpKQorCXsKKwkgIGVycm9yX2F0IChsb2Nh dGlvbiwgImRlZHVjdGlvbiBndWlkZSAlcUQgbXVzdCBiZSBkZWNsYXJlZCBh dCAiCisJCSAgICAibmFtZXNwYWNlIHNjb3BlIiwgZGVjbCk7CisJICByZXR1 cm4gTlVMTF9UUkVFOworCX0KKyAgICAgIHRyZWUgdHlwZSA9IFRSRUVfVFlQ RSAoREVDTF9OQU1FIChkZWNsKSk7CisgICAgICBpZiAoQ1BfREVDTF9DT05U RVhUIChkZWNsKSAhPSBDUF9UWVBFX0NPTlRFWFQgKHR5cGUpKQorCXsKKwkg IGVycm9yX2F0IChsb2NhdGlvbiwgImRlZHVjdGlvbiBndWlkZSAlcUQgbXVz dCBiZSBkZWNsYXJlZCBpbiB0aGUgIgorCQkgICAgInNhbWUgc2NvcGUgYXMg JXFUIiwgZGVjbCwgdHlwZSk7CisJICBpbmZvcm0gKGxvY2F0aW9uX29mICh0 eXBlKSwgIiAgZGVjbGFyZWQgaGVyZSIpOworCSAgcmV0dXJuIE5VTExfVFJF RTsKKwl9CisgICAgICBpZiAoZnVuY2RlZl9mbGFnKQorCWVycm9yX2F0IChs b2NhdGlvbiwKKwkJICAiZGVkdWN0aW9uIGd1aWRlICVxRCBtdXN0IG5vdCBo YXZlIGEgZnVuY3Rpb24gYm9keSIsIGRlY2wpOworICAgIH0KKyAgZWxzZSBp ZiAoSURFTlRJRklFUl9PUE5BTUVfUCAoREVDTF9OQU1FIChkZWNsKSkKICAg ICAgICYmICFncm9rX29wX3Byb3BlcnRpZXMgKGRlY2wsIC8qY29tcGxhaW49 Ki90cnVlKSkKICAgICByZXR1cm4gTlVMTF9UUkVFOwogICBlbHNlIGlmIChV RExJVF9PUEVSX1AgKERFQ0xfTkFNRSAoZGVjbCkpKQpAQCAtMTEwNjMsMTIg KzExMDgyLDE5IEBAIGdyb2tkZWNsYXJhdG9yIChjb25zdCBjcF9kZWNsYXJh dG9yICpkZWNsYXJhdG9yLAogICAgICAgfQogICAgIGVsc2UgaWYgKGRlY2xf Y29udGV4dCA9PSBGSUVMRCkKICAgICAgIHsKLQlpZiAoIXN0YXRpY3AgJiYg IWZyaWVuZHAgJiYgVFJFRV9DT0RFICh0eXBlKSAhPSBNRVRIT0RfVFlQRQot CSAgICAmJiB0eXBlX3VzZXNfYXV0byAodHlwZSkpCi0JICB7Ci0JICAgIGVy cm9yICgibm9uLXN0YXRpYyBkYXRhIG1lbWJlciBkZWNsYXJlZCAlPGF1dG8l PiIpOwotCSAgICB0eXBlID0gZXJyb3JfbWFya19ub2RlOwotCSAgfQorCWlm ICghc3RhdGljcCAmJiAhZnJpZW5kcCAmJiBUUkVFX0NPREUgKHR5cGUpICE9 IE1FVEhPRF9UWVBFKQorCSAgaWYgKHRyZWUgYXV0b19ub2RlID0gdHlwZV91 c2VzX2F1dG8gKHR5cGUpKQorCSAgICB7CisJICAgICAgbG9jYXRpb25fdCBs b2MgPSBkZWNsc3BlY3MtPmxvY2F0aW9uc1tkc190eXBlX3NwZWNdOworCSAg ICAgIGlmIChDTEFTU19QTEFDRUhPTERFUl9URU1QTEFURSAoYXV0b19ub2Rl KSkKKwkJZXJyb3JfYXQgKGxvYywgImludmFsaWQgdXNlIG9mIHRlbXBsYXRl LW5hbWUgJXFFIHdpdGhvdXQgYW4gIgorCQkJICAiYXJndW1lbnQgbGlzdCIs CisJCQkgIENMQVNTX1BMQUNFSE9MREVSX1RFTVBMQVRFIChhdXRvX25vZGUp KTsKKwkgICAgICBlbHNlCisJCWVycm9yX2F0IChsb2MsICJub24tc3RhdGlj IGRhdGEgbWVtYmVyIGRlY2xhcmVkIHdpdGggIgorCQkJICAicGxhY2Vob2xk ZXIgJXFUIiwgYXV0b19ub2RlKTsKKwkgICAgICB0eXBlID0gZXJyb3JfbWFy a19ub2RlOworCSAgICB9CiAKIAkvKiBUaGUgQzk5IGZsZXhpYmxlIGFycmF5 IGV4dGVuc2lvbi4gICovCiAJaWYgKCFzdGF0aWNwICYmIFRSRUVfQ09ERSAo dHlwZSkgPT0gQVJSQVlfVFlQRQpAQCAtMTE1NDMsNiArMTE1NjksMjIgQEAg Z3Jva2RlY2xhcmF0b3IgKGNvbnN0IGNwX2RlY2xhcmF0b3IgKmRlY2xhcmF0 b3IsCiAJICB9CiAgICAgICB9CiAKKyAgICBpZiAoVkFSX1AgKGRlY2wpICYm ICFpbml0aWFsaXplZCkKKyAgICAgIGlmICh0cmVlIGF1dG9fbm9kZSA9IHR5 cGVfdXNlc19hdXRvICh0eXBlKSkKKwl7CisJICBsb2NhdGlvbl90IGxvYyA9 IGRlY2xzcGVjcy0+bG9jYXRpb25zW2RzX3R5cGVfc3BlY107CisJICBpZiAo dHJlZSB0bXBsID0gQ0xBU1NfUExBQ0VIT0xERVJfVEVNUExBVEUgKGF1dG9f bm9kZSkpCisJICAgIHsKKwkgICAgICBlcnJvcl9hdCAobG9jLCAiaW52YWxp ZCB1c2Ugb2YgdGVtcGxhdGUtbmFtZSAlcUUgd2l0aG91dCBhbiAiCisJCQki YXJndW1lbnQgbGlzdCIsIHRtcGwpOworCSAgICAgIGluZm9ybSAobG9jLCAi Y2xhc3MgdGVtcGxhdGUgYXJndW1lbnQgZGVkdWN0aW9uICIKKwkJICAgICAg InJlcXVpcmVzIGFuIGluaXRpYWxpemVyIik7CisJICAgIH0KKwkgIGVsc2UK KwkgICAgZXJyb3JfYXQgKGxvYywgImRlY2xhcmF0aW9uIG9mICVxI0QgaGFz IG5vIGluaXRpYWxpemVyIiwgZGVjbCk7CisJICBUUkVFX1RZUEUgKGRlY2wp ID0gZXJyb3JfbWFya19ub2RlOworCX0KKwogICAgIGlmIChzdG9yYWdlX2Ns YXNzID09IHNjX2V4dGVybiAmJiBpbml0aWFsaXplZCAmJiAhZnVuY2RlZl9m bGFnKQogICAgICAgewogCWlmICh0b3BsZXZlbF9iaW5kaW5nc19wICgpKQpk aWZmIC0tZ2l0IGEvZ2NjL2NwL2Vycm9yLmMgYi9nY2MvY3AvZXJyb3IuYwpp bmRleCA3NDVkN2JhLi4yMGIyMGI0IDEwMDY0NAotLS0gYS9nY2MvY3AvZXJy b3IuYworKysgYi9nY2MvY3AvZXJyb3IuYwpAQCAtMTE1OSw2ICsxMTU5LDkg QEAgZHVtcF9kZWNsIChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0cmVlIHQs IGludCBmbGFncykKIAkgIGR1bXBfdHlwZSAocHAsIFRSRUVfVFlQRSAodCks IGZsYWdzKTsKIAkgIGJyZWFrOwogCX0KKyAgICAgIGVsc2UgaWYgKGRndWlk ZV9uYW1lX3AgKHQpKQorCWR1bXBfZGVjbCAocHAsIENMQVNTVFlQRV9USV9U RU1QTEFURSAoVFJFRV9UWVBFICh0KSksCisJCSAgIFRGRl9QTEFJTl9JREVO VElGSUVSKTsKICAgICAgIGVsc2UKIAlwcF9jeHhfdHJlZV9pZGVudGlmaWVy IChwcCwgdCk7CiAgICAgICBicmVhazsKQEAgLTE1NTIsOCArMTU1NSw4IEBA IGR1bXBfZnVuY3Rpb25fZGVjbCAoY3h4X3ByZXR0eV9wcmludGVyICpwcCwg dHJlZSB0LCBpbnQgZmxhZ3MpCiAKICAgLyogUHJpbnQgdGhlIHJldHVybiB0 eXBlPyAgKi8KICAgaWYgKHNob3dfcmV0dXJuKQotICAgIHNob3dfcmV0dXJu ID0gIURFQ0xfQ09OVl9GTl9QICh0KSAgJiYgIURFQ0xfQ09OU1RSVUNUT1Jf UCAodCkKLQkJICAmJiAhREVDTF9ERVNUUlVDVE9SX1AgKHQpOworICAgIHNo b3dfcmV0dXJuID0gKCFERUNMX0NPTlZfRk5fUCAodCkgICYmICFERUNMX0NP TlNUUlVDVE9SX1AgKHQpCisJCSAgICYmICFERUNMX0RFU1RSVUNUT1JfUCAo dCkgJiYgIWRlZHVjdGlvbl9ndWlkZV9wICh0KSk7CiAgIGlmIChzaG93X3Jl dHVybikKICAgICB7CiAgICAgICB0cmVlIHJldCA9IGZuZGVjbF9kZWNsYXJl ZF9yZXR1cm5fdHlwZSAodCk7CkBAIC0xNTk4LDYgKzE2MDEsMTEgQEAgZHVt cF9mdW5jdGlvbl9kZWNsIChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0cmVl IHQsIGludCBmbGFncykKIAogICAgICAgaWYgKHNob3dfcmV0dXJuKQogCWR1 bXBfdHlwZV9zdWZmaXggKHBwLCBUUkVFX1RZUEUgKGZudHlwZSksIGZsYWdz KTsKKyAgICAgIGVsc2UgaWYgKGRlZHVjdGlvbl9ndWlkZV9wICh0KSkKKwl7 CisJICBwcF9jeHhfd3Nfc3RyaW5nIChwcCwgIi0+Iik7CisJICBkdW1wX3R5 cGUgKHBwLCBUUkVFX1RZUEUgKFRSRUVfVFlQRSAodCkpLCBmbGFncyk7CisJ fQogCiAgICAgICBpZiAoZmxhZ19jb25jZXB0cykKICAgICAgICAgaWYgKHRy ZWUgY2kgPSBnZXRfY29uc3RyYWludHMgKHQpKQpAQCAtMTc2NywxMCArMTc3 NSw2IEBAIGR1bXBfZnVuY3Rpb25fbmFtZSAoY3h4X3ByZXR0eV9wcmludGVy ICpwcCwgdHJlZSB0LCBpbnQgZmxhZ3MpCiAgICAgICBwcF9jeHhfd3Nfc3Ry aW5nIChwcCwgIm9wZXJhdG9yIik7CiAgICAgICBkdW1wX3R5cGUgKHBwLCBU UkVFX1RZUEUgKFRSRUVfVFlQRSAodCkpLCBmbGFncyk7CiAgICAgfQotICBl bHNlIGlmIChuYW1lICYmIElERU5USUZJRVJfT1BOQU1FX1AgKG5hbWUpKQot ICAgIHBwX2N4eF90cmVlX2lkZW50aWZpZXIgKHBwLCBuYW1lKTsKLSAgZWxz ZSBpZiAobmFtZSAmJiBVRExJVF9PUEVSX1AgKG5hbWUpKQotICAgIHBwX2N4 eF90cmVlX2lkZW50aWZpZXIgKHBwLCBuYW1lKTsKICAgZWxzZQogICAgIGR1 bXBfZGVjbCAocHAsIG5hbWUsIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZ2Nj L2NwL3BhcnNlci5jIGIvZ2NjL2NwL3BhcnNlci5jCmluZGV4IDg1ODEzNzUu LjY4M2E2ZGQgMTAwNjQ0Ci0tLSBhL2djYy9jcC9wYXJzZXIuYworKysgYi9n Y2MvY3AvcGFyc2VyLmMKQEAgLTMxNTUsNiArMzE1NSw5IEBAIGNwX3BhcnNl cl9kaWFnbm9zZV9pbnZhbGlkX3R5cGVfbmFtZSAoY3BfcGFyc2VyICpwYXJz ZXIsIHRyZWUgaWQsCiAgICAgICBlcnJvcl9hdCAobG9jYXRpb24sCiAJCSJp bnZhbGlkIHVzZSBvZiB0ZW1wbGF0ZS1uYW1lICVxRSB3aXRob3V0IGFuIGFy Z3VtZW50IGxpc3QiLAogCQlkZWNsKTsKKyAgICAgIGlmIChERUNMX0NMQVNT X1RFTVBMQVRFX1AgKGRlY2wpICYmIGN4eF9kaWFsZWN0IDwgY3h4MXopCisJ aW5mb3JtIChsb2NhdGlvbiwgImNsYXNzIHRlbXBsYXRlIGFyZ3VtZW50IGRl ZHVjdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSAiCisJCSJ3aXRoIC1zdGQ9Yysr MXogb3IgLXN0ZD1nbnUrKzF6Iik7CiAgICAgICBpbmZvcm0gKERFQ0xfU09V UkNFX0xPQ0FUSU9OIChkZWNsKSwgIiVxRCBkZWNsYXJlZCBoZXJlIiwgZGVj bCk7CiAgICAgfQogICBlbHNlIGlmIChUUkVFX0NPREUgKGlkKSA9PSBCSVRf Tk9UX0VYUFIpCkBAIC0xMjIyNCw2ICsxMjIyNyw5IEBAIGNwX3BhcnNlcl9k ZWNsYXJhdGlvbl9zZXFfb3B0IChjcF9wYXJzZXIqIHBhcnNlcikKICAgICAg bGlua2FnZS1zcGVjaWZpY2F0aW9uCiAgICAgIG5hbWVzcGFjZS1kZWZpbml0 aW9uCiAKKyAgIEMrKzE3OgorICAgICBkZWR1Y3Rpb24tZ3VpZGUKKwogICAg R05VIGV4dGVuc2lvbjoKIAogICAgZGVjbGFyYXRpb246CkBAIC0xNjE1MCw3 ICsxNjE1Niw3IEBAIGNwX3BhcnNlcl90eXBlX3NwZWNpZmllciAoY3BfcGFy c2VyKiBwYXJzZXIsCiAgICAgIGRvdWJsZQogICAgICB2b2lkCiAKLSAgIEMr KzB4IEV4dGVuc2lvbjoKKyAgIEMrKzExIEV4dGVuc2lvbjoKIAogICAgc2lt cGxlLXR5cGUtc3BlY2lmaWVyOgogICAgICBhdXRvCkBAIC0xNjE1OSw2ICsx NjE2NSwxMCBAQCBjcF9wYXJzZXJfdHlwZV9zcGVjaWZpZXIgKGNwX3BhcnNl ciogcGFyc2VyLAogICAgICBjaGFyMzJfdAogICAgICBfX3VuZGVybHlpbmdf dHlwZSAoIHR5cGUtaWQgKQogCisgICBDKysxNyBleHRlbnNpb246CisKKyAg ICAgbmVzdGVkLW5hbWUtc3BlY2lmaWVyKG9wdCkgdGVtcGxhdGUtbmFtZQor CiAgICBHTlUgRXh0ZW5zaW9uOgogCiAgICBzaW1wbGUtdHlwZS1zcGVjaWZp ZXI6CkBAIC0xNjQyOSw5ICsxNjQzOSwxMSBAQCBjcF9wYXJzZXJfc2ltcGxl X3R5cGVfc3BlY2lmaWVyIChjcF9wYXJzZXIqIHBhcnNlciwKIAogICAgICAg LyogRG9uJ3QgZ29iYmxlIHRva2VucyBvciBpc3N1ZSBlcnJvciBtZXNzYWdl cyBpZiB0aGlzIGlzIGFuCiAJIG9wdGlvbmFsIHR5cGUtc3BlY2lmaWVyLiAg Ki8KLSAgICAgIGlmIChmbGFncyAmIENQX1BBUlNFUl9GTEFHU19PUFRJT05B TCkKKyAgICAgIGlmICgoZmxhZ3MgJiBDUF9QQVJTRVJfRkxBR1NfT1BUSU9O QUwpIHx8IGN4eF9kaWFsZWN0ID49IGN4eDF6KQogCWNwX3BhcnNlcl9wYXJz ZV90ZW50YXRpdmVseSAocGFyc2VyKTsKIAorICAgICAgdG9rZW4gPSBjcF9s ZXhlcl9wZWVrX3Rva2VuIChwYXJzZXItPmxleGVyKTsKKwogICAgICAgLyog TG9vayBmb3IgdGhlIG9wdGlvbmFsIGA6Oicgb3BlcmF0b3IuICAqLwogICAg ICAgZ2xvYmFsX3AKIAk9IChjcF9wYXJzZXJfZ2xvYmFsX3Njb3BlX29wdCAo cGFyc2VyLApAQCAtMTY0NDUsNyArMTY0NTcsNiBAQCBjcF9wYXJzZXJfc2lt cGxlX3R5cGVfc3BlY2lmaWVyIChjcF9wYXJzZXIqIHBhcnNlciwKIAkJCQkJ CS8qdHlwZV9wPSovZmFsc2UsCiAJCQkJCQkvKmlzX2RlY2xhcmF0aW9uPSov ZmFsc2UpCiAJICAgIT0gTlVMTF9UUkVFKTsKLSAgICAgIHRva2VuID0gY3Bf bGV4ZXJfcGVla190b2tlbiAocGFyc2VyLT5sZXhlcik7CiAgICAgICAvKiBJ ZiB3ZSBoYXZlIHNlZW4gYSBuZXN0ZWQtbmFtZS1zcGVjaWZpZXIsIGFuZCB0 aGUgbmV4dCB0b2tlbgogCSBpcyBgdGVtcGxhdGUnLCB0aGVuIHdlIGFyZSB1 c2luZyB0aGUgdGVtcGxhdGUtaWQgcHJvZHVjdGlvbi4gICovCiAgICAgICBp ZiAocGFyc2VyLT5zY29wZQpAQCAtMTY0NzYsOSArMTY0ODcsNTAgQEAgY3Bf cGFyc2VyX3NpbXBsZV90eXBlX3NwZWNpZmllciAoY3BfcGFyc2VyKiBwYXJz ZXIsCiAJICAmJiBpZGVudGlmaWVyX3AgKERFQ0xfTkFNRSAodHlwZSkpKQog CW1heWJlX25vdGVfbmFtZV91c2VkX2luX2NsYXNzIChERUNMX05BTUUgKHR5 cGUpLCB0eXBlKTsKICAgICAgIC8qIElmIGl0IGRpZG4ndCB3b3JrIG91dCwg d2UgZG9uJ3QgaGF2ZSBhIFRZUEUuICAqLwotICAgICAgaWYgKChmbGFncyAm IENQX1BBUlNFUl9GTEFHU19PUFRJT05BTCkKKyAgICAgIGlmICgoKGZsYWdz ICYgQ1BfUEFSU0VSX0ZMQUdTX09QVElPTkFMKSB8fCBjeHhfZGlhbGVjdCA+ PSBjeHgxeikKIAkgICYmICFjcF9wYXJzZXJfcGFyc2VfZGVmaW5pdGVseSAo cGFyc2VyKSkKIAl0eXBlID0gTlVMTF9UUkVFOworICAgICAgaWYgKCF0eXBl ICYmIGN4eF9kaWFsZWN0ID49IGN4eDF6KQorCXsKKwkgIGlmIChmbGFncyAm IENQX1BBUlNFUl9GTEFHU19PUFRJT05BTCkKKwkgICAgY3BfcGFyc2VyX3Bh cnNlX3RlbnRhdGl2ZWx5IChwYXJzZXIpOworCisJICBjcF9wYXJzZXJfZ2xv YmFsX3Njb3BlX29wdCAocGFyc2VyLAorCQkJCSAgICAgIC8qY3VycmVudF9z Y29wZV92YWxpZF9wPSovZmFsc2UpOworCSAgY3BfcGFyc2VyX25lc3RlZF9u YW1lX3NwZWNpZmllcl9vcHQgKHBhcnNlciwKKwkJCQkJICAgICAgIC8qdHlw ZW5hbWVfa2V5d29yZF9wPSovZmFsc2UsCisJCQkJCSAgICAgICAvKmNoZWNr X2RlcGVuZGVuY3lfcD0qL3RydWUsCisJCQkJCSAgICAgICAvKnR5cGVfcD0q L2ZhbHNlLAorCQkJCQkgICAgICAgLyppc19kZWNsYXJhdGlvbj0qL2ZhbHNl KTsKKwkgIHRyZWUgbmFtZSA9IGNwX3BhcnNlcl9pZGVudGlmaWVyIChwYXJz ZXIpOworCSAgaWYgKG5hbWUgJiYgVFJFRV9DT0RFIChuYW1lKSA9PSBJREVO VElGSUVSX05PREUKKwkgICAgICAmJiBwYXJzZXItPnNjb3BlICE9IGVycm9y X21hcmtfbm9kZSkKKwkgICAgeworCSAgICAgIHRyZWUgdG1wbCA9IGNwX3Bh cnNlcl9sb29rdXBfbmFtZSAocGFyc2VyLCBuYW1lLAorCQkJCQkJIG5vbmVf dHlwZSwKKwkJCQkJCSAvKmlzX3RlbXBsYXRlPSovZmFsc2UsCisJCQkJCQkg Lyppc19uYW1lc3BhY2U9Ki9mYWxzZSwKKwkJCQkJCSAvKmNoZWNrX2RlcGVu ZGVuY3k9Ki90cnVlLAorCQkJCQkJIC8qYW1iaWd1b3VzX2RlY2xzPSovTlVM TCwKKwkJCQkJCSB0b2tlbi0+bG9jYXRpb24pOworCSAgICAgIGlmICh0bXBs ICYmIHRtcGwgIT0gZXJyb3JfbWFya19ub2RlCisJCSAgJiYgREVDTF9DTEFT U19URU1QTEFURV9QICh0bXBsKSkKKwkJdHlwZSA9IG1ha2VfdGVtcGxhdGVf cGxhY2Vob2xkZXIgKHRtcGwpOworCSAgICAgIGVsc2UKKwkJeworCQkgIHR5 cGUgPSBlcnJvcl9tYXJrX25vZGU7CisJCSAgaWYgKCFjcF9wYXJzZXJfc2lt dWxhdGVfZXJyb3IgKHBhcnNlcikpCisJCSAgICBjcF9wYXJzZXJfbmFtZV9s b29rdXBfZXJyb3IgKHBhcnNlciwgbmFtZSwgdG1wbCwKKwkJCQkJCSBOTEVf VFlQRSwgdG9rZW4tPmxvY2F0aW9uKTsKKwkJfQorCSAgICB9CisJICBlbHNl CisJICAgIHR5cGUgPSBlcnJvcl9tYXJrX25vZGU7CisKKwkgIGlmICgoZmxh Z3MgJiBDUF9QQVJTRVJfRkxBR1NfT1BUSU9OQUwpCisJICAgICAgJiYgIWNw X3BhcnNlcl9wYXJzZV9kZWZpbml0ZWx5IChwYXJzZXIpKQorCSAgICB0eXBl ID0gTlVMTF9UUkVFOworCX0KICAgICAgIGlmICh0eXBlICYmIGRlY2xfc3Bl Y3MpCiAJY3BfcGFyc2VyX3NldF9kZWNsX3NwZWNfdHlwZSAoZGVjbF9zcGVj cywgdHlwZSwKIAkJCQkgICAgICB0b2tlbiwKQEAgLTE4NTc3LDEwICsxODYy OSwyOCBAQCBjcF9wYXJzZXJfaW5pdF9kZWNsYXJhdG9yIChjcF9wYXJzZXIq IHBhcnNlciwKICAgICAgZGVjbGFyZWQuICAqLwogICByZXN1bWVfZGVmZXJy aW5nX2FjY2Vzc19jaGVja3MgKCk7CiAKKyAgdG9rZW4gPSBjcF9sZXhlcl9w ZWVrX3Rva2VuIChwYXJzZXItPmxleGVyKTsKKworICBjcF9wYXJzZXJfZGVj bGFyYXRvcl9raW5kIGNkayA9IENQX1BBUlNFUl9ERUNMQVJBVE9SX05BTUVE OworICBpZiAodG9rZW4tPnR5cGUgPT0gQ1BQX09QRU5fUEFSRU4KKyAgICAg ICYmIGRlY2xfc3BlY2lmaWVycy0+dHlwZQorICAgICAgJiYgaXNfYXV0byAo ZGVjbF9zcGVjaWZpZXJzLT50eXBlKQorICAgICAgJiYgQ0xBU1NfUExBQ0VI T0xERVJfVEVNUExBVEUgKGRlY2xfc3BlY2lmaWVycy0+dHlwZSkpCisgICAg eworICAgICAgLy8gQysrMTcgZGVkdWN0aW9uIGd1aWRlLgorICAgICAgY2Rr ID0gQ1BfUEFSU0VSX0RFQ0xBUkFUT1JfQUJTVFJBQ1Q7CisKKyAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgZHNfbGFzdDsgKytpKQorCWlmIChpICE9IGRz X3R5cGVfc3BlYworCSAgICAmJiBkZWNsX3NwZWNpZmllcnMtPmxvY2F0aW9u c1tpXQorCSAgICAmJiAhY3BfcGFyc2VyX3NpbXVsYXRlX2Vycm9yIChwYXJz ZXIpKQorCSAgZXJyb3JfYXQgKGRlY2xfc3BlY2lmaWVycy0+bG9jYXRpb25z W2ldLAorCQkgICAgImRlY2wtc3BlY2lmaWVyIGluIGRlY2xhcmF0aW9uIG9m IGRlZHVjdGlvbiBndWlkZSIpOworICAgIH0KKwogICAvKiBQYXJzZSB0aGUg ZGVjbGFyYXRvci4gICovCi0gIHRva2VuID0gY3BfbGV4ZXJfcGVla190b2tl biAocGFyc2VyLT5sZXhlcik7CiAgIGRlY2xhcmF0b3IKLSAgICA9IGNwX3Bh cnNlcl9kZWNsYXJhdG9yIChwYXJzZXIsIENQX1BBUlNFUl9ERUNMQVJBVE9S X05BTUVELAorICAgID0gY3BfcGFyc2VyX2RlY2xhcmF0b3IgKHBhcnNlciwg Y2RrLAogCQkJICAgICZjdG9yX2R0b3Jfb3JfY29udl9wLAogCQkJICAgIC8q cGFyZW50aGVzaXplZF9wPSovTlVMTCwKIAkJCSAgICBtZW1iZXJfcCwgZnJp ZW5kX3ApOwpAQCAtMTg1OTQsNiArMTg2NjQsMTcgQEAgY3BfcGFyc2VyX2lu aXRfZGVjbGFyYXRvciAoY3BfcGFyc2VyKiBwYXJzZXIsCiAgIGlmIChkZWNs YXJhdG9yID09IGNwX2Vycm9yX2RlY2xhcmF0b3IpCiAgICAgcmV0dXJuIGVy cm9yX21hcmtfbm9kZTsKIAorICBpZiAoY2RrID09IENQX1BBUlNFUl9ERUNM QVJBVE9SX0FCU1RSQUNUKQorICAgIHsKKyAgICAgIGdjY19hc3NlcnQgKGRl Y2xhcmF0b3ItPmtpbmQgPT0gY2RrX2Z1bmN0aW9uCisJCSAgJiYgIWRlY2xh cmF0b3ItPmRlY2xhcmF0b3IpOworICAgICAgdHJlZSB0ID0gQ0xBU1NfUExB Q0VIT0xERVJfVEVNUExBVEUgKGRlY2xfc3BlY2lmaWVycy0+dHlwZSk7Cisg ICAgICBkZWNsYXJhdG9yLT5kZWNsYXJhdG9yID0gbWFrZV9pZF9kZWNsYXJh dG9yIChOVUxMX1RSRUUsIGRndWlkZV9uYW1lICh0KSwKKwkJCQkJCSAgIHNm a19ub25lKTsKKyAgICAgIGRlY2xhcmF0b3ItPmRlY2xhcmF0b3ItPmlkX2xv YworCT0gZGVjbF9zcGVjaWZpZXJzLT5sb2NhdGlvbnNbZHNfdHlwZV9zcGVj XTsKKyAgICB9CisKICAgLyogQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHRl bXBsYXRlLXBhcmFtZXRlci1saXN0cyBpcyBPSy4gICovCiAgIGlmICghY3Bf cGFyc2VyX2NoZWNrX2RlY2xhcmF0b3JfdGVtcGxhdGVfcGFyYW1ldGVycyAo cGFyc2VyLCBkZWNsYXJhdG9yLAogCQkJCQkJICAgICAgIHRva2VuLT5sb2Nh dGlvbikpCkBAIC0yMDExOCw2ICsyMDE5OSwxNiBAQCBjcF9wYXJzZXJfdHlw ZV9pZF8xIChjcF9wYXJzZXIqIHBhcnNlciwgYm9vbCBpc190ZW1wbGF0ZV9h cmcsCiAgIGNwX3BhcnNlcl90eXBlX3NwZWNpZmllcl9zZXEgKHBhcnNlciwg Lyppc19kZWNsYXJhdGlvbj0qL2ZhbHNlLAogCQkJCWlzX3RyYWlsaW5nX3Jl dHVybiwKIAkJCQkmdHlwZV9zcGVjaWZpZXJfc2VxKTsKKyAgaWYgKGlzX3Rl bXBsYXRlX2FyZyAmJiB0eXBlX3NwZWNpZmllcl9zZXEudHlwZQorICAgICAg JiYgVFJFRV9DT0RFICh0eXBlX3NwZWNpZmllcl9zZXEudHlwZSkgPT0gVEVN UExBVEVfVFlQRV9QQVJNCisgICAgICAmJiBDTEFTU19QTEFDRUhPTERFUl9U RU1QTEFURSAodHlwZV9zcGVjaWZpZXJfc2VxLnR5cGUpKQorICAgIC8qIEEg YmFyZSB0ZW1wbGF0ZSBuYW1lIGFzIGEgdGVtcGxhdGUgYXJndW1lbnQgaXMg YSB0ZW1wbGF0ZSB0ZW1wbGF0ZQorICAgICAgIGFyZ3VtZW50LCBub3QgYSBw bGFjZWhvbGRlciwgc28gZmFpbCBwYXJzaW5nIGl0IGFzIGEgdHlwZSBhcmd1 bWVudC4gICovCisgICAgeworICAgICAgZ2NjX2Fzc2VydCAoY3BfcGFyc2Vy X3VuY29tbWl0dGVkX3RvX3RlbnRhdGl2ZV9wYXJzZV9wIChwYXJzZXIpKTsK KyAgICAgIGNwX3BhcnNlcl9zaW11bGF0ZV9lcnJvciAocGFyc2VyKTsKKyAg ICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7CisgICAgfQogICBpZiAodHlw ZV9zcGVjaWZpZXJfc2VxLnR5cGUgPT0gZXJyb3JfbWFya19ub2RlKQogICAg IHJldHVybiBlcnJvcl9tYXJrX25vZGU7CiAKZGlmZiAtLWdpdCBhL2djYy9j cC9wdC5jIGIvZ2NjL2NwL3B0LmMKaW5kZXggMmZkMWFhYy4uZjkyMzY2NiAx MDA2NDQKLS0tIGEvZ2NjL2NwL3B0LmMKKysrIGIvZ2NjL2NwL3B0LmMKQEAg LTQyNzIsNiArNDI3MiwyMyBAQCB0ZW1wbGF0ZV9wYXJtX3RvX2FyZyAodHJl ZSB0KQogICByZXR1cm4gdDsKIH0KIAorLyogR2l2ZW4gYSBzaW5nbGUgbGV2 ZWwgb2YgdGVtcGxhdGUgcGFyYW1ldGVycyAoYSBUUkVFX1ZFQyksIHJldHVy biBpdAorICAgYXMgYSBzZXQgb2YgdGVtcGxhdGUgYXJndW1lbnRzLiAgKi8K Kworc3RhdGljIHRyZWUKK3RlbXBsYXRlX3Bhcm1zX2xldmVsX3RvX2FyZ3Mg KHRyZWUgcGFybXMpCit7CisgIHRyZWUgYSA9IGNvcHlfbm9kZSAocGFybXMp OworICBUUkVFX1RZUEUgKGEpID0gTlVMTF9UUkVFOworICBmb3IgKGludCBp ID0gVFJFRV9WRUNfTEVOR1RIIChhKSAtIDE7IGkgPj0gMDsgLS1pKQorICAg IFRSRUVfVkVDX0VMVCAoYSwgaSkgPSB0ZW1wbGF0ZV9wYXJtX3RvX2FyZyAo VFJFRV9WRUNfRUxUIChhLCBpKSk7CisKKyAgaWYgKENIRUNLSU5HX1ApCisg ICAgU0VUX05PTl9ERUZBVUxUX1RFTVBMQVRFX0FSR1NfQ09VTlQgKGEsIFRS RUVfVkVDX0xFTkdUSCAoYSkpOworCisgIHJldHVybiBhOworfQorCiAvKiBH aXZlbiBhIHNldCBvZiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLCByZXR1cm4gdGhl bSBhcyBhIHNldCBvZiB0ZW1wbGF0ZQogICAgYXJndW1lbnRzLiAgVGhlIHRl bXBsYXRlIHBhcmFtZXRlcnMgYXJlIHJlcHJlc2VudGVkIGFzIGEgVFJFRV9W RUMsIGluCiAgICB0aGUgZm9ybSBkb2N1bWVudGVkIGluIGNwLXRyZWUuaCBm b3IgdGVtcGxhdGUgYXJndW1lbnRzLiAgKi8KQEAgLTQyOTIsMTUgKzQzMDks NyBAQCB0ZW1wbGF0ZV9wYXJtc190b19hcmdzICh0cmVlIHBhcm1zKQogCiAg IGZvciAoaGVhZGVyID0gcGFybXM7IGhlYWRlcjsgaGVhZGVyID0gVFJFRV9D SEFJTiAoaGVhZGVyKSkKICAgICB7Ci0gICAgICB0cmVlIGEgPSBjb3B5X25v ZGUgKFRSRUVfVkFMVUUgKGhlYWRlcikpOwotICAgICAgaW50IGk7Ci0KLSAg ICAgIFRSRUVfVFlQRSAoYSkgPSBOVUxMX1RSRUU7Ci0gICAgICBmb3IgKGkg PSBUUkVFX1ZFQ19MRU5HVEggKGEpIC0gMTsgaSA+PSAwOyAtLWkpCi0JVFJF RV9WRUNfRUxUIChhLCBpKSA9IHRlbXBsYXRlX3Bhcm1fdG9fYXJnIChUUkVF X1ZFQ19FTFQgKGEsIGkpKTsKLQotICAgICAgaWYgKENIRUNLSU5HX1ApCi0J U0VUX05PTl9ERUZBVUxUX1RFTVBMQVRFX0FSR1NfQ09VTlQgKGEsIFRSRUVf VkVDX0xFTkdUSCAoYSkpOworICAgICAgdHJlZSBhID0gdGVtcGxhdGVfcGFy bXNfbGV2ZWxfdG9fYXJncyAoVFJFRV9WQUxVRSAoaGVhZGVyKSk7CiAKICAg ICAgIGlmIChsZW5ndGggPiAxKQogCVRSRUVfVkVDX0VMVCAoYXJncywgLS1s KSA9IGE7CkBAIC0xMTM1Nyw2ICsxMTM2NiwzMCBAQCB0c3Vic3RfdGVtcGxh dGVfYXJncyAodHJlZSB0LCB0cmVlIGFyZ3MsIHRzdWJzdF9mbGFnc190IGNv bXBsYWluLCB0cmVlIGluX2RlY2wpCiAgIHJldHVybiB0OwogfQogCisvKiBT dWJzdGl0dXRlIEFSR1MgaW50byBvbmUgbGV2ZWwgUEFSTVMgb2YgdGVtcGxh dGUgcGFyYW1ldGVycy4gICovCisKK3N0YXRpYyB0cmVlCit0c3Vic3RfdGVt cGxhdGVfcGFybXNfbGV2ZWwgKHRyZWUgcGFybXMsIHRyZWUgYXJncywgdHN1 YnN0X2ZsYWdzX3QgY29tcGxhaW4pCit7CisgIGlmIChwYXJtcyA9PSBlcnJv cl9tYXJrX25vZGUpCisgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKKwor ICB0cmVlIG5ld192ZWMgPSBtYWtlX3RyZWVfdmVjIChUUkVFX1ZFQ19MRU5H VEggKHBhcm1zKSk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBUUkVFX1ZF Q19MRU5HVEggKG5ld192ZWMpOyArK2kpCisgICAgeworICAgICAgdHJlZSB0 dXBsZSA9IFRSRUVfVkVDX0VMVCAocGFybXMsIGkpOworCisgICAgICBpZiAo dHVwbGUgPT0gZXJyb3JfbWFya19ub2RlKQorCWNvbnRpbnVlOworCisgICAg ICBUUkVFX1ZFQ19FTFQgKG5ld192ZWMsIGkpID0KKwl0c3Vic3RfdGVtcGxh dGVfcGFybSAodHVwbGUsIGFyZ3MsIGNvbXBsYWluKTsKKyAgICB9CisKKyAg cmV0dXJuIG5ld192ZWM7Cit9CisKIC8qIFJldHVybiB0aGUgcmVzdWx0IG9m IHN1YnN0aXR1dGluZyBBUkdTIGludG8gdGhlIHRlbXBsYXRlIHBhcmFtZXRl cnMKICAgIGdpdmVuIGJ5IFBBUk1TLiAgSWYgdGhlcmUgYXJlIG0gbGV2ZWxz IG9mIEFSR1MgYW5kIG0gKyBuIGxldmVscyBvZgogICAgUEFSTVMsIHRoZW4g dGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gbiBsZXZlbHMgb2YgUEFSTVMuICBG b3IKQEAgLTExMzgxLDI2ICsxMTQxNCw4IEBAIHRzdWJzdF90ZW1wbGF0ZV9w YXJtcyAodHJlZSBwYXJtcywgdHJlZSBhcmdzLCB0c3Vic3RfZmxhZ3NfdCBj b21wbGFpbikKICAgICAgICBuZXdfcGFybXMgPSAmKFRSRUVfQ0hBSU4gKCpu ZXdfcGFybXMpKSwKIAkgcGFybXMgPSBUUkVFX0NIQUlOIChwYXJtcykpCiAg ICAgewotICAgICAgdHJlZSBuZXdfdmVjID0KLQltYWtlX3RyZWVfdmVjIChU UkVFX1ZFQ19MRU5HVEggKFRSRUVfVkFMVUUgKHBhcm1zKSkpOwotICAgICAg aW50IGk7Ci0KLSAgICAgIGZvciAoaSA9IDA7IGkgPCBUUkVFX1ZFQ19MRU5H VEggKG5ld192ZWMpOyArK2kpCi0JewotICAgICAgICAgIHRyZWUgdHVwbGU7 Ci0KLSAgICAgICAgICBpZiAocGFybXMgPT0gZXJyb3JfbWFya19ub2RlKQot ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICB0dXBsZSA9IFRS RUVfVkVDX0VMVCAoVFJFRV9WQUxVRSAocGFybXMpLCBpKTsKLQotICAgICAg ICAgIGlmICh0dXBsZSA9PSBlcnJvcl9tYXJrX25vZGUpCi0gICAgICAgICAg ICBjb250aW51ZTsKLQotCSAgVFJFRV9WRUNfRUxUIChuZXdfdmVjLCBpKSA9 Ci0JICAgIHRzdWJzdF90ZW1wbGF0ZV9wYXJtICh0dXBsZSwgYXJncywgY29t cGxhaW4pOwotCX0KLQorICAgICAgdHJlZSBuZXdfdmVjID0gdHN1YnN0X3Rl bXBsYXRlX3Bhcm1zX2xldmVsIChUUkVFX1ZBTFVFIChwYXJtcyksCisJCQkJ CQkgIGFyZ3MsIGNvbXBsYWluKTsKICAgICAgICpuZXdfcGFybXMgPQogCXRy ZWVfY29ucyAoc2l6ZV9pbnQgKFRNUExfUEFSTVNfREVQVEggKHBhcm1zKQog CQkJICAgICAtIFRNUExfQVJHU19ERVBUSCAoYXJncykpLApAQCAtMjM5NDAs NiArMjM5NTUsMTYgQEAgbWFrZV9hdXRvICh2b2lkKQogICByZXR1cm4gbWFr ZV9hdXRvXzEgKGdldF9pZGVudGlmaWVyICgiYXV0byIpLCB0cnVlKTsKIH0K IAorLyogUmV0dXJuIGEgQysrMTcgZGVkdWN0aW9uIHBsYWNlaG9sZGVyIGZv ciBjbGFzcyB0ZW1wbGF0ZSBUTVBMLiAgKi8KKwordHJlZQorbWFrZV90ZW1w bGF0ZV9wbGFjZWhvbGRlciAodHJlZSB0bXBsKQoreworICB0cmVlIHQgPSBt YWtlX2F1dG9fMSAoREVDTF9OQU1FICh0bXBsKSwgdHJ1ZSk7CisgIENMQVNT X1BMQUNFSE9MREVSX1RFTVBMQVRFICh0KSA9IHRtcGw7CisgIHJldHVybiB0 OworfQorCiAvKiBNYWtlIGEgImNvbnN0cmFpbmVkIGF1dG8iIHR5cGUtc3Bl Y2lmaWVyLiBUaGlzIGlzIGFuCiAgICBhdXRvIHR5cGUgd2l0aCBjb25zdHJh aW50cyB0aGF0IG11c3QgYmUgYXNzb2NpYXRlZCBhZnRlcgogICAgZGVkdWN0 aW9uLiAgVGhlIGNvbnN0cmFpbnQgaXMgZm9ybWVkIGZyb20gdGhlIGdpdmVu CkBAIC0yNDA5Nyw2ICsyNDEyMiwzMTYgQEAgZXh0cmFjdF9hdXRvcyAodHJl ZSB0eXBlKQogICByZXR1cm4gdHJlZV92ZWM7CiB9CiAKKy8qIFRoZSBzdGVt IGZvciBkZWR1Y3Rpb24gZ3VpZGUgbmFtZXMuICAqLworY29uc3QgY2hhciAq Y29uc3QgZGd1aWRlX2Jhc2UgPSAiX19kZ3VpZGVfIjsKKworLyogUmV0dXJu IHRoZSBuYW1lIGZvciBhIGRlZHVjdGlvbiBndWlkZSBmb3IgY2xhc3MgdGVt cGxhdGUgVE1QTC4gICovCisKK3RyZWUKK2RndWlkZV9uYW1lICh0cmVlIHRt cGwpCit7CisgIHRyZWUgdHlwZSA9IChUWVBFX1AgKHRtcGwpID8gdG1wbCA6 IFRSRUVfVFlQRSAodG1wbCkpOworICB0cmVlIHRuYW1lID0gVFlQRV9JREVO VElGSUVSICh0eXBlKTsKKyAgY2hhciAqYnVmID0gKGNoYXIgKikgYWxsb2Nh ICgxICsgc3RybGVuIChkZ3VpZGVfYmFzZSkKKwkJCSAgICAgICArIElERU5U SUZJRVJfTEVOR1RIICh0bmFtZSkpOworICBtZW1jcHkgKGJ1ZiwgZGd1aWRl X2Jhc2UsIHN0cmxlbiAoZGd1aWRlX2Jhc2UpKTsKKyAgbWVtY3B5IChidWYg KyBzdHJsZW4gKGRndWlkZV9iYXNlKSwgSURFTlRJRklFUl9QT0lOVEVSICh0 bmFtZSksCisJICBJREVOVElGSUVSX0xFTkdUSCAodG5hbWUpICsgMSk7Cisg IHRyZWUgZG5hbWUgPSBnZXRfaWRlbnRpZmllciAoYnVmKTsKKyAgVFJFRV9U WVBFIChkbmFtZSkgPSB0eXBlOworICByZXR1cm4gZG5hbWU7Cit9CisKKy8q IFRydWUgaWYgTkFNRSBpcyB0aGUgbmFtZSBvZiBhIGRlZHVjdGlvbiBndWlk ZS4gICovCisKK2Jvb2wKK2RndWlkZV9uYW1lX3AgKHRyZWUgbmFtZSkKK3sK KyAgcmV0dXJuIChUUkVFX1RZUEUgKG5hbWUpCisJICAmJiAhc3RybmNtcCAo SURFTlRJRklFUl9QT0lOVEVSIChuYW1lKSwgZGd1aWRlX2Jhc2UsCisJCSAg ICAgICBzdHJsZW4gKGRndWlkZV9iYXNlKSkpOworfQorCisvKiBUcnVlIGlm IEZOIGlzIGEgZGVkdWN0aW9uIGd1aWRlLiAgKi8KKworYm9vbAorZGVkdWN0 aW9uX2d1aWRlX3AgKHRyZWUgZm4pCit7CisgIGlmICh0cmVlIG5hbWUgPSBE RUNMX05BTUUgKGZuKSkKKyAgICByZXR1cm4gZGd1aWRlX25hbWVfcCAobmFt ZSk7CisgIHJldHVybiBmYWxzZTsKK30KKworLyogT0xEREVDTCBpcyBhIF9E RUNMIGZvciBhIHRlbXBsYXRlIHBhcmFtZXRlci4gIFJldHVybiBhIHNpbWls YXIgcGFyYW1ldGVyIGF0CisgICBMRVZFTDpJTkRFWCwgdXNpbmcgdHN1YnN0 X2FyZ3MgYW5kIGNvbXBsYWluIGZvciBzdWJzdGl0dXRpb24gaW50byBub24t dHlwZQorICAgdGVtcGxhdGUgcGFyYW1ldGVyIHR5cGVzLiAgTm90ZSB0aGF0 IHRoZSBoYW5kbGluZyBvZiB0ZW1wbGF0ZSB0ZW1wbGF0ZQorICAgcGFyYW1l dGVycyByZWxpZXMgb24gY3VycmVudF90ZW1wbGF0ZV9wYXJtcyBiZWluZyBz ZXQgYXBwcm9wcmlhdGVseSBmb3IgdGhlCisgICBuZXcgdGVtcGxhdGUuICAq LworCitzdGF0aWMgdHJlZQorcmV3cml0ZV90ZW1wbGF0ZV9wYXJtICh0cmVl IG9sZGRlY2wsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZXZlbCwKKwkJ ICAgICAgIHRyZWUgdHN1YnN0X2FyZ3MsIHRzdWJzdF9mbGFnc190IGNvbXBs YWluKQoreworICB0cmVlIG9sZGlkeCA9IGdldF90ZW1wbGF0ZV9wYXJtX2lu ZGV4IChvbGRkZWNsKTsKKworICB0cmVlIG5ld3R5cGU7CisgIGlmIChUUkVF X0NPREUgKG9sZGRlY2wpID09IFRZUEVfREVDTAorICAgICAgfHwgVFJFRV9D T0RFIChvbGRkZWNsKSA9PSBURU1QTEFURV9ERUNMKQorICAgIHsKKyAgICAg IG5ld3R5cGUgPSBjb3B5X3R5cGUgKFRSRUVfVFlQRSAob2xkZGVjbCkpOwor ICAgICAgVFlQRV9NQUlOX1ZBUklBTlQgKG5ld3R5cGUpID0gbmV3dHlwZTsK KyAgICB9CisgIGVsc2UKKyAgICBuZXd0eXBlID0gdHN1YnN0IChUUkVFX1RZ UEUgKG9sZGRlY2wpLCB0c3Vic3RfYXJncywKKwkJICAgICAgY29tcGxhaW4s IE5VTExfVFJFRSk7CisKKyAgdHJlZSBuZXdkZWNsCisgICAgPSBidWlsZF9k ZWNsIChERUNMX1NPVVJDRV9MT0NBVElPTiAob2xkZGVjbCksIFRSRUVfQ09E RSAob2xkZGVjbCksCisJCSAgREVDTF9OQU1FIChvbGRkZWNsKSwgbmV3dHlw ZSk7CisgIFNFVF9ERUNMX1RFTVBMQVRFX1BBUk1fUCAobmV3ZGVjbCk7CisK KyAgdHJlZSBuZXdpZHg7CisgIGlmIChUUkVFX0NPREUgKG9sZGRlY2wpID09 IFRZUEVfREVDTAorICAgICAgfHwgVFJFRV9DT0RFIChvbGRkZWNsKSA9PSBU RU1QTEFURV9ERUNMKQorICAgIHsKKyAgICAgIG5ld2lkeCA9IFRFTVBMQVRF X1RZUEVfUEFSTV9JTkRFWCAobmV3dHlwZSkKKwk9IGJ1aWxkX3RlbXBsYXRl X3Bhcm1faW5kZXggKGluZGV4LCBsZXZlbCwgbGV2ZWwsCisJCQkJICAgICBu ZXdkZWNsLCBuZXd0eXBlKTsKKyAgICAgIFRZUEVfU1RVQl9ERUNMIChuZXd0 eXBlKSA9IFRZUEVfTkFNRSAobmV3dHlwZSkgPSBuZXdkZWNsOworICAgICAg VFlQRV9DQU5PTklDQUwgKG5ld3R5cGUpID0gY2Fub25pY2FsX3R5cGVfcGFy YW1ldGVyIChuZXd0eXBlKTsKKworICAgICAgaWYgKFRSRUVfQ09ERSAob2xk ZGVjbCkgPT0gVEVNUExBVEVfREVDTCkKKwl7CisJICBERUNMX1RFTVBMQVRF X1JFU1VMVCAobmV3ZGVjbCkKKwkgICAgPSBidWlsZF9kZWNsIChERUNMX1NP VVJDRV9MT0NBVElPTiAob2xkZGVjbCksIFRZUEVfREVDTCwKKwkJCSAgREVD TF9OQU1FIChvbGRkZWNsKSwgbmV3dHlwZSk7CisJICBERUNMX0FSVElGSUNJ QUwgKERFQ0xfVEVNUExBVEVfUkVTVUxUIChuZXdkZWNsKSkgPSB0cnVlOwor CSAgLy8gRmlyc3QgY3JlYXRlIGEgY29weSAodHRhcmdzKSBvZiB0c3Vic3Rf YXJncyB3aXRoIGFuCisJICAvLyBhZGRpdGlvbmFsIGxldmVsIGZvciB0aGUg dGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVyJ3Mgb3duCisJICAvLyB0ZW1w bGF0ZSBwYXJhbWV0ZXJzICh0dHBhcm1zKS4KKwkgIHRyZWUgdHRwYXJtcyA9 IChJTk5FUk1PU1RfVEVNUExBVEVfUEFSTVMKKwkJCSAgKERFQ0xfVEVNUExB VEVfUEFSTVMgKG9sZGRlY2wpKSk7CisJICBjb25zdCBpbnQgZGVwdGggPSBU TVBMX0FSR1NfREVQVEggKHRzdWJzdF9hcmdzKTsKKwkgIHRyZWUgdHRhcmdz ID0gbWFrZV90cmVlX3ZlYyAoZGVwdGggKyAxKTsKKwkgIGZvciAoaW50IGkg PSAwOyBpIDwgZGVwdGg7ICsraSkKKwkgICAgVFJFRV9WRUNfRUxUICh0dGFy Z3MsIGkpID0gVFJFRV9WRUNfRUxUICh0c3Vic3RfYXJncywgaSk7CisJICBU UkVFX1ZFQ19FTFQgKHR0YXJncywgZGVwdGgpCisJICAgID0gdGVtcGxhdGVf cGFybXNfbGV2ZWxfdG9fYXJncyAodHRwYXJtcyk7CisJICAvLyBTdWJzdGl0 dXRlIHR0YXJncyBpbnRvIHR0cGFybXMgdG8gZml4IHJlZmVyZW5jZXMgdG8K KwkgIC8vIG90aGVyIHRlbXBsYXRlIHBhcmFtZXRlcnMuCisJICB0dHBhcm1z ID0gdHN1YnN0X3RlbXBsYXRlX3Bhcm1zX2xldmVsICh0dHBhcm1zLCB0dGFy Z3MsCisJCQkJCQkgY29tcGxhaW4pOworCSAgLy8gTm93IHN1YnN0aXR1dGUg YWdhaW4gd2l0aCBhcmdzIGJhc2VkIG9uIHRwYXJtcywgdG8gcmVkdWNlCisJ ICAvLyB0aGUgbGV2ZWwgb2YgdGhlIHR0cGFybXMuCisJICB0dGFyZ3MgPSBj dXJyZW50X3RlbXBsYXRlX2FyZ3MgKCk7CisJICB0dHBhcm1zID0gdHN1YnN0 X3RlbXBsYXRlX3Bhcm1zX2xldmVsICh0dHBhcm1zLCB0dGFyZ3MsCisJCQkJ CQkgY29tcGxhaW4pOworCSAgLy8gRmluYWxseSwgdGFjayB0aGUgYWRqdXN0 ZWQgcGFybXMgb250byB0cGFybXMuCisJICB0dHBhcm1zID0gdHJlZV9jb25z IChzaXplX2ludCAoZGVwdGgpLCB0dHBhcm1zLAorCQkJICAgICAgIGN1cnJl bnRfdGVtcGxhdGVfcGFybXMpOworCSAgREVDTF9URU1QTEFURV9QQVJNUyAo bmV3ZGVjbCkgPSB0dHBhcm1zOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7 CisgICAgICB0cmVlIG9sZGNvbnN0ID0gVEVNUExBVEVfUEFSTV9ERUNMIChv bGRpZHgpOworICAgICAgdHJlZSBuZXdjb25zdAorCT0gYnVpbGRfZGVjbCAo REVDTF9TT1VSQ0VfTE9DQVRJT04gKG9sZGNvbnN0KSwKKwkJICAgICAgVFJF RV9DT0RFIChvbGRjb25zdCksCisJCSAgICAgIERFQ0xfTkFNRSAob2xkY29u c3QpLCBuZXd0eXBlKTsKKyAgICAgIFRSRUVfQ09OU1RBTlQgKG5ld2NvbnN0 KSA9IFRSRUVfQ09OU1RBTlQgKG5ld2RlY2wpCisJPSBUUkVFX1JFQURPTkxZ IChuZXdjb25zdCkgPSBUUkVFX1JFQURPTkxZIChuZXdkZWNsKSA9IHRydWU7 CisgICAgICBTRVRfREVDTF9URU1QTEFURV9QQVJNX1AgKG5ld2NvbnN0KTsK KyAgICAgIG5ld2lkeCA9IGJ1aWxkX3RlbXBsYXRlX3Bhcm1faW5kZXggKGlu ZGV4LCBsZXZlbCwgbGV2ZWwsCisJCQkJCSAgbmV3Y29uc3QsIG5ld3R5cGUp OworICAgICAgREVDTF9JTklUSUFMIChuZXdkZWNsKSA9IERFQ0xfSU5JVElB TCAobmV3Y29uc3QpID0gbmV3aWR4OworICAgIH0KKworICBURU1QTEFURV9Q QVJNX1BBUkFNRVRFUl9QQUNLIChuZXdpZHgpCisgICAgPSBURU1QTEFURV9Q QVJNX1BBUkFNRVRFUl9QQUNLIChvbGRpZHgpOworICByZXR1cm4gbmV3ZGVj bDsKK30KKworLyogUmV0dXJucyBhIEMrKzE3IGNsYXNzIGRlZHVjdGlvbiBn dWlkZSB0ZW1wbGF0ZSBiYXNlZCBvbiB0aGUgY29uc3RydWN0b3IKKyAgIENU T1IuICAqLworCitzdGF0aWMgdHJlZQorYnVpbGRfZGVkdWN0aW9uX2d1aWRl ICh0cmVlIGN0b3IsIHRyZWUgb3V0ZXJfYXJncywgdHN1YnN0X2ZsYWdzX3Qg Y29tcGxhaW4pCit7CisgIGlmIChvdXRlcl9hcmdzKQorICAgIGN0b3IgPSB0 c3Vic3QgKGN0b3IsIG91dGVyX2FyZ3MsIGNvbXBsYWluLCBjdG9yKTsKKyAg dHJlZSB0eXBlID0gREVDTF9DT05URVhUIChjdG9yKTsKKyAgdHJlZSBmbl90 bXBsOworICBpZiAoVFJFRV9DT0RFIChjdG9yKSA9PSBURU1QTEFURV9ERUNM KQorICAgIHsKKyAgICAgIGZuX3RtcGwgPSBjdG9yOworICAgICAgY3RvciA9 IERFQ0xfVEVNUExBVEVfUkVTVUxUIChmbl90bXBsKTsKKyAgICB9CisgIGVs c2UKKyAgICBmbl90bXBsID0gREVDTF9USV9URU1QTEFURSAoY3Rvcik7CisK KyAgdHJlZSB0cGFybXMgPSBERUNMX1RFTVBMQVRFX1BBUk1TIChmbl90bXBs KTsKKyAgLyogSWYgdHlwZSBpcyBhIG1lbWJlciBjbGFzcyB0ZW1wbGF0ZSwg REVDTF9USV9BUkdTIChjdG9yKSB3aWxsIGhhdmUgZnVsbHkKKyAgICAgc3Bl Y2lhbGl6ZWQgYXJncyBmb3IgdGhlIGVuY2xvc2luZyBjbGFzcy4gIFN0cmlw IHRob3NlIG9mZiwgYXMgdGhlCisgICAgIGRlZHVjdGlvbiBndWlkZSB3b24n dCBoYXZlIHRob3NlIHRlbXBsYXRlIHBhcmFtZXRlcnMuICAqLworICB0cmVl IHRhcmdzID0gZ2V0X2lubmVybW9zdF90ZW1wbGF0ZV9hcmdzIChERUNMX1RJ X0FSR1MgKGN0b3IpLAorCQkJCQkgICAgVE1QTF9QQVJNU19ERVBUSCAodHBh cm1zKSk7CisgIC8qIERpc2NhcmQgdGhlICd0aGlzJyBwYXJhbWV0ZXIuICAq LworICB0cmVlIGZwYXJtcyA9IEZVTkNUSU9OX0FSR19DSEFJTiAoY3Rvcik7 CisgIHRyZWUgZmFyZ3MgPSBUUkVFX0NIQUlOIChERUNMX0FSR1VNRU5UUyAo Y3RvcikpOworICB0cmVlIGNpID0gZ2V0X2NvbnN0cmFpbnRzIChjdG9yKTsK KworICBpZiAoUFJJTUFSWV9URU1QTEFURV9QIChmbl90bXBsKSkKKyAgICB7 CisgICAgICAvKiBGb3IgYSBtZW1iZXIgdGVtcGxhdGUgY29uc3RydWN0b3Is IHdlIG5lZWQgdG8gZmxhdHRlbiB0aGUgdHdvIHRlbXBsYXRlCisJIHBhcmFt ZXRlciBsaXN0cyBpbnRvIG9uZSwgYW5kIHRoZW4gYWRqdXN0IHRoZSBmdW5j dGlvbiBzaWduYXR1cmUKKwkgYWNjb3JkaW5nbHkuICBUaGlzIGdldHMuLi5j b21wbGljYXRlZC4gICovCisgICAgICArK3Byb2Nlc3NpbmdfdGVtcGxhdGVf ZGVjbDsKKyAgICAgIHRyZWUgc2F2ZV9wYXJtcyA9IGN1cnJlbnRfdGVtcGxh dGVfcGFybXM7CisKKyAgICAgIC8qIEZvciBhIG1lbWJlciB0ZW1wbGF0ZSB3 ZSBzaG91bGQgaGF2ZSB0d28gbGV2ZWxzIG9mIHBhcm1zL2FyZ3MsIG9uZSBm b3IKKwkgdGhlIGNsYXNzIGFuZCBvbmUgZm9yIHRoZSBjb25zdHJ1Y3Rvci4g IFdlIHN0cmlwcGVkIHNwZWNpYWxpemVkIGFyZ3MKKwkgZm9yIGZ1cnRoZXIg ZW5jbG9zaW5nIGNsYXNzZXMgYWJvdmUuICAqLworICAgICAgY29uc3QgaW50 IGRlcHRoID0gMjsKKyAgICAgIGdjY19hc3NlcnQgKFRNUExfQVJHU19ERVBU SCAodGFyZ3MpID09IGRlcHRoKTsKKworICAgICAgLyogVGVtcGxhdGUgYXJn cyBmb3IgdHJhbnNsYXRpbmcgcmVmZXJlbmNlcyB0byB0aGUgdHdvLWxldmVs IHRlbXBsYXRlCisJIHBhcmFtZXRlcnMgaW50byByZWZlcmVuY2VzIHRvIHRo ZSBvbmUtbGV2ZWwgdGVtcGxhdGUgcGFyYW1ldGVycyB3ZSBhcmUKKwkgY3Jl YXRpbmcuICAqLworICAgICAgdHJlZSB0c3Vic3RfYXJncyA9IGNvcHlfbm9k ZSAodGFyZ3MpOworICAgICAgVE1QTF9BUkdTX0xFVkVMICh0c3Vic3RfYXJn cywgZGVwdGgpCisJPSBjb3B5X25vZGUgKFRNUExfQVJHU19MRVZFTCAodHN1 YnN0X2FyZ3MsIGRlcHRoKSk7CisKKyAgICAgIC8qIFRlbXBsYXRlIHBhcm1z IGZvciB0aGUgY29uc3RydWN0b3IgdGVtcGxhdGUuICAqLworICAgICAgdHJl ZSBmdHBhcm1zID0gVFJFRV9WQUxVRSAodHBhcm1zKTsKKyAgICAgIHVuc2ln bmVkIGZsZW4gPSBUUkVFX1ZFQ19MRU5HVEggKGZ0cGFybXMpOworICAgICAg LyogVGVtcGxhdGUgcGFybXMgZm9yIHRoZSBjbGFzcyB0ZW1wbGF0ZS4gICov CisgICAgICB0cGFybXMgPSBUUkVFX0NIQUlOICh0cGFybXMpOworICAgICAg dHJlZSBjdHBhcm1zID0gVFJFRV9WQUxVRSAodHBhcm1zKTsKKyAgICAgIHVu c2lnbmVkIGNsZW4gPSBUUkVFX1ZFQ19MRU5HVEggKGN0cGFybXMpOworICAg ICAgLyogVGVtcGxhdGUgcGFybXMgZm9yIHRoZSBkZWR1Y3Rpb24gZ3VpZGUg c3RhcnQgYXMgYSBjb3B5IG9mIHRoZSB0ZW1wbGF0ZQorCSBwYXJtcyBmb3Ig dGhlIGNsYXNzLiAgV2Ugc2V0IGN1cnJlbnRfdGVtcGxhdGVfcGFybXMgZm9y CisJIGxvb2t1cF90ZW1wbGF0ZV9jbGFzc18xLiAgKi8KKyAgICAgIGN1cnJl bnRfdGVtcGxhdGVfcGFybXMgPSB0cGFybXMgPSBjb3B5X25vZGUgKHRwYXJt cyk7CisgICAgICB0cmVlIG5ld192ZWMgPSBUUkVFX1ZBTFVFICh0cGFybXMp ID0gbWFrZV90cmVlX3ZlYyAoZmxlbiArIGNsZW4pOworICAgICAgZm9yICh1 bnNpZ25lZCBpID0gMDsgaSA8IGNsZW47ICsraSkKKwlUUkVFX1ZFQ19FTFQg KG5ld192ZWMsIGkpID0gVFJFRV9WRUNfRUxUIChjdHBhcm1zLCBpKTsKKwor ICAgICAgLyogTm93IHdlIG5lZWQgdG8gcmV3cml0ZSB0aGUgY29uc3RydWN0 b3IgcGFybXMgdG8gYXBwZW5kIHRoZW0gdG8gdGhlCisJIGNsYXNzIHBhcm1z LiAgKi8KKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmbGVuOyAr K2kpCisJeworCSAgdW5zaWduZWQgaW5kZXggPSBpICsgY2xlbjsKKwkgIHVu c2lnbmVkIGxldmVsID0gMTsKKwkgIHRyZWUgb2xkZWx0ID0gVFJFRV9WRUNf RUxUIChmdHBhcm1zLCBpKTsKKwkgIHRyZWUgb2xkZGVjbCA9IFRSRUVfVkFM VUUgKG9sZGVsdCk7CisJICB0cmVlIG5ld2RlY2wgPSByZXdyaXRlX3RlbXBs YXRlX3Bhcm0gKG9sZGRlY2wsIGluZGV4LCBsZXZlbCwKKwkJCQkJCXRzdWJz dF9hcmdzLCBjb21wbGFpbik7CisJICB0cmVlIG5ld2RlZiA9IHRzdWJzdF90 ZW1wbGF0ZV9hcmcgKFRSRUVfUFVSUE9TRSAob2xkZWx0KSwKKwkJCQkJICAg ICB0c3Vic3RfYXJncywgY29tcGxhaW4sIGN0b3IpOworCSAgdHJlZSBsaXN0 ID0gYnVpbGRfdHJlZV9saXN0IChuZXdkZWYsIG5ld2RlY2wpOworCSAgVEVN UExBVEVfUEFSTV9DT05TVFJBSU5UUyAobGlzdCkKKwkgICAgPSB0c3Vic3Rf Y29uc3RyYWludF9pbmZvIChURU1QTEFURV9QQVJNX0NPTlNUUkFJTlRTIChv bGRlbHQpLAorCQkJCSAgICAgIHRzdWJzdF9hcmdzLCBjb21wbGFpbiwgY3Rv cik7CisJICBUUkVFX1ZFQ19FTFQgKG5ld192ZWMsIGluZGV4KSA9IGxpc3Q7 CisJICBUTVBMX0FSRyAodHN1YnN0X2FyZ3MsIGRlcHRoLCBpKSA9IHRlbXBs YXRlX3Bhcm1fdG9fYXJnIChsaXN0KTsKKwl9CisKKyAgICAgIC8qIE5vdyB3 ZSBoYXZlIGEgZmluYWwgc2V0IG9mIHRlbXBsYXRlIHBhcm1zIHRvIHN1YnN0 aXR1dGUgaW50byB0aGUKKwkgZnVuY3Rpb24gc2lnbmF0dXJlLiAgKi8KKyAg ICAgIHRhcmdzID0gdGVtcGxhdGVfcGFybXNfdG9fYXJncyAodHBhcm1zKTsK KyAgICAgIGZwYXJtcyA9IHRzdWJzdCAoZnBhcm1zLCB0c3Vic3RfYXJncywg Y29tcGxhaW4sIGN0b3IpOworICAgICAgZmFyZ3MgPSB0c3Vic3QgKGZhcmdz LCB0c3Vic3RfYXJncywgY29tcGxhaW4sIGN0b3IpOworICAgICAgaWYgKGNp KQorCWNpID0gdHN1YnN0X2NvbnN0cmFpbnRfaW5mbyAoY2ksIHRzdWJzdF9h cmdzLCBjb21wbGFpbiwgY3Rvcik7CisKKyAgICAgIGN1cnJlbnRfdGVtcGxh dGVfcGFybXMgPSBzYXZlX3Bhcm1zOworICAgICAgLS1wcm9jZXNzaW5nX3Rl bXBsYXRlX2RlY2w7CisgICAgfQorCisgIHRyZWUgZm50eXBlID0gYnVpbGRf ZnVuY3Rpb25fdHlwZSAodHlwZSwgZnBhcm1zKTsKKyAgdHJlZSBkZWRfZm4g PSBidWlsZF9sYW5nX2RlY2xfbG9jIChERUNMX1NPVVJDRV9MT0NBVElPTiAo Y3RvciksCisJCQkJICAgICBGVU5DVElPTl9ERUNMLAorCQkJCSAgICAgZGd1 aWRlX25hbWUgKHR5cGUpLCBmbnR5cGUpOworICBERUNMX0FSR1VNRU5UUyAo ZGVkX2ZuKSA9IGZhcmdzOworICB0cmVlIGRlZF90bXBsID0gYnVpbGRfdGVt cGxhdGVfZGVjbCAoZGVkX2ZuLCB0cGFybXMsIC8qbWVtYmVyKi9mYWxzZSk7 CisgIERFQ0xfVEVNUExBVEVfUkVTVUxUIChkZWRfdG1wbCkgPSBkZWRfZm47 CisgIFRSRUVfVFlQRSAoZGVkX3RtcGwpID0gVFJFRV9UWVBFIChkZWRfZm4p OworICBERUNMX1RFTVBMQVRFX0lORk8gKGRlZF9mbikgPSBidWlsZF90ZW1w bGF0ZV9pbmZvIChkZWRfdG1wbCwgdGFyZ3MpOworICBpZiAoY2kpCisgICAg c2V0X2NvbnN0cmFpbnRzIChkZWRfdG1wbCwgY2kpOworCisgIHJldHVybiBk ZWRfdG1wbDsKK30KKworLyogRGVkdWNlIHRlbXBsYXRlIGFyZ3VtZW50cyBm b3IgdGhlIGNsYXNzIHRlbXBsYXRlIFRNUEwgYmFzZWQgb24gdGhlCisgICBp bml0aWFsaXplciBJTklULCBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgdHlw ZS4gICovCisKK3RyZWUKK2RvX2NsYXNzX2RlZHVjdGlvbiAodHJlZSB0bXBs LCB0cmVlIGluaXQsIHRzdWJzdF9mbGFnc190IGNvbXBsYWluKQoreworICBn Y2NfYXNzZXJ0IChERUNMX0NMQVNTX1RFTVBMQVRFX1AgKHRtcGwpKTsKKyAg dHJlZSB0eXBlID0gVFJFRV9UWVBFICh0bXBsKTsKKworICB2ZWM8dHJlZSx2 YV9nYz4gKmFyZ3M7CisgIGlmIChUUkVFX0NPREUgKGluaXQpID09IFRSRUVf TElTVCkKKyAgICBhcmdzID0gbWFrZV90cmVlX3ZlY3Rvcl9mcm9tX2xpc3Qg KGluaXQpOworICBlbHNlCisgICAgYXJncyA9IG1ha2VfdHJlZV92ZWN0b3Jf c2luZ2xlIChpbml0KTsKKworICBpZiAoYXJncy0+bGVuZ3RoKCkgPT0gMSkK KyAgICB7CisgICAgICAvKiBGaXJzdCB0cnkgdG8gZGVkdWNlIGRpcmVjdGx5 LCBzaW5jZSB3ZSBkb24ndCBoYXZlIGltcGxpY2l0bHktZGVjbGFyZWQKKwkg Y29uc3RydWN0b3JzIHlldC4gICovCisgICAgICB0cmVlIHBhcm1zID0gYnVp bGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIHR5cGUpOworICAgICAgdHJlZSB0 cGFybXMgPSBJTk5FUk1PU1RfVEVNUExBVEVfUEFSTVMgKERFQ0xfVEVNUExB VEVfUEFSTVMgKHRtcGwpKTsKKyAgICAgIHRyZWUgdGFyZ3MgPSBtYWtlX3Ry ZWVfdmVjIChUUkVFX1ZFQ19MRU5HVEggKHRwYXJtcykpOworICAgICAgaW50 IGVyciA9IHR5cGVfdW5pZmljYXRpb25fcmVhbCAodHBhcm1zLCB0YXJncywg cGFybXMsICYoKmFyZ3MpWzBdLAorCQkJCSAgICAgICAxLCAvKnN1YnIqL2Zh bHNlLCBERURVQ0VfQ0FMTCwKKwkJCQkgICAgICAgTE9PS1VQX05PUk1BTCwg TlVMTCwgLypleHBsYWluKi9mYWxzZSk7CisgICAgICBpZiAoZXJyID09IDAp CisJcmV0dXJuIHRzdWJzdCAodHlwZSwgdGFyZ3MsIGNvbXBsYWluLCB0bXBs KTsKKyAgICB9CisKKyAgdHJlZSBkbmFtZSA9IGRndWlkZV9uYW1lICh0bXBs KTsKKyAgdHJlZSBjYW5kcyA9IGxvb2t1cF9xdWFsaWZpZWRfbmFtZSAoQ1Bf REVDTF9DT05URVhUICh0bXBsKSwgZG5hbWUsCisJCQkJICAgICAgLyp0eXBl Ki9mYWxzZSwgLypjb21wbGFpbiovZmFsc2UsCisJCQkJICAgICAgLypoaWRk ZW4qL2ZhbHNlKTsKKyAgaWYgKGNhbmRzID09IGVycm9yX21hcmtfbm9kZSkK KyAgICBjYW5kcyA9IE5VTExfVFJFRTsKKworICB0cmVlIG91dGVyX2FyZ3Mg PSBOVUxMX1RSRUU7CisgIGlmIChERUNMX0NMQVNTX1NDT1BFX1AgKHRtcGwp CisgICAgICAmJiBDTEFTU1RZUEVfVEVNUExBVEVfSU5GTyAoREVDTF9DT05U RVhUICh0bXBsKSkpCisgICAgeworICAgICAgb3V0ZXJfYXJncyA9IENMQVNT VFlQRV9USV9BUkdTIChERUNMX0NPTlRFWFQgKHRtcGwpKTsKKyAgICAgIHR5 cGUgPSBUUkVFX1RZUEUgKG1vc3RfZ2VuZXJhbF90ZW1wbGF0ZSAodG1wbCkp OworICAgIH0KKworICBpZiAoQ0xBU1NUWVBFX01FVEhPRF9WRUMgKHR5cGUp KQorICAgIC8vIEZJWE1FIGNhY2hlIGFydGlmaWNpYWwgZGVkdWN0aW9uIGd1 aWRlcworICAgIGZvciAodHJlZSBmbnMgPSBDTEFTU1RZUEVfQ09OU1RSVUNU T1JTICh0eXBlKTsgZm5zOyBmbnMgPSBPVkxfTkVYVCAoZm5zKSkKKyAgICAg IHsKKwl0cmVlIGZuID0gT1ZMX0NVUlJFTlQgKGZucyk7CisJdHJlZSBndWlk ZSA9IGJ1aWxkX2RlZHVjdGlvbl9ndWlkZSAoZm4sIG91dGVyX2FyZ3MsIGNv bXBsYWluKTsKKwljYW5kcyA9IG92bF9jb25zIChndWlkZSwgY2FuZHMpOwor ICAgICAgfQorCisgIGlmIChjYW5kcyA9PSBOVUxMX1RSRUUpCisgICAgewor ICAgICAgZXJyb3IgKCJjYW5ub3QgZGVkdWNlIHRlbXBsYXRlIGFyZ3VtZW50 cyBmb3IgJXFULCBhcyBpdCBoYXMgIgorCSAgICAgIm5vIGRlZHVjdGlvbiBn dWlkZXMgb3IgdXNlci1kZWNsYXJlZCBjb25zdHJ1Y3RvcnMiLCB0eXBlKTsK KyAgICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7CisgICAgfQorCisgIHRy ZWUgdCA9IGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsIChjYW5kcywgJmFyZ3Ms IC8qa29lbmlnKi9mYWxzZSwKKwkJCQkgICAgY29tcGxhaW58dGZfZGVjbHR5 cGUpOworCisgIHJlbGVhc2VfdHJlZV92ZWN0b3IgKGFyZ3MpOworCisgIHJl dHVybiBUUkVFX1RZUEUgKHQpOworfQorCiAvKiBSZXBsYWNlIG9jY3VycmVu Y2VzIG9mICdhdXRvJyBpbiBUWVBFIHdpdGggdGhlIGFwcHJvcHJpYXRlIHR5 cGUgZGVkdWNlZAogICAgZnJvbSBJTklULiAgQVVUT19OT0RFIGlzIHRoZSBU RU1QTEFURV9UWVBFX1BBUk0gdXNlZCBmb3IgJ2F1dG8nIGluIFRZUEUuICAq LwogCkBAIC0yNDE3NSw2ICsyNDUxMCw5IEBAIGRvX2F1dG9fZGVkdWN0aW9u ICh0cmVlIHR5cGUsIHRyZWUgaW5pdCwgdHJlZSBhdXRvX25vZGUsCiAJICBy ZXR1cm4gZXJyb3JfbWFya19ub2RlOwogCX0KICAgICB9CisgIGVsc2UgaWYg KHRyZWUgdG1wbCA9IENMQVNTX1BMQUNFSE9MREVSX1RFTVBMQVRFIChhdXRv X25vZGUpKQorICAgIC8qIEMrKzE3IGNsYXNzIHRlbXBsYXRlIGFyZ3VtZW50 IGRlZHVjdGlvbi4gICovCisgICAgcmV0dXJuIGRvX2NsYXNzX2RlZHVjdGlv biAodG1wbCwgaW5pdCwgY29tcGxhaW4pOwogICBlbHNlCiAgICAgewogICAg ICAgdHJlZSBwYXJtcyA9IGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB0 eXBlKTsKQEAgLTI0Mjc0LDYgKzI0NjEyLDIwIEBAIHNwbGljZV9sYXRlX3Jl dHVybl90eXBlICh0cmVlIHR5cGUsIHRyZWUgbGF0ZV9yZXR1cm5fdHlwZSkK IHsKICAgaWYgKGlzX2F1dG8gKHR5cGUpKQogICAgIHsKKyAgICAgIGlmICh0 cmVlIHRtcGwgPSBDTEFTU19QTEFDRUhPTERFUl9URU1QTEFURSAodHlwZSkp CisJeworCSAgaWYgKCFsYXRlX3JldHVybl90eXBlKQorCSAgICBlcnJvciAo ImRlZHVjdGlvbiBndWlkZSBtdXN0IGhhdmUgdHJhaWxpbmcgcmV0dXJuIHR5 cGUiKTsKKwkgIGVsc2UgaWYgKENMQVNTX1RZUEVfUCAobGF0ZV9yZXR1cm5f dHlwZSkKKwkJICAgJiYgQ0xBU1NUWVBFX1RFTVBMQVRFX0lORk8gKGxhdGVf cmV0dXJuX3R5cGUpCisJCSAgICYmIENMQVNTVFlQRV9USV9URU1QTEFURSAo bGF0ZV9yZXR1cm5fdHlwZSkgPT0gdG1wbCkKKwkgICAgLyogT0sgKi87CisJ ICBlbHNlCisJICAgIGVycm9yICgidHJhaWxpbmcgcmV0dXJuIHR5cGUgJXFU IG9mIGRlZHVjdGlvbiBndWlkZSBpcyBub3QgIgorCQkgICAiYSBzcGVjaWFs aXphdGlvbiBvZiAlcVQiLAorCQkgICBsYXRlX3JldHVybl90eXBlLCBUUkVF X1RZUEUgKHRtcGwpKTsKKwl9CisKICAgICAgIGlmIChsYXRlX3JldHVybl90 eXBlKQogCXJldHVybiBsYXRlX3JldHVybl90eXBlOwogCkBAIC0yNDI4OCwx NCArMjQ2NDAsMTUgQEAgc3BsaWNlX2xhdGVfcmV0dXJuX3R5cGUgKHRyZWUg dHlwZSwgdHJlZSBsYXRlX3JldHVybl90eXBlKQogfQogCiAvKiBSZXR1cm5z IHRydWUgaWZmIFRZUEUgaXMgYSBURU1QTEFURV9UWVBFX1BBUk0gcmVwcmVz ZW50aW5nICdhdXRvJyBvcgotICAgJ2RlY2x0eXBlKGF1dG8pJy4gICovCisg ICAnZGVjbHR5cGUoYXV0byknIG9yIGEgZGVkdWNlZCBjbGFzcyB0ZW1wbGF0 ZS4gICovCiAKIGJvb2wKIGlzX2F1dG8gKGNvbnN0X3RyZWUgdHlwZSkKIHsK ICAgaWYgKFRSRUVfQ09ERSAodHlwZSkgPT0gVEVNUExBVEVfVFlQRV9QQVJN CiAgICAgICAmJiAoVFlQRV9JREVOVElGSUVSICh0eXBlKSA9PSBnZXRfaWRl bnRpZmllciAoImF1dG8iKQotCSAgfHwgVFlQRV9JREVOVElGSUVSICh0eXBl KSA9PSBnZXRfaWRlbnRpZmllciAoImRlY2x0eXBlKGF1dG8pIikpKQorCSAg fHwgVFlQRV9JREVOVElGSUVSICh0eXBlKSA9PSBnZXRfaWRlbnRpZmllciAo ImRlY2x0eXBlKGF1dG8pIikKKwkgIHx8IENMQVNTX1BMQUNFSE9MREVSX1RF TVBMQVRFICh0eXBlKSkpCiAgICAgcmV0dXJuIHRydWU7CiAgIGVsc2UKICAg ICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9nY2MvY3AvdHlwZWNrMi5j IGIvZ2NjL2NwL3R5cGVjazIuYwppbmRleCA2ZTIyNjg1Li5hMDYzZWEzIDEw MDY0NAotLS0gYS9nY2MvY3AvdHlwZWNrMi5jCisrKyBiL2djYy9jcC90eXBl Y2syLmMKQEAgLTE5NTIsMTEgKzE5NTIsMjMgQEAgYnVpbGRfZnVuY3Rpb25h bF9jYXN0ICh0cmVlIGV4cCwgdHJlZSBwYXJtcywgdHN1YnN0X2ZsYWdzX3Qg Y29tcGxhaW4pCiAgICAgICByZXR1cm4gZXJyb3JfbWFya19ub2RlOwogICAg IH0KIAotICBpZiAodHlwZV91c2VzX2F1dG8gKHR5cGUpKQorICBpZiAodHJl ZSBhbm9kZSA9IHR5cGVfdXNlc19hdXRvICh0eXBlKSkKICAgICB7Ci0gICAg ICBpZiAoY29tcGxhaW4gJiB0Zl9lcnJvcikKLQllcnJvciAoImludmFsaWQg dXNlIG9mICU8YXV0byU+Iik7Ci0gICAgICByZXR1cm4gZXJyb3JfbWFya19u b2RlOworICAgICAgaWYgKCFDTEFTU19QTEFDRUhPTERFUl9URU1QTEFURSAo YW5vZGUpKQorCXsKKwkgIGlmIChjb21wbGFpbiAmIHRmX2Vycm9yKQorCSAg ICBlcnJvciAoImludmFsaWQgdXNlIG9mICVxVCIsIGFub2RlKTsKKwkgIHJl dHVybiBlcnJvcl9tYXJrX25vZGU7CisJfQorICAgICAgZWxzZSBpZiAoIXBh cm1zKQorCXsKKwkgIGlmIChjb21wbGFpbiAmIHRmX2Vycm9yKQorCSAgICBl cnJvciAoImNhbm5vdCBkZWR1Y2UgdGVtcGxhdGUgYXJndW1lbnRzIGZvciAl cVQgZnJvbSAoKSIsIGFub2RlKTsKKwkgIHJldHVybiBlcnJvcl9tYXJrX25v ZGU7CisJfQorICAgICAgZWxzZQorCXR5cGUgPSBkb19hdXRvX2RlZHVjdGlv biAodHlwZSwgcGFybXMsIGFub2RlLCBjb21wbGFpbiwKKwkJCQkgIGFkY192 YXJpYWJsZV90eXBlKTsKICAgICB9CiAKICAgaWYgKHByb2Nlc3NpbmdfdGVt cGxhdGVfZGVjbCkKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRn L2NvbmNlcHRzL2NsYXNzLWRlZHVjdGlvbjEuQyBiL2djYy90ZXN0c3VpdGUv ZysrLmRnL2NvbmNlcHRzL2NsYXNzLWRlZHVjdGlvbjEuQwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQ4Y2Y4Ci0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29uY2VwdHMvY2xhc3Mt ZGVkdWN0aW9uMS5DCkBAIC0wLDAgKzEsMTcgQEAKKy8vIHsgZGctb3B0aW9u cyAiLXN0ZD1jKysxeiAtZmNvbmNlcHRzIiB9CisKK3RlbXBsYXRlIDxjbGFz cyBUPgorY29uY2VwdCBib29sIElzaW50ID0gX19pc19zYW1lX2FzKFQsaW50 KTsKKwordGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgQQoreworICBpbnQg aTsKKyAgQSguLi4pOworfTsKKwordGVtcGxhdGUgPElzaW50IEk+CitBKEkp IC0+IEE8ST47CisKK0EgYSgxKTsKK0EgYTIoMS4wKTsJCQkvLyB7IGRnLWVy cm9yICIiIH0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2Nv bmNlcHRzL3Zhci1jb25jZXB0NS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y29uY2VwdHMvdmFyLWNvbmNlcHQ1LkMKaW5kZXggY2ExNjMzMi4uYjkxZWI5 NCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29uY2VwdHMv dmFyLWNvbmNlcHQ1LkMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29u Y2VwdHMvdmFyLWNvbmNlcHQ1LkMKQEAgLTEwLDUgKzEwLDUgQEAgY29uY2Vw dCBib29sIEMyID0gdHJ1ZTsKIHRlbXBsYXRlPEMxIFQ+IC8vIHsgZGctZXJy b3IgIm5vdCBhIHR5cGUiIH0KIGNvbnN0ZXhwciBib29sIGYxKCApICB7IHJl dHVybiB0cnVlOyB9CiAKLXRlbXBsYXRlPEMyPGludD4gVD4gLy8geyBkZy1l cnJvciAiZXhwZWN0ZWQiIH0KK3RlbXBsYXRlPEMyPGludD4gVD4gLy8geyBk Zy1lcnJvciAiZXhwZWN0ZWR8bm90IGEgdHlwZSIgfQogY29uc3RleHByIGJv b2wgZjIoICkgIHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NwcDF6L2NsYXNzLWRlZHVjdGlvbjEuQyBiL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2NwcDF6L2NsYXNzLWRlZHVjdGlvbjEuQwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2ZjZWQ5Ci0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMXov Y2xhc3MtZGVkdWN0aW9uMS5DCkBAIC0wLDAgKzEsOSBAQAorLy8geyBkZy1v cHRpb25zIC1zdGQ9YysrMXogfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0 cnVjdCBBCit7CisgIEEoVCk7Cit9OworCitBIGEgKDQyKTsKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDF6L2NsYXNzLWRlZHVjdGlv bjEwLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAxei9jbGFzcy1kZWR1 Y3Rpb24xMC5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjhiYzQyODgKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9jcHAxei9jbGFzcy1kZWR1Y3Rpb24xMC5DCkBAIC0wLDAgKzEsMTEg QEAKKy8vIHsgZGctb3B0aW9ucyAtc3RkPWMrKzF6IH0KKwordGVtcGxhdGUg PGNsYXNzIFQ+CitzdHJ1Y3QgQQoreworICBpbnQgaTsKKyAgQSguLi4pOwor fTsKKwordGVtcGxhdGUgPGNsYXNzIFQ+CitBKFQpIC0+IEE8VD4geyB9CQkv LyB7IGRnLWVycm9yICIxOmZ1bmN0aW9uIGJvZHkiIH0KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDF6L2NsYXNzLWRlZHVjdGlvbjEx LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAxei9jbGFzcy1kZWR1Y3Rp b24xMS5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRl OTAyOTIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5k Zy9jcHAxei9jbGFzcy1kZWR1Y3Rpb24xMS5DCkBAIC0wLDAgKzEsMTEgQEAK Ky8vIHsgZGctb3B0aW9ucyAtc3RkPWMrKzF6IH0KKwordGVtcGxhdGUgPGNs YXNzIFQ+CitzdHJ1Y3QgQQoreworICBpbnQgaTsKKyAgQSguLi4pOworfTsK KwordGVtcGxhdGUgPGNsYXNzIFQ+CitzdGF0aWMgQShUKSAtPiBBPFQ+OwkJ Ly8geyBkZy1lcnJvciAiMTpkZWNsLXNwZWNpZmllciIgfQpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMXovY2xhc3MtZGVkdWN0aW9u MTIuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDF6L2NsYXNzLWRlZHVj dGlvbjEyLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u OWViNTQxZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysr LmRnL2NwcDF6L2NsYXNzLWRlZHVjdGlvbjEyLkMKQEAgLTAsMCArMSwxNyBA QAorLy8geyBkZy1vcHRpb25zIC1zdGQ9YysrMXogfQorCit0ZW1wbGF0ZSA8 Y2xhc3MgVD4KK3N0cnVjdCBBCit7CisgIHRlbXBsYXRlPGNsYXNzIFUsIHRl bXBsYXRlPFUgdT4gY2xhc3MgUD4KKyAgQShULFUsUDw0Mj4pOworfTsKKwor dGVtcGxhdGUgPGludCBJPiBzdHJ1Y3QgQiB7IH07CisKK2ludCBpOworQSBh KCZpLDIsQjw0Mj4oKSk7CisKK3RlbXBsYXRlIDxjbGFzcyxjbGFzcz4gY2xh c3Mgc2FtZTsKK3RlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBzYW1lPFQsVD4g e307CitzYW1lPGRlY2x0eXBlKGEpLCBBPGludCo+PiBzOwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMXovY2xhc3MtZGVkdWN0aW9u MTMuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDF6L2NsYXNzLWRlZHVj dGlvbjEzLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u MGUyZDIzNQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysr LmRnL2NwcDF6L2NsYXNzLWRlZHVjdGlvbjEzLkMKQEAgLTAsMCArMSwxOCBA QAorLy8geyBkZy1vcHRpb25zIC1zdGQ9YysrMXogfQorCit0ZW1wbGF0ZSA8 Y2xhc3MgVD4KK3N0cnVjdCBBCit7CisgIHRlbXBsYXRlIDxjbGFzcyBVPgor ICBzdHJ1Y3QgQgorICB7CisgICAgdGVtcGxhdGUgPGNsYXNzIFY+CisgICAg QihULFUsVik7CisgIH07Cit9OworCitBPGludD46OkIgYigxLDIuMCwnXDMn KTsKKwordGVtcGxhdGUgPGNsYXNzLGNsYXNzPiBjbGFzcyBzYW1lOwordGVt cGxhdGUgPGNsYXNzIFQ+IGNsYXNzIHNhbWU8VCxUPiB7fTsKK3NhbWU8ZGVj bHR5cGUoYiksIEE8aW50Pjo6Qjxkb3VibGU+PiBzOwpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMXovY2xhc3MtZGVkdWN0aW9uMi5D IGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMXovY2xhc3MtZGVkdWN0aW9u Mi5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNmIy NjMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9j cHAxei9jbGFzcy1kZWR1Y3Rpb24yLkMKQEAgLTAsMCArMSwxMCBAQAorLy8g eyBkZy1vcHRpb25zIC1zdGQ9YysrMXogfQorCit0ZW1wbGF0ZSA8Y2xhc3Mg VD4KK3N0cnVjdCBBCit7CisgIHRlbXBsYXRlIDxjbGFzcyBVPgorICBBKFQs IFUpOworfTsKKworQSBhICg0MiwgMS4wKTsKZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NwcDF6L2NsYXNzLWRlZHVjdGlvbjMuQyBiL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2NwcDF6L2NsYXNzLWRlZHVjdGlvbjMuQwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDg2OTY1Ci0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMXov Y2xhc3MtZGVkdWN0aW9uMy5DCkBAIC0wLDAgKzEsMTQgQEAKKy8vIHsgZGct b3B0aW9ucyAtc3RkPWMrKzF6IH0KKwordGVtcGxhdGUgPGludCBJPgorc3Ry dWN0IEEgeyB9OworCit0ZW1wbGF0ZSA8aW50IEk+CitzdHJ1Y3QgQgorewor ICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxpbnQ+Y2xhc3MgVD4KKyAgQihUPEk+KTsK K307CisKK0E8NDI+IGE7CitCIGIgKGEpOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvY3BwMXovY2xhc3MtZGVkdWN0aW9uNC5DIGIvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvY3BwMXovY2xhc3MtZGVkdWN0aW9uNC5DCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YzQxZjQKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAxei9j bGFzcy1kZWR1Y3Rpb240LkMKQEAgLTAsMCArMSwxOSBAQAorLy8geyBkZy1v cHRpb25zIC1zdGQ9YysrMXogfQorCit0ZW1wbGF0ZSA8aW50IEksIGludCBK Pgorc3RydWN0IEEgeyB9OworCit0ZW1wbGF0ZSA8aW50IEk+CitzdHJ1Y3Qg QgoreworICB0ZW1wbGF0ZTxpbnQgSj4KKyAgQihBPEksSj4pOworfTsKKwor QTw0MiwyND4gYTsKK0IgYiAoYSk7CisKK2ludCBtYWluKCkKK3sKKyAgKEIo YSkpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3Bw MXovY2xhc3MtZGVkdWN0aW9uNS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y3BwMXovY2xhc3MtZGVkdWN0aW9uNS5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmI5NGEzMDAKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2crKy5kZy9jcHAxei9jbGFzcy1kZWR1Y3Rpb241LkMK QEAgLTAsMCArMSwxMCBAQAorLy8geyBkZy1vcHRpb25zIC1zdGQ9YysrMXog fQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBBCit7CisgIGludCBp OworfTsKKworQTxpbnQ+IGExOworQSBhKGExKTsKZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2NwcDF6L2NsYXNzLWRlZHVjdGlvbjYuQyBi L2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDF6L2NsYXNzLWRlZHVjdGlvbjYu QwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjkyMTdk Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3Bw MXovY2xhc3MtZGVkdWN0aW9uNi5DCkBAIC0wLDAgKzEsMTEgQEAKKy8vIHsg ZGctb3B0aW9ucyAtc3RkPWMrKzF6IH0KKwordGVtcGxhdGUgPGNsYXNzIFQ+ CitzdHJ1Y3QgQQoreworICBpbnQgaTsKK307CisKK3N0cnVjdCBCIDogQTxp bnQ+IHt9IGI7CisKK0EgYShiKTsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZysrLmRnL2NwcDF6L2NsYXNzLWRlZHVjdGlvbjcuQyBiL2djYy90ZXN0 c3VpdGUvZysrLmRnL2NwcDF6L2NsYXNzLWRlZHVjdGlvbjcuQwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTk4MmI5Ci0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMXovY2xhc3Mt ZGVkdWN0aW9uNy5DCkBAIC0wLDAgKzEsMTAgQEAKKy8vIHsgZGctb3B0aW9u cyAtc3RkPWMrKzF6IH0KKwordGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3Qg QQoreworICBpbnQgaTsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorQShU KTsJCQkgICAgICAgLy8geyBkZy1lcnJvciAibXVzdCBoYXZlIHRyYWlsaW5n IHJldHVybiB0eXBlIiB9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9jcHAxei9jbGFzcy1kZWR1Y3Rpb244LkMgYi9nY2MvdGVzdHN1aXRl L2crKy5kZy9jcHAxei9jbGFzcy1kZWR1Y3Rpb244LkMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY1ODMxNQotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDF6L2NsYXNzLWRlZHVj dGlvbjguQwpAQCAtMCwwICsxLDE1IEBACisvLyB7IGRnLW9wdGlvbnMgLXN0 ZD1jKysxeiB9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorc3RydWN0IEEKK3sK KyAgaW50IGk7CisgIEEoLi4uKTsJCQkvLyB7IGRnLW1lc3NhZ2UgImNhbmRp ZGF0ZSIgfQorfTsKKworQSBhKDQyKTsJCQkvLyB7IGRnLWVycm9yICIiIH0K KwordGVtcGxhdGUgPGNsYXNzIFQ+CitBKFQpIC0+IEE8VD47CisKK0EgYTIo NDIpOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMXov Y2xhc3MtZGVkdWN0aW9uOS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3Bw MXovY2xhc3MtZGVkdWN0aW9uOS5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjVhMmI0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2crKy5kZy9jcHAxei9jbGFzcy1kZWR1Y3Rpb245LkMKQEAg LTAsMCArMSwxOCBAQAorLy8geyBkZy1vcHRpb25zIC1zdGQ9YysrMXogfQor CituYW1lc3BhY2UgTiB7CisgIHRlbXBsYXRlIDxjbGFzcyBUPgorICBzdHJ1 Y3QgQQorICB7CisgICAgaW50IGk7CisgICAgQSguLi4pOworICB9OworfQor Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK046OkEoVCkgLT4gTjo6QTxUPjsJCS8v IHsgZGctZXJyb3IgInNjb3BlIiB9CisKK25hbWVzcGFjZSBOIHsKKyAgdGVt cGxhdGUgPGNsYXNzIFQ+CisgIEEoVCkgLT4gQTxUPjsKK30KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL3BhcnNlL2FjY2VzczEwLkMgYi9n Y2MvdGVzdHN1aXRlL2crKy5kZy9wYXJzZS9hY2Nlc3MxMC5DCmluZGV4IDYy YWRjMWIuLmQ1M2QzMTcgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZysr LmRnL3BhcnNlL2FjY2VzczEwLkMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvcGFyc2UvYWNjZXNzMTAuQwpAQCAtOCw0ICs4LDQgQEAgdGVtcGxhdGU8 aW50PiBzdHJ1Y3QgQQogfTsKIAogLy8gSW5zdGVhZCBvZiB0aGUgYm9ndXMg ZXJyb3Igd2UgZ2V0IGEgZGlmZmVyZW50IGVycm9yLgotLy8geyBkZy1lcnJv ciAidGVtcGxhdGUtbmFtZSIgIiIgeyB0YXJnZXQgKi0qLSogfSA3IH0KKy8v IHsgZGctZXJyb3IgInRlbXBsYXRlLW5hbWV8ZXhwZWN0ZWQiICIiIHsgdGFy Z2V0ICotKi0qIH0gNyB9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9wYXJzZS9kZWNsLXNwZWNpZmllci0xLkMgYi9nY2MvdGVzdHN1aXRl L2crKy5kZy9wYXJzZS9kZWNsLXNwZWNpZmllci0xLkMKaW5kZXggYmFmMGZl Ny4uNWMzOWI2MCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv cGFyc2UvZGVjbC1zcGVjaWZpZXItMS5DCisrKyBiL2djYy90ZXN0c3VpdGUv ZysrLmRnL3BhcnNlL2RlY2wtc3BlY2lmaWVyLTEuQwpAQCAtNSwxMyArNSwx MiBAQAogbmFtZXNwYWNlIE4KIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4g Ci0gICAgc3RydWN0IFggeyB9OwkJLy8geyBkZy1tZXNzYWdlICJOOjpYIiB9 CisgICAgc3RydWN0IFggeyB9OwogfQogCiBOOjpYIFg7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8geyBkZy1lcnJvciAiIiAiIiB9CiAKIGludCBt YWluKCkKIHsKLSAgICByZXR1cm4gc2l6ZW9mKFgpOyAgICAgICAgICAgICAv LyB7IGRnLWVycm9yICIiICIiIH0KLSAgICAvLyB7IGRnLW1lc3NhZ2UgInN1 Z2dlc3RlZCBhbHRlcm5hdGl2ZSIgInN1Z2dlc3RlZCBhbHRlcm5hdGl2ZSIg eyB0YXJnZXQgKi0qLSogfSAxNSB9CisgICAgcmV0dXJuIHNpemVvZihYKTsJ ICAgIC8vIHsgZGctcHJ1bmUtb3V0cHV0ICJub3QgZGVjbGFyZWQgaW4gdGhp cyBzY29wZSIgfQogfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvcGFyc2UvdGVtcGxhdGUyLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9w YXJzZS90ZW1wbGF0ZTIuQwppbmRleCA2Njg5YzhiLi45M2M3ZGVmIDEwMDY0 NAotLS0gYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9wYXJzZS90ZW1wbGF0ZTIu QworKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9wYXJzZS90ZW1wbGF0ZTIu QwpAQCAtMyw1ICszLDUgQEAgbmFtZXNwYWNlIE4gewogfQogCiBpbnQgbWFp bigpIHsKLSAgTjo6QygpOyAvLyB7IGRnLWVycm9yICJ0ZW1wbGF0ZSIgfQor ICBOOjpDKCk7IC8vIHsgZGctZXJyb3IgInRlbXBsYXRlfGRlZHVjdGlvbiIg fQogfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysub2xkLWRlamEv ZysrLnJvYmVydGwvZWIxMjkuQyBiL2djYy90ZXN0c3VpdGUvZysrLm9sZC1k ZWphL2crKy5yb2JlcnRsL2ViMTI5LkMKaW5kZXggODNmYjg2Yi4uYThkYWUw MSAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nKysub2xkLWRlamEvZysr LnJvYmVydGwvZWIxMjkuQworKysgYi9nY2MvdGVzdHN1aXRlL2crKy5vbGQt ZGVqYS9nKysucm9iZXJ0bC9lYjEyOS5DCkBAIC0xNyw3ICsxNyw3IEBAIGlu dCBtYWluKCkKICAgICAgICAgICAgICAgZmluZF9pZiggbC5iZWdpbigpLCBs LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEg dHlwbywgaXQgc2hvdWxkIGJlIGJpbmQybmQsIGJ1dCBhbgogICAgICAgICAg ICAgICAgICAgICAgICAvLyBJQ0UgaXMgbm90IGEgdmVyeSBoZWxwZnVsIGRp YWdub3N0aWMhCi0gICAgICAgICAgICAgICAgICAgICAgIGJpbmRlcjJuZCgg ZXF1YWxfdG88aW50PigpLCAyICkgKTsgLy8geyBkZy1lcnJvciAiIiB9IAor ICAgICAgICAgICAgICAgICAgICAgICBiaW5kZXIybmQoIGVxdWFsX3RvPGlu dD4oKSwgMiApICk7IC8vIHsgZGctZXJyb3IgIiIgIiIgeyB0YXJnZXQgYysr MTRfZG93biB9IH0KICAgICAgIGFzc2VydCggKihpdCkgPT0gMiApOwogfQog CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5vbGQtZGVqYS9nKysu cm9iZXJ0bC9lYjEyOWEuQyBiL2djYy90ZXN0c3VpdGUvZysrLm9sZC1kZWph L2crKy5yb2JlcnRsL2ViMTI5YS5DCmluZGV4IGJiYTVmZjAuLjMxNTA0MjIg MTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZysrLm9sZC1kZWphL2crKy5y b2JlcnRsL2ViMTI5YS5DCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLm9sZC1k ZWphL2crKy5yb2JlcnRsL2ViMTI5YS5DCkBAIC0xNiw3ICsxNiw3IEBAIGlu dCBtYWluKCkKICAgICAgICAgICAgICAgc3RkOjpmaW5kX2lmKCBsLmJlZ2lu KCksIGwuZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg aXMgYSB0eXBvLCBpdCBzaG91bGQgYmUgYmluZDJuZCwgYnV0IGFuCiAgICAg ICAgICAgICAgICAgICAgICAgIC8vIElDRSBpcyBub3QgYSB2ZXJ5IGhlbHBm dWwgZGlhZ25vc3RpYyEKLSAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpi aW5kZXIybmQoIHN0ZDo6ZXF1YWxfdG88aW50PigpLCAyICkgKTsgLy8geyBk Zy1lcnJvciAiIiB9IAorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmJp bmRlcjJuZCggc3RkOjplcXVhbF90bzxpbnQ+KCksIDIgKSApOyAvLyB7IGRn LWVycm9yICIiICIiIHsgdGFyZ2V0IGMrKzE0X2Rvd24gfSB9CiAgICAgICBh c3NlcnQoICooaXQpID09IDIgKTsKIH0KIAo= --001a113d4536982adc053e101af5--