From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 0BBDE385C8B2 for ; Mon, 19 Jul 2021 06:29:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0BBDE385C8B2 Received: from pps.filterd (m0098413.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 16J641FZ187355; Mon, 19 Jul 2021 02:29:02 -0400 Received: from pps.reinject (localhost [127.0.0.1]) by mx0b-001b2d01.pphosted.com with ESMTP id 39vtadjf0t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 19 Jul 2021 02:29:02 -0400 Received: from m0098413.ppops.net (m0098413.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 16J6DjRL032645; Mon, 19 Jul 2021 02:29:01 -0400 Received: from ppma03fra.de.ibm.com (6b.4a.5195.ip4.static.sl-reverse.com [149.81.74.107]) by mx0b-001b2d01.pphosted.com with ESMTP id 39vtadjf02-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 19 Jul 2021 02:29:01 -0400 Received: from pps.filterd (ppma03fra.de.ibm.com [127.0.0.1]) by ppma03fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 16J6Sq0Q014234; Mon, 19 Jul 2021 06:28:59 GMT Received: from b06cxnps4075.portsmouth.uk.ibm.com (d06relay12.portsmouth.uk.ibm.com [9.149.109.197]) by ppma03fra.de.ibm.com with ESMTP id 39upu889tm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 19 Jul 2021 06:28:59 +0000 Received: from d06av24.portsmouth.uk.ibm.com (mk.ibm.com [9.149.105.60]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 16J6Stvh14090564 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 19 Jul 2021 06:28:55 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A047142041; Mon, 19 Jul 2021 06:28:55 +0000 (GMT) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 51CA742045; Mon, 19 Jul 2021 06:28:53 +0000 (GMT) Received: from kewenlins-mbp.cn.ibm.com (unknown [9.200.147.34]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTP; Mon, 19 Jul 2021 06:28:53 +0000 (GMT) Subject: [PATCH] predcom: Refactor more using auto_vec To: Martin Sebor , Richard Biener Cc: Bill Schmidt , GCC Patches , Segher Boessenkool References: <6f695498-7f72-fe2f-b88b-4240f0d4569a@linux.ibm.com> <2b1c6017-08b4-e96e-cc0d-b229e912ea0e@linux.ibm.com> From: "Kewen.Lin" Message-ID: <90d0d676-3f65-78b4-b8d5-072020459345@linux.ibm.com> Date: Mon, 19 Jul 2021 14:28:51 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.10.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------5E1C9A62F2E186E33E5BE407" Content-Language: en-US X-TM-AS-GCONF: 00 X-Proofpoint-GUID: Tz_vboQ8oCuBM0zeAN9_BT2u48AmxNPE X-Proofpoint-ORIG-GUID: 28MRHYjUMxzs8jbT9wGQHASfXs9LeaH9 X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391, 18.0.790 definitions=2021-07-19_02:2021-07-16, 2021-07-19 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 mlxscore=0 lowpriorityscore=0 spamscore=0 mlxlogscore=999 clxscore=1015 priorityscore=1501 bulkscore=0 phishscore=0 suspectscore=0 malwarescore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000 definitions=main-2107190033 X-Spam-Status: No, score=-11.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Jul 2021 06:29:06 -0000 This is a multi-part message in MIME format. --------------5E1C9A62F2E186E33E5BE407 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Hi Martin & Richard, >> A further improvement worth considering (if you're so inclined :) >> is replacing the pcom_worker vec members with auto_vec (obviating >> having to explicitly release them) and for the same reason also >> replacing the comp_ptrs bare pointer members with auto_vecs. >> There may be other opportunities to do the same in individual >> functions (I'd look to get rid of as many calls to functions >> like XNEW()/XNEWVEC() and free() use auto_vec instead). >> >> An unrelated but worthwhile change is to replace the FOR_EACH_ >> loops with C++ 11 range loops, analogously to: >> https://gcc.gnu.org/pipermail/gcc-patches/2021-June/572315.html >> >> Finally, the only loosely followed naming convention for member >> variables is to start them with the m_ prefix. >> >> These just suggestions that could be done in a followup, not >> something I would consider prerequisite for accepting the patch >> as is if I were in a position to make such a decision. >> Sorry for the late update, this patch follows your previous advices to refactor it more by: - Adding m_ prefix for class pcom_worker member variables. - Using auto_vec instead of vec among class pcom_worker, chain, component and comp_ptrs. btw, the changes in tree-data-ref.[ch] is required, without it the destruction of auto_vec instance could try to double free the memory pointed by m_vec. The suggestion on range loops is addressed by one separated patch: https://gcc.gnu.org/pipermail/gcc-patches/2021-July/575536.html Bootstrapped and regtested on powerpc64le-linux-gnu P9, x86_64-redhat-linux and aarch64-linux-gnu, also bootstrapped on ppc64le P9 with bootstrap-O3 config. Is it ok for trunk? BR, Kewen ----- gcc/ChangeLog: * tree-data-ref.c (free_dependence_relations): Adjust to pass vec by reference. (free_data_refs): Likewise. * tree-data-ref.h (free_dependence_relations): Likewise. (free_data_refs): Likewise. * tree-predcom.c (struct chain): Use auto_vec instead of vec for members. (struct component): Likewise. (pcom_worker::pcom_worker): Adjust for auto_vec and renaming changes. (pcom_worker::~pcom_worker): Likewise. (pcom_worker::release_chain): Adjust as auto_vec changes. (pcom_worker::loop): Rename to ... (pcom_worker::m_loop): ... this. (pcom_worker::datarefs): Rename to ... (pcom_worker::m_datarefs): ... this. Use auto_vec instead of vec. (pcom_worker::dependences): Rename to ... (pcom_worker::m_dependences): ... this. Use auto_vec instead of vec. (pcom_worker::chains): Rename to ... (pcom_worker::m_chains): ... this. Use auto_vec instead of vec. (pcom_worker::looparound_phis): Rename to ... (pcom_worker::m_looparound_phis): ... this. Use auto_vec instead of vec. (pcom_worker::cache): Rename to ... (pcom_worker::m_cache): ... this. Use auto_vec instead of vec. (pcom_worker::release_chain): Adjust for auto_vec changes. (pcom_worker::release_chains): Adjust for auto_vec and renaming changes. (release_component): Remove. (release_components): Adjust for release_component removal. (component_of): Adjust to use vec. (merge_comps): Likewise. (pcom_worker::aff_combination_dr_offset): Adjust for renaming changes. (pcom_worker::determine_offset): Likewise. (class comp_ptrs): Remove. (pcom_worker::split_data_refs_to_components): Adjust for renaming changes, for comp_ptrs removal with auto_vec. (pcom_worker::suitable_component_p): Adjust for renaming changes. (pcom_worker::filter_suitable_components): Adjust for release_component removal. (pcom_worker::valid_initializer_p): Adjust for renaming changes. (pcom_worker::find_looparound_phi): Likewise. (pcom_worker::add_looparound_copies): Likewise. (pcom_worker::determine_roots_comp): Likewise. (pcom_worker::single_nonlooparound_use): Likewise. (pcom_worker::execute_pred_commoning_chain): Likewise. (pcom_worker::execute_pred_commoning): Likewise. (pcom_worker::try_combine_chains): Likewise. (pcom_worker::prepare_initializers_chain): Likewise. (pcom_worker::prepare_initializers): Likewise. (pcom_worker::prepare_finalizers_chain): Likewise. (pcom_worker::prepare_finalizers): Likewise. (pcom_worker::tree_predictive_commoning_loop): Likewise. --------------5E1C9A62F2E186E33E5BE407 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="0001-predcom-Refactor-more-using-auto_vec.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-predcom-Refactor-more-using-auto_vec.patch" LS0tCiBnY2MvdHJlZS1kYXRhLXJlZi5jIHwgICA0ICstCiBnY2MvdHJlZS1kYXRhLXJlZi5o IHwgICA0ICstCiBnY2MvdHJlZS1wcmVkY29tLmMgIHwgMjQ4ICsrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDEwOCBpbnNl cnRpb25zKCspLCAxNDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtZGF0 YS1yZWYuYyBiL2djYy90cmVlLWRhdGEtcmVmLmMKaW5kZXggYjZhYmQ4YjhkZTcuLmQ3OGRk YjA0NzJlIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1kYXRhLXJlZi5jCisrKyBiL2djYy90cmVl LWRhdGEtcmVmLmMKQEAgLTYyMDgsNyArNjIwOCw3IEBAIGZyZWVfZGVwZW5kZW5jZV9yZWxh dGlvbiAoc3RydWN0IGRhdGFfZGVwZW5kZW5jZV9yZWxhdGlvbiAqZGRyKQogICAgREVQRU5E RU5DRV9SRUxBVElPTlMuICAqLwogCiB2b2lkCi1mcmVlX2RlcGVuZGVuY2VfcmVsYXRpb25z ICh2ZWM8ZGRyX3A+IGRlcGVuZGVuY2VfcmVsYXRpb25zKQorZnJlZV9kZXBlbmRlbmNlX3Jl bGF0aW9ucyAodmVjPGRkcl9wPiYgZGVwZW5kZW5jZV9yZWxhdGlvbnMpCiB7CiAgIGZvciAo ZGF0YV9kZXBlbmRlbmNlX3JlbGF0aW9uICpkZHIgOiBkZXBlbmRlbmNlX3JlbGF0aW9ucykK ICAgICBpZiAoZGRyKQpAQCAtNjIyMCw3ICs2MjIwLDcgQEAgZnJlZV9kZXBlbmRlbmNlX3Jl bGF0aW9ucyAodmVjPGRkcl9wPiBkZXBlbmRlbmNlX3JlbGF0aW9ucykKIC8qIEZyZWUgdGhl IG1lbW9yeSB1c2VkIGJ5IHRoZSBkYXRhIHJlZmVyZW5jZXMgZnJvbSBEQVRBUkVGUy4gICov CiAKIHZvaWQKLWZyZWVfZGF0YV9yZWZzICh2ZWM8ZGF0YV9yZWZlcmVuY2VfcD4gZGF0YXJl ZnMpCitmcmVlX2RhdGFfcmVmcyAodmVjPGRhdGFfcmVmZXJlbmNlX3A+JiBkYXRhcmVmcykK IHsKICAgZm9yIChkYXRhX3JlZmVyZW5jZSAqZHIgOiBkYXRhcmVmcykKICAgICBmcmVlX2Rh dGFfcmVmIChkcik7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1kYXRhLXJlZi5oIGIvZ2NjL3Ry ZWUtZGF0YS1yZWYuaAppbmRleCA4MDAxY2M1NGY1MS4uYTQzY2Q1MmRmOGMgMTAwNjQ0Ci0t LSBhL2djYy90cmVlLWRhdGEtcmVmLmgKKysrIGIvZ2NjL3RyZWUtZGF0YS1yZWYuaApAQCAt NTM0LDkgKzUzNCw5IEBAIGV4dGVybiB2b2lkIGRlYnVnICh2ZWM8ZGRyX3A+ICZyZWYpOwog ZXh0ZXJuIHZvaWQgZGVidWcgKHZlYzxkZHJfcD4gKnB0cik7CiBleHRlcm4gdm9pZCBkZWJ1 Z19kYXRhX2RlcGVuZGVuY2VfcmVsYXRpb25zICh2ZWM8ZGRyX3A+ICk7CiBleHRlcm4gdm9p ZCBmcmVlX2RlcGVuZGVuY2VfcmVsYXRpb24gKHN0cnVjdCBkYXRhX2RlcGVuZGVuY2VfcmVs YXRpb24gKik7Ci1leHRlcm4gdm9pZCBmcmVlX2RlcGVuZGVuY2VfcmVsYXRpb25zICh2ZWM8 ZGRyX3A+ICk7CitleHRlcm4gdm9pZCBmcmVlX2RlcGVuZGVuY2VfcmVsYXRpb25zICh2ZWM8 ZGRyX3A+JiApOwogZXh0ZXJuIHZvaWQgZnJlZV9kYXRhX3JlZiAoZGF0YV9yZWZlcmVuY2Vf cCk7Ci1leHRlcm4gdm9pZCBmcmVlX2RhdGFfcmVmcyAodmVjPGRhdGFfcmVmZXJlbmNlX3A+ ICk7CitleHRlcm4gdm9pZCBmcmVlX2RhdGFfcmVmcyAodmVjPGRhdGFfcmVmZXJlbmNlX3A+ JiApOwogZXh0ZXJuIG9wdF9yZXN1bHQgZmluZF9kYXRhX3JlZmVyZW5jZXNfaW5fc3RtdCAo Y2xhc3MgbG9vcCAqLCBnaW1wbGUgKiwKIAkJCQkJCXZlYzxkYXRhX3JlZmVyZW5jZV9wPiAq KTsKIGV4dGVybiBib29sIGdyYXBoaXRlX2ZpbmRfZGF0YV9yZWZlcmVuY2VzX2luX3N0bXQg KGVkZ2UsIGxvb3BfcCwgZ2ltcGxlICosCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1wcmVkY29t LmMgYi9nY2MvdHJlZS1wcmVkY29tLmMKaW5kZXggYTRlYmYyMjYxYjAuLmNmODU1MTdlMWM3 IDEwMDY0NAotLS0gYS9nY2MvdHJlZS1wcmVkY29tLmMKKysrIGIvZ2NjL3RyZWUtcHJlZGNv bS5jCkBAIC0zMDYsMTkgKzMwNiwxOSBAQCB0eXBlZGVmIHN0cnVjdCBjaGFpbgogICBzdHJ1 Y3QgY2hhaW4gKmNoMSwgKmNoMjsKIAogICAvKiBUaGUgcmVmZXJlbmNlcyBpbiB0aGUgY2hh aW4uICAqLwotICB2ZWM8ZHJlZj4gcmVmczsKKyAgYXV0b192ZWM8ZHJlZj4gcmVmczsKIAog ICAvKiBUaGUgbWF4aW11bSBkaXN0YW5jZSBvZiB0aGUgcmVmZXJlbmNlIGluIHRoZSBjaGFp biBmcm9tIHRoZSByb290LiAgKi8KICAgdW5zaWduZWQgbGVuZ3RoOwogCiAgIC8qIFRoZSB2 YXJpYWJsZXMgdXNlZCB0byBjb3B5IHRoZSB2YWx1ZSB0aHJvdWdob3V0IGl0ZXJhdGlvbnMu ICAqLwotICB2ZWM8dHJlZT4gdmFyczsKKyAgYXV0b192ZWM8dHJlZT4gdmFyczsKIAogICAv KiBJbml0aWFsaXplcnMgZm9yIHRoZSB2YXJpYWJsZXMuICAqLwotICB2ZWM8dHJlZT4gaW5p dHM7CisgIGF1dG9fdmVjPHRyZWU+IGluaXRzOwogCiAgIC8qIEZpbmFsaXplcnMgZm9yIHRo ZSBlbGltaW5hdGVkIHN0b3Jlcy4gICovCi0gIHZlYzx0cmVlPiBmaW5pczsKKyAgYXV0b192 ZWM8dHJlZT4gZmluaXM7CiAKICAgLyogZ2ltcGxlIHN0bXRzIGludGlhbGl6aW5nIHRoZSBp bml0aWFsIHZhcmlhYmxlcyBvZiB0aGUgY2hhaW4uICAqLwogICBnaW1wbGVfc2VxIGluaXRf c2VxOwpAQCAtMzYyLDcgKzM2Miw3IEBAIGVudW0gcmVmX3N0ZXBfdHlwZQogc3RydWN0IGNv bXBvbmVudAogewogICAvKiBUaGUgcmVmZXJlbmNlcyBpbiB0aGUgY29tcG9uZW50LiAgKi8K LSAgdmVjPGRyZWY+IHJlZnM7CisgIGF1dG9fdmVjPGRyZWY+IHJlZnM7CiAKICAgLyogV2hh dCB3ZSBrbm93IGFib3V0IHRoZSBzdGVwIG9mIHRoZSByZWZlcmVuY2VzIGluIHRoZSBjb21w b25lbnQuICAqLwogICBlbnVtIHJlZl9zdGVwX3R5cGUgY29tcF9zdGVwOwpAQCAtMzgxLDE3 ICszODEsMTMgQEAgc3RydWN0IGNvbXBvbmVudAogY2xhc3MgcGNvbV93b3JrZXIKIHsKIHB1 YmxpYzoKLSAgcGNvbV93b3JrZXIgKGxvb3BfcCBsKSA6IGxvb3AgKGwpLCBjaGFpbnMgKHZO VUxMKSwgY2FjaGUgKE5VTEwpCi0gIHsKLSAgICBkZXBlbmRlbmNlcy5jcmVhdGUgKDEwKTsK LSAgICBkYXRhcmVmcy5jcmVhdGUgKDEwKTsKLSAgfQorICBwY29tX3dvcmtlciAobG9vcF9w IGwpIDogbV9sb29wIChsKSwgbV9jYWNoZSAoTlVMTCkge30KIAogICB+cGNvbV93b3JrZXIg KCkKICAgewotICAgIGZyZWVfZGF0YV9yZWZzIChkYXRhcmVmcyk7Ci0gICAgZnJlZV9kZXBl bmRlbmNlX3JlbGF0aW9ucyAoZGVwZW5kZW5jZXMpOwotICAgIGZyZWVfYWZmaW5lX2V4cGFu ZF9jYWNoZSAoJmNhY2hlKTsKKyAgICBmcmVlX2RhdGFfcmVmcyAobV9kYXRhcmVmcyk7Cisg ICAgZnJlZV9kZXBlbmRlbmNlX3JlbGF0aW9ucyAobV9kZXBlbmRlbmNlcyk7CisgICAgZnJl ZV9hZmZpbmVfZXhwYW5kX2NhY2hlICgmbV9jYWNoZSk7CiAgICAgcmVsZWFzZV9jaGFpbnMg KCk7CiAgIH0KIApAQCAtNDA3LDIzICs0MDMsMjQgQEAgcHVibGljOgogCiBwcml2YXRlOgog ICAvKiBUaGUgcG9pbnRlciB0byB0aGUgZ2l2ZW4gbG9vcC4gICovCi0gIGxvb3BfcCBsb29w OworICBsb29wX3AgbV9sb29wOwogCiAgIC8qIEFsbCBkYXRhIHJlZmVyZW5jZXMuICAqLwot ICB2ZWM8ZGF0YV9yZWZlcmVuY2VfcD4gZGF0YXJlZnM7CisgIGF1dG9fdmVjPGRhdGFfcmVm ZXJlbmNlX3AsIDEwPiBtX2RhdGFyZWZzOwogCiAgIC8qIEFsbCBkYXRhIGRlcGVuZGVuY2Vz LiAgKi8KLSAgdmVjPGRkcl9wPiBkZXBlbmRlbmNlczsKKyAgYXV0b192ZWM8ZGRyX3AsIDEw PiBtX2RlcGVuZGVuY2VzOwogCiAgIC8qIEFsbCBjaGFpbnMuICAqLwotICB2ZWM8Y2hhaW5f cD4gY2hhaW5zOworICBhdXRvX3ZlYzxjaGFpbl9wPiBtX2NoYWluczsKIAogICAvKiBCaXRt YXAgb2Ygc3NhIG5hbWVzIGRlZmluZWQgYnkgbG9vcGFyb3VuZCBwaGkgbm9kZXMgY292ZXJl ZCBieSBjaGFpbnMuICAqLwotICBhdXRvX2JpdG1hcCBsb29wYXJvdW5kX3BoaXM7CisgIGF1 dG9fYml0bWFwIG1fbG9vcGFyb3VuZF9waGlzOwogCiAgIHR5cGVkZWYgaGFzaF9tYXA8dHJl ZSwgbmFtZV9leHBhbnNpb24gKj4gdHJlZV9leHBhbmRfbWFwX3Q7CiAgIC8qIENhY2hlIHVz ZWQgYnkgdHJlZV90b19hZmZfY29tYmluYXRpb25fZXhwYW5kLiAgKi8KLSAgdHJlZV9leHBh bmRfbWFwX3QgKmNhY2hlOworICB0cmVlX2V4cGFuZF9tYXBfdCAqbV9jYWNoZTsKKwogICAv KiBTcGxpdHMgZGVwZW5kZW5jZSBncmFwaCB0byBjb21wb25lbnRzLiAgKi8KICAgc3RydWN0 IGNvbXBvbmVudCAqc3BsaXRfZGF0YV9yZWZzX3RvX2NvbXBvbmVudHMgKCk7CiAKQEAgLTY5 NSwxMyArNjkyLDkgQEAgcGNvbV93b3JrZXI6OnJlbGVhc2VfY2hhaW4gKGNoYWluX3AgY2hh aW4pCiAgIEZPUl9FQUNIX1ZFQ19FTFQgKGNoYWluLT5yZWZzLCBpLCByZWYpCiAgICAgZnJl ZSAocmVmKTsKIAotICBjaGFpbi0+cmVmcy5yZWxlYXNlICgpOwotICBjaGFpbi0+dmFycy5y ZWxlYXNlICgpOwotICBjaGFpbi0+aW5pdHMucmVsZWFzZSAoKTsKICAgaWYgKGNoYWluLT5p bml0X3NlcSkKICAgICBnaW1wbGVfc2VxX2Rpc2NhcmQgKGNoYWluLT5pbml0X3NlcSk7CiAK LSAgY2hhaW4tPmZpbmlzLnJlbGVhc2UgKCk7CiAgIGlmIChjaGFpbi0+ZmluaV9zZXEpCiAg ICAgZ2ltcGxlX3NlcV9kaXNjYXJkIChjaGFpbi0+ZmluaV9zZXEpOwogCkBAIC03MTYsMTgg KzcwOSw4IEBAIHBjb21fd29ya2VyOjpyZWxlYXNlX2NoYWlucyAoKQogICB1bnNpZ25lZCBp OwogICBjaGFpbl9wIGNoYWluOwogCi0gIEZPUl9FQUNIX1ZFQ19FTFQgKGNoYWlucywgaSwg Y2hhaW4pCisgIEZPUl9FQUNIX1ZFQ19FTFQgKG1fY2hhaW5zLCBpLCBjaGFpbikKICAgICBy ZWxlYXNlX2NoYWluIChjaGFpbik7Ci0gIGNoYWlucy5yZWxlYXNlICgpOwotfQotCi0vKiBG cmVlcyBhIGNvbXBvbmVudCBDT01QLiAgKi8KLQotc3RhdGljIHZvaWQKLXJlbGVhc2VfY29t cG9uZW50IChzdHJ1Y3QgY29tcG9uZW50ICpjb21wKQotewotICBjb21wLT5yZWZzLnJlbGVh c2UgKCk7Ci0gIGZyZWUgKGNvbXApOwogfQogCiAvKiBGcmVlcyBsaXN0IG9mIGNvbXBvbmVu dHMgQ09NUFMuICAqLwpAQCAtNzQwLDcgKzcyMyw3IEBAIHJlbGVhc2VfY29tcG9uZW50cyAo c3RydWN0IGNvbXBvbmVudCAqY29tcHMpCiAgIGZvciAoYWN0ID0gY29tcHM7IGFjdDsgYWN0 ID0gbmV4dCkKICAgICB7CiAgICAgICBuZXh0ID0gYWN0LT5uZXh0OwotICAgICAgcmVsZWFz ZV9jb21wb25lbnQgKGFjdCk7CisgICAgICBYREVMRVRFIChhY3QpOwogICAgIH0KIH0KIApA QCAtNzQ4LDcgKzczMSw3IEBAIHJlbGVhc2VfY29tcG9uZW50cyAoc3RydWN0IGNvbXBvbmVu dCAqY29tcHMpCiAgICBzaG9ydGVuaW5nLiAgKi8KIAogc3RhdGljIHVuc2lnbmVkCi1jb21w b25lbnRfb2YgKHVuc2lnbmVkIGZhdGhlcnNbXSwgdW5zaWduZWQgYSkKK2NvbXBvbmVudF9v ZiAodmVjPHVuc2lnbmVkPiAmZmF0aGVycywgdW5zaWduZWQgYSkKIHsKICAgdW5zaWduZWQg cm9vdCwgbjsKIApAQCAtNzY4LDcgKzc1MSw4IEBAIGNvbXBvbmVudF9vZiAodW5zaWduZWQg ZmF0aGVyc1tdLCB1bnNpZ25lZCBhKQogICAgY29tcG9uZW50cywgQSBhbmQgQiBhcmUgY29t cG9uZW50cyB0byBtZXJnZS4gICovCiAKIHN0YXRpYyB2b2lkCi1tZXJnZV9jb21wcyAodW5z aWduZWQgZmF0aGVyc1tdLCB1bnNpZ25lZCBzaXplc1tdLCB1bnNpZ25lZCBhLCB1bnNpZ25l ZCBiKQorbWVyZ2VfY29tcHMgKHZlYzx1bnNpZ25lZD4gJmZhdGhlcnMsIHZlYzx1bnNpZ25l ZD4gJnNpemVzLAorCSAgICAgdW5zaWduZWQgYSwgdW5zaWduZWQgYikKIHsKICAgdW5zaWdu ZWQgY2EgPSBjb21wb25lbnRfb2YgKGZhdGhlcnMsIGEpOwogICB1bnNpZ25lZCBjYiA9IGNv bXBvbmVudF9vZiAoZmF0aGVycywgYik7CkBAIC04MjIsNyArODA2LDcgQEAgcGNvbV93b3Jr ZXI6OmFmZl9jb21iaW5hdGlvbl9kcl9vZmZzZXQgKHN0cnVjdCBkYXRhX3JlZmVyZW5jZSAq ZHIsCiAgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAoRFJfT0ZGU0VUIChkcikpOwogICBhZmZf dHJlZSBkZWx0YTsKIAotICB0cmVlX3RvX2FmZl9jb21iaW5hdGlvbl9leHBhbmQgKERSX09G RlNFVCAoZHIpLCB0eXBlLCBvZmZzZXQsICZjYWNoZSk7CisgIHRyZWVfdG9fYWZmX2NvbWJp bmF0aW9uX2V4cGFuZCAoRFJfT0ZGU0VUIChkciksIHR5cGUsIG9mZnNldCwgJm1fY2FjaGUp OwogICBhZmZfY29tYmluYXRpb25fY29uc3QgKCZkZWx0YSwgdHlwZSwgd2k6OnRvX3BvbHlf d2lkZXN0IChEUl9JTklUIChkcikpKTsKICAgYWZmX2NvbWJpbmF0aW9uX2FkZCAob2Zmc2V0 LCAmZGVsdGEpOwogfQpAQCAtODY5LDcgKzg1Myw3IEBAIHBjb21fd29ya2VyOjpkZXRlcm1p bmVfb2Zmc2V0IChzdHJ1Y3QgZGF0YV9yZWZlcmVuY2UgKmEsCiAgIGFmZl9jb21iaW5hdGlv bl9hZGQgKCZkaWZmLCAmYmFzZWIpOwogCiAgIHRyZWVfdG9fYWZmX2NvbWJpbmF0aW9uX2V4 cGFuZCAoRFJfU1RFUCAoYSksIFRSRUVfVFlQRSAoRFJfU1RFUCAoYSkpLAotCQkJCSAgJnN0 ZXAsICZjYWNoZSk7CisJCQkJICAmc3RlcCwgJm1fY2FjaGUpOwogICByZXR1cm4gYWZmX2Nv bWJpbmF0aW9uX2NvbnN0YW50X211bHRpcGxlX3AgKCZkaWZmLCAmc3RlcCwgb2ZmKTsKIH0K IApAQCAtODkwLDUwICs4NzQsMjggQEAgbGFzdF9hbHdheXNfZXhlY3V0ZWRfYmxvY2sgKGNs YXNzIGxvb3AgKmxvb3ApCiAgIHJldHVybiBsYXN0OwogfQogCi0vKiBSQUlJIGNsYXNzIGZv ciBjb21wX2ZhdGhlciBhbmQgY29tcF9zaXplIHVzYWdlLiAgKi8KLQotY2xhc3MgY29tcF9w dHJzCi17Ci1wdWJsaWM6Ci0gIHVuc2lnbmVkICpjb21wX2ZhdGhlcjsKLSAgdW5zaWduZWQg KmNvbXBfc2l6ZTsKLQotICBjb21wX3B0cnMgKHVuc2lnbmVkIG4pCi0gIHsKLSAgICBjb21w X2ZhdGhlciA9IFhORVdWRUMgKHVuc2lnbmVkLCBuICsgMSk7Ci0gICAgY29tcF9zaXplID0g WE5FV1ZFQyAodW5zaWduZWQsIG4gKyAxKTsKLSAgfQotCi0gIH5jb21wX3B0cnMgKCkKLSAg ewotICAgIGZyZWUgKGNvbXBfZmF0aGVyKTsKLSAgICBmcmVlIChjb21wX3NpemUpOwotICB9 Ci0KLSAgY29tcF9wdHJzIChjb25zdCBjb21wX3B0cnMgJikgPSBkZWxldGU7Ci0gIGNvbXBf cHRycyAmb3BlcmF0b3I9IChjb25zdCBjb21wX3B0cnMgJikgPSBkZWxldGU7Ci19OwotCiAv KiBTcGxpdHMgZGVwZW5kZW5jZSBncmFwaCBvbiBEQVRBUkVGUyBkZXNjcmliZWQgYnkgREVQ RU5ERU5DRVMgdG8KICAgIGNvbXBvbmVudHMuICAqLwogCiBzdHJ1Y3QgY29tcG9uZW50ICoK IHBjb21fd29ya2VyOjpzcGxpdF9kYXRhX3JlZnNfdG9fY29tcG9uZW50cyAoKQogewotICB1 bnNpZ25lZCBpLCBuID0gZGF0YXJlZnMubGVuZ3RoICgpOworICB1bnNpZ25lZCBpLCBuID0g bV9kYXRhcmVmcy5sZW5ndGggKCk7CiAgIHVuc2lnbmVkIGNhLCBpYSwgaWIsIGJhZDsKLSAg Y29tcF9wdHJzIHB0cnMgKG4pOwotICBzdHJ1Y3QgY29tcG9uZW50ICoqY29tcHM7CiAgIHN0 cnVjdCBkYXRhX3JlZmVyZW5jZSAqZHIsICpkcmEsICpkcmI7CiAgIHN0cnVjdCBkYXRhX2Rl cGVuZGVuY2VfcmVsYXRpb24gKmRkcjsKICAgc3RydWN0IGNvbXBvbmVudCAqY29tcF9saXN0 ID0gTlVMTCwgKmNvbXA7CiAgIGRyZWYgZGF0YXJlZjsKICAgLyogRG9uJ3QgZG8gc3RvcmUg ZWxpbWluYXRpb24gaWYgbG9vcCBoYXMgbXVsdGlwbGUgZXhpdCBlZGdlcy4gICovCi0gIGJv b2wgZWxpbWluYXRlX3N0b3JlX3AgPSBzaW5nbGVfZXhpdCAobG9vcCkgIT0gTlVMTDsKLSAg YmFzaWNfYmxvY2sgbGFzdF9hbHdheXNfZXhlY3V0ZWQgPSBsYXN0X2Fsd2F5c19leGVjdXRl ZF9ibG9jayAobG9vcCk7CisgIGJvb2wgZWxpbWluYXRlX3N0b3JlX3AgPSBzaW5nbGVfZXhp dCAobV9sb29wKSAhPSBOVUxMOworICBiYXNpY19ibG9jayBsYXN0X2Fsd2F5c19leGVjdXRl ZCA9IGxhc3RfYWx3YXlzX2V4ZWN1dGVkX2Jsb2NrIChtX2xvb3ApOwogICBhdXRvX2JpdG1h cCBub19zdG9yZV9zdG9yZV9jb21wczsKKyAgYXV0b192ZWM8dW5zaWduZWQ+IGNvbXBfZmF0 aGVyIChuICsgMSk7CisgIGF1dG9fdmVjPHVuc2lnbmVkPiBjb21wX3NpemUgKG4gKyAxKTsK KyAgY29tcF9mYXRoZXIucXVpY2tfZ3JvdyAobiArIDEpOworICBjb21wX3NpemUucXVpY2tf Z3JvdyAobiArIDEpOwogCi0gIEZPUl9FQUNIX1ZFQ19FTFQgKGRhdGFyZWZzLCBpLCBkcikK KyAgRk9SX0VBQ0hfVkVDX0VMVCAobV9kYXRhcmVmcywgaSwgZHIpCiAgICAgewogICAgICAg aWYgKCFEUl9SRUYgKGRyKSkKIAkgIC8qIEEgZmFrZSByZWZlcmVuY2UgZm9yIGNhbGwgb3Ig YXNtX2V4cHIgdGhhdCBtYXkgY2xvYmJlciBtZW1vcnk7CkBAIC05NDMsMjYgKzkwNSwyNiBA QCBwY29tX3dvcmtlcjo6c3BsaXRfZGF0YV9yZWZzX3RvX2NvbXBvbmVudHMgKCkKICAgICAg IGlmIChpc19naW1wbGVfY2FsbCAoRFJfU1RNVCAoZHIpKSkKIAlyZXR1cm4gTlVMTDsKICAg ICAgIGRyLT5hdXggPSAodm9pZCAqKSAoc2l6ZV90KSBpOwotICAgICAgcHRycy5jb21wX2Zh dGhlcltpXSA9IGk7Ci0gICAgICBwdHJzLmNvbXBfc2l6ZVtpXSA9IDE7CisgICAgICBjb21w X2ZhdGhlcltpXSA9IGk7CisgICAgICBjb21wX3NpemVbaV0gPSAxOwogICAgIH0KIAogICAv KiBBIGNvbXBvbmVudCByZXNlcnZlZCBmb3IgdGhlICJiYWQiIGRhdGEgcmVmZXJlbmNlcy4g ICovCi0gIHB0cnMuY29tcF9mYXRoZXJbbl0gPSBuOwotICBwdHJzLmNvbXBfc2l6ZVtuXSA9 IDE7CisgIGNvbXBfZmF0aGVyW25dID0gbjsKKyAgY29tcF9zaXplW25dID0gMTsKIAotICBG T1JfRUFDSF9WRUNfRUxUIChkYXRhcmVmcywgaSwgZHIpCisgIEZPUl9FQUNIX1ZFQ19FTFQg KG1fZGF0YXJlZnMsIGksIGRyKQogICAgIHsKICAgICAgIGVudW0gcmVmX3N0ZXBfdHlwZSBk dW1teTsKIAogICAgICAgaWYgKCFzdWl0YWJsZV9yZWZlcmVuY2VfcCAoZHIsICZkdW1teSkp CiAJewogCSAgaWEgPSAodW5zaWduZWQpIChzaXplX3QpIGRyLT5hdXg7Ci0JICBtZXJnZV9j b21wcyAocHRycy5jb21wX2ZhdGhlciwgcHRycy5jb21wX3NpemUsIG4sIGlhKTsKKwkgIG1l cmdlX2NvbXBzIChjb21wX2ZhdGhlciwgY29tcF9zaXplLCBuLCBpYSk7CiAJfQogICAgIH0K IAotICBGT1JfRUFDSF9WRUNfRUxUIChkZXBlbmRlbmNlcywgaSwgZGRyKQorICBGT1JfRUFD SF9WRUNfRUxUIChtX2RlcGVuZGVuY2VzLCBpLCBkZHIpCiAgICAgewogICAgICAgcG9seV93 aWRlc3RfaW50IGR1bW15X29mZjsKIApAQCAtOTc5LDEyICs5NDEsMTIgQEAgcGNvbV93b3Jr ZXI6OnNwbGl0X2RhdGFfcmVmc190b19jb21wb25lbnRzICgpCiAJICAgICAgfHwgRERSX05V TV9ESVNUX1ZFQ1RTIChkZHIpID09IDApKQogCWVsaW1pbmF0ZV9zdG9yZV9wID0gZmFsc2U7 CiAKLSAgICAgIGlhID0gY29tcG9uZW50X29mIChwdHJzLmNvbXBfZmF0aGVyLCAodW5zaWdu ZWQpIChzaXplX3QpIGRyYS0+YXV4KTsKLSAgICAgIGliID0gY29tcG9uZW50X29mIChwdHJz LmNvbXBfZmF0aGVyLCAodW5zaWduZWQpIChzaXplX3QpIGRyYi0+YXV4KTsKKyAgICAgIGlh ID0gY29tcG9uZW50X29mIChjb21wX2ZhdGhlciwgKHVuc2lnbmVkKSAoc2l6ZV90KSBkcmEt PmF1eCk7CisgICAgICBpYiA9IGNvbXBvbmVudF9vZiAoY29tcF9mYXRoZXIsICh1bnNpZ25l ZCkgKHNpemVfdCkgZHJiLT5hdXgpOwogICAgICAgaWYgKGlhID09IGliKQogCWNvbnRpbnVl OwogCi0gICAgICBiYWQgPSBjb21wb25lbnRfb2YgKHB0cnMuY29tcF9mYXRoZXIsIG4pOwor ICAgICAgYmFkID0gY29tcG9uZW50X29mIChjb21wX2ZhdGhlciwgbik7CiAKICAgICAgIC8q IElmIGJvdGggQSBhbmQgQiBhcmUgcmVhZHMsIHdlIG1heSBpZ25vcmUgdW5zdWl0YWJsZSBk ZXBlbmRlbmNlcy4gICovCiAgICAgICBpZiAoRFJfSVNfUkVBRCAoZHJhKSAmJiBEUl9JU19S RUFEIChkcmIpKQpAQCAtMTAwOCw3ICs5NzAsNyBAQCBwY29tX3dvcmtlcjo6c3BsaXRfZGF0 YV9yZWZzX3RvX2NvbXBvbmVudHMgKCkKIAkgIGVsc2UgaWYgKCFkZXRlcm1pbmVfb2Zmc2V0 IChkcmEsIGRyYiwgJmR1bW15X29mZikpCiAJICAgIHsKIAkgICAgICBiaXRtYXBfc2V0X2Jp dCAobm9fc3RvcmVfc3RvcmVfY29tcHMsIGliKTsKLQkgICAgICBtZXJnZV9jb21wcyAocHRy cy5jb21wX2ZhdGhlciwgcHRycy5jb21wX3NpemUsIGJhZCwgaWEpOworCSAgICAgIG1lcmdl X2NvbXBzIChjb21wX2ZhdGhlciwgY29tcF9zaXplLCBiYWQsIGlhKTsKIAkgICAgICBjb250 aW51ZTsKIAkgICAgfQogCX0KQEAgLTEwMjIsNyArOTg0LDcgQEAgcGNvbV93b3JrZXI6OnNw bGl0X2RhdGFfcmVmc190b19jb21wb25lbnRzICgpCiAJICBlbHNlIGlmICghZGV0ZXJtaW5l X29mZnNldCAoZHJhLCBkcmIsICZkdW1teV9vZmYpKQogCSAgICB7CiAJICAgICAgYml0bWFw X3NldF9iaXQgKG5vX3N0b3JlX3N0b3JlX2NvbXBzLCBpYSk7Ci0JICAgICAgbWVyZ2VfY29t cHMgKHB0cnMuY29tcF9mYXRoZXIsIHB0cnMuY29tcF9zaXplLCBiYWQsIGliKTsKKwkgICAg ICBtZXJnZV9jb21wcyAoY29tcF9mYXRoZXIsIGNvbXBfc2l6ZSwgYmFkLCBpYik7CiAJICAg ICAgY29udGludWU7CiAJICAgIH0KIAl9CkBAIC0xMDMwLDE3ICs5OTIsMTcgQEAgcGNvbV93 b3JrZXI6OnNwbGl0X2RhdGFfcmVmc190b19jb21wb25lbnRzICgpCiAJICAgICAgICYmIGlh ICE9IGJhZCAmJiBpYiAhPSBiYWQKIAkgICAgICAgJiYgIWRldGVybWluZV9vZmZzZXQgKGRy YSwgZHJiLCAmZHVtbXlfb2ZmKSkKIAl7Ci0JICBtZXJnZV9jb21wcyAocHRycy5jb21wX2Zh dGhlciwgcHRycy5jb21wX3NpemUsIGJhZCwgaWEpOwotCSAgbWVyZ2VfY29tcHMgKHB0cnMu Y29tcF9mYXRoZXIsIHB0cnMuY29tcF9zaXplLCBiYWQsIGliKTsKKwkgIG1lcmdlX2NvbXBz IChjb21wX2ZhdGhlciwgY29tcF9zaXplLCBiYWQsIGlhKTsKKwkgIG1lcmdlX2NvbXBzIChj b21wX2ZhdGhlciwgY29tcF9zaXplLCBiYWQsIGliKTsKIAkgIGNvbnRpbnVlOwogCX0KIAot ICAgICAgbWVyZ2VfY29tcHMgKHB0cnMuY29tcF9mYXRoZXIsIHB0cnMuY29tcF9zaXplLCBp YSwgaWIpOworICAgICAgbWVyZ2VfY29tcHMgKGNvbXBfZmF0aGVyLCBjb21wX3NpemUsIGlh LCBpYik7CiAgICAgfQogCiAgIGlmIChlbGltaW5hdGVfc3RvcmVfcCkKICAgICB7Ci0gICAg ICB0cmVlIG5pdGVycyA9IG51bWJlcl9vZl9sYXRjaF9leGVjdXRpb25zIChsb29wKTsKKyAg ICAgIHRyZWUgbml0ZXJzID0gbnVtYmVyX29mX2xhdGNoX2V4ZWN1dGlvbnMgKG1fbG9vcCk7 CiAKICAgICAgIC8qIERvbid0IGRvIHN0b3JlIGVsaW1pbmF0aW9uIGlmIG5pdGVycyBpbmZv IGlzIHVua25vd24gYmVjYXVzZSBzdG9yZXMKIAkgaW4gdGhlIGxhc3QgaXRlcmF0aW9uIGNh bid0IGJlIGVsaW1pbmF0ZWQgYW5kIHdlIG5lZWQgdG8gcmVjb3ZlciBpdApAQCAtMTA0OCwx MiArMTAxMCwxMyBAQCBwY29tX3dvcmtlcjo6c3BsaXRfZGF0YV9yZWZzX3RvX2NvbXBvbmVu dHMgKCkKICAgICAgIGVsaW1pbmF0ZV9zdG9yZV9wID0gKG5pdGVycyAhPSBOVUxMX1RSRUUg JiYgbml0ZXJzICE9IGNocmVjX2RvbnRfa25vdyk7CiAgICAgfQogCi0gIGNvbXBzID0gWENO RVdWRUMgKHN0cnVjdCBjb21wb25lbnQgKiwgbik7Ci0gIGJhZCA9IGNvbXBvbmVudF9vZiAo cHRycy5jb21wX2ZhdGhlciwgbik7Ci0gIEZPUl9FQUNIX1ZFQ19FTFQgKGRhdGFyZWZzLCBp LCBkcikKKyAgYXV0b192ZWM8c3RydWN0IGNvbXBvbmVudCAqPiBjb21wczsKKyAgY29tcHMu c2FmZV9ncm93X2NsZWFyZWQgKG4sIHRydWUpOworICBiYWQgPSBjb21wb25lbnRfb2YgKGNv bXBfZmF0aGVyLCBuKTsKKyAgRk9SX0VBQ0hfVkVDX0VMVCAobV9kYXRhcmVmcywgaSwgZHIp CiAgICAgewogICAgICAgaWEgPSAodW5zaWduZWQpIChzaXplX3QpIGRyLT5hdXg7Ci0gICAg ICBjYSA9IGNvbXBvbmVudF9vZiAocHRycy5jb21wX2ZhdGhlciwgaWEpOworICAgICAgY2Eg PSBjb21wb25lbnRfb2YgKGNvbXBfZmF0aGVyLCBpYSk7CiAgICAgICBpZiAoY2EgPT0gYmFk KQogCWNvbnRpbnVlOwogCkBAIC0xMDYxLDcgKzEwMjQsNyBAQCBwY29tX3dvcmtlcjo6c3Bs aXRfZGF0YV9yZWZzX3RvX2NvbXBvbmVudHMgKCkKICAgICAgIGlmICghY29tcCkKIAl7CiAJ ICBjb21wID0gWENORVcgKHN0cnVjdCBjb21wb25lbnQpOwotCSAgY29tcC0+cmVmcy5jcmVh dGUgKHB0cnMuY29tcF9zaXplW2NhXSk7CisJICBjb21wLT5yZWZzLmNyZWF0ZSAoY29tcF9z aXplW2NhXSk7CiAJICBjb21wLT5lbGltaW5hdGVfc3RvcmVfcCA9IGVsaW1pbmF0ZV9zdG9y ZV9wOwogCSAgY29tcHNbY2FdID0gY29tcDsKIAl9CkBAIC0xMDg0LDcgKzEwNDcsNyBAQCBw Y29tX3dvcmtlcjo6c3BsaXRfZGF0YV9yZWZzX3RvX2NvbXBvbmVudHMgKCkKICAgICAgIGJp dG1hcF9pdGVyYXRvciBiaTsKICAgICAgIEVYRUNVVEVfSUZfU0VUX0lOX0JJVE1BUCAobm9f c3RvcmVfc3RvcmVfY29tcHMsIDAsIGlhLCBiaSkKIAl7Ci0JICBjYSA9IGNvbXBvbmVudF9v ZiAocHRycy5jb21wX2ZhdGhlciwgaWEpOworCSAgY2EgPSBjb21wb25lbnRfb2YgKGNvbXBf ZmF0aGVyLCBpYSk7CiAJICBpZiAoY2EgIT0gYmFkKQogCSAgICBjb21wc1tjYV0tPmVsaW1p bmF0ZV9zdG9yZV9wID0gZmFsc2U7CiAJfQpAQCAtMTA5OSw3ICsxMDYyLDYgQEAgcGNvbV93 b3JrZXI6OnNwbGl0X2RhdGFfcmVmc190b19jb21wb25lbnRzICgpCiAJICBjb21wX2xpc3Qg PSBjb21wOwogCX0KICAgICB9Ci0gIGZyZWUgKGNvbXBzKTsKICAgcmV0dXJuIGNvbXBfbGlz dDsKIH0KIApAQCAtMTExMSwxNCArMTA3MywxNCBAQCBwY29tX3dvcmtlcjo6c3VpdGFibGVf Y29tcG9uZW50X3AgKHN0cnVjdCBjb21wb25lbnQgKmNvbXApCiB7CiAgIHVuc2lnbmVkIGk7 CiAgIGRyZWYgYSwgZmlyc3Q7Ci0gIGJhc2ljX2Jsb2NrIGJhLCBicCA9IGxvb3AtPmhlYWRl cjsKKyAgYmFzaWNfYmxvY2sgYmEsIGJwID0gbV9sb29wLT5oZWFkZXI7CiAgIGJvb2wgb2ss IGhhc193cml0ZSA9IGZhbHNlOwogCiAgIEZPUl9FQUNIX1ZFQ19FTFQgKGNvbXAtPnJlZnMs IGksIGEpCiAgICAgewogICAgICAgYmEgPSBnaW1wbGVfYmIgKGEtPnN0bXQpOwogCi0gICAg ICBpZiAoIWp1c3Rfb25jZV9lYWNoX2l0ZXJhdGlvbl9wIChsb29wLCBiYSkpCisgICAgICBp ZiAoIWp1c3Rfb25jZV9lYWNoX2l0ZXJhdGlvbl9wIChtX2xvb3AsIGJhKSkKIAlyZXR1cm4g ZmFsc2U7CiAKICAgICAgIGdjY19hc3NlcnQgKGRvbWluYXRlZF9ieV9wIChDRElfRE9NSU5B VE9SUywgYmEsIGJwKSk7CkBAIC0xMTgwLDcgKzExNDIsNyBAQCBwY29tX3dvcmtlcjo6Zmls dGVyX3N1aXRhYmxlX2NvbXBvbmVudHMgKHN0cnVjdCBjb21wb25lbnQgKmNvbXBzKQogCSAg KmNvbXAgPSBhY3QtPm5leHQ7CiAJICBGT1JfRUFDSF9WRUNfRUxUIChhY3QtPnJlZnMsIGks IHJlZikKIAkgICAgZnJlZSAocmVmKTsKLQkgIHJlbGVhc2VfY29tcG9uZW50IChhY3QpOwor CSAgWERFTEVURSAoYWN0KTsKIAl9CiAgICAgfQogCkBAIC0xMzkyLDcgKzEzNTQsNyBAQCBw Y29tX3dvcmtlcjo6dmFsaWRfaW5pdGlhbGl6ZXJfcCAoc3RydWN0IGRhdGFfcmVmZXJlbmNl ICpyZWYsIHVuc2lnbmVkIGRpc3RhbmNlLAogICBhZmZfY29tYmluYXRpb25fYWRkICgmZGlm ZiwgJmJhc2UpOwogCiAgIHRyZWVfdG9fYWZmX2NvbWJpbmF0aW9uX2V4cGFuZCAoRFJfU1RF UCAocm9vdCksIFRSRUVfVFlQRSAoRFJfU1RFUCAocm9vdCkpLAotCQkJCSAgJnN0ZXAsICZj YWNoZSk7CisJCQkJICAmc3RlcCwgJm1fY2FjaGUpOwogICBpZiAoIWFmZl9jb21iaW5hdGlv bl9jb25zdGFudF9tdWx0aXBsZV9wICgmZGlmZiwgJnN0ZXAsICZvZmYpKQogICAgIHJldHVy biBmYWxzZTsKIApAQCAtMTQxMyw3ICsxMzc1LDcgQEAgcGNvbV93b3JrZXI6OmZpbmRfbG9v cGFyb3VuZF9waGkgKGRyZWYgcmVmLCBkcmVmIHJvb3QpCiAgIHRyZWUgbmFtZSwgaW5pdCwg aW5pdF9yZWY7CiAgIGdwaGkgKnBoaSA9IE5VTEw7CiAgIGdpbXBsZSAqaW5pdF9zdG10Owot ICBlZGdlIGxhdGNoID0gbG9vcF9sYXRjaF9lZGdlIChsb29wKTsKKyAgZWRnZSBsYXRjaCA9 IGxvb3BfbGF0Y2hfZWRnZSAobV9sb29wKTsKICAgc3RydWN0IGRhdGFfcmVmZXJlbmNlIGlu aXRfZHI7CiAgIGdwaGlfaXRlcmF0b3IgcHNpOwogCkBAIC0xNDI5LDcgKzEzOTEsNyBAQCBw Y29tX3dvcmtlcjo6ZmluZF9sb29wYXJvdW5kX3BoaSAoZHJlZiByZWYsIGRyZWYgcm9vdCkK ICAgaWYgKCFuYW1lKQogICAgIHJldHVybiBOVUxMOwogCi0gIGZvciAocHNpID0gZ3NpX3N0 YXJ0X3BoaXMgKGxvb3AtPmhlYWRlcik7ICFnc2lfZW5kX3AgKHBzaSk7IGdzaV9uZXh0ICgm cHNpKSkKKyAgZm9yIChwc2kgPSBnc2lfc3RhcnRfcGhpcyAobV9sb29wLT5oZWFkZXIpOyAh Z3NpX2VuZF9wIChwc2kpOyBnc2lfbmV4dCAoJnBzaSkpCiAgICAgewogICAgICAgcGhpID0g cHNpLnBoaSAoKTsKICAgICAgIGlmIChQSElfQVJHX0RFRl9GUk9NX0VER0UgKHBoaSwgbGF0 Y2gpID09IG5hbWUpCkBAIC0xNDM5LDcgKzE0MDEsNyBAQCBwY29tX3dvcmtlcjo6ZmluZF9s b29wYXJvdW5kX3BoaSAoZHJlZiByZWYsIGRyZWYgcm9vdCkKICAgaWYgKGdzaV9lbmRfcCAo cHNpKSkKICAgICByZXR1cm4gTlVMTDsKIAotICBpbml0ID0gUEhJX0FSR19ERUZfRlJPTV9F REdFIChwaGksIGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApKTsKKyAgaW5pdCA9IFBISV9B UkdfREVGX0ZST01fRURHRSAocGhpLCBsb29wX3ByZWhlYWRlcl9lZGdlIChtX2xvb3ApKTsK ICAgaWYgKFRSRUVfQ09ERSAoaW5pdCkgIT0gU1NBX05BTUUpCiAgICAgcmV0dXJuIE5VTEw7 CiAgIGluaXRfc3RtdCA9IFNTQV9OQU1FX0RFRl9TVE1UIChpbml0KTsKQEAgLTE0NTcsNyAr MTQxOSw3IEBAIHBjb21fd29ya2VyOjpmaW5kX2xvb3Bhcm91bmRfcGhpIChkcmVmIHJlZiwg ZHJlZiByb290KQogICBtZW1zZXQgKCZpbml0X2RyLCAwLCBzaXplb2YgKHN0cnVjdCBkYXRh X3JlZmVyZW5jZSkpOwogICBEUl9SRUYgKCZpbml0X2RyKSA9IGluaXRfcmVmOwogICBEUl9T VE1UICgmaW5pdF9kcikgPSBwaGk7Ci0gIGlmICghZHJfYW5hbHl6ZV9pbm5lcm1vc3QgKCZE Ul9JTk5FUk1PU1QgKCZpbml0X2RyKSwgaW5pdF9yZWYsIGxvb3AsCisgIGlmICghZHJfYW5h bHl6ZV9pbm5lcm1vc3QgKCZEUl9JTk5FUk1PU1QgKCZpbml0X2RyKSwgaW5pdF9yZWYsIG1f bG9vcCwKIAkJCSAgICAgaW5pdF9zdG10KSkKICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTUx Miw3ICsxNDc0LDcgQEAgcGNvbV93b3JrZXI6OmFkZF9sb29wYXJvdW5kX2NvcGllcyAoY2hh aW5fcCBjaGFpbikKICAgICAgIGlmICghcGhpKQogCWNvbnRpbnVlOwogCi0gICAgICBiaXRt YXBfc2V0X2JpdCAobG9vcGFyb3VuZF9waGlzLCBTU0FfTkFNRV9WRVJTSU9OIChQSElfUkVT VUxUIChwaGkpKSk7CisgICAgICBiaXRtYXBfc2V0X2JpdCAobV9sb29wYXJvdW5kX3BoaXMs IFNTQV9OQU1FX1ZFUlNJT04gKFBISV9SRVNVTFQgKHBoaSkpKTsKICAgICAgIGluc2VydF9s b29wYXJvdW5kX2NvcHkgKGNoYWluLCByZWYsIHBoaSk7CiAgICAgfQogfQpAQCAtMTUzMyw3 ICsxNDk1LDcgQEAgcGNvbV93b3JrZXI6OmRldGVybWluZV9yb290c19jb21wIChzdHJ1Y3Qg Y29tcG9uZW50ICpjb21wKQogICBpZiAoY29tcC0+Y29tcF9zdGVwID09IFJTX0lOVkFSSUFO VCkKICAgICB7CiAgICAgICBjaGFpbiA9IG1ha2VfaW52YXJpYW50X2NoYWluIChjb21wKTsK LSAgICAgIGNoYWlucy5zYWZlX3B1c2ggKGNoYWluKTsKKyAgICAgIG1fY2hhaW5zLnNhZmVf cHVzaCAoY2hhaW4pOwogICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTU3OCw3ICsxNTQw LDcgQEAgcGNvbV93b3JrZXI6OmRldGVybWluZV9yb290c19jb21wIChzdHJ1Y3QgY29tcG9u ZW50ICpjb21wKQogCSAgaWYgKG5vbnRyaXZpYWxfY2hhaW5fcCAoY2hhaW4pKQogCSAgICB7 CiAJICAgICAgYWRkX2xvb3Bhcm91bmRfY29waWVzIChjaGFpbik7Ci0JICAgICAgY2hhaW5z LnNhZmVfcHVzaCAoY2hhaW4pOworCSAgICAgIG1fY2hhaW5zLnNhZmVfcHVzaCAoY2hhaW4p OwogCSAgICB9CiAJICBlbHNlCiAJICAgIHJlbGVhc2VfY2hhaW4gKGNoYWluKTsKQEAgLTE1 OTksNyArMTU2MSw3IEBAIHBjb21fd29ya2VyOjpkZXRlcm1pbmVfcm9vdHNfY29tcCAoc3Ry dWN0IGNvbXBvbmVudCAqY29tcCkKICAgaWYgKG5vbnRyaXZpYWxfY2hhaW5fcCAoY2hhaW4p KQogICAgIHsKICAgICAgIGFkZF9sb29wYXJvdW5kX2NvcGllcyAoY2hhaW4pOwotICAgICAg Y2hhaW5zLnNhZmVfcHVzaCAoY2hhaW4pOworICAgICAgbV9jaGFpbnMuc2FmZV9wdXNoIChj aGFpbik7CiAgICAgfQogICBlbHNlCiAgICAgcmVsZWFzZV9jaGFpbiAoY2hhaW4pOwpAQCAt MjE5Niw3ICsyMTU4LDcgQEAgcGNvbV93b3JrZXI6OnNpbmdsZV9ub25sb29wYXJvdW5kX3Vz ZSAodHJlZSBuYW1lKQogCXsKIAkgIC8qIElnbm9yZSB1c2VzIGluIGxvb3Bhcm91bmQgcGhp IG5vZGVzLiAgVXNlcyBpbiBvdGhlciBwaGkgbm9kZXMKIAkgICAgIGNvdWxkIG5vdCBiZSBw cm9jZXNzZWQgYW55d2F5LCBzbyBqdXN0IGZhaWwgZm9yIHRoZW0uICAqLwotCSAgaWYgKGJp dG1hcF9iaXRfcCAobG9vcGFyb3VuZF9waGlzLAorCSAgaWYgKGJpdG1hcF9iaXRfcCAobV9s b29wYXJvdW5kX3BoaXMsCiAJCQkgICAgU1NBX05BTUVfVkVSU0lPTiAoUEhJX1JFU1VMVCAo c3RtdCkpKSkKIAkgICAgY29udGludWU7CiAKQEAgLTIzMDUsMTQgKzIyNjcsMTQgQEAgcGNv bV93b3JrZXI6OmV4ZWN1dGVfcHJlZF9jb21tb25pbmdfY2hhaW4gKGNoYWluX3AgY2hhaW4s CiAJICAgICAgLyogSWYgZGVhZCBzdG9yZXMgaW4gdGhpcyBjaGFpbiBzdG9yZSBsb29wIHZh cmlhbnQgdmFsdWVzLAogCQkgd2UgbmVlZCB0byBzZXQgdXAgdGhlIHZhcmlhYmxlcyBieSBs b2FkaW5nIGZyb20gbWVtb3J5CiAJCSBiZWZvcmUgbG9vcCBhbmQgcHJvcGFnYXRpbmcgaXQg d2l0aCBQSEkgbm9kZXMuICAqLwotCSAgICAgIGluaXRpYWxpemVfcm9vdF92YXJzX3N0b3Jl X2VsaW1fMiAobG9vcCwgY2hhaW4sIHRtcF92YXJzKTsKKwkgICAgICBpbml0aWFsaXplX3Jv b3RfdmFyc19zdG9yZV9lbGltXzIgKG1fbG9vcCwgY2hhaW4sIHRtcF92YXJzKTsKIAkgICAg fQogCiAJICAvKiBGb3IgaW50ZXItaXRlcmF0aW9uIHN0b3JlIGVsaW1pbmF0aW9uIGNoYWlu LCBzdG9yZXMgYXQgZWFjaAogCSAgICAgZGlzdGFuY2UgaW4gbG9vcCdzIGxhc3QgKGNoYWlu LT5sZW5ndGggLSAxKSBpdGVyYXRpb25zIGNhbid0CiAJICAgICBiZSBlbGltaW5hdGVkLCBi ZWNhdXNlIHRoZXJlIGlzIG5vIGZvbGxvd2luZyBraWxsaW5nIHN0b3JlLgogCSAgICAgV2Ug bmVlZCB0byBnZW5lcmF0ZSB0aGVzZSBzdG9yZXMgYWZ0ZXIgbG9vcC4gICovCi0JICBmaW5h bGl6ZV9lbGltaW5hdGVkX3N0b3JlcyAobG9vcCwgY2hhaW4pOworCSAgZmluYWxpemVfZWxp bWluYXRlZF9zdG9yZXMgKG1fbG9vcCwgY2hhaW4pOwogCX0KIAogICAgICAgYm9vbCBsYXN0 X3N0b3JlX3AgPSB0cnVlOwpAQCAtMjM0Miw3ICsyMzA0LDcgQEAgcGNvbV93b3JrZXI6OmV4 ZWN1dGVfcHJlZF9jb21tb25pbmdfY2hhaW4gKGNoYWluX3AgY2hhaW4sCiAgIGVsc2UKICAg ICB7CiAgICAgICAvKiBGb3Igbm9uLWNvbWJpbmVkIGNoYWlucywgc2V0IHVwIHRoZSB2YXJp YWJsZXMgdGhhdCBob2xkIGl0cyB2YWx1ZS4gICovCi0gICAgICBpbml0aWFsaXplX3Jvb3Rf dmFycyAobG9vcCwgY2hhaW4sIHRtcF92YXJzKTsKKyAgICAgIGluaXRpYWxpemVfcm9vdF92 YXJzIChtX2xvb3AsIGNoYWluLCB0bXBfdmFycyk7CiAgICAgICBhID0gZ2V0X2NoYWluX3Jv b3QgKGNoYWluKTsKICAgICAgIGluX2xocyA9IChjaGFpbi0+dHlwZSA9PSBDVF9TVE9SRV9M T0FECiAJCXx8IGNoYWluLT50eXBlID09IENUX0NPTUJJTkFUSU9OKTsKQEAgLTI0MTEsMTUg KzIzNzMsMTUgQEAgcGNvbV93b3JrZXI6OmV4ZWN1dGVfcHJlZF9jb21tb25pbmcgKGJpdG1h cCB0bXBfdmFycykKICAgY2hhaW5fcCBjaGFpbjsKICAgdW5zaWduZWQgaTsKIAotICBGT1Jf RUFDSF9WRUNfRUxUIChjaGFpbnMsIGksIGNoYWluKQorICBGT1JfRUFDSF9WRUNfRUxUICht X2NoYWlucywgaSwgY2hhaW4pCiAgICAgewogICAgICAgaWYgKGNoYWluLT50eXBlID09IENU X0lOVkFSSUFOVCkKLQlleGVjdXRlX2xvYWRfbW90aW9uIChsb29wLCBjaGFpbiwgdG1wX3Zh cnMpOworCWV4ZWN1dGVfbG9hZF9tb3Rpb24gKG1fbG9vcCwgY2hhaW4sIHRtcF92YXJzKTsK ICAgICAgIGVsc2UKIAlleGVjdXRlX3ByZWRfY29tbW9uaW5nX2NoYWluIChjaGFpbiwgdG1w X3ZhcnMpOwogICAgIH0KIAotICBGT1JfRUFDSF9WRUNfRUxUIChjaGFpbnMsIGksIGNoYWlu KQorICBGT1JfRUFDSF9WRUNfRUxUIChtX2NoYWlucywgaSwgY2hhaW4pCiAgICAgewogICAg ICAgaWYgKGNoYWluLT50eXBlID09IENUX0lOVkFSSUFOVCkKIAk7CkBAIC0yOTc5LDcgKzI5 NDEsNyBAQCBwY29tX3dvcmtlcjo6dHJ5X2NvbWJpbmVfY2hhaW5zICgpCiAgIGF1dG9fdmVj PGNoYWluX3A+IHdvcmtsaXN0OwogICBib29sIGNvbWJpbmVkX3AgPSBmYWxzZTsKIAotICBG T1JfRUFDSF9WRUNfRUxUIChjaGFpbnMsIGksIGNoMSkKKyAgRk9SX0VBQ0hfVkVDX0VMVCAo bV9jaGFpbnMsIGksIGNoMSkKICAgICBpZiAoY2hhaW5fY2FuX2JlX2NvbWJpbmVkX3AgKGNo MSkpCiAgICAgICB3b3JrbGlzdC5zYWZlX3B1c2ggKGNoMSk7CiAKQEAgLTI5ODksNyArMjk1 MSw3IEBAIHBjb21fd29ya2VyOjp0cnlfY29tYmluZV9jaGFpbnMgKCkKICAgICAgIGlmICgh Y2hhaW5fY2FuX2JlX2NvbWJpbmVkX3AgKGNoMSkpCiAJY29udGludWU7CiAKLSAgICAgIEZP Ul9FQUNIX1ZFQ19FTFQgKGNoYWlucywgaiwgY2gyKQorICAgICAgRk9SX0VBQ0hfVkVDX0VM VCAobV9jaGFpbnMsIGosIGNoMikKIAl7CiAJICBpZiAoIWNoYWluX2Nhbl9iZV9jb21iaW5l ZF9wIChjaDIpKQogCSAgICBjb250aW51ZTsKQEAgLTI5OTgsNyArMjk2MCw3IEBAIHBjb21f d29ya2VyOjp0cnlfY29tYmluZV9jaGFpbnMgKCkKIAkgIGlmIChjY2gpCiAJICAgIHsKIAkg ICAgICB3b3JrbGlzdC5zYWZlX3B1c2ggKGNjaCk7Ci0JICAgICAgY2hhaW5zLnNhZmVfcHVz aCAoY2NoKTsKKwkgICAgICBtX2NoYWlucy5zYWZlX3B1c2ggKGNjaCk7CiAJICAgICAgY29t YmluZWRfcCA9IHRydWU7CiAJICAgICAgYnJlYWs7CiAJICAgIH0KQEAgLTMwMDgsOCArMjk3 MCw4IEBAIHBjb21fd29ya2VyOjp0cnlfY29tYmluZV9jaGFpbnMgKCkKICAgICByZXR1cm47 CiAKICAgLyogU2V0dXAgVUlEIGZvciBhbGwgc3RhdGVtZW50cyBpbiBkb21pbmFuY2Ugb3Jk ZXIuICAqLwotICBiYXNpY19ibG9jayAqYmJzID0gZ2V0X2xvb3BfYm9keV9pbl9kb21fb3Jk ZXIgKGxvb3ApOwotICByZW51bWJlcl9naW1wbGVfc3RtdF91aWRzX2luX2Jsb2NrcyAoYmJz LCBsb29wLT5udW1fbm9kZXMpOworICBiYXNpY19ibG9jayAqYmJzID0gZ2V0X2xvb3BfYm9k eV9pbl9kb21fb3JkZXIgKG1fbG9vcCk7CisgIHJlbnVtYmVyX2dpbXBsZV9zdG10X3VpZHNf aW5fYmxvY2tzIChiYnMsIG1fbG9vcC0+bnVtX25vZGVzKTsKICAgZnJlZSAoYmJzKTsKIAog ICAvKiBSZS1hc3NvY2lhdGlvbiBpbiBjb21iaW5lZCBjaGFpbnMgbWF5IGdlbmVyYXRlIHN0 YXRlbWVudHMgZGlmZmVyZW50IHRvCkBAIC0zMDIyLDcgKzI5ODQsNyBAQCBwY29tX3dvcmtl cjo6dHJ5X2NvbWJpbmVfY2hhaW5zICgpCiAKICAgICAgV2UgZmlyc3QgdXBkYXRlIHBvc2l0 aW9uIGluZm9ybWF0aW9uIGZvciBhbGwgY29tYmluZWQgY2hhaW5zLiAgKi8KICAgZHJlZiBy ZWY7Ci0gIGZvciAoaSA9IDA7IGNoYWlucy5pdGVyYXRlIChpLCAmY2gxKTsgKytpKQorICBm b3IgKGkgPSAwOyBtX2NoYWlucy5pdGVyYXRlIChpLCAmY2gxKTsgKytpKQogICAgIHsKICAg ICAgIGlmIChjaDEtPnR5cGUgIT0gQ1RfQ09NQklOQVRJT04gfHwgY2gxLT5jb21iaW5lZCkK IAljb250aW51ZTsKQEAgLTMwMzMsNyArMjk5NSw3IEBAIHBjb21fd29ya2VyOjp0cnlfY29t YmluZV9jaGFpbnMgKCkKICAgICAgIHVwZGF0ZV9wb3NfZm9yX2NvbWJpbmVkX2NoYWlucyAo Y2gxKTsKICAgICB9CiAgIC8qIFRoZW4gc29ydCByZWZlcmVuY2VzIGFjY29yZGluZyB0byBu ZXdseSB1cGRhdGVkIHBvc2l0aW9uIGluZm9ybWF0aW9uLiAgKi8KLSAgZm9yIChpID0gMDsg Y2hhaW5zLml0ZXJhdGUgKGksICZjaDEpOyArK2kpCisgIGZvciAoaSA9IDA7IG1fY2hhaW5z Lml0ZXJhdGUgKGksICZjaDEpOyArK2kpCiAgICAgewogICAgICAgaWYgKGNoMS0+dHlwZSAh PSBDVF9DT01CSU5BVElPTiAmJiAhY2gxLT5jb21iaW5lZCkKIAljb250aW51ZTsKQEAgLTMx NTUsMTAgKzMxMTcsMTAgQEAgcGNvbV93b3JrZXI6OnByZXBhcmVfaW5pdGlhbGl6ZXJzX2No YWluIChjaGFpbl9wIGNoYWluKQogICBzdHJ1Y3QgZGF0YV9yZWZlcmVuY2UgKmRyID0gZ2V0 X2NoYWluX3Jvb3QgKGNoYWluKS0+cmVmOwogICB0cmVlIGluaXQ7CiAgIGRyZWYgbGFyZWY7 Ci0gIGVkZ2UgZW50cnkgPSBsb29wX3ByZWhlYWRlcl9lZGdlIChsb29wKTsKKyAgZWRnZSBl bnRyeSA9IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKG1fbG9vcCk7CiAKICAgaWYgKGNoYWluLT50 eXBlID09IENUX1NUT1JFX1NUT1JFKQotICAgIHJldHVybiBwcmVwYXJlX2luaXRpYWxpemVy c19jaGFpbl9zdG9yZV9lbGltIChsb29wLCBjaGFpbik7CisgICAgcmV0dXJuIHByZXBhcmVf aW5pdGlhbGl6ZXJzX2NoYWluX3N0b3JlX2VsaW0gKG1fbG9vcCwgY2hhaW4pOwogCiAgIC8q IEZpbmQgdGhlIGluaXRpYWxpemVycyBmb3IgdGhlIHZhcmlhYmxlcywgYW5kIGNoZWNrIHRo YXQgdGhleSBjYW5ub3QKICAgICAgdHJhcC4gICovCkBAIC0zMjEwLDE1ICszMTcyLDE1IEBA IHBjb21fd29ya2VyOjpwcmVwYXJlX2luaXRpYWxpemVycyAoKQogICBjaGFpbl9wIGNoYWlu OwogICB1bnNpZ25lZCBpOwogCi0gIGZvciAoaSA9IDA7IGkgPCBjaGFpbnMubGVuZ3RoICgp OyApCisgIGZvciAoaSA9IDA7IGkgPCBtX2NoYWlucy5sZW5ndGggKCk7ICkKICAgICB7Ci0g ICAgICBjaGFpbiA9IGNoYWluc1tpXTsKKyAgICAgIGNoYWluID0gbV9jaGFpbnNbaV07CiAg ICAgICBpZiAocHJlcGFyZV9pbml0aWFsaXplcnNfY2hhaW4gKGNoYWluKSkKIAlpKys7CiAg ICAgICBlbHNlCiAJewogCSAgcmVsZWFzZV9jaGFpbiAoY2hhaW4pOwotCSAgY2hhaW5zLnVu b3JkZXJlZF9yZW1vdmUgKGkpOworCSAgbV9jaGFpbnMudW5vcmRlcmVkX3JlbW92ZSAoaSk7 CiAJfQogICAgIH0KIH0KQEAgLTMyMzEsNyArMzE5Myw3IEBAIHBjb21fd29ya2VyOjpwcmVw YXJlX2ZpbmFsaXplcnNfY2hhaW4gKGNoYWluX3AgY2hhaW4pCiB7CiAgIHVuc2lnbmVkIGks IG4gPSBjaGFpbi0+bGVuZ3RoOwogICBzdHJ1Y3QgZGF0YV9yZWZlcmVuY2UgKmRyID0gZ2V0 X2NoYWluX3Jvb3QgKGNoYWluKS0+cmVmOwotICB0cmVlIGZpbmksIG5pdGVycyA9IG51bWJl cl9vZl9sYXRjaF9leGVjdXRpb25zIChsb29wKTsKKyAgdHJlZSBmaW5pLCBuaXRlcnMgPSBu dW1iZXJfb2ZfbGF0Y2hfZXhlY3V0aW9ucyAobV9sb29wKTsKIAogICAvKiBGb3Igbm93IHdl IGNhbid0IGVsaW1pbmF0ZSBzdG9yZXMgaWYgc29tZSBvZiB0aGVtIGFyZSBjb25kaXRpb25h bAogICAgICBleGVjdXRlZC4gICovCkBAIC0zMjgxLDkgKzMyNDMsOSBAQCBwY29tX3dvcmtl cjo6cHJlcGFyZV9maW5hbGl6ZXJzICgpCiAgIHVuc2lnbmVkIGk7CiAgIGJvb2wgbG9vcF9j bG9zZWRfc3NhID0gZmFsc2U7CiAKLSAgZm9yIChpID0gMDsgaSA8IGNoYWlucy5sZW5ndGgg KCk7KQorICBmb3IgKGkgPSAwOyBpIDwgbV9jaGFpbnMubGVuZ3RoICgpOykKICAgICB7Ci0g ICAgICBjaGFpbiA9IGNoYWluc1tpXTsKKyAgICAgIGNoYWluID0gbV9jaGFpbnNbaV07CiAK ICAgICAgIC8qIEZpbmFsaXplciBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgaW50ZXItaXRlcmF0 aW9uIHN0b3JlIGVsaW1pbmF0aW9uCiAJIGNoYWlucy4gICovCkBAIC0zMzA1LDcgKzMyNjcs NyBAQCBwY29tX3dvcmtlcjo6cHJlcGFyZV9maW5hbGl6ZXJzICgpCiAgICAgICBlbHNlCiAJ ewogCSAgcmVsZWFzZV9jaGFpbiAoY2hhaW4pOwotCSAgY2hhaW5zLnVub3JkZXJlZF9yZW1v dmUgKGkpOworCSAgbV9jaGFpbnMudW5vcmRlcmVkX3JlbW92ZSAoaSk7CiAJfQogICAgIH0K ICAgcmV0dXJuIGxvb3BfY2xvc2VkX3NzYTsKQEAgLTMzNDEsMTAgKzMzMDMsMTAgQEAgcGNv bV93b3JrZXI6OnRyZWVfcHJlZGljdGl2ZV9jb21tb25pbmdfbG9vcCAoYm9vbCBhbGxvd191 bnJvbGxfcCkKICAgYm9vbCB1bnJvbGwgPSBmYWxzZSwgbG9vcF9jbG9zZWRfc3NhID0gZmFs c2U7CiAKICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkK LSAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJQcm9jZXNzaW5nIGxvb3AgJWRcbiIsIGxvb3At Pm51bSk7CisgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiUHJvY2Vzc2luZyBsb29wICVkXG4i LCBtX2xvb3AtPm51bSk7CiAKICAgLyogTm90aGluZyBmb3IgcHJlZGljaXRpdmUgY29tbW9u aW5nIGlmIGxvb3Agb25seSBpdGVyYXRlcyAxIHRpbWUuICAqLwotICBpZiAoZ2V0X21heF9s b29wX2l0ZXJhdGlvbnNfaW50IChsb29wKSA9PSAwKQorICBpZiAoZ2V0X21heF9sb29wX2l0 ZXJhdGlvbnNfaW50IChtX2xvb3ApID09IDApCiAgICAgewogICAgICAgaWYgKGR1bXBfZmls ZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKIAlmcHJpbnRmIChkdW1wX2ZpbGUs ICJMb29wIGl0ZXJhdGVzIG9ubHkgMSB0aW1lLCBub3RoaW5nIHRvIGRvLlxuIik7CkBAIC0z MzU1LDggKzMzMTcsOCBAQCBwY29tX3dvcmtlcjo6dHJlZV9wcmVkaWN0aXZlX2NvbW1vbmlu Z19sb29wIChib29sIGFsbG93X3Vucm9sbF9wKQogICAvKiBGaW5kIHRoZSBkYXRhIHJlZmVy ZW5jZXMgYW5kIHNwbGl0IHRoZW0gaW50byBjb21wb25lbnRzIGFjY29yZGluZyB0byB0aGVp cgogICAgICBkZXBlbmRlbmNlIHJlbGF0aW9ucy4gICovCiAgIGF1dG9fdmVjPGxvb3BfcCwg Mz4gbG9vcF9uZXN0OwotICBpZiAoIWNvbXB1dGVfZGF0YV9kZXBlbmRlbmNlc19mb3JfbG9v cCAobG9vcCwgdHJ1ZSwgJmxvb3BfbmVzdCwgJmRhdGFyZWZzLAotCQkJCQkgICZkZXBlbmRl bmNlcykpCisgIGlmICghY29tcHV0ZV9kYXRhX2RlcGVuZGVuY2VzX2Zvcl9sb29wIChtX2xv b3AsIHRydWUsICZsb29wX25lc3QsICZtX2RhdGFyZWZzLAorCQkJCQkgICZtX2RlcGVuZGVu Y2VzKSkKICAgICB7CiAgICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERG X0RFVEFJTFMpKQogCWZwcmludGYgKGR1bXBfZmlsZSwgIkNhbm5vdCBhbmFseXplIGRhdGEg ZGVwZW5kZW5jaWVzXG4iKTsKQEAgLTMzNjQsNyArMzMyNiw3IEBAIHBjb21fd29ya2VyOjp0 cmVlX3ByZWRpY3RpdmVfY29tbW9uaW5nX2xvb3AgKGJvb2wgYWxsb3dfdW5yb2xsX3ApCiAg ICAgfQogCiAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykp Ci0gICAgZHVtcF9kYXRhX2RlcGVuZGVuY2VfcmVsYXRpb25zIChkdW1wX2ZpbGUsIGRlcGVu ZGVuY2VzKTsKKyAgICBkdW1wX2RhdGFfZGVwZW5kZW5jZV9yZWxhdGlvbnMgKGR1bXBfZmls ZSwgbV9kZXBlbmRlbmNlcyk7CiAKICAgY29tcG9uZW50cyA9IHNwbGl0X2RhdGFfcmVmc190 b19jb21wb25lbnRzICgpOwogCkBAIC0zMzg1LDcgKzMzNDcsNyBAQCBwY29tX3dvcmtlcjo6 dHJlZV9wcmVkaWN0aXZlX2NvbW1vbmluZ19sb29wIChib29sIGFsbG93X3Vucm9sbF9wKQog ICBkZXRlcm1pbmVfcm9vdHMgKGNvbXBvbmVudHMpOwogICByZWxlYXNlX2NvbXBvbmVudHMg KGNvbXBvbmVudHMpOwogCi0gIGlmICghY2hhaW5zLmV4aXN0cyAoKSkKKyAgaWYgKCFtX2No YWlucy5leGlzdHMgKCkpCiAgICAgewogICAgICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9m bGFncyAmIFRERl9ERVRBSUxTKSkKIAlmcHJpbnRmIChkdW1wX2ZpbGUsCkBAIC0zMzk5LDIx ICszMzYxLDIxIEBAIHBjb21fd29ya2VyOjp0cmVlX3ByZWRpY3RpdmVfY29tbW9uaW5nX2xv b3AgKGJvb2wgYWxsb3dfdW5yb2xsX3ApCiAgIC8qIFRyeSB0byBjb21iaW5lIHRoZSBjaGFp bnMgdGhhdCBhcmUgYWx3YXlzIHdvcmtlZCB3aXRoIHRvZ2V0aGVyLiAgKi8KICAgdHJ5X2Nv bWJpbmVfY2hhaW5zICgpOwogCi0gIGluc2VydF9pbml0X3NlcXMgKGxvb3AsIGNoYWlucyk7 CisgIGluc2VydF9pbml0X3NlcXMgKG1fbG9vcCwgbV9jaGFpbnMpOwogCiAgIGlmIChkdW1w X2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCiAgICAgewogICAgICAgZnBy aW50ZiAoZHVtcF9maWxlLCAiQmVmb3JlIGNvbW1vbmluZzpcblxuIik7Ci0gICAgICBkdW1w X2NoYWlucyAoZHVtcF9maWxlLCBjaGFpbnMpOworICAgICAgZHVtcF9jaGFpbnMgKGR1bXBf ZmlsZSwgbV9jaGFpbnMpOwogICAgIH0KIAogICBpZiAoYWxsb3dfdW5yb2xsX3ApCiAgICAg LyogRGV0ZXJtaW5lIHRoZSB1bnJvbGwgZmFjdG9yLCBhbmQgaWYgdGhlIGxvb3Agc2hvdWxk IGJlIHVucm9sbGVkLCBlbnN1cmUKICAgICAgICB0aGF0IGl0cyBudW1iZXIgb2YgaXRlcmF0 aW9ucyBpcyBkaXZpc2libGUgYnkgdGhlIGZhY3Rvci4gICovCi0gICAgdW5yb2xsX2ZhY3Rv ciA9IGRldGVybWluZV91bnJvbGxfZmFjdG9yIChjaGFpbnMpOworICAgIHVucm9sbF9mYWN0 b3IgPSBkZXRlcm1pbmVfdW5yb2xsX2ZhY3RvciAobV9jaGFpbnMpOwogCiAgIGlmICh1bnJv bGxfZmFjdG9yID4gMSkKLSAgICB1bnJvbGwgPSBjYW5fdW5yb2xsX2xvb3BfcCAobG9vcCwg dW5yb2xsX2ZhY3RvciwgJmRlc2MpOworICAgIHVucm9sbCA9IGNhbl91bnJvbGxfbG9vcF9w IChtX2xvb3AsIHVucm9sbF9mYWN0b3IsICZkZXNjKTsKIAogICAvKiBFeGVjdXRlIHRoZSBw cmVkaWN0aXZlIGNvbW1vbmluZyB0cmFuc2Zvcm1hdGlvbnMsIGFuZCBwb3NzaWJseSB1bnJv bGwgdGhlCiAgICAgIGxvb3AuICAqLwpAQCAtMzQyNSw3ICszMzg3LDcgQEAgcGNvbV93b3Jr ZXI6OnRyZWVfcHJlZGljdGl2ZV9jb21tb25pbmdfbG9vcCAoYm9vbCBhbGxvd191bnJvbGxf cCkKIAlmcHJpbnRmIChkdW1wX2ZpbGUsICJVbnJvbGxpbmcgJXUgdGltZXMuXG4iLCB1bnJv bGxfZmFjdG9yKTsKIAogICAgICAgZHRhLnRtcF92YXJzID0gdG1wX3ZhcnM7Ci0gICAgICBk dGEuY2hhaW5zID0gY2hhaW5zOworICAgICAgZHRhLmNoYWlucyA9IG1fY2hhaW5zOwogICAg ICAgZHRhLndvcmtlciA9IHRoaXM7CiAKICAgICAgIC8qIENmZyBtYW5pcHVsYXRpb25zIHBl cmZvcm1lZCBpbiB0cmVlX3RyYW5zZm9ybV9hbmRfdW5yb2xsX2xvb3AgYmVmb3JlCkBAIC0z NDM0LDEyICszMzk2LDEyIEBAIHBjb21fd29ya2VyOjp0cmVlX3ByZWRpY3RpdmVfY29tbW9u aW5nX2xvb3AgKGJvb2wgYWxsb3dfdW5yb2xsX3ApCiAJIHN0YXRlbWVudHMuICBUbyBmaXgg dGhpcywgd2Ugc3RvcmUgdGhlIHNzYSBuYW1lcyBkZWZpbmVkIGJ5IHRoZQogCSBwaGkgbm9k ZXMgaGVyZSBpbnN0ZWFkIG9mIHRoZSBwaGkgbm9kZXMgdGhlbXNlbHZlcywgYW5kIHJlc3Rv cmUKIAkgdGhlIHBoaSBub2RlcyBpbiBleGVjdXRlX3ByZWRfY29tbW9uaW5nX2NiY2suICBB IGJpdCBoYWNreS4gICovCi0gICAgICByZXBsYWNlX3BoaXNfYnlfZGVmaW5lZF9uYW1lcyAo Y2hhaW5zKTsKKyAgICAgIHJlcGxhY2VfcGhpc19ieV9kZWZpbmVkX25hbWVzIChtX2NoYWlu cyk7CiAKLSAgICAgIGVkZ2UgZXhpdCA9IHNpbmdsZV9kb21fZXhpdCAobG9vcCk7Ci0gICAg ICB0cmVlX3RyYW5zZm9ybV9hbmRfdW5yb2xsX2xvb3AgKGxvb3AsIHVucm9sbF9mYWN0b3Is IGV4aXQsICZkZXNjLAorICAgICAgZWRnZSBleGl0ID0gc2luZ2xlX2RvbV9leGl0IChtX2xv b3ApOworICAgICAgdHJlZV90cmFuc2Zvcm1fYW5kX3Vucm9sbF9sb29wIChtX2xvb3AsIHVu cm9sbF9mYWN0b3IsIGV4aXQsICZkZXNjLAogCQkJCSAgICAgIGV4ZWN1dGVfcHJlZF9jb21t b25pbmdfY2JjaywgJmR0YSk7Ci0gICAgICBlbGltaW5hdGVfdGVtcF9jb3BpZXMgKGxvb3As IHRtcF92YXJzKTsKKyAgICAgIGVsaW1pbmF0ZV90ZW1wX2NvcGllcyAobV9sb29wLCB0bXBf dmFycyk7CiAgICAgfQogICBlbHNlCiAgICAgewpAQCAtMzU1NCw1ICszNTE2LDMgQEAgbWFr ZV9wYXNzX3ByZWRjb20gKGdjYzo6Y29udGV4dCAqY3R4dCkKIHsKICAgcmV0dXJuIG5ldyBw YXNzX3ByZWRjb20gKGN0eHQpOwogfQotCi0KCg== --------------5E1C9A62F2E186E33E5BE407--