From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x132.google.com (mail-lf1-x132.google.com [IPv6:2a00:1450:4864:20::132]) by sourceware.org (Postfix) with ESMTPS id 985953858D20; Wed, 6 Dec 2023 20:54:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 985953858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 985953858D20 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::132 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701896095; cv=none; b=AF8tzSVue2XRbpgkK0pmoYx7ArCoGeOBLsIcbkNXApWOErKwFKjx7+TvgNLOS/4RO3CCTnDAidINnpiBZL3KkFYsolSXdsn/Zl+0L0Rosdt4zinOOKsfo9XNahS3PrCJRQyFvi1TsvNIOaz9rm83d9iRXcIreo8q7si8FgMA/iw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701896095; c=relaxed/simple; bh=2hvuQt4DeFVlatxYv8+zhg9vZ63EB7dObCn8ii7gxlE=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=HNpkwGYPeoJQ9YaDQ6C77q5paQcemGEycGKQMlbr04BDiS7lhJVDSBt/FVlY4t+odCYrEKqNgxtjKcBuWL3ruMfv9xSYHXxD0qt2yNO5shsgdJcj3kdOt3nh2YoxrdI9B0S5HDBN7mYN6fmw5Yzv35N0ZfrujAct3spsk1TUajg= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-50bfd8d5c77so283352e87.1; Wed, 06 Dec 2023 12:54:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701896086; x=1702500886; darn=gcc.gnu.org; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=wYqYEwNnujUQOTpPvFsGPmgsC6eD1EoupBbB8evQSRE=; b=SgQA8HFxEogtx8oBgp0wDvwhbXy6S/rGvmuz49bfoWPSe8duh0hxagQuZn+XFmK2j9 va0kbBI3sBMgqUfNcJFaWT5wDztxuQcR5XE1RL36aRGnU4EllbvTGwspysygV96rVfw6 0w3mlQxIQ7XAbG2A5ZFJXYuvu+pk7EgeOFbUVcQpf5ofPDl8wZrQdUE1MEAxla+62GD6 ySQ4gEh8WSDd1T6lzTVbq3NkgOiPRZvfw2TBSAtqg5IYE1gHWCu9O6WeeVhbEs7hZ+oa lsP+G2urxh6C9d2pcr+SfDz35/uErdpKVpj1CtDW1q59DUS1A415TXjVaql7BNa39p/J pcbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701896086; x=1702500886; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=wYqYEwNnujUQOTpPvFsGPmgsC6eD1EoupBbB8evQSRE=; b=JnPHgzwMQ1M7CQyXHfc2rcrN3gabWIoMQLNDM1MNBo7BEXeG0CTIomfLGLzN0NO3cu RayDCWYqr9NfaMuY80BA12WNQy5wgeGLM2Qh0/fNGTOUwlryk8fBmtPOhZ55A79ssYQs ohQ7YMYVl0E9dW3tpFDrQARmBuOx4EW6rt+B6kF+OiCY2EvBNCGXbFWvOeiHDqodtkBK E+PIqldNJ3QLS790+w5z6SfQEWQj0TeOg0iP/EtP9Rs1+O9892ic/YEljLnOKvEQwtOP liPoGWPPpwi9Tb6eJ7oMCW+34KULe2FmW1xyBrNMSbXGrbfojizRdOR175BlMmJeIyEf zePA== X-Gm-Message-State: AOJu0YwLXCAb2GvdPzaeqkrZtHqkfaHIHezl3QG9wX+8bG1GVMBbhgam zGpFzqfN2REXOyY56n+qatHiX9FMhJU= X-Google-Smtp-Source: AGHT+IEQAsacEP4wuZtKtjyiiZkZt58pA/urGNY6bjBkDGAWRgxuWPyvLHntI+3imR9OdYVRy3We8A== X-Received: by 2002:ac2:599a:0:b0:50c:528:3ee5 with SMTP id w26-20020ac2599a000000b0050c05283ee5mr478431lfn.153.1701896085981; Wed, 06 Dec 2023 12:54:45 -0800 (PST) Received: from [10.24.2.81] ([89.207.171.100]) by smtp.gmail.com with ESMTPSA id s20-20020aa7cb14000000b0054c76d0f755sm363474edt.42.2023.12.06.12.54.43 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 06 Dec 2023 12:54:44 -0800 (PST) Content-Type: multipart/mixed; boundary="------------EKbbnkOS5XpO0VTCO1tyZkok" Message-ID: <9c9d0f26-4ca9-4c1b-86fa-63bc65d21ecf@gmail.com> Date: Wed, 6 Dec 2023 21:54:41 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] Reimplement __gnu_cxx::__ops operators From: =?UTF-8?Q?Fran=C3=A7ois_Dumont?= To: libstdc++ Cc: gcc-patches References: <6b960f74-7ef7-8c3f-20bd-3f5a19d1f449@gmail.com> Content-Language: en-US In-Reply-To: <6b960f74-7ef7-8c3f-20bd-3f5a19d1f449@gmail.com> X-Spam-Status: No, score=-9.0 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------EKbbnkOS5XpO0VTCO1tyZkok Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit I think I still got no feedback about this cleanup proposal. Here is a new version. François On 15/06/2023 07:07, François Dumont wrote: > I think we all agree that __gnu_cxx::__ops needed to be reimplemented, > here it is. > > Note that I kept the usage of std::ref in , and . > >     libstdc++: Reimplement __gnu_cxx::__ops operators > >     Replace functors using iterators as input to adopt functors that >     are matching the same Standard expectations as the ones imposed on >     predicates used in predicates-aware algos. Doing so we need far less >     functors. It impose that iterators are dereference at algo level and >     not in the functors anymore. > >     libstdc++-v3/ChangeLog: > >             * include/std/functional (_Not_fn): Move to... >             * include/bits/predefined_ops.h: ...here, and expose a > version >             in pre-C++14 mode. >             (__not_fn): New, use latter. >             (_Iter_less_iter, _Iter_less_val, _Val_less_iter, > _Iter_equal_to_iter) >             (_Iter_equal_to_val, _Iter_comp_iter, _Iter_comp_val, > _Val_comp_iter) >             (_Iter_equals_val, _Iter_equals_iter, _Iter_pred, > _Iter_comp_val) >             (_Iter_comp_to_val, _Iter_comp_to_iter, _Iter_negate): > Remove. >             (__iter_less_iter, __iter_less_val, __iter_comp_val, > __val_less_iter) >             (__val_comp_iter, __iter_equal_to_iter, > __iter_equal_to_val, __iter_comp_iter) >             (__val_comp_iter, __iter_equals_val, __iter_comp_iter, > __pred_iter): Remove. >             (_Less, _Equal_to, _Equal_to_val, _Comp_val): New. >             (__less, __equal_to, __comp_val): New. >             * include/bits/stl_algo.h: Adapt all algos to use new > __gnu_cxx::__ops operators. >             When possible use std::move to pass predicates between > routines. >             * include/bits/stl_algobase.h: Likewise. >             * include/bits/stl_heap.h: Likewise. >             * include/std/deque: Cleanup usage of __gnu_cxx::__ops > operators. >             * include/std/string: Likewise. >             * include/std/vector: Likewise. > > Tested under Linux x86_64 normal and _GLIBCXX_DEBUG modes. > > Ok to commit ? > > François > --------------EKbbnkOS5XpO0VTCO1tyZkok Content-Type: text/plain; charset=UTF-8; name="algos_patch.txt" Content-Disposition: attachment; filename="algos_patch.txt" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvcHJlZGVmaW5lZF9vcHMu aCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvcHJlZGVmaW5lZF9vcHMuaAppbmRleCBl OTkzMzM3M2VkOS4uODc1M2U2ZjY0Y2QgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNs dWRlL2JpdHMvcHJlZGVmaW5lZF9vcHMuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9i aXRzL3ByZWRlZmluZWRfb3BzLmgKQEAgLTMyLDM3NiArMzIsMjI5IEBACiAKICNpbmNsdWRl IDxiaXRzL21vdmUuaD4KIAorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyMgaW5jbHVk ZSA8Yml0cy9pbnZva2UuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgX19nbnVfY3h4CiB7CiBu YW1lc3BhY2UgX19vcHMKIHsKLSAgc3RydWN0IF9JdGVyX2xlc3NfaXRlcgorICBzdHJ1Y3Qg X0xlc3MKICAgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcjEsIHR5cGVuYW1l IF9JdGVyYXRvcjI+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0xocywgdHlwZW5hbWUgX1Jo cz4KICAgICAgIF9HTElCQ1hYMTRfQ09OU1RFWFBSCiAgICAgICBib29sCi0gICAgICBvcGVy YXRvcigpKF9JdGVyYXRvcjEgX19pdDEsIF9JdGVyYXRvcjIgX19pdDIpIGNvbnN0Ci0gICAg ICB7IHJldHVybiAqX19pdDEgPCAqX19pdDI7IH0KKyAgICAgIG9wZXJhdG9yKCkoY29uc3Qg X0xocyYgX19saHMsIGNvbnN0IF9SaHMmIF9fcmhzKSBjb25zdAorICAgICAgeyByZXR1cm4g X19saHMgPCBfX3JoczsgfQogICB9OwogCiAgIF9HTElCQ1hYMTRfQ09OU1RFWFBSCi0gIGlu bGluZSBfSXRlcl9sZXNzX2l0ZXIKLSAgX19pdGVyX2xlc3NfaXRlcigpCi0gIHsgcmV0dXJu IF9JdGVyX2xlc3NfaXRlcigpOyB9Ci0KLSAgc3RydWN0IF9JdGVyX2xlc3NfdmFsCi0gIHsK LSNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCi0gICAgY29uc3RleHByIF9JdGVyX2xlc3Nf dmFsKCkgPSBkZWZhdWx0OwotI2Vsc2UKLSAgICBfSXRlcl9sZXNzX3ZhbCgpIHsgfQotI2Vu ZGlmCi0KLSAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAgIGV4cGxpY2l0Ci0gICAgX0l0 ZXJfbGVzc192YWwoX0l0ZXJfbGVzc19pdGVyKSB7IH0KLQotICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1ZhbHVlPgotICAgICAgX0dMSUJDWFgyMF9DT05T VEVYUFIKLSAgICAgIGJvb2wKLSAgICAgIG9wZXJhdG9yKCkoX0l0ZXJhdG9yIF9faXQsIF9W YWx1ZSYgX192YWwpIGNvbnN0Ci0gICAgICB7IHJldHVybiAqX19pdCA8IF9fdmFsOyB9Ci0g IH07Ci0KLSAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgaW5saW5lIF9JdGVyX2xlc3NfdmFs Ci0gIF9faXRlcl9sZXNzX3ZhbCgpCi0gIHsgcmV0dXJuIF9JdGVyX2xlc3NfdmFsKCk7IH0K LQotICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICBpbmxpbmUgX0l0ZXJfbGVzc192YWwKLSAg X19pdGVyX2NvbXBfdmFsKF9JdGVyX2xlc3NfaXRlcikKLSAgeyByZXR1cm4gX0l0ZXJfbGVz c192YWwoKTsgfQotCi0gIHN0cnVjdCBfVmFsX2xlc3NfaXRlcgotICB7Ci0jaWYgX19jcGx1 c3BsdXMgPj0gMjAxMTAzTAotICAgIGNvbnN0ZXhwciBfVmFsX2xlc3NfaXRlcigpID0gZGVm YXVsdDsKLSNlbHNlCi0gICAgX1ZhbF9sZXNzX2l0ZXIoKSB7IH0KLSNlbmRpZgotCi0gICAg X0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICBleHBsaWNpdAotICAgIF9WYWxfbGVzc19pdGVy KF9JdGVyX2xlc3NfaXRlcikgeyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUs IHR5cGVuYW1lIF9JdGVyYXRvcj4KLSAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCi0gICAg ICBib29sCi0gICAgICBvcGVyYXRvcigpKF9WYWx1ZSYgX192YWwsIF9JdGVyYXRvciBfX2l0 KSBjb25zdAotICAgICAgeyByZXR1cm4gX192YWwgPCAqX19pdDsgfQotICB9OworICBpbmxp bmUgX0xlc3MKKyAgX19sZXNzKCkKKyAgeyByZXR1cm4gX0xlc3MoKTsgfQogCi0gIF9HTElC Q1hYMjBfQ09OU1RFWFBSCi0gIGlubGluZSBfVmFsX2xlc3NfaXRlcgotICBfX3ZhbF9sZXNz X2l0ZXIoKQotICB7IHJldHVybiBfVmFsX2xlc3NfaXRlcigpOyB9Ci0KLSAgX0dMSUJDWFgy MF9DT05TVEVYUFIKLSAgaW5saW5lIF9WYWxfbGVzc19pdGVyCi0gIF9fdmFsX2NvbXBfaXRl cihfSXRlcl9sZXNzX2l0ZXIpCi0gIHsgcmV0dXJuIF9WYWxfbGVzc19pdGVyKCk7IH0KLQot ICBzdHJ1Y3QgX0l0ZXJfZXF1YWxfdG9faXRlcgorICBzdHJ1Y3QgX0VxdWFsX3RvCiAgIHsK LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IxLCB0eXBlbmFtZSBfSXRlcmF0b3Iy PgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9MaHMsIHR5cGVuYW1lIF9SaHM+CiAgICAgICBf R0xJQkNYWDIwX0NPTlNURVhQUgogICAgICAgYm9vbAotICAgICAgb3BlcmF0b3IoKShfSXRl cmF0b3IxIF9faXQxLCBfSXRlcmF0b3IyIF9faXQyKSBjb25zdAotICAgICAgeyByZXR1cm4g Kl9faXQxID09ICpfX2l0MjsgfQorICAgICAgb3BlcmF0b3IoKShjb25zdCBfTGhzJiBfX2xo cywgY29uc3QgX1JocyYgX19yaHMpIGNvbnN0CisgICAgICB7IHJldHVybiBfX2xocyA9PSBf X3JoczsgfQogICB9OwogCiAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCi0gIGlubGluZSBfSXRl cl9lcXVhbF90b19pdGVyCi0gIF9faXRlcl9lcXVhbF90b19pdGVyKCkKLSAgeyByZXR1cm4g X0l0ZXJfZXF1YWxfdG9faXRlcigpOyB9Ci0KLSAgc3RydWN0IF9JdGVyX2VxdWFsX3RvX3Zh bAotICB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfVmFs dWU+Ci0gICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAgICAgYm9vbAotICAgICAgb3Bl cmF0b3IoKShfSXRlcmF0b3IgX19pdCwgX1ZhbHVlJiBfX3ZhbCkgY29uc3QKLSAgICAgIHsg cmV0dXJuICpfX2l0ID09IF9fdmFsOyB9Ci0gIH07CisgIGlubGluZSBfRXF1YWxfdG8KKyAg X19lcXVhbF90bygpCisgIHsgcmV0dXJuIF9FcXVhbF90bygpOyB9CiAKLSAgX0dMSUJDWFgy MF9DT05TVEVYUFIKLSAgaW5saW5lIF9JdGVyX2VxdWFsX3RvX3ZhbAotICBfX2l0ZXJfZXF1 YWxfdG9fdmFsKCkKLSAgeyByZXR1cm4gX0l0ZXJfZXF1YWxfdG9fdmFsKCk7IH0KLQotICBf R0xJQkNYWDIwX0NPTlNURVhQUgotICBpbmxpbmUgX0l0ZXJfZXF1YWxfdG9fdmFsCi0gIF9f aXRlcl9jb21wX3ZhbChfSXRlcl9lcXVhbF90b19pdGVyKQotICB7IHJldHVybiBfSXRlcl9l cXVhbF90b192YWwoKTsgfQotCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wYXJlPgotICAg IHN0cnVjdCBfSXRlcl9jb21wX2l0ZXIKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KKyAg ICBzdHJ1Y3QgX0VxdWFsX3RvX3ZhbAogICAgIHsKLSAgICAgIF9Db21wYXJlIF9NX2NvbXA7 Ci0KLSAgICAgIGV4cGxpY2l0IF9HTElCQ1hYMTRfQ09OU1RFWFBSCi0gICAgICBfSXRlcl9j b21wX2l0ZXIoX0NvbXBhcmUgX19jb21wKQotCTogX01fY29tcChfR0xJQkNYWF9NT1ZFKF9f Y29tcCkpCi0gICAgICB7IH0KLQotICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y MSwgdHlwZW5hbWUgX0l0ZXJhdG9yMj4KLSAgICAgICAgX0dMSUJDWFgxNF9DT05TVEVYUFIK LSAgICAgICAgYm9vbAotICAgICAgICBvcGVyYXRvcigpKF9JdGVyYXRvcjEgX19pdDEsIF9J dGVyYXRvcjIgX19pdDIpCi0gICAgICAgIHsgcmV0dXJuIGJvb2woX01fY29tcCgqX19pdDEs ICpfX2l0MikpOyB9Ci0gICAgfTsKLQotICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29tcGFyZT4K LSAgICBfR0xJQkNYWDE0X0NPTlNURVhQUgotICAgIGlubGluZSBfSXRlcl9jb21wX2l0ZXI8 X0NvbXBhcmU+Ci0gICAgX19pdGVyX2NvbXBfaXRlcihfQ29tcGFyZSBfX2NvbXApCi0gICAg eyByZXR1cm4gX0l0ZXJfY29tcF9pdGVyPF9Db21wYXJlPihfR0xJQkNYWF9NT1ZFKF9fY29t cCkpOyB9Ci0KLSAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbXBhcmU+Ci0gICAgc3RydWN0IF9J dGVyX2NvbXBfdmFsCi0gICAgewotICAgICAgX0NvbXBhcmUgX01fY29tcDsKKyAgICAgIGNv bnN0IF9WYWwmIF9NX3ZhbDsKIAogICAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICAg IGV4cGxpY2l0Ci0gICAgICBfSXRlcl9jb21wX3ZhbChfQ29tcGFyZSBfX2NvbXApCi0JOiBf TV9jb21wKF9HTElCQ1hYX01PVkUoX19jb21wKSkKKyAgICAgIF9FcXVhbF90b192YWwoY29u c3QgX1ZhbCYgX192YWwpCisgICAgICA6IF9NX3ZhbChfX3ZhbCkKICAgICAgIHsgfQogCi0g ICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAgICAgZXhwbGljaXQKLSAgICAgIF9JdGVy X2NvbXBfdmFsKGNvbnN0IF9JdGVyX2NvbXBfaXRlcjxfQ29tcGFyZT4mIF9fY29tcCkKLQk6 IF9NX2NvbXAoX19jb21wLl9NX2NvbXApCi0gICAgICB7IH0KLQotI2lmIF9fY3BsdXNwbHVz ID49IDIwMTEwM0wKLSAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCi0gICAgICBleHBsaWNp dAotICAgICAgX0l0ZXJfY29tcF92YWwoX0l0ZXJfY29tcF9pdGVyPF9Db21wYXJlPiYmIF9f Y29tcCkKLQk6IF9NX2NvbXAoc3RkOjptb3ZlKF9fY29tcC5fTV9jb21wKSkKLSAgICAgIHsg fQotI2VuZGlmCi0KLSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5h bWUgX1ZhbHVlPgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0xocz4KIAlfR0xJQkNYWDIw X0NPTlNURVhQUgogCWJvb2wKLQlvcGVyYXRvcigpKF9JdGVyYXRvciBfX2l0LCBfVmFsdWUm IF9fdmFsKQotCXsgcmV0dXJuIGJvb2woX01fY29tcCgqX19pdCwgX192YWwpKTsgfQorCW9w ZXJhdG9yKCkoY29uc3QgX0xocyYgX19saHMpIGNvbnN0CisJeyByZXR1cm4gX19saHMgPT0g X01fdmFsOyB9CiAgICAgfTsKIAotICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29tcGFyZT4KKyAg dGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAg IGlubGluZSBfSXRlcl9jb21wX3ZhbDxfQ29tcGFyZT4KLSAgICBfX2l0ZXJfY29tcF92YWwo X0NvbXBhcmUgX19jb21wKQotICAgIHsgcmV0dXJuIF9JdGVyX2NvbXBfdmFsPF9Db21wYXJl PihfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOyB9CisgICAgaW5saW5lIF9FcXVhbF90b192YWw8 X1ZhbD4KKyAgICBfX2VxdWFsX3RvKGNvbnN0IF9WYWwmIF9fdmFsKQorICAgIHsgcmV0dXJu IF9FcXVhbF90b192YWw8X1ZhbD4oX192YWwpOyB9CiAKLSAgdGVtcGxhdGU8dHlwZW5hbWUg X0NvbXBhcmU+Ci0gICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICBpbmxpbmUgX0l0ZXJf Y29tcF92YWw8X0NvbXBhcmU+Ci0gICAgX19pdGVyX2NvbXBfdmFsKF9JdGVyX2NvbXBfaXRl cjxfQ29tcGFyZT4gX19jb21wKQotICAgIHsgcmV0dXJuIF9JdGVyX2NvbXBfdmFsPF9Db21w YXJlPihfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOyB9Ci0KLSAgdGVtcGxhdGU8dHlwZW5hbWUg X0NvbXBhcmU+Ci0gICAgc3RydWN0IF9WYWxfY29tcF9pdGVyCisgIHRlbXBsYXRlPHR5cGVu YW1lIF9CaW5hcnlQcmVkLCB0eXBlbmFtZSBfVmFsPgorICAgIHN0cnVjdCBfQ29tcF92YWwK ICAgICB7Ci0gICAgICBfQ29tcGFyZSBfTV9jb21wOwotCi0gICAgICBfR0xJQkNYWDIwX0NP TlNURVhQUgotICAgICAgZXhwbGljaXQKLSAgICAgIF9WYWxfY29tcF9pdGVyKF9Db21wYXJl IF9fY29tcCkKLQk6IF9NX2NvbXAoX0dMSUJDWFhfTU9WRShfX2NvbXApKQotICAgICAgeyB9 Ci0KLSAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCi0gICAgICBleHBsaWNpdAotICAgICAg X1ZhbF9jb21wX2l0ZXIoY29uc3QgX0l0ZXJfY29tcF9pdGVyPF9Db21wYXJlPiYgX19jb21w KQotCTogX01fY29tcChfX2NvbXAuX01fY29tcCkKLSAgICAgIHsgfQotCiAjaWYgX19jcGx1 c3BsdXMgPj0gMjAxMTAzTAotICAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICAgIGV4 cGxpY2l0Ci0gICAgICBfVmFsX2NvbXBfaXRlcihfSXRlcl9jb21wX2l0ZXI8X0NvbXBhcmU+ JiYgX19jb21wKQotCTogX01fY29tcChzdGQ6Om1vdmUoX19jb21wLl9NX2NvbXApKQorICAg ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JQcmVkPgorCWNvbnN0ZXhwcgorCV9Db21wX3ZhbChf QlByZWQmJiBfX3ByZWQsIGNvbnN0IF9WYWwmIF9fdmFsKQorCTogX01fYmluYXJ5X3ByZWQo c3RkOjpmb3J3YXJkPF9CUHJlZD4oX19wcmVkKSksIF9NX3ZhbChfX3ZhbCkKKwl7IH0KKwor ICAgICAgX0NvbXBfdmFsKGNvbnN0IF9Db21wX3ZhbCYpID0gZGVmYXVsdDsKKyAgICAgIF9D b21wX3ZhbChfQ29tcF92YWwmJikgPSBkZWZhdWx0OworICAgICAgfl9Db21wX3ZhbCgpID0g ZGVmYXVsdDsKKyNlbHNlCisgICAgcHVibGljOgorICAgICAgX0NvbXBfdmFsKF9CaW5hcnlQ cmVkIF9fcHJlZCwgY29uc3QgX1ZhbCYgX192YWwpCisgICAgICA6IF9NX2JpbmFyeV9wcmVk KF9fcHJlZCksIF9NX3ZhbChfX3ZhbCkKICAgICAgIHsgfQogI2VuZGlmCiAKLSAgICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0l0ZXJhdG9yPgotCV9HTElCQ1hY MjBfQ09OU1RFWFBSCi0JYm9vbAotCW9wZXJhdG9yKCkoX1ZhbHVlJiBfX3ZhbCwgX0l0ZXJh dG9yIF9faXQpCi0JeyByZXR1cm4gYm9vbChfTV9jb21wKF9fdmFsLCAqX19pdCkpOyB9Ci0g ICAgfTsKLQotICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29tcGFyZT4KLSAgICBfR0xJQkNYWDIw X0NPTlNURVhQUgotICAgIGlubGluZSBfVmFsX2NvbXBfaXRlcjxfQ29tcGFyZT4KLSAgICBf X3ZhbF9jb21wX2l0ZXIoX0NvbXBhcmUgX19jb21wKQotICAgIHsgcmV0dXJuIF9WYWxfY29t cF9pdGVyPF9Db21wYXJlPihfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOyB9Ci0KLSAgdGVtcGxh dGU8dHlwZW5hbWUgX0NvbXBhcmU+Ci0gICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICBp bmxpbmUgX1ZhbF9jb21wX2l0ZXI8X0NvbXBhcmU+Ci0gICAgX192YWxfY29tcF9pdGVyKF9J dGVyX2NvbXBfaXRlcjxfQ29tcGFyZT4gX19jb21wKQotICAgIHsgcmV0dXJuIF9WYWxfY29t cF9pdGVyPF9Db21wYXJlPihfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOyB9Ci0KLSAgdGVtcGxh dGU8dHlwZW5hbWUgX1ZhbHVlPgotICAgIHN0cnVjdCBfSXRlcl9lcXVhbHNfdmFsCi0gICAg ewotICAgICAgX1ZhbHVlJiBfTV92YWx1ZTsKLQotICAgICAgX0dMSUJDWFgyMF9DT05TVEVY UFIKLSAgICAgIGV4cGxpY2l0Ci0gICAgICBfSXRlcl9lcXVhbHNfdmFsKF9WYWx1ZSYgX192 YWx1ZSkKLQk6IF9NX3ZhbHVlKF9fdmFsdWUpCi0gICAgICB7IH0KLQotICAgICAgdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgotCV9HTElCQ1hYMjBfQ09OU1RFWFBSCi0JYm9vbAot CW9wZXJhdG9yKCkoX0l0ZXJhdG9yIF9faXQpCi0JeyByZXR1cm4gKl9faXQgPT0gX01fdmFs dWU7IH0KLSAgICB9OwotCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZT4KLSAgICBfR0xJ QkNYWDIwX0NPTlNURVhQUgotICAgIGlubGluZSBfSXRlcl9lcXVhbHNfdmFsPF9WYWx1ZT4K LSAgICBfX2l0ZXJfZXF1YWxzX3ZhbChfVmFsdWUmIF9fdmFsKQotICAgIHsgcmV0dXJuIF9J dGVyX2VxdWFsc192YWw8X1ZhbHVlPihfX3ZhbCk7IH0KLQotICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcmF0b3IxPgotICAgIHN0cnVjdCBfSXRlcl9lcXVhbHNfaXRlcgotICAgIHsKLSAg ICAgIF9JdGVyYXRvcjEgX01faXQxOwotCi0gICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgot ICAgICAgZXhwbGljaXQKLSAgICAgIF9JdGVyX2VxdWFsc19pdGVyKF9JdGVyYXRvcjEgX19p dDEpCi0JOiBfTV9pdDEoX19pdDEpCi0gICAgICB7IH0KLQotICAgICAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yMj4KLQlfR0xJQkNYWDIwX0NPTlNURVhQUgotCWJvb2wKLQlvcGVy YXRvcigpKF9JdGVyYXRvcjIgX19pdDIpCi0JeyByZXR1cm4gKl9faXQyID09ICpfTV9pdDE7 IH0KLSAgICB9OwotCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KLSAgICBfR0xJ QkNYWDIwX0NPTlNURVhQUgotICAgIGlubGluZSBfSXRlcl9lcXVhbHNfaXRlcjxfSXRlcmF0 b3I+Ci0gICAgX19pdGVyX2NvbXBfaXRlcihfSXRlcl9lcXVhbF90b19pdGVyLCBfSXRlcmF0 b3IgX19pdCkKLSAgICB7IHJldHVybiBfSXRlcl9lcXVhbHNfaXRlcjxfSXRlcmF0b3I+KF9f aXQpOyB9Ci0KLSAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KLSAgICBzdHJ1Y3Qg X0l0ZXJfcHJlZAotICAgIHsKLSAgICAgIF9QcmVkaWNhdGUgX01fcHJlZDsKLQotICAgICAg X0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICAgIGV4cGxpY2l0Ci0gICAgICBfSXRlcl9wcmVk KF9QcmVkaWNhdGUgX19wcmVkKQotCTogX01fcHJlZChfR0xJQkNYWF9NT1ZFKF9fcHJlZCkp Ci0gICAgICB7IH0KLQotICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgotCV9H TElCQ1hYMjBfQ09OU1RFWFBSCi0JYm9vbAotCW9wZXJhdG9yKCkoX0l0ZXJhdG9yIF9faXQp Ci0JeyByZXR1cm4gYm9vbChfTV9wcmVkKCpfX2l0KSk7IH0KLSAgICB9OwotCi0gIHRlbXBs YXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+Ci0gICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAg ICBpbmxpbmUgX0l0ZXJfcHJlZDxfUHJlZGljYXRlPgotICAgIF9fcHJlZF9pdGVyKF9QcmVk aWNhdGUgX19wcmVkKQotICAgIHsgcmV0dXJuIF9JdGVyX3ByZWQ8X1ByZWRpY2F0ZT4oX0dM SUJDWFhfTU9WRShfX3ByZWQpKTsgfQotCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wYXJl LCB0eXBlbmFtZSBfVmFsdWU+Ci0gICAgc3RydWN0IF9JdGVyX2NvbXBfdG9fdmFsCi0gICAg ewotICAgICAgX0NvbXBhcmUgX01fY29tcDsKLSAgICAgIF9WYWx1ZSYgX01fdmFsdWU7Ci0K LSAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCi0gICAgICBfSXRlcl9jb21wX3RvX3ZhbChf Q29tcGFyZSBfX2NvbXAsIF9WYWx1ZSYgX192YWx1ZSkKLQk6IF9NX2NvbXAoX0dMSUJDWFhf TU9WRShfX2NvbXApKSwgX01fdmFsdWUoX192YWx1ZSkKLSAgICAgIHsgfQotCi0gICAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+Ci0JX0dMSUJDWFgyMF9DT05TVEVYUFIKKyNp ZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvLyBNYWNybyB0byBkZWZpbmUgb3Bl cmF0b3IoKSB3aXRoIGdpdmVuIGN2LXF1YWxpZmllcnMgcmVmLXF1YWxpZmllcnMsCisgICAg ICAvLyBmb3J3YXJkaW5nIF9NX2JpbmFyeV9wcmVkIGFuZCB0aGUgZnVuY3Rpb24gYXJndW1l bnRzIHdpdGggdGhlIHNhbWUKKyAgICAgIC8vIHF1YWxpZmllcnMsIGFuZCBkZWR1Y2luZyB0 aGUgcmV0dXJuIHR5cGUgYW5kIGV4Y2VwdGlvbi1zcGVjaWZpY2F0aW9uLgorIyBkZWZpbmUg X0dMSUJDWFhfQklOQVJZX1BSRURfQ0FMTF9PUCggX1FVQUxTICkJCQkJXAorICAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX0FyZywJCQkJCQlcCisJICAgICAgIHR5cGVuYW1lID0gc3RkOjpf X2VuYWJsZV9pZl90PHN0ZDo6X19pc19pbnZvY2FibGU8CVwKKwkJIF9CaW5hcnlQcmVkIF9R VUFMUywgX0FyZywgY29uc3QgX1ZhbCY+Ojp2YWx1ZT4+IAlcCisJX0dMSUJDWFgyMF9DT05T VEVYUFIJCQkJCQlcCisJYm9vbAkJCQkJCQkJXAorCW9wZXJhdG9yKCkoX0FyZyYmIF9fYXJn KSBfUVVBTFMJCQkJCVwKKwlub2V4Y2VwdChzdGQ6Ol9faXNfbm90aHJvd19pbnZvY2FibGU8 CQkJCVwKKwkJIF9CaW5hcnlQcmVkIF9RVUFMUywgX0FyZywgY29uc3QgX1ZhbCY+Ojp2YWx1 ZSkJCVwKKwl7CQkJCQkJCQlcCisJICByZXR1cm4gc3RkOjpfX2ludm9rZSgJCQkJCQlcCisJ CSAgIHN0ZDo6Zm9yd2FyZDwgX0JpbmFyeVByZWQgX1FVQUxTID4oX01fYmluYXJ5X3ByZWQp LAlcCisJCSAgIHN0ZDo6Zm9yd2FyZDxfQXJnPihfX2FyZyksIF9NX3ZhbCk7CQkJXAorCX0J CQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BcmcsCQkJ CQkJXAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X19lbmFibGVfaWZfdDwhc3RkOjpfX2lz X2ludm9jYWJsZTwJXAorCQkgX0JpbmFyeVByZWQgX1FVQUxTLCBfQXJnLCBjb25zdCBfVmFs Jj46OnZhbHVlPj4JXAorCXZvaWQgb3BlcmF0b3IoKShfQXJnJiYpIF9RVUFMUyA9IGRlbGV0 ZTsKKworICAgICAgX0dMSUJDWFhfQklOQVJZX1BSRURfQ0FMTF9PUCggJiApCisgICAgICBf R0xJQkNYWF9CSU5BUllfUFJFRF9DQUxMX09QKCBjb25zdCAmICkKKyAgICAgIF9HTElCQ1hY X0JJTkFSWV9QUkVEX0NBTExfT1AoICYmICkKKyAgICAgIF9HTElCQ1hYX0JJTkFSWV9QUkVE X0NBTExfT1AoIGNvbnN0ICYmICkKKyMgdW5kZWYgX0dMSUJDWFhfQklOQVJZX1BSRURfQ0FM TF9PUAorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9MaHM+CiAJYm9vbAotCW9w ZXJhdG9yKCkoX0l0ZXJhdG9yIF9faXQpCi0JeyByZXR1cm4gYm9vbChfTV9jb21wKCpfX2l0 LCBfTV92YWx1ZSkpOyB9CisJb3BlcmF0b3IoKShjb25zdCBfTGhzJiBfX2xocykKKwl7IHJl dHVybiBib29sKF9NX2JpbmFyeV9wcmVkKF9fbGhzLCBfTV92YWwpKTsgfQorI2VuZGlmCisg ICAgcHJpdmF0ZToKKyAgICAgIF9CaW5hcnlQcmVkIF9NX2JpbmFyeV9wcmVkOworICAgICAg Y29uc3QgX1ZhbCYgX01fdmFsOwogICAgIH07CiAKLSAgdGVtcGxhdGU8dHlwZW5hbWUgX0Nv bXBhcmUsIHR5cGVuYW1lIF9WYWx1ZT4KLSAgICBfSXRlcl9jb21wX3RvX3ZhbDxfQ29tcGFy ZSwgX1ZhbHVlPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlw ZW5hbWUgX0JQcmVkLCB0eXBlbmFtZSBfVmFsPgogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBS Ci0gICAgX19pdGVyX2NvbXBfdmFsKF9Db21wYXJlIF9fY29tcCwgX1ZhbHVlICZfX3ZhbCkK KyAgICBpbmxpbmUgX0NvbXBfdmFsPHN0ZDo6X19kZWNheV90PF9CUHJlZD4sIF9WYWw+Cisg ICAgX19jb21wX3ZhbChfQlByZWQmJiBfX3ByZWQsIGNvbnN0IF9WYWwmIF9fdmFsKQorICAg IG5vZXhjZXB0KHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPHN0ZDo6X19kZWNheV90 PF9CUHJlZD4sCisJICAgICBfQlByZWQmJj46OnZhbHVlKQogICAgIHsKLSAgICAgIHJldHVy biBfSXRlcl9jb21wX3RvX3ZhbDxfQ29tcGFyZSwgX1ZhbHVlPihfR0xJQkNYWF9NT1ZFKF9f Y29tcCksIF9fdmFsKTsKKyAgICAgIHJldHVybgorCV9Db21wX3ZhbDxzdGQ6Ol9fZGVjYXlf dDxfQlByZWQ+LCBfVmFsPihzdGQ6OmZvcndhcmQ8X0JQcmVkPihfX3ByZWQpLAorCQkJCQkJ X192YWwpOwogICAgIH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CUHJlZCwgdHlw ZW5hbWUgX1ZhbD4KKyAgICBpbmxpbmUgX0NvbXBfdmFsPF9CUHJlZCwgX1ZhbD4KKyAgICBf X2NvbXBfdmFsKF9CUHJlZCBfX3ByZWQsIGNvbnN0IF9WYWwmIF9fdmFsKQorICAgIHsgcmV0 dXJuIF9Db21wX3ZhbDxfQlByZWQsIF9WYWw+KF9fcHJlZCwgX192YWwpOyB9CisjZW5kaWYK K30gLy8gbmFtZXNwYWNlIF9fb3BzCit9IC8vIG5hbWVzcGFjZSBfX2dudV9jeHgKIAotICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0l0ZXJhdG9yMT4KLSAgICBz dHJ1Y3QgX0l0ZXJfY29tcF90b19pdGVyCi0gICAgewotICAgICAgX0NvbXBhcmUgX01fY29t cDsKLSAgICAgIF9JdGVyYXRvcjEgX01faXQxOwotCi0gICAgICBfR0xJQkNYWDIwX0NPTlNU RVhQUgotICAgICAgX0l0ZXJfY29tcF90b19pdGVyKF9Db21wYXJlIF9fY29tcCwgX0l0ZXJh dG9yMSBfX2l0MSkKLQk6IF9NX2NvbXAoX0dMSUJDWFhfTU9WRShfX2NvbXApKSwgX01faXQx KF9faXQxKQotICAgICAgeyB9Ci0KLSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv cjI+Ci0JX0dMSUJDWFgyMF9DT05TVEVYUFIKLQlib29sCi0Jb3BlcmF0b3IoKShfSXRlcmF0 b3IyIF9faXQyKQotCXsgcmV0dXJuIGJvb2woX01fY29tcCgqX19pdDIsICpfTV9pdDEpKTsg fQotICAgIH07CiAKLSAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9J dGVyYXRvcj4KLSAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAgIGlubGluZSBfSXRlcl9j b21wX3RvX2l0ZXI8X0NvbXBhcmUsIF9JdGVyYXRvcj4KLSAgICBfX2l0ZXJfY29tcF9pdGVy KF9JdGVyX2NvbXBfaXRlcjxfQ29tcGFyZT4gX19jb21wLCBfSXRlcmF0b3IgX19pdCkKLSAg ICB7Ci0gICAgICByZXR1cm4gX0l0ZXJfY29tcF90b19pdGVyPF9Db21wYXJlLCBfSXRlcmF0 b3I+KAotCSAgX0dMSUJDWFhfTU9WRShfX2NvbXAuX01fY29tcCksIF9faXQpOwotICAgIH0K K25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJD WFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAotICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHJl ZGljYXRlPgotICAgIHN0cnVjdCBfSXRlcl9uZWdhdGUKKyAgLy8vIEdlbmVyYWxpemVkIG5l Z2F0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gbj4KKyAgICBjbGFzcyBfTm90X2ZuCiAg ICAgewotICAgICAgX1ByZWRpY2F0ZSBfTV9wcmVkOwotCi0gICAgICBfR0xJQkNYWDIwX0NP TlNURVhQUgotICAgICAgZXhwbGljaXQKLSAgICAgIF9JdGVyX25lZ2F0ZShfUHJlZGljYXRl IF9fcHJlZCkKLQk6IF9NX3ByZWQoX0dMSUJDWFhfTU9WRShfX3ByZWQpKQotICAgICAgeyB9 CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZuMiwgdHlwZW5hbWUuLi4gX0FyZ3M+CisJdXNpbmcgX19pbnZfcmVzX3QgPSB0eXBlbmFt ZSBfX2ludm9rZV9yZXN1bHQ8X0ZuMiwgX0FyZ3MuLi4+Ojp0eXBlOworCisgICAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CisJc3RhdGljIGRlY2x0eXBlKCFzdGQ6OmRlY2x2YWw8X1Rw PigpKQorCV9TX25vdCgpIG5vZXhjZXB0KG5vZXhjZXB0KCFzdGQ6OmRlY2x2YWw8X1RwPigp KSk7CisKKyAgICBwdWJsaWM6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4yPgorCWNv bnN0ZXhwcgorCV9Ob3RfZm4oX0ZuMiYmIF9fZm4sIGludCkKKwk6IF9NX2ZuKHN0ZDo6Zm9y d2FyZDxfRm4yPihfX2ZuKSkgeyB9CisKKyAgICAgIF9Ob3RfZm4oY29uc3QgX05vdF9mbiYg X19mbikgPSBkZWZhdWx0OworICAgICAgX05vdF9mbihfTm90X2ZuJiYgX19mbikgPSBkZWZh dWx0OworICAgICAgfl9Ob3RfZm4oKSA9IGRlZmF1bHQ7CisjZWxzZQorICAgIHB1YmxpYzoK KyAgICAgIF9Ob3RfZm4oX0ZuIF9fZm4sIGludCkKKyAgICAgIDogX01fZm4oX19mbikgeyB9 CisjZW5kaWYKIAotICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgotCV9HTElC Q1hYMjBfQ09OU1RFWFBSCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLy8g TWFjcm8gdG8gZGVmaW5lIG9wZXJhdG9yKCkgd2l0aCBnaXZlbiBjdi1xdWFsaWZpZXJzIHJl Zi1xdWFsaWZpZXJzLAorICAgICAgLy8gZm9yd2FyZGluZyBfTV9mbiBhbmQgdGhlIGZ1bmN0 aW9uIGFyZ3VtZW50cyB3aXRoIHRoZSBzYW1lIHF1YWxpZmllcnMsCisgICAgICAvLyBhbmQg ZGVkdWNpbmcgdGhlIHJldHVybiB0eXBlIGFuZCBleGNlcHRpb24tc3BlY2lmaWNhdGlvbi4K KyMgZGVmaW5lIF9HTElCQ1hYX05PVF9GTl9DQUxMX09QKCBfUVVBTFMgKQkJCQlcCisgICAg ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywJCQkJCVwKKwkgICAgICAgdHlwZW5hbWUg PSBfX2VuYWJsZV9pZl90PF9faXNfaW52b2NhYmxlPF9GbiBfUVVBTFMsIF9BcmdzLi4uPjo6 dmFsdWU+PiBcCisJX0dMSUJDWFgyMF9DT05TVEVYUFIJCQkJCQlcCisJZGVjbHR5cGUoX1Nf bm90PF9faW52X3Jlc190PF9GbiBfUVVBTFMsIF9BcmdzLi4uPj4oKSkJCVwKKwlvcGVyYXRv cigpKF9BcmdzJiYuLi4gX19hcmdzKSBfUVVBTFMJCQkJXAorCW5vZXhjZXB0KF9faXNfbm90 aHJvd19pbnZvY2FibGU8X0ZuIF9RVUFMUywgX0FyZ3MuLi4+Ojp2YWx1ZQlcCisJICAgICYm IG5vZXhjZXB0KF9TX25vdDxfX2ludl9yZXNfdDxfRm4gX1FVQUxTLCBfQXJncy4uLj4+KCkp KQlcCisJewkJCQkJCQkJXAorCSAgcmV0dXJuICFzdGQ6Ol9faW52b2tlKHN0ZDo6Zm9yd2Fy ZDwgX0ZuIF9RVUFMUyA+KF9NX2ZuKSwJXAorCQkJCXN0ZDo6Zm9yd2FyZDxfQXJncz4oX19h cmdzKS4uLik7CVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgICB0ZW1wbGF0ZTx0 eXBlbmFtZS4uLiBfQXJncywJCQkJCVwKKwkgICAgICAgdHlwZW5hbWUgPSBfX2VuYWJsZV9p Zl90PCFfX2lzX2ludm9jYWJsZTxfRm4gX1FVQUxTLCBfQXJncy4uLj46OnZhbHVlPj4gXAor CXZvaWQgb3BlcmF0b3IoKShfQXJncyYmLi4uIF9fYXJncykgX1FVQUxTID0gZGVsZXRlOwor CisgICAgICBfR0xJQkNYWF9OT1RfRk5fQ0FMTF9PUCggJiApCisgICAgICBfR0xJQkNYWF9O T1RfRk5fQ0FMTF9PUCggY29uc3QgJiApCisgICAgICBfR0xJQkNYWF9OT1RfRk5fQ0FMTF9P UCggJiYgKQorICAgICAgX0dMSUJDWFhfTk9UX0ZOX0NBTExfT1AoIGNvbnN0ICYmICkKKyMg dW5kZWYgX0dMSUJDWFhfTk9UX0ZOX0NBTExfT1AKKyNlbHNlCisgICAgICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQXJnPgogCWJvb2wKLQlvcGVyYXRvcigpKF9JdGVyYXRvciBfX2l0KQotCXsg cmV0dXJuICFib29sKF9NX3ByZWQoKl9faXQpKTsgfQorCW9wZXJhdG9yKCkoY29uc3QgX0Fy ZyYgX19hcmcpCisJeyByZXR1cm4gIWJvb2woX01fZm4oX19hcmcpKTsgfQorI2VuZGlmCisg ICAgcHJpdmF0ZToKKyAgICAgIF9GbiBfTV9mbjsKICAgICB9OwogCi0gIHRlbXBsYXRlPHR5 cGVuYW1lIF9QcmVkaWNhdGU+CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm4+CiAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICBpbmxp bmUgX0l0ZXJfbmVnYXRlPF9QcmVkaWNhdGU+Ci0gICAgX19uZWdhdGUoX0l0ZXJfcHJlZDxf UHJlZGljYXRlPiBfX3ByZWQpCi0gICAgeyByZXR1cm4gX0l0ZXJfbmVnYXRlPF9QcmVkaWNh dGU+KF9HTElCQ1hYX01PVkUoX19wcmVkLl9NX3ByZWQpKTsgfQorICAgIGlubGluZSBfTm90 X2ZuPHN0ZDo6X19kZWNheV90PF9Gbj4+CisgICAgX19ub3RfZm4oX0ZuJiYgX19mbikKKyAg ICBub2V4Y2VwdChzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxzdGQ6Ol9fZGVjYXlf dDxfRm4+LCBfRm4mJj46OnZhbHVlKQorICAgIHsgcmV0dXJuIF9Ob3RfZm48c3RkOjpfX2Rl Y2F5X3Q8X0ZuPj57c3RkOjpmb3J3YXJkPF9Gbj4oX19mbiksIDB9OyB9CisjZWxzZQorICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm4+CisgICAgaW5saW5lIF9Ob3RfZm48X0ZuPgorICAgIF9f bm90X2ZuKF9GbiBfX2ZuKQorICAgIHsgcmV0dXJuIF9Ob3RfZm48X0ZuPihfX2ZuLCAwKTsg fQorI2VuZGlmCiAKLX0gLy8gbmFtZXNwYWNlIF9fb3BzCi19IC8vIG5hbWVzcGFjZSBfX2du dV9jeHgKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2Ug c3RkCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9z dGxfYWxnby5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oCmluZGV4 IDBiMzRhNGY4NmIwLi4yZWY1YjY3MTdiZCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2lu Y2x1ZGUvYml0cy9zdGxfYWxnby5oCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv c3RsX2FsZ28uaApAQCAtODUsMTggKzg1LDE4IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFD RV9WRVJTSU9OCiAgICAgX19tb3ZlX21lZGlhbl90b19maXJzdChfSXRlcmF0b3IgX19yZXN1 bHQsX0l0ZXJhdG9yIF9fYSwgX0l0ZXJhdG9yIF9fYiwKIAkJCSAgIF9JdGVyYXRvciBfX2Ms IF9Db21wYXJlIF9fY29tcCkKICAgICB7Ci0gICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkK KyAgICAgIGlmIChfX2NvbXAoKl9fYSwgKl9fYikpCiAJewotCSAgaWYgKF9fY29tcChfX2Is IF9fYykpCisJICBpZiAoX19jb21wKCpfX2IsICpfX2MpKQogCSAgICBzdGQ6Oml0ZXJfc3dh cChfX3Jlc3VsdCwgX19iKTsKLQkgIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCisJICBl bHNlIGlmIChfX2NvbXAoKl9fYSwgKl9fYykpCiAJICAgIHN0ZDo6aXRlcl9zd2FwKF9fcmVz dWx0LCBfX2MpOwogCSAgZWxzZQogCSAgICBzdGQ6Oml0ZXJfc3dhcChfX3Jlc3VsdCwgX19h KTsKIAl9Ci0gICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQorICAgICAgZWxzZSBp ZiAoX19jb21wKCpfX2EsICpfX2MpKQogCXN0ZDo6aXRlcl9zd2FwKF9fcmVzdWx0LCBfX2Ep OwotICAgICAgZWxzZSBpZiAoX19jb21wKF9fYiwgX19jKSkKKyAgICAgIGVsc2UgaWYgKF9f Y29tcCgqX19iLCAqX19jKSkKIAlzdGQ6Oml0ZXJfc3dhcChfX3Jlc3VsdCwgX19jKTsKICAg ICAgIGVsc2UKIAlzdGQ6Oml0ZXJfc3dhcChfX3Jlc3VsdCwgX19iKTsKQEAgLTExMCw3ICsx MTAsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCQkgIF9QcmVkaWNh dGUgX19wcmVkKQogICAgIHsKICAgICAgIHJldHVybiBzdGQ6Ol9fZmluZF9pZihfX2ZpcnN0 LCBfX2xhc3QsCi0JCQkgICAgX19nbnVfY3h4OjpfX29wczo6X19uZWdhdGUoX19wcmVkKSwK KwkJCSAgICBzdGQ6Ol9fbm90X2ZuKF9HTElCQ1hYX01PVkUoX19wcmVkKSksCiAJCQkgICAg c3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgICB9CiAKQEAgLTEyMyw3 ICsxMjMsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgIF9fZmlu ZF9pZl9ub3RfbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UmIF9fbGVuLCBf UHJlZGljYXRlIF9fcHJlZCkKICAgICB7CiAgICAgICBmb3IgKDsgX19sZW47IC0tX19sZW4s ICAodm9pZCkgKytfX2ZpcnN0KQotCWlmICghX19wcmVkKF9fZmlyc3QpKQorCWlmICghX19w cmVkKCpfX2ZpcnN0KSkKIAkgIGJyZWFrOwogICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAg fQpAQCAtMTYwLDcgKzE2MCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9O CiAJICAgIF9fbiA9IF9fY291bnQ7CiAJICBfRm9yd2FyZEl0ZXJhdG9yIF9faSA9IF9fZmly c3Q7CiAJICArK19faTsKLQkgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAxICYm IF9fdW5hcnlfcHJlZChfX2kpKQorCSAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9 IDEgJiYgX191bmFyeV9wcmVkKCpfX2kpKQogCSAgICB7CiAJICAgICAgKytfX2k7CiAJICAg ICAgLS1fX247CkBAIC0xOTksNyArMTk5LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNF X1ZFUlNJT04KIAkgIC8vIF9fZmlyc3QgaGVyZSBpcyBhbHdheXMgcG9pbnRpbmcgdG8gb25l IHBhc3QgdGhlIGxhc3QgZWxlbWVudCBvZgogCSAgLy8gbmV4dCBwb3NzaWJsZSBtYXRjaC4K IAkgIF9SYW5kb21BY2Nlc3NJdGVyIF9fYmFja1RyYWNrID0gX19maXJzdDsgCi0JICB3aGls ZSAoX191bmFyeV9wcmVkKC0tX19iYWNrVHJhY2spKQorCSAgd2hpbGUgKF9fdW5hcnlfcHJl ZCgqKC0tX19iYWNrVHJhY2spKSkKIAkgICAgewogCSAgICAgIGlmICgtLV9fcmVtYWluZGVy ID09IDApCiAJCXJldHVybiAoX19maXJzdCAtIF9fY291bnQpOyAvLyBTdWNjZXNzCkBAIC0z MzcsNyArMzM3LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAg IHJldHVybiBzdGQ6Ol9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBf X2xhc3QyLAogCQkJICAgICBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAog CQkJICAgICBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAotCQkJICAgICBf X2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfZXF1YWxfdG9faXRlcigpKTsKKwkJCSAgICAgX19n bnVfY3h4OjpfX29wczo6X19lcXVhbF90bygpKTsKICAgICB9CiAKICAgLyoqCkBAIC0zODgs NyArMzg4LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIHJl dHVybiBzdGQ6Ol9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xh c3QyLAogCQkJICAgICBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogCQkJ ICAgICBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAotCQkJICAgICBfX2du dV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fY29tcCkpOworCQkJICAgICBfR0xJ QkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0KIAogI2lmIF9fY3BsdXNwbHVzID49IDIwMTEw M0wKQEAgLTQwOCw3ICs0MDgsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP TgogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCiAgICAgaW5saW5lIGJvb2wKICAgICBhbGxf b2YoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfUHJl ZGljYXRlIF9fcHJlZCkKLSAgICB7IHJldHVybiBfX2xhc3QgPT0gc3RkOjpmaW5kX2lmX25v dChfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7IH0KKyAgICB7IHJldHVybiBfX2xhc3QgPT0g c3RkOjpmaW5kX2lmX25vdChfX2ZpcnN0LCBfX2xhc3QsIHN0ZDo6bW92ZShfX3ByZWQpKTsg fQogCiAgIC8qKgogICAgKiAgQGJyaWVmICBDaGVja3MgdGhhdCBhIHByZWRpY2F0ZSBpcyBm YWxzZSBmb3IgYWxsIHRoZSBlbGVtZW50cwpAQCAtNDI2LDcgKzQyNiwxMCBAQCBfR0xJQkNY WF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCiAg ICAgaW5saW5lIGJvb2wKICAgICBub25lX29mKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCi0gICAgeyByZXR1cm4g X19sYXN0ID09IF9HTElCQ1hYX1NURF9BOjpmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19w cmVkKTsgfQorICAgIHsKKyAgICAgIHJldHVybgorCV9fbGFzdCA9PSBfR0xJQkNYWF9TVERf QTo6ZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIHN0ZDo6bW92ZShfX3ByZWQpKTsKKyAgICB9 CiAKICAgLyoqCiAgICAqICBAYnJpZWYgIENoZWNrcyB0aGF0IGEgcHJlZGljYXRlIGlzIHRy dWUgZm9yIGF0IGxlYXN0IG9uZSBlbGVtZW50CkBAIC00NDUsNyArNDQ4LDcgQEAgX0dMSUJD WFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgog ICAgIGlubGluZSBib29sCiAgICAgYW55X29mKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCi0gICAgeyByZXR1cm4g IXN0ZDo6bm9uZV9vZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7IH0KKyAgICB7IHJldHVy biAhc3RkOjpub25lX29mKF9fZmlyc3QsIF9fbGFzdCwgc3RkOjptb3ZlKF9fcHJlZCkpOyB9 CiAKICAgLyoqCiAgICAqICBAYnJpZWYgIEZpbmQgdGhlIGZpcnN0IGVsZW1lbnQgaW4gYSBz ZXF1ZW5jZSBmb3Igd2hpY2ggYQpAQCAtNDY4LDggKzQ3MSw3IEBAIF9HTElCQ1hYX0JFR0lO X05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMo X1VuYXJ5UHJlZGljYXRlQ29uY2VwdDxfUHJlZGljYXRlLAogCSAgICAgIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQogICAgICAgX19n bGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7Ci0gICAgICBy ZXR1cm4gc3RkOjpfX2ZpbmRfaWZfbm90KF9fZmlyc3QsIF9fbGFzdCwKLQkJCQlfX2dudV9j eHg6Ol9fb3BzOjpfX3ByZWRfaXRlcihfX3ByZWQpKTsKKyAgICAgIHJldHVybiBzdGQ6Ol9f ZmluZF9pZl9ub3QoX19maXJzdCwgX19sYXN0LCBzdGQ6Om1vdmUoX19wcmVkKSk7CiAgICAg fQogCiAgIC8qKgpAQCAtNDkyLDcgKzQ5NCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFD RV9WRVJTSU9OCiAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAJcmV0dXJuIHRydWU7 CiAgICAgICArK19fZmlyc3Q7Ci0gICAgICByZXR1cm4gc3RkOjpub25lX29mKF9fZmlyc3Qs IF9fbGFzdCwgX19wcmVkKTsKKyAgICAgIHJldHVybiBzdGQ6Om5vbmVfb2YoX19maXJzdCwg X19sYXN0LCBzdGQ6Om1vdmUoX19wcmVkKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtNTM5LDcg KzU0MSw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJfQogICAgICAg cmV0dXJuIF9fZmlyc3Q7CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gQysrMTEKIAogICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJh dG9yLAogCSAgIHR5cGVuYW1lIF9QcmVkaWNhdGU+CkBAIC01NDksNyArNTUxLDcgQEAgX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkJICAgICBfT3V0cHV0SXRlcmF0b3Ig X19yZXN1bHQsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgIHsKICAgICAgIGZvciAoOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQotCWlmICghX19wcmVkKF9fZmlyc3QpKQorCWlm ICghX19wcmVkKCpfX2ZpcnN0KSkKIAkgIHsKIAkgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7 CiAJICAgICsrX19yZXN1bHQ7CkBAIC01ODYsNyArNTg4LDcgQEAgX0dMSUJDWFhfQkVHSU5f TkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5n ZShfX2ZpcnN0LCBfX2xhc3QpOwogCiAgICAgICByZXR1cm4gc3RkOjpfX3JlbW92ZV9jb3B5 X2lmKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCi0JX19nbnVfY3h4OjpfX29wczo6X19p dGVyX2VxdWFsc192YWwoX192YWx1ZSkpOworCQkJCSAgIF9fZ251X2N4eDo6X19vcHM6Ol9f ZXF1YWxfdG8oX192YWx1ZSkpOwogICAgIH0KIAogICAvKioKQEAgLTYyMCw3ICs2MjIsNyBA QCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgX19nbGliY3h4X3Jl cXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CiAKICAgICAgIHJldHVybiBz dGQ6Ol9fcmVtb3ZlX2NvcHlfaWYoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKLQkJCQkg ICBfX2dudV9jeHg6Ol9fb3BzOjpfX3ByZWRfaXRlcihfX3ByZWQpKTsKKwkJCQkgICBfR0xJ QkNYWF9NT1ZFKF9fcHJlZCkpOwogICAgIH0KIAogI2lmIF9fY3BsdXNwbHVzID49IDIwMTEw M0wKQEAgLTc5Niw3ICs3OTgsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP TgogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFz dCk7CiAKICAgICAgIHJldHVybiBzdGQ6Ol9fcmVtb3ZlX2lmKF9fZmlyc3QsIF9fbGFzdCwK LQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2VxdWFsc192YWwoX192YWx1ZSkpOworCQkJ ICAgICAgX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF90byhfX3ZhbHVlKSk7CiAgICAgfQog CiAgIC8qKgpAQCAtODI5LDggKzgzMSw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9W RVJTSU9OCiAJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9y Pjo6dmFsdWVfdHlwZT4pCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2Uo X19maXJzdCwgX19sYXN0KTsKIAotICAgICAgcmV0dXJuIHN0ZDo6X19yZW1vdmVfaWYoX19m aXJzdCwgX19sYXN0LAotCQkJICAgICAgX19nbnVfY3h4OjpfX29wczo6X19wcmVkX2l0ZXIo X19wcmVkKSk7CisgICAgICByZXR1cm4gc3RkOjpfX3JlbW92ZV9pZihfX2ZpcnN0LCBfX2xh c3QsIF9HTElCQ1hYX01PVkUoX19wcmVkKSk7CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CkBAIC04 NDQsNyArODQ1LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAg IF9Gb3J3YXJkSXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgIHdoaWxlICgrK19f bmV4dCAhPSBfX2xhc3QpCiAJewotCSAgaWYgKF9fYmluYXJ5X3ByZWQoX19maXJzdCwgX19u ZXh0KSkKKwkgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKIAkgICAg cmV0dXJuIF9fZmlyc3Q7CiAJICBfX2ZpcnN0ID0gX19uZXh0OwogCX0KQEAgLTg2Niw3ICs4 NjcsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgX0Zvcndh cmRJdGVyYXRvciBfX2Rlc3QgPSBfX2ZpcnN0OwogICAgICAgKytfX2ZpcnN0OwogICAgICAg d2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCi0JaWYgKCFfX2JpbmFyeV9wcmVkKF9fZGVz dCwgX19maXJzdCkpCisJaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2Rlc3QsICpfX2ZpcnN0KSkK IAkgICorK19fZGVzdCA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QpOwogICAgICAgcmV0dXJu ICsrX19kZXN0OwogICAgIH0KQEAgLTg5OCw3ICs4OTksNyBAQCBfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfVkVSU0lPTgogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3Jhbmdl KF9fZmlyc3QsIF9fbGFzdCk7CiAKICAgICAgIHJldHVybiBzdGQ6Ol9fdW5pcXVlKF9fZmly c3QsIF9fbGFzdCwKLQkJCSAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9lcXVhbF90b19p dGVyKCkpOworCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF90bygpKTsKICAgICB9 CiAKICAgLyoqCkBAIC05MzAsOCArOTMxLDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNF X1ZFUlNJT04KIAkJdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+ Ojp2YWx1ZV90eXBlPikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShf X2ZpcnN0LCBfX2xhc3QpOwogCi0gICAgICByZXR1cm4gc3RkOjpfX3VuaXF1ZShfX2ZpcnN0 LCBfX2xhc3QsCi0JCQkgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9f YmluYXJ5X3ByZWQpKTsKKyAgICAgIHJldHVybiBzdGQ6Ol9fdW5pcXVlKF9fZmlyc3QsIF9f bGFzdCwgX0dMSUJDWFhfTU9WRShfX2JpbmFyeV9wcmVkKSk7CiAgICAgfQogCiAgIC8qKgpA QCAtOTU2LDcgKzk1Niw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAg ICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgICAqX19yZXN1 bHQgPSAqX19maXJzdDsKICAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCi0JaWYg KCFfX2JpbmFyeV9wcmVkKF9fZmlyc3QsIF9fbmV4dCkpCisJaWYgKCFfX2JpbmFyeV9wcmVk KCpfX2ZpcnN0LCAqX19uZXh0KSkKIAkgIHsKIAkgICAgX19maXJzdCA9IF9fbmV4dDsKIAkg ICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKQEAgLTk4NCwxMiArOTg0LDkgQEAgX0dMSUJD WFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQogCiAgICAgICB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19m aXJzdDsKLSAgICAgIF9fZGVjbHR5cGUoX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBf dmFsKF9fYmluYXJ5X3ByZWQpKQotCV9fcmVib3VuZF9wcmVkCi0JPSBfX2dudV9jeHg6Ol9f b3BzOjpfX2l0ZXJfY29tcF92YWwoX19iaW5hcnlfcHJlZCk7CiAgICAgICAqX19yZXN1bHQg PSBfX3ZhbHVlOwogICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCi0JaWYgKCFf X3JlYm91bmRfcHJlZChfX2ZpcnN0LCBfX3ZhbHVlKSkKKwlpZiAoIV9fYmluYXJ5X3ByZWQo Kl9fZmlyc3QsIF9fdmFsdWUpKQogCSAgewogCSAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAJ ICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKQEAgLTEwMTcsNyArMTAxNCw3IEBAIF9HTElC Q1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKICAgICAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0OwogICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCi0JaWYgKCFfX2Jp bmFyeV9wcmVkKF9fcmVzdWx0LCBfX2ZpcnN0KSkKKwlpZiAoIV9fYmluYXJ5X3ByZWQoKl9f cmVzdWx0LCAqX19maXJzdCkpCiAJICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAg cmV0dXJuICsrX19yZXN1bHQ7CiAgICAgfQpAQCAtMTQ3OSw3ICsxNDc2LDcgQEAgX0dMSUJD WFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKIAkgICsrX19yZXN1bHQyOwogCSAg KytfX2ZpcnN0OwogCSAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCi0J ICAgIGlmIChfX3ByZWQoX19maXJzdCkpCisJICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQog CSAgICAgIHsKIAkJKl9fcmVzdWx0MSA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QpOwogCQkr K19fcmVzdWx0MTsKQEAgLTE1MzQsNyArMTUzMSw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVf QUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0 ZXJhdG9yLCBfVmFsdWVUeXBlPgogCV9fYnVmKF9fZmlyc3QsIHN0ZDo6ZGlzdGFuY2UoX19m aXJzdCwgX19sYXN0KSk7CiAgICAgICByZXR1cm4KLQlzdGQ6Ol9fc3RhYmxlX3BhcnRpdGlv bl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKKwlzdGQ6Ol9fc3RhYmxlX3Bh cnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19wcmVk KSwKIAkJCQkJIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAJCQkJ CSBfX2J1Zi5iZWdpbigpLAogCQkJCQkgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpKTsK QEAgLTE1NjksOCArMTU2Niw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFD RShfVjIpCiAJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9y Pjo6dmFsdWVfdHlwZT4pCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2Uo X19maXJzdCwgX19sYXN0KTsKIAotICAgICAgcmV0dXJuIHN0ZDo6X19zdGFibGVfcGFydGl0 aW9uKF9fZmlyc3QsIF9fbGFzdCwKLQkJCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9fcHJl ZF9pdGVyKF9fcHJlZCkpOworICAgICAgcmV0dXJuIHN0ZDo6X19zdGFibGVfcGFydGl0aW9u KF9fZmlyc3QsIF9fbGFzdCwgX0dMSUJDWFhfTU9WRShfX3ByZWQpKTsKICAgICB9CiAjZW5k aWYgLy8gSE9TVEVECiAKQEAgLTE1ODYsNyArMTU4Miw3IEBAIF9HTElCQ1hYX0VORF9JTkxJ TkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgewogICAgICAgc3RkOjpfX21ha2VfaGVhcChf X2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQotCWlmIChfX2Nv bXAoX19pLCBfX2ZpcnN0KSkKKwlpZiAoX19jb21wKCpfX2ksICpfX2ZpcnN0KSkKIAkgIHN0 ZDo6X19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfX2NvbXApOwogICAgIH0K IApAQCAtMTYxOSwxNCArMTYxNSwxNSBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1F U1BBQ0UoX1YyKQogICAgICAgc3RkOjpfX21ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19y ZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s YXN0KQogCXsKLQkgIGlmIChfX2NvbXAoX19maXJzdCwgX19yZXN1bHRfZmlyc3QpKQorCSAg aWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkKIAkgICAgc3RkOjpfX2Fk anVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogCQkJICAgICAg IF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0CiAJCQkJCSAgICAgLSBfX3Jlc3Vs dF9maXJzdCksCiAJCQkgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSwgX19jb21w KTsKIAkgICsrX19maXJzdDsKIAl9Ci0gICAgICBzdGQ6Ol9fc29ydF9oZWFwKF9fcmVzdWx0 X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CisgICAgICBzdGQ6Ol9fc29y dF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsCisJCSAgICAgICBf R0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFz dDsKICAgICB9CiAKQEAgLTE2NzcsNyArMTY3NCw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVf QUJJX05BTUVTUEFDRShfVjIpCiAKICAgICAgIHJldHVybiBzdGQ6Ol9fcGFydGlhbF9zb3J0 X2NvcHkoX19maXJzdCwgX19sYXN0LAogCQkJCSAgICAgIF9fcmVzdWx0X2ZpcnN0LCBfX3Jl c3VsdF9sYXN0LAotCQkJCSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0 ZXIoKSk7CisJCQkJICAgICAgX19nbnVfY3h4OjpfX29wczo6X19sZXNzKCkpOwogICAgIH0K IAogICAvKioKQEAgLTE3MzIsNyArMTcyOSw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJ X05BTUVTUEFDRShfVjIpCiAKICAgICAgIHJldHVybiBzdGQ6Ol9fcGFydGlhbF9zb3J0X2Nv cHkoX19maXJzdCwgX19sYXN0LAogCQkJCSAgICAgIF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3Vs dF9sYXN0LAotCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19jb21w KSk7CisJCQkJICAgICAgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAgICB9CiAKICAgLy8v IEBjb25kIHVuZG9jdW1lbnRlZApAQCAtMTc0OCw3ICsxNzQ1LDcgQEAgX0dMSUJDWFhfRU5E X0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKIAlfX3ZhbCA9IF9HTElCQ1hYX01PVkUoKl9f bGFzdCk7CiAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19uZXh0ID0gX19sYXN0Owog ICAgICAgLS1fX25leHQ7Ci0gICAgICB3aGlsZSAoX19jb21wKF9fdmFsLCBfX25leHQpKQor ICAgICAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpCiAJewogCSAgKl9fbGFzdCA9 IF9HTElCQ1hYX01PVkUoKl9fbmV4dCk7CiAJICBfX2xhc3QgPSBfX25leHQ7CkBAIC0xNzY0 LDExICsxNzYxLDEyIEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIp CiAgICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwK IAkJICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAp CiAgICAgewotICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CisgICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuOwogCiAgICAgICBmb3IgKF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kp CiAJewotCSAgaWYgKF9fY29tcChfX2ksIF9fZmlyc3QpKQorCSAgaWYgKF9fY29tcCgqX19p LCAqX19maXJzdCkpCiAJICAgIHsKIAkgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogCQlfX3ZhbCA9IF9HTElCQ1hY X01PVkUoKl9faSk7CkBAIC0xNzc2LDggKzE3NzQsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5F X0FCSV9OQU1FU1BBQ0UoX1YyKQogCSAgICAgICpfX2ZpcnN0ID0gX0dMSUJDWFhfTU9WRShf X3ZhbCk7CiAJICAgIH0KIAkgIGVsc2UKLQkgICAgc3RkOjpfX3VuZ3VhcmRlZF9saW5lYXJf aW5zZXJ0KF9faSwKLQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX3ZhbF9jb21wX2l0ZXIoX19j b21wKSk7CisJICAgIHN0ZDo6X191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9fY29t cCk7CiAJfQogICAgIH0KIApAQCAtMTc4OSw4ICsxNzg2LDcgQEAgX0dMSUJDWFhfRU5EX0lO TElORV9BQklfTkFNRVNQQUNFKF9WMikKIAkJCSAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICAgewogICAgICAgZm9yIChfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCi0J c3RkOjpfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwKLQkJCQlfX2dudV9jeHg6Ol9f b3BzOjpfX3ZhbF9jb21wX2l0ZXIoX19jb21wKSk7CisJc3RkOjpfX3VuZ3VhcmRlZF9saW5l YXJfaW5zZXJ0KF9faSwgX19jb21wKTsKICAgICB9CiAKICAgLyoqCkBAIC0xODEwLDEwICsx ODA2LDEwIEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAJewog CSAgc3RkOjpfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBpbnQoX1NfdGhy ZXNob2xkKSwgX19jb21wKTsKIAkgIHN0ZDo6X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQo X19maXJzdCArIGludChfU190aHJlc2hvbGQpLCBfX2xhc3QsCi0JCQkJCSAgX19jb21wKTsK KwkJCQkJICBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogCX0KICAgICAgIGVsc2UKLQlzdGQ6 Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOworCXN0ZDo6X19p bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7 CiAgICAgfQogCiAgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uLi4uCkBAIC0xODI2 LDEwICsxODIyLDEwIEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIp CiAgICAgewogICAgICAgd2hpbGUgKHRydWUpCiAJewotCSAgd2hpbGUgKF9fY29tcChfX2Zp cnN0LCBfX3Bpdm90KSkKKwkgIHdoaWxlIChfX2NvbXAoKl9fZmlyc3QsICpfX3Bpdm90KSkK IAkgICAgKytfX2ZpcnN0OwogCSAgLS1fX2xhc3Q7Ci0JICB3aGlsZSAoX19jb21wKF9fcGl2 b3QsIF9fbGFzdCkpCisJICB3aGlsZSAoX19jb21wKCpfX3Bpdm90LCAqX19sYXN0KSkKIAkg ICAgLS1fX2xhc3Q7CiAJICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKIAkgICAgcmV0dXJu IF9fZmlyc3Q7CkBAIC0xODQ4LDcgKzE4NDQsOCBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FC SV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbWlkID0g X19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgICAgICBzdGQ6Ol9fbW92ZV9t ZWRpYW5fdG9fZmlyc3QoX19maXJzdCwgX19maXJzdCArIDEsIF9fbWlkLCBfX2xhc3QgLSAx LAogCQkJCSAgX19jb21wKTsKLSAgICAgIHJldHVybiBzdGQ6Ol9fdW5ndWFyZGVkX3BhcnRp dGlvbihfX2ZpcnN0ICsgMSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOworICAgICAgcmV0 dXJuIHN0ZDo6X191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QgKyAxLCBfX2xhc3QsIF9f Zmlyc3QsCisJCQkJCV9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAgIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+ CkBAIC0xODYwLDcgKzE4NTcsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BB Q0UoX1YyKQogCQkgICBfQ29tcGFyZSBfX2NvbXApCiAgICAgewogICAgICAgc3RkOjpfX2hl YXBfc2VsZWN0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7Ci0gICAgICBz dGQ6Ol9fc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOworICAgICAgc3Rk OjpfX3NvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX0dMSUJDWFhfTU9WRShfX2NvbXAp KTsKICAgICB9CiAKICAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBz b3J0IHJvdXRpbmUuCkBAIC0xODk5LDcgKzE4OTYsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5F X0FCSV9OQU1FU1BBQ0UoX1YyKQogCSAgc3RkOjpfX2ludHJvc29ydF9sb29wKF9fZmlyc3Qs IF9fbGFzdCwKIAkJCQlzdGQ6Ol9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLAogCQkJCV9f Y29tcCk7Ci0JICBzdGQ6Ol9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0 LCBfX2NvbXApOworCSAgc3RkOjpfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f bGFzdCwgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKIAl9CiAgICAgfQogCkBAIC0xOTI3LDcg KzE5MjQsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCSAg ZWxzZQogCSAgICBfX2xhc3QgPSBfX2N1dDsKIAl9Ci0gICAgICBzdGQ6Ol9faW5zZXJ0aW9u X3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOworICAgICAgc3RkOjpfX2luc2VydGlv bl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAgICB9 CiAKICAgLy8vIEBlbmRjb25kCkBAIC0xOTY0LDggKzE5NjEsNyBAQCBfR0xJQkNYWF9FTkRf SU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3Bh cnRpdGlvbmVkX2xvd2VyX3ByZWQoX19maXJzdCwgX19sYXN0LAogCQkJCQkJX192YWwsIF9f Y29tcCk7CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fbG93ZXJfYm91bmQoX19maXJzdCwgX19s YXN0LCBfX3ZhbCwKLQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF92YWwoX19j b21wKSk7CisgICAgICByZXR1cm4gc3RkOjpfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFz dCwgX192YWwsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAgIHRlbXBsYXRl PHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Nv bXBhcmU+CkBAIC0xOTg0LDcgKzE5ODAsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9O QU1FU1BBQ0UoX1YyKQogCSAgX0Rpc3RhbmNlVHlwZSBfX2hhbGYgPSBfX2xlbiA+PiAxOwog CSAgX0ZvcndhcmRJdGVyYXRvciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAJICBzdGQ6OmFkdmFu Y2UoX19taWRkbGUsIF9faGFsZik7Ci0JICBpZiAoX19jb21wKF9fdmFsLCBfX21pZGRsZSkp CisJICBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogCSAgICBfX2xlbiA9IF9faGFs ZjsKIAkgIGVsc2UKIAkgICAgewpAQCAtMjAyMCw3ICsyMDE2LDcgQEAgX0dMSUJDWFhfRU5E X0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19w YXJ0aXRpb25lZF91cHBlcihfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKIAogICAgICAgcmV0 dXJuIHN0ZDo6X191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAotCQkJCV9f Z251X2N4eDo6X19vcHM6Ol9fdmFsX2xlc3NfaXRlcigpKTsKKwkJCQlfX2dudV9jeHg6Ol9f b3BzOjpfX2xlc3MoKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtMjA1MSwxNyArMjA0NywxNCBA QCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19nbGli Y3h4X3JlcXVpcmVzX3BhcnRpdGlvbmVkX3VwcGVyX3ByZWQoX19maXJzdCwgX19sYXN0LAog CQkJCQkJX192YWwsIF9fY29tcCk7CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fdXBwZXJfYm91 bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwKLQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX3Zh bF9jb21wX2l0ZXIoX19jb21wKSk7CisgICAgICByZXR1cm4gc3RkOjpfX3VwcGVyX2JvdW5k KF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAg fQogCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9U cCwKLQkgICB0eXBlbmFtZSBfQ29tcGFyZUl0VHAsIHR5cGVuYW1lIF9Db21wYXJlVHBJdD4K KyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0 eXBlbmFtZSBfQ29tcD4KICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgogICAgIHBhaXI8X0Zv cndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvcj4KICAgICBfX2VxdWFsX3JhbmdlKF9G b3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCi0JCSAg Y29uc3QgX1RwJiBfX3ZhbCwKLQkJICBfQ29tcGFyZUl0VHAgX19jb21wX2l0X3ZhbCwgX0Nv bXBhcmVUcEl0IF9fY29tcF92YWxfaXQpCisJCSAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXAg X19jb21wKQogICAgIHsKICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9Gb3J3YXJkSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKIAlfRGlzdGFuY2VUeXBlOwpA QCAtMjA3MywyMSArMjA2NiwyMiBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BB Q0UoX1YyKQogCSAgX0Rpc3RhbmNlVHlwZSBfX2hhbGYgPSBfX2xlbiA+PiAxOwogCSAgX0Zv cndhcmRJdGVyYXRvciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAJICBzdGQ6OmFkdmFuY2UoX19t aWRkbGUsIF9faGFsZik7Ci0JICBpZiAoX19jb21wX2l0X3ZhbChfX21pZGRsZSwgX192YWwp KQorCSAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkKIAkgICAgewogCSAgICAgIF9f Zmlyc3QgPSBfX21pZGRsZTsKIAkgICAgICArK19fZmlyc3Q7CiAJICAgICAgX19sZW4gPSBf X2xlbiAtIF9faGFsZiAtIDE7CiAJICAgIH0KLQkgIGVsc2UgaWYgKF9fY29tcF92YWxfaXQo X192YWwsIF9fbWlkZGxlKSkKKwkgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxl KSkKIAkgICAgX19sZW4gPSBfX2hhbGY7CiAJICBlbHNlCiAJICAgIHsKIAkgICAgICBfRm9y d2FyZEl0ZXJhdG9yIF9fbGVmdAotCQk9IHN0ZDo6X19sb3dlcl9ib3VuZChfX2ZpcnN0LCBf X21pZGRsZSwgX192YWwsIF9fY29tcF9pdF92YWwpOworCQk9IHN0ZDo6X19sb3dlcl9ib3Vu ZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwsIF9fY29tcCk7CiAJICAgICAgc3RkOjphZHZh bmNlKF9fZmlyc3QsIF9fbGVuKTsKIAkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmlnaHQK LQkJPSBzdGQ6Ol9fdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwsIF9f Y29tcF92YWxfaXQpOworCQk9IHN0ZDo6X191cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2Zp cnN0LCBfX3ZhbCwKKwkJCQkgICAgIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAJICAgICAg cmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvcj4oX19sZWZ0 LCBfX3JpZ2h0KTsKIAkgICAgfQogCX0KQEAgLTIxMjcsOCArMjEyMSw3IEBAIF9HTElCQ1hY X0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWly ZXNfcGFydGl0aW9uZWRfdXBwZXIoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAKICAgICAg IHJldHVybiBzdGQ6Ol9fZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwKLQkJ CQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfbGVzc192YWwoKSwKLQkJCQlfX2dudV9jeHg6 Ol9fb3BzOjpfX3ZhbF9sZXNzX2l0ZXIoKSk7CisJCQkJX19nbnVfY3h4OjpfX29wczo6X19s ZXNzKCkpOwogICAgIH0KIAogICAvKioKQEAgLTIxNjUsOSArMjE1OCw3IEBAIF9HTElCQ1hY X0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWly ZXNfcGFydGl0aW9uZWRfdXBwZXJfcHJlZChfX2ZpcnN0LCBfX2xhc3QsCiAJCQkJCQlfX3Zh bCwgX19jb21wKTsKIAotICAgICAgcmV0dXJuIHN0ZDo6X19lcXVhbF9yYW5nZShfX2ZpcnN0 LCBfX2xhc3QsIF9fdmFsLAotCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX3Zh bChfX2NvbXApLAotCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9fdmFsX2NvbXBfaXRlcihfX2Nv bXApKTsKKyAgICAgIHJldHVybiBzdGQ6Ol9fZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0 LCBfX3ZhbCwgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAgICB9CiAKICAgLyoqCkBAIC0y MTk3LDcgKzIxODgsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1Yy KQogCiAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9faQogCT0gc3RkOjpfX2xvd2VyX2JvdW5k KF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCi0JCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9f aXRlcl9sZXNzX3ZhbCgpKTsKKwkJCSAgICAgX19nbnVfY3h4OjpfX29wczo6X19sZXNzKCkp OwogICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3ZhbCA8ICpfX2kpOwogICAg IH0KIApAQCAtMjIzMiw4ICsyMjIzLDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFN RVNQQUNFKF9WMikKIAkJCQkJCV9fdmFsLCBfX2NvbXApOwogCiAgICAgICBfRm9yd2FyZEl0 ZXJhdG9yIF9faQotCT0gc3RkOjpfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192 YWwsCi0JCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX3ZhbChfX2NvbXAp KTsKKwk9IHN0ZDo6X19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2Nv bXApOwogICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIWJvb2woX19jb21wKF9fdmFs LCAqX19pKSk7CiAgICAgfQogCkBAIC0yMjQ5LDcgKzIyMzksNyBAQCBfR0xJQkNYWF9FTkRf SU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgIHsKICAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAJewotCSAgaWYgKF9fY29t cChfX2ZpcnN0MiwgX19maXJzdDEpKQorCSAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp cnN0MSkpCiAJICAgIHsKIAkgICAgICAqX19yZXN1bHQgPSBfR0xJQkNYWF9NT1ZFKCpfX2Zp cnN0Mik7CiAJICAgICAgKytfX2ZpcnN0MjsKQEAgLTIyODgsNyArMjI3OCw3IEBAIF9HTElC Q1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICAtLV9fbGFzdDI7CiAg ICAgICB3aGlsZSAodHJ1ZSkKIAl7Ci0JICBpZiAoX19jb21wKF9fbGFzdDIsIF9fbGFzdDEp KQorCSAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKQogCSAgICB7CiAJICAgICAg Ki0tX19yZXN1bHQgPSBfR0xJQkNYWF9NT1ZFKCpfX2xhc3QxKTsKIAkgICAgICBpZiAoX19m aXJzdDEgPT0gX19sYXN0MSkKQEAgLTIzNjAsMTMgKzIzNTAsMTQgQEAgX0dMSUJDWFhfRU5E X0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKIAl7CiAJICBfUG9pbnRlciBfX2J1ZmZlcl9l bmQgPSBfR0xJQkNYWF9NT1ZFMyhfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogCSAg c3RkOjpfX21vdmVfbWVyZ2VfYWRhcHRpdmUoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19t aWRkbGUsIF9fbGFzdCwKLQkJCQkgICAgIF9fZmlyc3QsIF9fY29tcCk7CisJCQkJICAgICBf X2ZpcnN0LCBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogCX0KICAgICAgIGVsc2UKIAl7CiAJ ICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBfR0xJQkNYWF9NT1ZFMyhfX21pZGRsZSwgX19s YXN0LCBfX2J1ZmZlcik7CiAJICBzdGQ6Ol9fbW92ZV9tZXJnZV9hZGFwdGl2ZV9iYWNrd2Fy ZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsCi0JCQkJCSAgICAgIF9fYnVmZmVyX2Vu ZCwgX19sYXN0LCBfX2NvbXApOworCQkJCQkgICAgICBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwK KwkJCQkJICAgICAgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKIAl9CiAgICAgfQogCkBAIC0y MzgyLDcgKzIzNzMsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1Yy KQogICAgIHsKICAgICAgIGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSB8fCBfX2xlbjIg PD0gX19idWZmZXJfc2l6ZSkKIAlzdGQ6Ol9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19t aWRkbGUsIF9fbGFzdCwKLQkJCSAgICAgIF9fbGVuMSwgX19sZW4yLCBfX2J1ZmZlciwgX19j b21wKTsKKwkJCSAgICAgIF9fbGVuMSwgX19sZW4yLCBfX2J1ZmZlciwgX0dMSUJDWFhfTU9W RShfX2NvbXApKTsKICAgICAgIGVsc2UKIAl7CiAJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9y IF9fZmlyc3RfY3V0ID0gX19maXJzdDsKQEAgLTIzOTQsOCArMjM4NSw3IEBAIF9HTElCQ1hY X0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAJICAgICAgX19sZW4xMSA9IF9fbGVu MSAvIDI7CiAJICAgICAgc3RkOjphZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKIAkg ICAgICBfX3NlY29uZF9jdXQKLQkJPSBzdGQ6Ol9fbG93ZXJfYm91bmQoX19taWRkbGUsIF9f bGFzdCwgKl9fZmlyc3RfY3V0LAotCQkJCSAgICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVy X2NvbXBfdmFsKF9fY29tcCkpOworCQk9IHN0ZDo6X19sb3dlcl9ib3VuZChfX21pZGRsZSwg X19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAJICAgICAgX19sZW4yMiA9IHN0ZDo6 ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAJICAgIH0KIAkgIGVsc2UKQEAg LTI0MDMsOCArMjM5Myw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShf VjIpCiAJICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAJICAgICAgc3RkOjphZHZhbmNl KF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAJICAgICAgX19maXJzdF9jdXQKLQkJPSBzdGQ6 Ol9fdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsCi0JCQkJ ICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX3ZhbF9jb21wX2l0ZXIoX19jb21wKSk7CisJCT0g c3RkOjpfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBf X2NvbXApOwogCSAgICAgIF9fbGVuMTEgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fZmly c3RfY3V0KTsKIAkgICAgfQogCkBAIC0yNDE4LDcgKzI0MDcsOCBAQCBfR0xJQkNYWF9FTkRf SU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCSAgc3RkOjpfX21lcmdlX2FkYXB0aXZlX3Jl c2l6ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogCQkJCSAgICAgICBf RGlzdGFuY2UoX19sZW4xIC0gX19sZW4xMSksCiAJCQkJICAgICAgIF9EaXN0YW5jZShfX2xl bjIgLSBfX2xlbjIyKSwKLQkJCQkgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9f Y29tcCk7CisJCQkJICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAorCQkJCSAgICAg ICBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogCX0KICAgICB9CiAKQEAgLTI0MzcsNyArMjQy Nyw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAKICAgICAg IGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikKIAl7Ci0JICBpZiAoX19jb21wKF9fbWlkZGxl LCBfX2ZpcnN0KSkKKwkgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19maXJzdCkpCiAJICAg IHN0ZDo6aXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKIAkgIHJldHVybjsKIAl9CkBA IC0yNDUxLDggKzI0NDEsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0Uo X1YyKQogCSAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAJICBzdGQ6OmFkdmFuY2UoX19maXJz dF9jdXQsIF9fbGVuMTEpOwogCSAgX19zZWNvbmRfY3V0Ci0JICAgID0gc3RkOjpfX2xvd2Vy X2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwKLQkJCQkgX19nbnVfY3h4 OjpfX29wczo6X19pdGVyX2NvbXBfdmFsKF9fY29tcCkpOworCSAgICA9IHN0ZDo6X19sb3dl cl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAJICBf X2xlbjIyID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKIAl9CiAg ICAgICBlbHNlCkBAIC0yNDYwLDggKzI0NDksNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FC SV9OQU1FU1BBQ0UoX1YyKQogCSAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAJICBzdGQ6OmFk dmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKIAkgIF9fZmlyc3RfY3V0Ci0JICAgID0g c3RkOjpfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LAot CQkJCSBfX2dudV9jeHg6Ol9fb3BzOjpfX3ZhbF9jb21wX2l0ZXIoX19jb21wKSk7CisJICAg ID0gc3RkOjpfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0 LCBfX2NvbXApOwogCSAgX19sZW4xMSA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19maXJz dF9jdXQpOwogCX0KIApAQCAtMjQ3MCw3ICsyNDU4LDggQEAgX0dMSUJDWFhfRU5EX0lOTElO RV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIHN0ZDo6X19tZXJnZV93aXRob3V0X2J1ZmZl cihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogCQkJCSAgX19sZW4xMSwg X19sZW4yMiwgX19jb21wKTsKICAgICAgIHN0ZDo6X19tZXJnZV93aXRob3V0X2J1ZmZlcihf X25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAotCQkJCSAgX19sZW4xIC0gX19s ZW4xMSwgX19sZW4yIC0gX19sZW4yMiwgX19jb21wKTsKKwkJCQkgIF9fbGVuMSAtIF9fbGVu MTEsIF9fbGVuMiAtIF9fbGVuMjIsCisJCQkJICBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwog ICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0 eXBlbmFtZSBfQ29tcGFyZT4KQEAgLTI0OTgsMTggKzI0ODcsMTggQEAgX0dMSUJDWFhfRU5E X0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9UbXBCdWYgX19idWYoX19maXJz dCwgc3RkOjptaW4oX19sZW4xLCBfX2xlbjIpKTsKIAogICAgICAgaWYgKF9fYnVpbHRpbl9l eHBlY3QoX19idWYuc2l6ZSgpID09IF9fYnVmLnJlcXVlc3RlZF9zaXplKCksIHRydWUpKQot CXN0ZDo6X19tZXJnZV9hZGFwdGl2ZQotCSAgKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3Qs IF9fbGVuMSwgX19sZW4yLCBfX2J1Zi5iZWdpbigpLCBfX2NvbXApOworCXN0ZDo6X19tZXJn ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwK KwkJCSAgICAgIF9fYnVmLmJlZ2luKCksIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAg ICBlbHNlIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fYnVmLmJlZ2luKCkgPT0gMCwgZmFsc2Up KQotCXN0ZDo6X19tZXJnZV93aXRob3V0X2J1ZmZlcgotCSAgKF9fZmlyc3QsIF9fbWlkZGxl LCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOworCXN0ZDo6X19tZXJnZV93aXRo b3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwK KwkJCQkgICAgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAgICAgIGVsc2UKLQlzdGQ6Ol9f bWVyZ2VfYWRhcHRpdmVfcmVzaXplCi0JICAoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwg X19sZW4xLCBfX2xlbjIsIF9fYnVmLmJlZ2luKCksCi0JICAgX0Rpc3RhbmNlVHlwZShfX2J1 Zi5zaXplKCkpLCBfX2NvbXApOworCXN0ZDo6X19tZXJnZV9hZGFwdGl2ZV9yZXNpemUoX19m aXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCisJCQkJICAgICBfX2J1 Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksCisJCQkJICAgICBfR0xJ QkNYWF9NT1ZFKF9fY29tcCkpOwogI2Vsc2UKICAgICAgIHN0ZDo6X19tZXJnZV93aXRob3V0 X2J1ZmZlcgotCShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwg X19jb21wKTsKKwkoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIs IF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTI1NDcsNyAr MjUzNiw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAg ICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmUoX19maXJzdCwgX19sYXN0KTsKIAog ICAgICAgc3RkOjpfX2lucGxhY2VfbWVyZ2UoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwK LQkJCSAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisJCQkgICBf X2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtMjU4OSw4 ICsyNTc4LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAg ICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfcHJlZChfX21pZGRsZSwgX19sYXN0LCBf X2NvbXApOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlX3ByZWQoX19m aXJzdCwgX19sYXN0LCBfX2NvbXApOwogCi0gICAgICBzdGQ6Ol9faW5wbGFjZV9tZXJnZShf X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAotCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19p dGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKyAgICAgIHN0ZDo6X19pbnBsYWNlX21lcmdlKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAg fQogCiAKQEAgLTI2MDQsNyArMjU5Miw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05B TUVTUEFDRShfVjIpCiAgICAgewogICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgX19maXJzdDIgIT0gX19sYXN0MikKIAl7Ci0JICBpZiAoX19jb21wKF9fZmlyc3QyLCBf X2ZpcnN0MSkpCisJICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKIAkgICAg ewogCSAgICAgICpfX3Jlc3VsdCA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QyKTsKIAkgICAg ICArK19fZmlyc3QyOwpAQCAtMjYxNyw4ICsyNjA1LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElO RV9BQklfTkFNRVNQQUNFKF9WMikKIAkgICsrX19yZXN1bHQ7CiAJfQogICAgICAgcmV0dXJu IF9HTElCQ1hYX01PVkUzKF9fZmlyc3QyLCBfX2xhc3QyLAotCQkJICAgIF9HTElCQ1hYX01P VkUzKF9fZmlyc3QxLCBfX2xhc3QxLAotCQkJCQkgICBfX3Jlc3VsdCkpOworCQkJICAgIF9H TElCQ1hYX01PVkUzKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgIH0KIAog ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IxLCB0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcmF0b3IyLApAQCAtMjY0Miw3ICsyNjI5LDggQEAgX0dMSUJDWFhf RU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fc3RlcF9zaXplID0gc3Rk OjptaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CiAKICAg ICAgIHN0ZDo6X19tb3ZlX21lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwK LQkJCV9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LCBfX3Jlc3VsdCwgX19jb21wKTsK KwkJCV9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LCBfX3Jlc3VsdCwKKwkJCV9HTElC Q1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k b21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLApAQCAtMjY1OCw3ICsyNjQ2 LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKIAkgIHN0ZDo6 X19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2Nv bXApOwogCSAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAJfQotICAgICAgc3RkOjpfX2lu c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKKyAgICAgIHN0ZDo6X19p bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7 CiAgICAgfQogCiAgIGVudW0geyBfU19jaHVua19zaXplID0gNyB9OwpAQCAtMjcyNCwxMSAr MjcxMiwxMSBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCQkJ CSAgICAgICBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKIAkJCQkgICAgICAgX0Rp c3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwKIAkJCQkgICAgICAgX19idWZmZXIsIF9fYnVm ZmVyX3NpemUsCi0JCQkJICAgICAgIF9fY29tcCk7CisJCQkJICAgICAgIF9HTElCQ1hYX01P VkUoX19jb21wKSk7CiAJfQogICAgICAgZWxzZQogCXN0ZDo6X19zdGFibGVfc29ydF9hZGFw dGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAotCQkJCSAgICBfX2J1ZmZlciwgX19j b21wKTsKKwkJCQkgICAgX19idWZmZXIsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAg fQogCiAgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgc3RhYmxlIHNv cnRpbmcgcm91dGluZXMuCkBAIC0yNzQ4LDcgKzI3MzYsNyBAQCBfR0xJQkNYWF9FTkRfSU5M SU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgc3RkOjpfX21lcmdlX3dpdGhvdXRfYnVm ZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAJCQkJICBfX21pZGRsZSAtIF9fZmly c3QsCiAJCQkJICBfX2xhc3QgLSBfX21pZGRsZSwKLQkJCQkgIF9fY29tcCk7CisJCQkJICBf R0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0KIAogICAvLyBzdGFibGVfc29ydApAQCAt Mjc2OCw5ICsyNzU2LDkgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9W MikKICAgICB7CiAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0 MiAhPSBfX2xhc3QyKQogCXsKLQkgIGlmIChfX2NvbXAoX19maXJzdDIsIF9fZmlyc3QxKSkK KwkgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogCSAgICByZXR1cm4gZmFs c2U7Ci0JICBpZiAoIV9fY29tcChfX2ZpcnN0MSwgX19maXJzdDIpKQorCSAgaWYgKCFfX2Nv bXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogCSAgICArK19fZmlyc3QyOwogCSAgKytfX2Zp cnN0MTsKIAl9CkBAIC0yODE3LDcgKzI4MDUsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FC SV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZl MihfX2ZpcnN0MiwgX19sYXN0Mik7CiAKICAgICAgIHJldHVybiBzdGQ6Ol9faW5jbHVkZXMo X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAotCQkJICAgICBfX2dudV9j eHg6Ol9fb3BzOjpfX2l0ZXJfbGVzc19pdGVyKCkpOworCQkJICAgICBfX2dudV9jeHg6Ol9f b3BzOjpfX2xlc3MoKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtMjg2NCw3ICsyODUyLDcgQEAg X0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4 eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkMihfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21w KTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19pbmNsdWRlcyhfX2ZpcnN0MSwgX19sYXN0MSwg X19maXJzdDIsIF9fbGFzdDIsCi0JCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9j b21wX2l0ZXIoX19jb21wKSk7CisJCQkgICAgIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAg ICAgfQogCiAgIC8vIG50aF9lbGVtZW50CkBAIC0yODk2LDEwICsyODg0LDEwIEBAIF9HTElC Q1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAJewogCSAgX0JpZGlyZWN0aW9u YWxJdGVyYXRvciBfX2lpID0gX19pOwogCSAgLS1fX2k7Ci0JICBpZiAoX19jb21wKF9faSwg X19paSkpCisJICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkKIAkgICAgewogCSAgICAgIF9C aWRpcmVjdGlvbmFsSXRlcmF0b3IgX19qID0gX19sYXN0OwotCSAgICAgIHdoaWxlICghX19j b21wKF9faSwgLS1fX2opKQorCSAgICAgIHdoaWxlICghX19jb21wKCpfX2ksICooLS1fX2op KSkKIAkJe30KIAkgICAgICBzdGQ6Oml0ZXJfc3dhcChfX2ksIF9faik7CiAJICAgICAgc3Rk OjpfX3JldmVyc2UoX19paSwgX19sYXN0LApAQCAtMjk0Miw3ICsyOTMwLDcgQEAgX0dMSUJD WFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4eF9yZXF1 aXJlc19pcnJlZmxleGl2ZShfX2ZpcnN0LCBfX2xhc3QpOwogCiAgICAgICByZXR1cm4gc3Rk OjpfX25leHRfcGVybXV0YXRpb24KLQkoX19maXJzdCwgX19sYXN0LCBfX2dudV9jeHg6Ol9f b3BzOjpfX2l0ZXJfbGVzc19pdGVyKCkpOworCShfX2ZpcnN0LCBfX2xhc3QsIF9fZ251X2N4 eDo6X19vcHM6Ol9fbGVzcygpKTsKICAgICB9CiAKICAgLyoqCkBAIC0yOTc1LDggKzI5NjMs NyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19n bGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICBf X2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZChfX2ZpcnN0LCBfX2xhc3QsIF9f Y29tcCk7CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fbmV4dF9wZXJtdXRhdGlvbgotCShfX2Zp cnN0LCBfX2xhc3QsIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19jb21w KSk7CisgICAgICByZXR1cm4gc3RkOjpfX25leHRfcGVybXV0YXRpb24oX19maXJzdCwgX19s YXN0LCBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KQEAgLTI5 OTgsMTAgKzI5ODUsMTAgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9W MikKIAl7CiAJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faWkgPSBfX2k7CiAJICAtLV9f aTsKLQkgIGlmIChfX2NvbXAoX19paSwgX19pKSkKKwkgIGlmIChfX2NvbXAoKl9faWksICpf X2kpKQogCSAgICB7CiAJICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ogPSBfX2xh c3Q7Ci0JICAgICAgd2hpbGUgKCFfX2NvbXAoLS1fX2osIF9faSkpCisJICAgICAgd2hpbGUg KCFfX2NvbXAoKigtLV9faiksICpfX2kpKQogCQl7fQogCSAgICAgIHN0ZDo6aXRlcl9zd2Fw KF9faSwgX19qKTsKIAkgICAgICBzdGQ6Ol9fcmV2ZXJzZShfX2lpLCBfX2xhc3QsCkBAIC0z MDQ1LDcgKzMwMzIsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1Yy KQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlKF9fZmlyc3QsIF9fbGFz dCk7CiAKICAgICAgIHJldHVybiBzdGQ6Ol9fcHJldl9wZXJtdXRhdGlvbihfX2ZpcnN0LCBf X2xhc3QsCi0JCQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfbGVzc19pdGVyKCkp OworCQkJCSAgICAgX19nbnVfY3h4OjpfX29wczo6X19sZXNzKCkpOwogICAgIH0KIAogICAv KioKQEAgLTMwNzgsOCArMzA2NSw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVT UEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJz dCwgX19sYXN0KTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVk KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKIAotICAgICAgcmV0dXJuIHN0ZDo6X19wcmV2 X3Blcm11dGF0aW9uKF9fZmlyc3QsIF9fbGFzdCwKLQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpf X2l0ZXJfY29tcF9pdGVyKF9fY29tcCkpOworICAgICAgcmV0dXJuIHN0ZDo6X19wcmV2X3Bl cm11dGF0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAg ICB9CiAKICAgLy8gcmVwbGFjZQpAQCAtMzA5NCw3ICszMDgwLDcgQEAgX0dMSUJDWFhfRU5E X0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKIAkJICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs IGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICAgewogICAgICAgZm9yICg7IF9fZmlyc3Qg IT0gX19sYXN0OyArK19fZmlyc3QsICh2b2lkKSsrX19yZXN1bHQpCi0JaWYgKF9fcHJlZChf X2ZpcnN0KSkKKwlpZiAoX19wcmVkKCpfX2ZpcnN0KSkKIAkgICpfX3Jlc3VsdCA9IF9fbmV3 X3ZhbHVlOwogCWVsc2UKIAkgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwpAQCAtMzEzMSw4ICsz MTE3LDggQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAg IF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogCiAg ICAgICByZXR1cm4gc3RkOjpfX3JlcGxhY2VfY29weV9pZihfX2ZpcnN0LCBfX2xhc3QsIF9f cmVzdWx0LAotCQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2VxdWFsc192YWwoX19vbGRf dmFsdWUpLAotCQkJCQkgICAgICBfX25ld192YWx1ZSk7CisJCQkJICAgIF9fZ251X2N4eDo6 X19vcHM6Ol9fZXF1YWxfdG8oX19vbGRfdmFsdWUpLAorCQkJCSAgICBfX25ld192YWx1ZSk7 CiAgICAgfQogCiAgIC8qKgpAQCAtMzE2Nyw4ICszMTUzLDcgQEAgX0dMSUJDWFhfRU5EX0lO TElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxp ZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogCiAgICAgICByZXR1cm4gc3RkOjpfX3JlcGxh Y2VfY29weV9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAotCQkJCV9fZ251X2N4eDo6 X19vcHM6Ol9fcHJlZF9pdGVyKF9fcHJlZCksCi0JCQkJCSAgICAgIF9fbmV3X3ZhbHVlKTsK KwkJCQkgICAgX0dMSUJDWFhfTU9WRShfX3ByZWQpLCBfX25ld192YWx1ZSk7CiAgICAgfQog CiAjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTApAQCAtMzE5OSw3ICszMTg0LDkgQEAgX0dM SUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICBpbmxpbmUgYm9vbAog ICAgIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0 b3IgX19sYXN0LAogCSAgICAgIF9Db21wYXJlIF9fY29tcCkKLSAgICB7IHJldHVybiBzdGQ6 OmlzX3NvcnRlZF91bnRpbChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCkgPT0gX19sYXN0OyB9 CisgICAgeworICAgICAgcmV0dXJuIHN0ZDo6aXNfc29ydGVkX3VudGlsKF9fZmlyc3QsIF9f bGFzdCwgc3RkOjptb3ZlKF9fY29tcCkpID09IF9fbGFzdDsKKyAgICB9CiAKICAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICAg X0dMSUJDWFgyMF9DT05TVEVYUFIKQEAgLTMyMTIsNyArMzE5OSw3IEBAIF9HTElCQ1hYX0VO RF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAKICAgICAgIF9Gb3J3YXJkSXRlcmF0b3Ig X19uZXh0ID0gX19maXJzdDsKICAgICAgIGZvciAoKytfX25leHQ7IF9fbmV4dCAhPSBfX2xh c3Q7IF9fZmlyc3QgPSBfX25leHQsICh2b2lkKSsrX19uZXh0KQotCWlmIChfX2NvbXAoX19u ZXh0LCBfX2ZpcnN0KSkKKwlpZiAoX19jb21wKCpfX25leHQsICpfX2ZpcnN0KSkKIAkgIHJl dHVybiBfX25leHQ7CiAgICAgICByZXR1cm4gX19uZXh0OwogICAgIH0KQEAgLTMyMzgsNyAr MzIyNSw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAg ICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmUoX19maXJzdCwgX19sYXN0KTsKIAog ICAgICAgcmV0dXJuIHN0ZDo6X19pc19zb3J0ZWRfdW50aWwoX19maXJzdCwgX19sYXN0LAot CQkJCSAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfbGVzc19pdGVyKCkpOworCQkJCSAg ICBfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtMzI2 NCw4ICszMjUxLDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikK ICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3Qp OwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlX3ByZWQoX19maXJzdCwg X19sYXN0LCBfX2NvbXApOwogCi0gICAgICByZXR1cm4gc3RkOjpfX2lzX3NvcnRlZF91bnRp bChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9j b21wX2l0ZXIoX19jb21wKSk7CisgICAgICByZXR1cm4gc3RkOjpfX2lzX3NvcnRlZF91bnRp bChfX2ZpcnN0LCBfX2xhc3QsIHN0ZDo6bW92ZShfX2NvbXApKTsKICAgICB9CiAKICAgLyoq CkBAIC0zMzE4LDcgKzMzMDQsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BB Q0UoX1YyKQogCXJldHVybiBzdGQ6Om1ha2VfcGFpcihfX2ZpcnN0LCBfX2ZpcnN0KTsKIAog ICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pbnt9LCBfX21heHt9OwotICAgICAgaWYgKF9f Y29tcChfX25leHQsIF9fZmlyc3QpKQorICAgICAgaWYgKF9fY29tcCgqX19uZXh0LCAqX19m aXJzdCkpCiAJewogCSAgX19taW4gPSBfX25leHQ7CiAJICBfX21heCA9IF9fZmlyc3Q7CkBA IC0zMzM3LDI1ICszMzIzLDI1IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFD RShfVjIpCiAJICBfX25leHQgPSBfX2ZpcnN0OwogCSAgaWYgKCsrX19uZXh0ID09IF9fbGFz dCkKIAkgICAgewotCSAgICAgIGlmIChfX2NvbXAoX19maXJzdCwgX19taW4pKQorCSAgICAg IGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX21pbikpCiAJCV9fbWluID0gX19maXJzdDsKLQkg ICAgICBlbHNlIGlmICghX19jb21wKF9fZmlyc3QsIF9fbWF4KSkKKwkgICAgICBlbHNlIGlm ICghX19jb21wKCpfX2ZpcnN0LCAqX19tYXgpKQogCQlfX21heCA9IF9fZmlyc3Q7CiAJICAg ICAgYnJlYWs7CiAJICAgIH0KIAotCSAgaWYgKF9fY29tcChfX25leHQsIF9fZmlyc3QpKQor CSAgaWYgKF9fY29tcCgqX19uZXh0LCAqX19maXJzdCkpCiAJICAgIHsKLQkgICAgICBpZiAo X19jb21wKF9fbmV4dCwgX19taW4pKQorCSAgICAgIGlmIChfX2NvbXAoKl9fbmV4dCwgKl9f bWluKSkKIAkJX19taW4gPSBfX25leHQ7Ci0JICAgICAgaWYgKCFfX2NvbXAoX19maXJzdCwg X19tYXgpKQorCSAgICAgIGlmICghX19jb21wKCpfX2ZpcnN0LCAqX19tYXgpKQogCQlfX21h eCA9IF9fZmlyc3Q7CiAJICAgIH0KIAkgIGVsc2UKIAkgICAgewotCSAgICAgIGlmIChfX2Nv bXAoX19maXJzdCwgX19taW4pKQorCSAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX21p bikpCiAJCV9fbWluID0gX19maXJzdDsKLQkgICAgICBpZiAoIV9fY29tcChfX25leHQsIF9f bWF4KSkKKwkgICAgICBpZiAoIV9fY29tcCgqX19uZXh0LCAqX19tYXgpKQogCQlfX21heCA9 IF9fbmV4dDsKIAkgICAgfQogCkBAIC0zMzg5LDggKzMzNzUsNyBAQCBfR0xJQkNYWF9FTkRf SU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3Zh bGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNf aXJyZWZsZXhpdmUoX19maXJzdCwgX19sYXN0KTsKIAotICAgICAgcmV0dXJuIHN0ZDo6X19t aW5tYXhfZWxlbWVudChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJICAgX19nbnVfY3h4OjpfX29w czo6X19pdGVyX2xlc3NfaXRlcigpKTsKKyAgICAgIHJldHVybiBzdGQ6Ol9fbWlubWF4X2Vs ZW1lbnQoX19maXJzdCwgX19sYXN0LCBfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoKSk7CiAg ICAgfQogCiAgIC8qKgpAQCAtMzQxOSw4ICszNDA0LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElO RV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9y YW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVm bGV4aXZlX3ByZWQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogCi0gICAgICByZXR1cm4g c3RkOjpfX21pbm1heF9lbGVtZW50KF9fZmlyc3QsIF9fbGFzdCwKLQkJCQkgICBfX2dudV9j eHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fY29tcCkpOworICAgICAgcmV0dXJuIHN0 ZDo6X19taW5tYXhfZWxlbWVudChfX2ZpcnN0LCBfX2xhc3QsIHN0ZDo6bW92ZShfX2NvbXAp KTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgpAQCAtMzQzMSw3ICszNDE1 LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9f Z2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZShfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsK ICAgICAgIHBhaXI8Y29uc3QgX1RwKiwgY29uc3QgX1RwKj4gX19wID0KIAlzdGQ6Ol9fbWlu bWF4X2VsZW1lbnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSwKLQkJCSAgICAgIF9fZ251X2N4 eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisJCQkgICAgICBfX2dudV9jeHg6Ol9f b3BzOjpfX2xlc3MoKSk7CiAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKl9fcC5maXJz dCwgKl9fcC5zZWNvbmQpOwogICAgIH0KIApAQCAtMzQ0Miw4ICszNDI2LDcgQEAgX0dMSUJD WFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICB7CiAgICAgICBfX2dsaWJj eHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZChfX2wuYmVnaW4oKSwgX19sLmVuZCgpLCBf X2NvbXApOwogICAgICAgcGFpcjxjb25zdCBfVHAqLCBjb25zdCBfVHAqPiBfX3AgPQotCXN0 ZDo6X19taW5tYXhfZWxlbWVudChfX2wuYmVnaW4oKSwgX19sLmVuZCgpLAotCQkJICAgICAg X19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKwlzdGQ6Ol9f bWlubWF4X2VsZW1lbnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSwgc3RkOjptb3ZlKF9fY29t cCkpOwogICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCpfX3AuZmlyc3QsICpfX3Auc2Vj b25kKTsKICAgICB9CiAKQEAgLTM0NzcsNyArMzQ2MCw3IEBAIF9HTElCQ1hYX0VORF9JTkxJ TkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRf cmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOwogCiAgICAgICByZXR1cm4gc3RkOjpfX2lzX3Bl cm11dGF0aW9uKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwKLQkJCQkgICBfX2dudV9j eHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fcHJlZCkpOworCQkJCSAgIHN0ZDo6bW92 ZShfX3ByZWQpKTsKICAgICB9CiAKICNpZiBfX2NwbHVzcGx1cyA+IDIwMTEwM0wKQEAgLTM1 MDgsNyArMzQ5MSw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIp CiAgICAgICAvLyBoYXZlIHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIG9yZGVyLgog ICAgICAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MjsKIAkgICsrX19maXJzdDEsICh2b2lkKSsrX19maXJzdDIpCi0JaWYgKCFfX3ByZWQoX19m aXJzdDEsIF9fZmlyc3QyKSkKKwlpZiAoIV9fcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0Mikp CiAJICBicmVhazsKIAogICAgICAgaWYgKF9fcmFfaXRlcnMpCkBAIC0zNTI5LDE0ICszNTEy LDE0IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBm b3IgKF9Gb3J3YXJkSXRlcmF0b3IxIF9fc2NhbiA9IF9fZmlyc3QxOyBfX3NjYW4gIT0gX19s YXN0MTsgKytfX3NjYW4pCiAJewogCSAgaWYgKF9fc2NhbiAhPSBzdGQ6Ol9fZmluZF9pZihf X2ZpcnN0MSwgX19zY2FuLAotCQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRl cihfX3ByZWQsIF9fc2NhbikpKQorCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9fY29tcF92YWwo X19wcmVkLCAqX19zY2FuKSkpCiAJICAgIGNvbnRpbnVlOyAvLyBXZSd2ZSBzZWVuIHRoaXMg b25lIGJlZm9yZS4KIAogCSAgYXV0byBfX21hdGNoZXMgPSBzdGQ6Ol9fY291bnRfaWYoX19m aXJzdDIsIF9fbGFzdDIsCi0JCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIo X19wcmVkLCBfX3NjYW4pKTsKKwkJX19nbnVfY3h4OjpfX29wczo6X19jb21wX3ZhbChfX3By ZWQsICpfX3NjYW4pKTsKIAkgIGlmICgwID09IF9fbWF0Y2hlcwogCSAgICAgIHx8IHN0ZDo6 X19jb3VudF9pZihfX3NjYW4sIF9fbGFzdDEsCi0JCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0 ZXJfY29tcF9pdGVyKF9fcHJlZCwgX19zY2FuKSkKKwkJCV9fZ251X2N4eDo6X19vcHM6Ol9f Y29tcF92YWwoX19wcmVkLCAqX19zY2FuKSkKIAkgICAgICAhPSBfX21hdGNoZXMpCiAJICAg IHJldHVybiBmYWxzZTsKIAl9CkBAIC0zNTY3LDcgKzM1NTAsNyBAQCBfR0xJQkNYWF9FTkRf SU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCiAgICAgICByZXR1cm4KIAlzdGQ6Ol9faXNf cGVybXV0YXRpb24oX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAotCQkJ ICAgICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2VxdWFsX3RvX2l0ZXIoKSk7CisJCQkg ICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2VxdWFsX3RvKCkpOwogICAgIH0KIAogICAvKioK QEAgLTM1OTYsNyArMzU3OSw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFD RShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDIs IF9fbGFzdDIpOwogCiAgICAgICByZXR1cm4gc3RkOjpfX2lzX3Blcm11dGF0aW9uKF9fZmly c3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKLQkJCQkgICBfX2dudV9jeHg6Ol9f b3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fcHJlZCkpOworCQkJCSAgIHN0ZDo6bW92ZShfX3By ZWQpKTsKICAgICB9CiAjZW5kaWYgLy8gQysrMTQKIApAQCAtMzg0MSw3ICszODI0LDcgQEAg X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KIAkJdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwgX1RwPikKICAgICAgIF9fZ2xpYmN4 eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgcmV0dXJu IHN0ZDo6X19maW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwKLQkJCSAgICBfX2dudV9jeHg6Ol9f b3BzOjpfX2l0ZXJfZXF1YWxzX3ZhbChfX3ZhbCkpOworCQkJICAgIF9fZ251X2N4eDo6X19v cHM6Ol9fZXF1YWxfdG8oX192YWwpKTsKICAgICB9CiAKICAgLyoqCkBAIC0zODY2LDggKzM4 NDksNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogCSAgICAgIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQogICAgICAg X19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CiAKLSAg ICAgIHJldHVybiBzdGQ6Ol9fZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsCi0JCQkgICAgX19n bnVfY3h4OjpfX29wczo6X19wcmVkX2l0ZXIoX19wcmVkKSk7CisgICAgICByZXR1cm4gc3Rk OjpfX2ZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfR0xJQkNYWF9NT1ZFKF9fcHJlZCkpOwog ICAgIH0KIAogICAvKioKQEAgLTM5NzIsNyArMzk1NCw3IEBAIF9HTElCQ1hYX0JFR0lOX05B TUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19m aXJzdCwgX19sYXN0KTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19hZGphY2VudF9maW5kKF9f Zmlyc3QsIF9fbGFzdCwKLQkJCQkgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9lcXVhbF90 b19pdGVyKCkpOworCQkJCSAgX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF90bygpKTsKICAg ICB9CiAKICAgLyoqCkBAIC00MDAwLDcgKzM5ODIsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1F U1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmly c3QsIF9fbGFzdCk7CiAKICAgICAgIHJldHVybiBzdGQ6Ol9fYWRqYWNlbnRfZmluZChfX2Zp cnN0LCBfX2xhc3QsCi0JCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9f YmluYXJ5X3ByZWQpKTsKKwkJCQkgIF9HTElCQ1hYX01PVkUoX19iaW5hcnlfcHJlZCkpOwog ICAgIH0KIAogICAvKioKQEAgLTQwMjQsNyArNDAwNiw3IEBAIF9HTElCQ1hYX0JFR0lOX05B TUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19m aXJzdCwgX19sYXN0KTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19jb3VudF9pZihfX2ZpcnN0 LCBfX2xhc3QsCi0JCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9lcXVhbHNfdmFs KF9fdmFsdWUpKTsKKwkJCSAgICAgX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF90byhfX3Zh bHVlKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtNDA0Nyw4ICs0MDI5LDcgQEAgX0dMSUJDWFhf QkVHSU5fTkFNRVNQQUNFX0FMR08KIAkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J bnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNf dmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKIAotICAgICAgcmV0dXJuIHN0ZDo6X19j b3VudF9pZihfX2ZpcnN0LCBfX2xhc3QsCi0JCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9f cHJlZF9pdGVyKF9fcHJlZCkpOworICAgICAgcmV0dXJuIHN0ZDo6X19jb3VudF9pZihfX2Zp cnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19wcmVkKSk7CiAgICAgfQogCiAgIC8qKgpA QCAtNDA5Myw3ICs0MDc0LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAg ICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MiwgX19sYXN0Mik7 CiAKICAgICAgIHJldHVybiBzdGQ6Ol9fc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2Zp cnN0MiwgX19sYXN0MiwKLQkJCSAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9lcXVhbF90 b19pdGVyKCkpOworCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF90bygpKTsKICAg ICB9CiAKICAgLyoqCkBAIC00MTI0LDcgKzQxMDUsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1F U1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmly c3QsIF9fbGFzdCk7CiAKICAgICAgIHJldHVybiBzdGQ6Ol9fc2VhcmNoX24oX19maXJzdCwg X19sYXN0LCBfX2NvdW50LAotCQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfZXF1 YWxzX3ZhbChfX3ZhbCkpOworCQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2VxdWFsX3Rv KF9fdmFsKSk7CiAgICAgfQogCiAKQEAgLTQxNjAsNyArNDE0MSw3IEBAIF9HTElCQ1hYX0JF R0lOX05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFu Z2UoX19maXJzdCwgX19sYXN0KTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19zZWFyY2hfbihf X2ZpcnN0LCBfX2xhc3QsIF9fY291bnQsCi0JCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9j b21wX3ZhbChfX2JpbmFyeV9wcmVkLCBfX3ZhbCkpOworCV9fZ251X2N4eDo6X19vcHM6Ol9f Y29tcF92YWwoX0dMSUJDWFhfTU9WRShfX2JpbmFyeV9wcmVkKSwgX192YWwpKTsKICAgICB9 CiAKICNpZiBfX2NwbHVzcGx1cyA+PSAyMDE3MDNMCkBAIC00NDE3LDcgKzQzOTgsNyBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgaWYgKF9fZmlyc3QgPT0gX19s YXN0KQogCXJldHVybiBfX3Jlc3VsdDsKICAgICAgIHJldHVybiBzdGQ6Ol9fdW5pcXVlX2Nv cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKLQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpf X2l0ZXJfZXF1YWxfdG9faXRlcigpLAorCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9fZXF1YWxf dG8oKSwKIAkJCQlzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCksCiAJCQkJc3Rk OjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0KSk7CiAgICAgfQpAQCAtNDQ1Nyw3ICs0 NDM4LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkKIAlyZXR1cm4gX19yZXN1bHQ7CiAgICAgICByZXR1cm4gc3RkOjpf X3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCi0JCQlfX2dudV9jeHg6 Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fYmluYXJ5X3ByZWQpLAorCQkJCV9HTElCQ1hY X01PVkUoX19iaW5hcnlfcHJlZCksCiAJCQkJc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f Zmlyc3QpLAogCQkJCXN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX3Jlc3VsdCkpOwogICAg IH0KQEAgLTQ1NzMsNyArNDU1NCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdP CiAJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFs dWVfdHlwZT4pCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJz dCwgX19sYXN0KTsKIAotICAgICAgcmV0dXJuIHN0ZDo6X19wYXJ0aXRpb24oX19maXJzdCwg X19sYXN0LCBfX3ByZWQsCisgICAgICByZXR1cm4gc3RkOjpfX3BhcnRpdGlvbihfX2ZpcnN0 LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19wcmVkKSwKIAkJCSAgICAgIHN0ZDo6X19pdGVy YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICAgfQogCkBAIC00NjEyLDcgKzQ1OTMsNyBA QCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVp cmVzX2lycmVmbGV4aXZlKF9fZmlyc3QsIF9fbGFzdCk7CiAKICAgICAgIHN0ZDo6X19wYXJ0 aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKLQkJCSAgX19nbnVfY3h4Ojpf X29wczo6X19pdGVyX2xlc3NfaXRlcigpKTsKKwkJCSAgX19nbnVfY3h4OjpfX29wczo6X19s ZXNzKCkpOwogICAgIH0KIAogICAvKioKQEAgLTQ2NTIsOCArNDYzMyw3IEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRf cmFuZ2UoX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJy ZWZsZXhpdmVfcHJlZChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAKLSAgICAgIHN0ZDo6 X19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKLQkJCSAgX19nbnVf Y3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKyAgICAgIHN0ZDo6X19w YXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0dMSUJDWFhfTU9WRShf X2NvbXApKTsKICAgICB9CiAKICAgLyoqCkBAIC00NjkxLDcgKzQ2NzEsNyBAQCBfR0xJQkNY WF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogCiAgICAgICBzdGQ6Ol9faW50cm9zZWxlY3QoX19m aXJzdCwgX19udGgsIF9fbGFzdCwKIAkJCSBzdGQ6Ol9fbGcoX19sYXN0IC0gX19maXJzdCkg KiAyLAotCQkJIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisJCQkg X19nbnVfY3h4OjpfX29wczo6X19sZXNzKCkpOwogICAgIH0KIAogICAvKioKQEAgLTQ3MzIs NyArNDcxMiw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAKICAgICAgIHN0 ZDo6X19pbnRyb3NlbGVjdChfX2ZpcnN0LCBfX250aCwgX19sYXN0LAogCQkJIHN0ZDo6X19s ZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsCi0JCQkgX19nbnVfY3h4OjpfX29wczo6X19pdGVy X2NvbXBfaXRlcihfX2NvbXApKTsKKwkJCSBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAg IH0KIAogICAvKioKQEAgLTQ3NjIsNyArNDc0Miw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVT UEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJz dCwgX19sYXN0KTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZShfX2Zp cnN0LCBfX2xhc3QpOwogCi0gICAgICBzdGQ6Ol9fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f Z251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisgICAgICBzdGQ6Ol9fc29y dChfX2ZpcnN0LCBfX2xhc3QsIF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcygpKTsKICAgICB9 CiAKICAgLyoqCkBAIC00Nzk1LDcgKzQ3NzUsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BB Q0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3Qs IF9fbGFzdCk7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZChf X2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAKLSAgICAgIHN0ZDo6X19zb3J0KF9fZmlyc3Qs IF9fbGFzdCwgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsK KyAgICAgIHN0ZDo6X19zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX0dMSUJDWFhfTU9WRShfX2Nv bXApKTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0 eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjIsCkBAIC00ODA4LDcgKzQ3ODgsNyBAQCBfR0xJQkNY WF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIHsKICAgICAgIHdoaWxlIChfX2ZpcnN0MSAh PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAJewotCSAgaWYgKF9fY29tcChf X2ZpcnN0MiwgX19maXJzdDEpKQorCSAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0 MSkpCiAJICAgIHsKIAkgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAJICAgICAgKytf X2ZpcnN0MjsKQEAgLTQ4NjgsNyArNDg0OCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFD RV9BTEdPCiAKICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19tZXJnZShfX2ZpcnN0 MSwgX19sYXN0MSwKIAkJCQkgICAgIF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCwKLQkJ CQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisJCQkJICAg ICBfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtNDkx OCw4ICs0ODk4LDggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIF9f Z2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkMihfX2ZpcnN0MiwgX19sYXN0Miwg X19jb21wKTsKIAogICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpfX21lcmdlKF9fZmly c3QxLCBfX2xhc3QxLAotCQkJCV9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCwKLQkJCQlf X2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fY29tcCkpOworCQkJCSAgICAg X19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0LAorCQkJCSAgICAgX0dMSUJDWFhfTU9WRShf X2NvbXApKTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KQEAgLTQ5NDQsMTQgKzQ5MjQsMTYgQEAgX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0 KF9fYnVmLnJlcXVlc3RlZF9zaXplKCkgPT0gX19idWYuc2l6ZSgpLCB0cnVlKSkKIAlzdGQ6 Ol9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwKIAkJCQkgICAgX19maXJzdCArIF9E aXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSwKLQkJCQkgICAgX19sYXN0LCBfX2J1Zi5iZWdp bigpLCBfX2NvbXApOworCQkJCSAgICBfX2xhc3QsIF9fYnVmLmJlZ2luKCksCisJCQkJICAg IF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgICBlbHNlIGlmIChfX2J1aWx0aW5fZXhw ZWN0KF9fYnVmLmJlZ2luKCkgPT0gMCwgZmFsc2UpKQotCXN0ZDo6X19pbnBsYWNlX3N0YWJs ZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKKwlzdGQ6Ol9faW5wbGFjZV9zdGFi bGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAg ICBlbHNlCiAJc3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlX3Jlc2l6ZShfX2ZpcnN0LCBf X2xhc3QsIF9fYnVmLmJlZ2luKCksCi0JCQkJCSAgIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6 ZSgpKSwgX19jb21wKTsKKwkJCQkJICAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAor CQkJCQkgICBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogI2Vsc2UKLSAgICAgIHN0ZDo6X19p bnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKKyAgICAgIHN0 ZDo6X19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX0dMSUJDWFhfTU9W RShfX2NvbXApKTsKICNlbmRpZgogICAgIH0KIApAQCAtNDk4NSw3ICs0OTY3LDcgQEAgX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19p cnJlZmxleGl2ZShfX2ZpcnN0LCBfX2xhc3QpOwogCiAgICAgICBfR0xJQkNYWF9TVERfQTo6 X19zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJICAgIF9fZ251X2N4eDo6X19v cHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisJCQkJICAgIF9fZ251X2N4eDo6X19vcHM6Ol9f bGVzcygpKTsKICAgICB9CiAKICAgLyoqCkBAIC01MDIxLDcgKzUwMDMsNyBAQCBfR0xJQkNY WF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVm bGV4aXZlX3ByZWQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogCiAgICAgICBfR0xJQkNY WF9TVERfQTo6X19zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJICAgIF9fZ251 X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19jb21wKSk7CisJCQkJICAgIF9HTElC Q1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLApAQCAtNTAzNSwxMiArNTAx NywxMiBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIHsKICAgICAgIHdo aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAJewot CSAgaWYgKF9fY29tcChfX2ZpcnN0MSwgX19maXJzdDIpKQorCSAgaWYgKF9fY29tcCgqX19m aXJzdDEsICpfX2ZpcnN0MikpCiAJICAgIHsKIAkgICAgICAqX19yZXN1bHQgPSAqX19maXJz dDE7CiAJICAgICAgKytfX2ZpcnN0MTsKIAkgICAgfQotCSAgZWxzZSBpZiAoX19jb21wKF9f Zmlyc3QyLCBfX2ZpcnN0MSkpCisJICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19m aXJzdDEpKQogCSAgICB7CiAJICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogCSAgICAg ICsrX19maXJzdDI7CkBAIC01MTAzLDggKzUwODUsOCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1F U1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlMihfX2Zp cnN0MiwgX19sYXN0Mik7CiAKICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19zZXRf dW5pb24oX19maXJzdDEsIF9fbGFzdDEsCi0JCQkJX19maXJzdDIsIF9fbGFzdDIsIF9fcmVz dWx0LAotCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisJCQkJ CSBfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQsCisJCQkJCSBfX2dudV9jeHg6Ol9fb3Bz OjpfX2xlc3MoKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtNTE1NCw4ICs1MTM2LDggQEAgX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19p cnJlZmxleGl2ZV9wcmVkMihfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKIAogICAgICAg cmV0dXJuIF9HTElCQ1hYX1NURF9BOjpfX3NldF91bmlvbihfX2ZpcnN0MSwgX19sYXN0MSwK LQkJCQlfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQsCi0JCQkJX19nbnVfY3h4OjpfX29w czo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKwkJCQkJIF9fZmlyc3QyLCBfX2xhc3Qy LCBfX3Jlc3VsdCwKKwkJCQkJIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAg IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRl cmF0b3IyLApAQCAtNTE2OCw5ICs1MTUwLDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNF X0FMR08KIAkJICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19j b21wKQogICAgIHsKICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly c3QyICE9IF9fbGFzdDIpCi0JaWYgKF9fY29tcChfX2ZpcnN0MSwgX19maXJzdDIpKQorCWlm IChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogCSAgKytfX2ZpcnN0MTsKLQllbHNl IGlmIChfX2NvbXAoX19maXJzdDIsIF9fZmlyc3QxKSkKKwllbHNlIGlmIChfX2NvbXAoKl9f Zmlyc3QyLCAqX19maXJzdDEpKQogCSAgKytfX2ZpcnN0MjsKIAllbHNlCiAJICB7CkBAIC01 MjI1LDggKzUyMDcsOCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAg X19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlMihfX2ZpcnN0MiwgX19sYXN0Mik7CiAK ICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19zZXRfaW50ZXJzZWN0aW9uKF9fZmly c3QxLCBfX2xhc3QxLAotCQkJCSAgICAgX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0LAot CQkJCSAgICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2xlc3NfaXRlcigpKTsKKwkJCQkJ CV9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCwKKwkJCQkJCV9fZ251X2N4eDo6X19vcHM6 Ol9fbGVzcygpKTsKICAgICB9CiAKICAgLyoqCkBAIC01Mjc1LDggKzUyNTcsOCBAQCBfR0xJ QkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2ly cmVmbGV4aXZlX3ByZWQyKF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogCiAgICAgICBy ZXR1cm4gX0dMSUJDWFhfU1REX0E6Ol9fc2V0X2ludGVyc2VjdGlvbihfX2ZpcnN0MSwgX19s YXN0MSwKLQkJCQlfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQsCi0JCQkJX19nbnVfY3h4 OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKwkJCQkJCV9fZmlyc3QyLCBf X2xhc3QyLCBfX3Jlc3VsdCwKKwkJCQkJCV9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAg fQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lu cHV0SXRlcmF0b3IyLApAQCAtNTI4OSwxMyArNTI3MSwxMyBAQCBfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfQUxHTwogCQkgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0NvbXBh cmUgX19jb21wKQogICAgIHsKICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIpCi0JaWYgKF9fY29tcChfX2ZpcnN0MSwgX19maXJzdDIp KQorCWlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogCSAgewogCSAgICAqX19y ZXN1bHQgPSAqX19maXJzdDE7CiAJICAgICsrX19maXJzdDE7CiAJICAgICsrX19yZXN1bHQ7 CiAJICB9Ci0JZWxzZSBpZiAoX19jb21wKF9fZmlyc3QyLCBfX2ZpcnN0MSkpCisJZWxzZSBp ZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKIAkgICsrX19maXJzdDI7CiAJZWxz ZQogCSAgewpAQCAtNTM1MCw4ICs1MzMyLDggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNF X0FMR08KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZTIoX19maXJzdDIs IF9fbGFzdDIpOwogCiAgICAgICByZXR1cm4gX0dMSUJDWFhfU1REX0E6Ol9fc2V0X2RpZmZl cmVuY2UoX19maXJzdDEsIF9fbGFzdDEsCi0JCQkJICAgX19maXJzdDIsIF9fbGFzdDIsIF9f cmVzdWx0LAotCQkJCSAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7 CisJCQkJCSAgICAgIF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCwKKwkJCQkJICAgICAg X19nbnVfY3h4OjpfX29wczo6X19sZXNzKCkpOwogICAgIH0KIAogICAvKioKQEAgLTU0MDIs OCArNTM4NCw4IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2ds aWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZDIoX19maXJzdDIsIF9fbGFzdDIsIF9f Y29tcCk7CiAKICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19zZXRfZGlmZmVyZW5j ZShfX2ZpcnN0MSwgX19sYXN0MSwKLQkJCQkgICBfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1 bHQsCi0JCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXAp KTsKKwkJCQkJICAgICAgX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0LAorCQkJCQkgICAg ICBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKQEAgLTU0MTks MTMgKzU0MDEsMTMgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KIAkJCSAgICAg ICBfQ29tcGFyZSBfX2NvbXApCiAgICAgewogICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKLQlpZiAoX19jb21wKF9fZmlyc3QxLCBf X2ZpcnN0MikpCisJaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAJICB7CiAJ ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKIAkgICAgKytfX2ZpcnN0MTsKIAkgICAgKytf X3Jlc3VsdDsKIAkgIH0KLQllbHNlIGlmIChfX2NvbXAoX19maXJzdDIsIF9fZmlyc3QxKSkK KwllbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogCSAgewogCSAgICAq X19yZXN1bHQgPSAqX19maXJzdDI7CiAJICAgICsrX19maXJzdDI7CkBAIC01NDg2LDcgKzU0 NjgsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogCiAgICAgICByZXR1cm4g X0dMSUJDWFhfU1REX0E6Ol9fc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9fZmlyc3QxLCBf X2xhc3QxLAogCQkJCQlfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQsCi0JCQkJCV9fZ251 X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisJCQkJCV9fZ251X2N4eDo6X19v cHM6Ol9fbGVzcygpKTsKICAgICB9CiAKICAgLyoqCkBAIC01NTM5LDcgKzU1MjEsNyBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogCiAgICAgICByZXR1cm4gX0dMSUJDWFhf U1REX0E6Ol9fc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9fZmlyc3QxLCBfX2xhc3QxLAog CQkJCV9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCwKLQkJCQlfX2dudV9jeHg6Ol9fb3Bz OjpfX2l0ZXJfY29tcF9pdGVyKF9fY29tcCkpOworCQkJCV9HTElCQ1hYX01PVkUoX19jb21w KSk7CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5 cGVuYW1lIF9Db21wYXJlPgpAQCAtNTU1Miw3ICs1NTM0LDcgQEAgX0dMSUJDWFhfQkVHSU5f TkFNRVNQQUNFX0FMR08KIAlyZXR1cm4gX19maXJzdDsKICAgICAgIF9Gb3J3YXJkSXRlcmF0 b3IgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xh c3QpCi0JaWYgKF9fY29tcChfX2ZpcnN0LCBfX3Jlc3VsdCkpCisJaWYgKF9fY29tcCgqX19m aXJzdCwgKl9fcmVzdWx0KSkKIAkgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgIHJldHVy biBfX3Jlc3VsdDsKICAgICB9CkBAIC01NTc3LDcgKzU1NTksNyBAQCBfR0xJQkNYWF9CRUdJ Tl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZl KF9fZmlyc3QsIF9fbGFzdCk7CiAKICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19t aW5fZWxlbWVudChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJX19nbnVfY3h4OjpfX29wczo6X19p dGVyX2xlc3NfaXRlcigpKTsKKwkJCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19sZXNzKCkp OwogICAgIH0KIAogICAvKioKQEAgLTU2MDQsNyArNTU4Niw3IEBAIF9HTElCQ1hYX0JFR0lO X05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVf cHJlZChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAKICAgICAgIHJldHVybiBfR0xJQkNY WF9TVERfQTo6X19taW5fZWxlbWVudChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJX19nbnVfY3h4 OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKwkJCQkJICAgX0dMSUJDWFhf TU9WRShfX2NvbXApKTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CkBAIC01NjE2LDcgKzU1OTgsNyBAQCBfR0xJ QkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0 KSByZXR1cm4gX19maXJzdDsKICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQgPSBf X2ZpcnN0OwogICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCi0JaWYgKF9fY29t cChfX3Jlc3VsdCwgX19maXJzdCkpCisJaWYgKF9fY29tcCgqX19yZXN1bHQsICpfX2ZpcnN0 KSkKIAkgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg ICB9CkBAIC01NjQxLDcgKzU2MjMsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxH TwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlKF9fZmlyc3QsIF9fbGFz dCk7CiAKICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19tYXhfZWxlbWVudChfX2Zp cnN0LCBfX2xhc3QsCi0JCQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2xlc3NfaXRlcigp KTsKKwkJCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19sZXNzKCkpOwogICAgIH0KIAogICAv KioKQEAgLTU2NjgsNyArNTY1MCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdP CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZChfX2ZpcnN0LCBf X2xhc3QsIF9fY29tcCk7CiAKICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19tYXhf ZWxlbWVudChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVy X2NvbXBfaXRlcihfX2NvbXApKTsKKwkJCQkJICAgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsK ICAgICB9CiAKICNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCkBAIC01NjgwLDcgKzU2NjIs NyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIHsKICAgICAgIF9fZ2xp YmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZShfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsKICAg ICAgIHJldHVybiAqX0dMSUJDWFhfU1REX0E6Ol9fbWluX2VsZW1lbnQoX19sLmJlZ2luKCks IF9fbC5lbmQoKSwKLQkgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7 CisJCQkJCSAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoKSk7CiAgICAgfQogCiAgIHRl bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CkBAIC01NjkwLDcgKzU2 NzIsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIHsKICAgICAgIF9f Z2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkKF9fbC5iZWdpbigpLCBfX2wuZW5k KCksIF9fY29tcCk7CiAgICAgICByZXR1cm4gKl9HTElCQ1hYX1NURF9BOjpfX21pbl9lbGVt ZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCksCi0JICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0 ZXJfY29tcF9pdGVyKF9fY29tcCkpOworCQkJCQkgICAgc3RkOjptb3ZlKF9fY29tcCkpOwog ICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CkBAIC01NzAwLDcgKzU2ODIsNyBA QCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIHsKICAgICAgIF9fZ2xpYmN4 eF9yZXF1aXJlc19pcnJlZmxleGl2ZShfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsKICAgICAg IHJldHVybiAqX0dMSUJDWFhfU1REX0E6Ol9fbWF4X2VsZW1lbnQoX19sLmJlZ2luKCksIF9f bC5lbmQoKSwKLQkgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisJ CQkJCSAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoKSk7CiAgICAgfQogCiAgIHRlbXBs YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CkBAIC01NzEwLDcgKzU2OTIs NyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIHsKICAgICAgIF9fZ2xp YmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkKF9fbC5iZWdpbigpLCBfX2wuZW5kKCks IF9fY29tcCk7CiAgICAgICByZXR1cm4gKl9HTElCQ1hYX1NURF9BOjpfX21heF9lbGVtZW50 KF9fbC5iZWdpbigpLCBfX2wuZW5kKCksCi0JICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJf Y29tcF9pdGVyKF9fY29tcCkpOworCQkJCQkgICAgc3RkOjptb3ZlKF9fY29tcCkpOwogICAg IH0KICNlbmRpZiAvLyBDKysxMQogCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVk ZS9iaXRzL3N0bF9hbGdvYmFzZS5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxf YWxnb2Jhc2UuaAppbmRleCA2Mjc2ZDg1Yjg2Zi4uYmY0MDRiZjg0OWIgMTAwNjQ0Ci0tLSBh L2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29iYXNlLmgKKysrIGIvbGlic3Rk YysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaApAQCAtMTMwMCw5ICsxMzAwLDkg QEAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKICAgICAgIGZvciAoOyBfX2Zp cnN0MSAhPSBfX2xhc3QxICYmIF9fcmFpX3R5cGU6Ol9fY25kMihfX2ZpcnN0MiwgX19sYXN0 Mik7CiAJICAgKytfX2ZpcnN0MSwgKHZvaWQpKytfX2ZpcnN0MikKIAl7Ci0JICBpZiAoX19j b21wKF9fZmlyc3QxLCBfX2ZpcnN0MikpCisJICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9f Zmlyc3QyKSkKIAkgICAgcmV0dXJuIHRydWU7Ci0JICBpZiAoX19jb21wKF9fZmlyc3QyLCBf X2ZpcnN0MSkpCisJICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKIAkgICAg cmV0dXJuIGZhbHNlOwogCX0KICAgICAgIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDI7CkBAIC0xMzE2LDEwICsxMzE2LDkgQEAgX0dMSUJDWFhf RU5EX05BTUVTUEFDRV9DT05UQUlORVIKIAlzdGF0aWMgYm9vbAogCV9fbGMoX0lJMSBfX2Zp cnN0MSwgX0lJMSBfX2xhc3QxLCBfSUkyIF9fZmlyc3QyLCBfSUkyIF9fbGFzdDIpCiAJewot CSAgdXNpbmcgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2xlc3NfaXRlcjsKIAkgIHJldHVy biBzdGQ6Ol9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfaW1wbChfX2ZpcnN0MSwgX19sYXN0 MSwKIAkJCQkJCSAgICAgX19maXJzdDIsIF9fbGFzdDIsCi0JCQkJCQkgICAgIF9faXRlcl9s ZXNzX2l0ZXIoKSk7CisJCQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoKSk7CiAJfQog CiAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUkxLCB0eXBlbmFtZSBfSUkyPgpAQCAtMTQ2 OSw3ICsxNDY4LDcgQEAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKIAkgIF9E aXN0YW5jZVR5cGUgX19oYWxmID0gX19sZW4gPj4gMTsKIAkgIF9Gb3J3YXJkSXRlcmF0b3Ig X19taWRkbGUgPSBfX2ZpcnN0OwogCSAgc3RkOjphZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYp OwotCSAgaWYgKF9fY29tcChfX21pZGRsZSwgX192YWwpKQorCSAgaWYgKF9fY29tcCgqX19t aWRkbGUsIF9fdmFsKSkKIAkgICAgewogCSAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKIAkg ICAgICArK19fZmlyc3Q7CkBAIC0xNTA1LDcgKzE1MDQsNyBAQCBfR0xJQkNYWF9FTkRfTkFN RVNQQUNFX0NPTlRBSU5FUgogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3BhcnRpdGlvbmVk X2xvd2VyKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogCiAgICAgICByZXR1cm4gc3RkOjpf X2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCi0JCQkJX19nbnVfY3h4Ojpf X29wczo6X19pdGVyX2xlc3NfdmFsKCkpOworCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9fbGVz cygpKTsKICAgICB9CiAKICAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRo ZSBzb3J0IHJvdXRpbmVzIGFuZCBmb3IgcmFuZG9tLnRjYy4KQEAgLTE2MzQsNyArMTYzMyw3 IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAJICBpZiAoX19kMSAhPSBfX2Qy KQogCSAgICByZXR1cm4gZmFsc2U7CiAJICByZXR1cm4gX0dMSUJDWFhfU1REX0E6OmVxdWFs KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwKLQkJCQkgICAgICAgX19iaW5hcnlfcHJl ZCk7CisJCQkJICAgICAgIHN0ZDo6bW92ZShfX2JpbmFyeV9wcmVkKSk7CiAJfQogCiAgICAg ICBmb3IgKDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwpA QCAtMTc3Miw4ICsxNzcxLDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAg ICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MiwgX19sYXN0Mik7 CiAKICAgICAgIHJldHVybiBzdGQ6Ol9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfaW1wbAot CShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCi0JIF9fZ251X2N4eDo6 X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19jb21wKSk7CisJKF9fZmlyc3QxLCBfX2xhc3Qx LCBfX2ZpcnN0MiwgX19sYXN0MiwgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAgICB9CiAK ICNpZiBfX2NwcF9saWJfdGhyZWVfd2F5X2NvbXBhcmlzb24KQEAgLTE4NzgsNyArMTg3Niw3 IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAgICAgX19taXNtYXRjaChfSW5w dXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAogCSAgICAg ICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlf cHJlZCkKICAgICB7Ci0gICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Jp bmFyeV9wcmVkKF9fZmlyc3QxLCBfX2ZpcnN0MikpCisgICAgICB3aGlsZSAoX19maXJzdDEg IT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKIAl7 CiAJICArK19fZmlyc3QxOwogCSAgKytfX2ZpcnN0MjsKQEAgLTE5MTQsNyArMTkxMiw3IEBA IF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWly ZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOwogCiAgICAgICByZXR1cm4gX0dM SUJDWFhfU1REX0E6Ol9fbWlzbWF0Y2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLAot CQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfZXF1YWxfdG9faXRlcigpKTsKKwkJ CQkJX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF90bygpKTsKICAgICB9CiAKICAgLyoqCkBA IC0xOTQ2LDcgKzE5NDQsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAg ICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QxLCBfX2xhc3QxKTsK IAogICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpfX21pc21hdGNoKF9fZmlyc3QxLCBf X2xhc3QxLCBfX2ZpcnN0MiwKLQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVy KF9fYmluYXJ5X3ByZWQpKTsKKwkJCQkJX0dMSUJDWFhfTU9WRShfX2JpbmFyeV9wcmVkKSk7 CiAgICAgfQogCiAjaWYgX19nbGliY3h4X3JvYnVzdF9ub25tb2RpZnlpbmdfc2VxX29wcyAv LyBDKysgPj0gMTQKQEAgLTE5NTksNyArMTk1Nyw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVT UEFDRV9BTEdPCiAJICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAg ICB7CiAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf X2xhc3QyCi0JICAgICAmJiBfX2JpbmFyeV9wcmVkKF9fZmlyc3QxLCBfX2ZpcnN0MikpCisJ ICAgICAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKIAl7CiAJICAr K19fZmlyc3QxOwogCSAgKytfX2ZpcnN0MjsKQEAgLTE5OTcsNyArMTk5NSw3IEBAIF9HTElC Q1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFs aWRfcmFuZ2UoX19maXJzdDIsIF9fbGFzdDIpOwogCiAgICAgICByZXR1cm4gX0dMSUJDWFhf U1REX0E6Ol9fbWlzbWF0Y2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3Qy LAotCQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfZXF1YWxfdG9faXRlcigpKTsK KwkJCQkJX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF90bygpKTsKICAgICB9CiAKICAgLyoq CkBAIC0yMDMyLDcgKzIwMzAsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwog ICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3Qy KTsKIAogICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpfX21pc21hdGNoKF9fZmlyc3Qx LCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKLQkJCSAgICAgX19nbnVfY3h4OjpfX29w czo6X19pdGVyX2NvbXBfaXRlcihfX2JpbmFyeV9wcmVkKSk7CisJCQkJCV9HTElCQ1hYX01P VkUoX19iaW5hcnlfcHJlZCkpOwogICAgIH0KICNlbmRpZgogCkBAIC0yMDQ1LDcgKzIwNDMs NyBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0FMR08KICAgICBfX2ZpbmRfaWYoX0lucHV0 SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogCSAgICAgIF9QcmVk aWNhdGUgX19wcmVkLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgewotICAgICAgd2hpbGUg KF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoX19maXJzdCkpCisgICAgICB3aGlsZSAo X19maXJzdCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgqX19maXJzdCkpCiAJKytfX2ZpcnN0Owog ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgfQpAQCAtMjA2MiwxOSArMjA2MCwxOSBAQCBf R0xJQkNYWF9FTkRfTkFNRVNQQUNFX0FMR08KIAogICAgICAgZm9yICg7IF9fdHJpcF9jb3Vu dCA+IDA7IC0tX190cmlwX2NvdW50KQogCXsKLQkgIGlmIChfX3ByZWQoX19maXJzdCkpCisJ ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKIAkgICAgcmV0dXJuIF9fZmlyc3Q7CiAJICArK19f Zmlyc3Q7CiAKLQkgIGlmIChfX3ByZWQoX19maXJzdCkpCisJICBpZiAoX19wcmVkKCpfX2Zp cnN0KSkKIAkgICAgcmV0dXJuIF9fZmlyc3Q7CiAJICArK19fZmlyc3Q7CiAKLQkgIGlmIChf X3ByZWQoX19maXJzdCkpCisJICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKIAkgICAgcmV0dXJu IF9fZmlyc3Q7CiAJICArK19fZmlyc3Q7CiAKLQkgIGlmIChfX3ByZWQoX19maXJzdCkpCisJ ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKIAkgICAgcmV0dXJuIF9fZmlyc3Q7CiAJICArK19f Zmlyc3Q7CiAJfQpAQCAtMjA4MiwxNyArMjA4MCwxNyBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQ QUNFX0FMR08KICAgICAgIHN3aXRjaCAoX19sYXN0IC0gX19maXJzdCkKIAl7CiAJY2FzZSAz OgotCSAgaWYgKF9fcHJlZChfX2ZpcnN0KSkKKwkgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQog CSAgICByZXR1cm4gX19maXJzdDsKIAkgICsrX19maXJzdDsKIAkgIC8vIEZBTExUSFJVCiAJ Y2FzZSAyOgotCSAgaWYgKF9fcHJlZChfX2ZpcnN0KSkKKwkgIGlmIChfX3ByZWQoKl9fZmly c3QpKQogCSAgICByZXR1cm4gX19maXJzdDsKIAkgICsrX19maXJzdDsKIAkgIC8vIEZBTExU SFJVCiAJY2FzZSAxOgotCSAgaWYgKF9fcHJlZChfX2ZpcnN0KSkKKwkgIGlmIChfX3ByZWQo Kl9fZmlyc3QpKQogCSAgICByZXR1cm4gX19maXJzdDsKIAkgICsrX19maXJzdDsKIAkgIC8v IEZBTExUSFJVCkBAIC0yMTE4LDcgKzIxMTYsNyBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNF X0FMR08KICAgICB7CiAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgIGZvciAoOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQotCWlmIChfX3ByZWQoX19maXJzdCkpCisJaWYgKF9f cHJlZCgqX19maXJzdCkpCiAJICArK19fbjsKICAgICAgIHJldHVybiBfX247CiAgICAgfQpA QCAtMjEzNSw3ICsyMTMzLDcgQEAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9BTEdPCiAgICAg ICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgICsrX19maXJz dDsKICAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQotCWlmICgh X19wcmVkKF9fZmlyc3QpKQorCWlmICghX19wcmVkKCpfX2ZpcnN0KSkKIAkgIHsKIAkgICAg Kl9fcmVzdWx0ID0gX0dMSUJDWFhfTU9WRSgqX19maXJzdCk7CiAJICAgICsrX19yZXN1bHQ7 CkBAIC0yMTQ5LDcgKzIxNDcsNyBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0FMR08KICAg ICBfRm9yd2FyZEl0ZXJhdG9yMQogICAgIF9fc2VhcmNoKF9Gb3J3YXJkSXRlcmF0b3IxIF9f Zmlyc3QxLCBfRm9yd2FyZEl0ZXJhdG9yMSBfX2xhc3QxLAogCSAgICAgX0ZvcndhcmRJdGVy YXRvcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcmF0b3IyIF9fbGFzdDIsCi0JICAgICBfQmlu YXJ5UHJlZGljYXRlICBfX3ByZWRpY2F0ZSkKKwkgICAgIF9CaW5hcnlQcmVkaWNhdGUgIF9f cHJlZCkKICAgICB7CiAgICAgICAvLyBUZXN0IGZvciBlbXB0eSByYW5nZXMKICAgICAgIGlm IChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCkBAIC0yMTU5 LDcgKzIxNTcsNyBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0FMR08KICAgICAgIF9Gb3J3 YXJkSXRlcmF0b3IyIF9fcDEoX19maXJzdDIpOwogICAgICAgaWYgKCsrX19wMSA9PSBfX2xh c3QyKQogCXJldHVybiBzdGQ6Ol9fZmluZF9pZihfX2ZpcnN0MSwgX19sYXN0MSwKLQkJX19n bnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX3ByZWRpY2F0ZSwgX19maXJzdDIp KTsKKwkgIF9fZ251X2N4eDo6X19vcHM6Ol9fY29tcF92YWwoX0dMSUJDWFhfTU9WRShfX3By ZWQpLCAqX19maXJzdDIpKTsKIAogICAgICAgLy8gR2VuZXJhbCBjYXNlLgogICAgICAgX0Zv cndhcmRJdGVyYXRvcjEgX19jdXJyZW50ID0gX19maXJzdDE7CkBAIC0yMTY4LDcgKzIxNjYs NyBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0FMR08KIAl7CiAJICBfX2ZpcnN0MSA9CiAJ ICAgIHN0ZDo6X19maW5kX2lmKF9fZmlyc3QxLCBfX2xhc3QxLAotCQlfX2dudV9jeHg6Ol9f b3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fcHJlZGljYXRlLCBfX2ZpcnN0MikpOworCQkJICAg X19nbnVfY3h4OjpfX29wczo6X19jb21wX3ZhbChfX3ByZWQsICpfX2ZpcnN0MikpOwogCiAJ ICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKIAkgICAgcmV0dXJuIF9fbGFzdDE7CkBAIC0y MTc4LDcgKzIxNzYsNyBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0FMR08KIAkgIGlmICgr K19fY3VycmVudCA9PSBfX2xhc3QxKQogCSAgICByZXR1cm4gX19sYXN0MTsKIAotCSAgd2hp bGUgKF9fcHJlZGljYXRlKF9fY3VycmVudCwgX19wKSkKKwkgIHdoaWxlIChfX3ByZWQoKl9f Y3VycmVudCwgKl9fcCkpCiAJICAgIHsKIAkgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikK IAkJcmV0dXJuIF9fZmlyc3QxOwpAQCAtMjIwMSw3ICsyMTk5LDcgQEAgX0dMSUJDWFhfRU5E X05BTUVTUEFDRV9BTEdPCiAgICAgICAvLyBFZmZpY2llbnRseSBjb21wYXJlIGlkZW50aWNh bCBwcmVmaXhlczogIE8oTikgaWYgc2VxdWVuY2VzCiAgICAgICAvLyBoYXZlIHRoZSBzYW1l IGVsZW1lbnRzIGluIHRoZSBzYW1lIG9yZGVyLgogICAgICAgZm9yICg7IF9fZmlyc3QxICE9 IF9fbGFzdDE7ICsrX19maXJzdDEsICh2b2lkKSsrX19maXJzdDIpCi0JaWYgKCFfX3ByZWQo X19maXJzdDEsIF9fZmlyc3QyKSkKKwlpZiAoIV9fcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0 MikpCiAJICBicmVhazsKIAogICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCkBAIC0y MjE0LDE1ICsyMjEyLDE1IEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfQUxHTwogICAgICAg Zm9yIChfRm9yd2FyZEl0ZXJhdG9yMSBfX3NjYW4gPSBfX2ZpcnN0MTsgX19zY2FuICE9IF9f bGFzdDE7ICsrX19zY2FuKQogCXsKIAkgIGlmIChfX3NjYW4gIT0gc3RkOjpfX2ZpbmRfaWYo X19maXJzdDEsIF9fc2NhbiwKLQkJCSAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBf aXRlcihfX3ByZWQsIF9fc2NhbikpKQorCQkJICBfX2dudV9jeHg6Ol9fb3BzOjpfX2NvbXBf dmFsKF9fcHJlZCwgKl9fc2NhbikpKQogCSAgICBjb250aW51ZTsgLy8gV2UndmUgc2VlbiB0 aGlzIG9uZSBiZWZvcmUuCiAKIAkgIGF1dG8gX19tYXRjaGVzCiAJICAgID0gc3RkOjpfX2Nv dW50X2lmKF9fZmlyc3QyLCBfX2xhc3QyLAotCQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVy X2NvbXBfaXRlcihfX3ByZWQsIF9fc2NhbikpOworCQkJICAgICAgX19nbnVfY3h4OjpfX29w czo6X19jb21wX3ZhbChfX3ByZWQsICpfX3NjYW4pKTsKIAkgIGlmICgwID09IF9fbWF0Y2hl cyB8fAogCSAgICAgIHN0ZDo6X19jb3VudF9pZihfX3NjYW4sIF9fbGFzdDEsCi0JCQlfX2du dV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fcHJlZCwgX19zY2FuKSkKKwkJCSAg ICAgIF9fZ251X2N4eDo6X19vcHM6Ol9fY29tcF92YWwoX19wcmVkLCAqX19zY2FuKSkKIAkg ICAgICAhPSBfX21hdGNoZXMpCiAJICAgIHJldHVybiBmYWxzZTsKIAl9CkBAIC0yMjU2LDcg KzIyNTQsNyBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0FMR08KICAgICAgIF9fZ2xpYmN4 eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MSwgX19sYXN0MSk7CiAKICAgICAgIHJl dHVybiBzdGQ6Ol9faXNfcGVybXV0YXRpb24oX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3Qy LAotCQkJCSAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9lcXVhbF90b19pdGVyKCkpOwor CQkJCSAgIF9fZ251X2N4eDo6X19vcHM6Ol9fZXF1YWxfdG8oKSk7CiAgICAgfQogI2VuZGlm IC8vIEMrKzExCiAKQEAgLTIzMDEsNyArMjI5OSw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVT UEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJz dDIsIF9fbGFzdDIpOwogCiAgICAgICByZXR1cm4gc3RkOjpfX3NlYXJjaChfX2ZpcnN0MSwg X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCi0JCQkgICBfX2dudV9jeHg6Ol9fb3BzOjpf X2l0ZXJfY29tcF9pdGVyKF9fcHJlZGljYXRlKSk7CisJCQkgICBfR0xJQkNYWF9NT1ZFKF9f cHJlZGljYXRlKSk7CiAgICAgfQogCiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0FMR08KZGlm ZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2hlYXAuaCBiL2xpYnN0 ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2hlYXAuaAppbmRleCA1NTFjMzY4NzYyNC4uODU0 ZDFjZmZkNjcgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2hl YXAuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9oZWFwLmgKQEAgLTc0 LDEyICs3NCwxMiBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgIF9H TElCQ1hYMjBfQ09OU1RFWFBSCiAgICAgX0Rpc3RhbmNlCiAgICAgX19pc19oZWFwX3VudGls KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19uLAotCQkgICAg X0NvbXBhcmUmIF9fY29tcCkKKwkJICAgIF9Db21wYXJlIF9fY29tcCkKICAgICB7CiAgICAg ICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOwogICAgICAgZm9yIChfRGlzdGFuY2UgX19jaGls ZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkKIAl7Ci0JICBpZiAoX19jb21wKF9f Zmlyc3QgKyBfX3BhcmVudCwgX19maXJzdCArIF9fY2hpbGQpKQorCSAgaWYgKF9fY29tcChf X2ZpcnN0W19fcGFyZW50XSwgX19maXJzdFtfX2NoaWxkXSkpCiAJICAgIHJldHVybiBfX2No aWxkOwogCSAgaWYgKChfX2NoaWxkICYgMSkgPT0gMCkKIAkgICAgKytfX3BhcmVudDsKQEAg LTk0LDggKzk0LDggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBp bmxpbmUgYm9vbAogICAgIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwgX0Rpc3RhbmNlIF9fbikKICAgICB7Ci0gICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfSXRl cl9sZXNzX2l0ZXIgX19jb21wOwotICAgICAgcmV0dXJuIHN0ZDo6X19pc19oZWFwX3VudGls KF9fZmlyc3QsIF9fbiwgX19jb21wKSA9PSBfX247CisgICAgICByZXR1cm4gc3RkOjpfX2lz X2hlYXBfdW50aWwoX19maXJzdCwgX19uLAorCQkJCSAgX19nbnVfY3h4OjpfX29wczo6X19s ZXNzKCkpID09IF9fbjsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZSwKQEAgLTEwNCw5ICsxMDQsOCBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgIGlubGluZSBib29sCiAgICAg X19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfQ29tcGFyZSBfX2Nv bXAsIF9EaXN0YW5jZSBfX24pCiAgICAgewotICAgICAgdHlwZWRlZiBfX2RlY2x0eXBlKF9f Y29tcCkgX0NtcDsKLSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9JdGVyX2NvbXBfaXRlcjxf Q21wPiBfX2NtcChfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwotICAgICAgcmV0dXJuIHN0ZDo6 X19pc19oZWFwX3VudGlsKF9fZmlyc3QsIF9fbiwgX19jbXApID09IF9fbjsKKyAgICAgIHJl dHVybiBzdGQ6Ol9faXNfaGVhcF91bnRpbChfX2ZpcnN0LCBfX24sCisJCQkJICBfR0xJQkNY WF9NT1ZFKF9fY29tcCkpID09IF9fbjsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgpAQCAtMTM0LDEwICsxMzMsMTAgQEAgX0dMSUJDWFhf QkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICB2b2lkCiAgICAgX19wdXNoX2hlYXAoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAJCV9EaXN0YW5jZSBfX2hvbGVJbmRleCwg X0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLAotCQlfQ29tcGFyZSYgX19jb21w KQorCQlfQ29tcGFyZSBfX2NvbXApCiAgICAgewogICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50 ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwotICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4g X190b3BJbmRleCAmJiBfX2NvbXAoX19maXJzdCArIF9fcGFyZW50LCBfX3ZhbHVlKSkKKyAg ICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKF9fZmlyc3Rb X19wYXJlbnRdLCBfX3ZhbHVlKSkKIAl7CiAJICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkg PSBfR0xJQkNYWF9NT1ZFKCooX19maXJzdCArIF9fcGFyZW50KSk7CiAJICBfX2hvbGVJbmRl eCA9IF9fcGFyZW50OwpAQCAtMTc0LDEwICsxNzMsMTAgQEAgX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX1ZFUlNJT04KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZShf X2ZpcnN0LCBfX2xhc3QpOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2hlYXAoX19maXJz dCwgX19sYXN0IC0gMSk7CiAKLSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9JdGVyX2xlc3Nf dmFsIF9fY29tcDsKICAgICAgIF9WYWx1ZVR5cGUgX192YWx1ZSA9IF9HTElCQ1hYX01PVkUo KihfX2xhc3QgLSAxKSk7CiAgICAgICBzdGQ6Ol9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0 YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksCi0JCSAgICAgICBfRGlzdGFuY2VU eXBlKDApLCBfR0xJQkNYWF9NT1ZFKF9fdmFsdWUpLCBfX2NvbXApOworCQkgICAgICAgX0Rp c3RhbmNlVHlwZSgwKSwgX0dMSUJDWFhfTU9WRShfX3ZhbHVlKSwKKwkJICAgICAgIF9fZ251 X2N4eDo6X19vcHM6Ol9fbGVzcygpKTsKICAgICB9CiAKICAgLyoqCkBAIC0yMTAsMTEgKzIw OSwxMCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgX19nbGli Y3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlX3ByZWQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp OwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2hlYXBfcHJlZChfX2ZpcnN0LCBfX2xhc3Qg LSAxLCBfX2NvbXApOwogCi0gICAgICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6X19vcHM6Ol9f aXRlcl9jb21wX3ZhbChfR0xJQkNYWF9NT1ZFKF9fY29tcCkpKQotCV9fY21wKF9HTElCQ1hY X01PVkUoX19jb21wKSk7CiAgICAgICBfVmFsdWVUeXBlIF9fdmFsdWUgPSBfR0xJQkNYWF9N T1ZFKCooX19sYXN0IC0gMSkpOwogICAgICAgc3RkOjpfX3B1c2hfaGVhcChfX2ZpcnN0LCBf RGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLAotCQkgICAgICAgX0Rpc3Rh bmNlVHlwZSgwKSwgX0dMSUJDWFhfTU9WRShfX3ZhbHVlKSwgX19jbXApOworCQkgICAgICAg X0Rpc3RhbmNlVHlwZSgwKSwgX0dMSUJDWFhfTU9WRShfX3ZhbHVlKSwKKwkJICAgICAgIF9H TElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLApAQCAtMjI5LDggKzIy Nyw4IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICB3aGlsZSAo X19zZWNvbmRDaGlsZCA8IChfX2xlbiAtIDEpIC8gMikKIAl7CiAJICBfX3NlY29uZENoaWxk ID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7Ci0JICBpZiAoX19jb21wKF9fZmlyc3QgKyBf X3NlY29uZENoaWxkLAotCQkgICAgIF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkK KwkgIGlmIChfX2NvbXAoX19maXJzdFtfX3NlY29uZENoaWxkXSwKKwkJICAgICBfX2ZpcnN0 W19fc2Vjb25kQ2hpbGQgLSAxXSkpCiAJICAgIF9fc2Vjb25kQ2hpbGQtLTsKIAkgICooX19m aXJzdCArIF9faG9sZUluZGV4KSA9IF9HTElCQ1hYX01PVkUoKihfX2ZpcnN0ICsgX19zZWNv bmRDaGlsZCkpOwogCSAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwpAQCAtMjQyLDE3 ICsyNDAsMTUgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkJCQkJCSAg ICAgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSk7CiAJICBfX2hvbGVJbmRleCA9IF9fc2Vjb25k Q2hpbGQgLSAxOwogCX0KLSAgICAgIF9fZGVjbHR5cGUoX19nbnVfY3h4OjpfX29wczo6X19p dGVyX2NvbXBfdmFsKF9HTElCQ1hYX01PVkUoX19jb21wKSkpCi0JX19jbXAoX0dMSUJDWFhf TU9WRShfX2NvbXApKTsKICAgICAgIHN0ZDo6X19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xl SW5kZXgsIF9fdG9wSW5kZXgsCi0JCSAgICAgICBfR0xJQkNYWF9NT1ZFKF9fdmFsdWUpLCBf X2NtcCk7CisJCSAgICAgICBfR0xJQkNYWF9NT1ZFKF9fdmFsdWUpLCBfR0xJQkNYWF9NT1ZF KF9fY29tcCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBS CiAgICAgaW5saW5lIHZvaWQKICAgICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAotCSAgICAgICBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9Db21wYXJlJiBfX2NvbXApCisJICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAg IHsKICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl c3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKIAlfVmFsdWVUeXBlOwpAQCAtMjYzLDcgKzI1OSw3 IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICAqX19yZXN1bHQg PSBfR0xJQkNYWF9NT1ZFKCpfX2ZpcnN0KTsKICAgICAgIHN0ZDo6X19hZGp1c3RfaGVhcChf X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogCQkJIF9EaXN0YW5jZVR5cGUoX19sYXN0IC0g X19maXJzdCksCi0JCQkgX0dMSUJDWFhfTU9WRShfX3ZhbHVlKSwgX19jb21wKTsKKwkJCSBf R0xJQkNYWF9NT1ZFKF9fdmFsdWUpLCBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0K IAogICAvKioKQEAgLTI5NSw4ICsyOTEsOCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Vf VkVSU0lPTgogICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogCXsKIAkgIC0tX19s YXN0OwotCSAgX19nbnVfY3h4OjpfX29wczo6X0l0ZXJfbGVzc19pdGVyIF9fY29tcDsKLQkg IHN0ZDo6X19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19jb21wKTsKKwkg IHN0ZDo6X19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwKKwkJCSAgX19nbnVf Y3h4OjpfX29wczo6X19sZXNzKCkpOwogCX0KICAgICB9CiAKQEAgLTMyNywxMCArMzIzLDgg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAogICAgICAgaWYgKF9fbGFz dCAtIF9fZmlyc3QgPiAxKQogCXsKLQkgIHR5cGVkZWYgX19kZWNsdHlwZShfX2NvbXApIF9D bXA7Ci0JICBfX2dudV9jeHg6Ol9fb3BzOjpfSXRlcl9jb21wX2l0ZXI8X0NtcD4gX19jbXAo X0dMSUJDWFhfTU9WRShfX2NvbXApKTsKIAkgIC0tX19sYXN0OwotCSAgc3RkOjpfX3BvcF9o ZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NtcCk7CisJICBzdGQ6Ol9fcG9wX2hl YXAoX19maXJzdCwgX19sYXN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAJ fQogICAgIH0KIApAQCAtMzM4LDcgKzMzMiw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFD RV9WRVJTSU9OCiAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKICAgICB2b2lkCiAgICAgX19t YWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2xhc3QsCi0JCV9Db21wYXJlJiBfX2NvbXApCisJCV9Db21wYXJlIF9fY29t cCkKICAgICB7CiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAJICBfVmFsdWVUeXBlOwpAQCAtMzgy LDggKzM3Niw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBf X2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKICAgICAg IF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZShfX2ZpcnN0LCBfX2xhc3QpOwogCi0g ICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfSXRlcl9sZXNzX2l0ZXIgX19jb21wOwotICAgICAg c3RkOjpfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CisgICAgICBzdGQ6 Ol9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19nbnVfY3h4OjpfX29wczo6X19sZXNz KCkpOwogICAgIH0KIAogICAvKioKQEAgLTQwOCwxNiArNDAxLDE0IEBAIF9HTElCQ1hYX0JF R0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRf cmFuZ2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJl ZmxleGl2ZV9wcmVkKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKIAotICAgICAgdHlwZWRl ZiBfX2RlY2x0eXBlKF9fY29tcCkgX0NtcDsKLSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9J dGVyX2NvbXBfaXRlcjxfQ21wPiBfX2NtcChfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwotICAg ICAgc3RkOjpfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9fY21wKTsKKyAgICAgIHN0 ZDo6X19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LCBfR0xJQkNYWF9NT1ZFKF9fY29tcCkp OwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3Is IHR5cGVuYW1lIF9Db21wYXJlPgogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCiAgICAgdm9p ZAogICAgIF9fc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAotCQlfQ29tcGFyZSYgX19jb21wKQorCQlfQ29t cGFyZSBfX2NvbXApCiAgICAgewogICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAx KQogCXsKQEAgLTQ0OCw4ICs0MzksNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVS U0lPTgogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlKF9fZmlyc3QsIF9f bGFzdCk7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaGVhcChfX2ZpcnN0LCBfX2xhc3Qp OwogCi0gICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfSXRlcl9sZXNzX2l0ZXIgX19jb21wOwot ICAgICAgc3RkOjpfX3NvcnRfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CisgICAg ICBzdGQ6Ol9fc29ydF9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19nbnVfY3h4OjpfX29wczo6 X19sZXNzKCkpOwogICAgIH0KIAogICAvKioKQEAgLTQ3NSw5ICs0NjUsNyBAQCBfR0xJQkNY WF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2ly cmVmbGV4aXZlX3ByZWQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgX19nbGli Y3h4X3JlcXVpcmVzX2hlYXBfcHJlZChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAKLSAg ICAgIHR5cGVkZWYgX19kZWNsdHlwZShfX2NvbXApIF9DbXA7Ci0gICAgICBfX2dudV9jeHg6 Ol9fb3BzOjpfSXRlcl9jb21wX2l0ZXI8X0NtcD4gX19jbXAoX0dMSUJDWFhfTU9WRShfX2Nv bXApKTsKLSAgICAgIHN0ZDo6X19zb3J0X2hlYXAoX19maXJzdCwgX19sYXN0LCBfX2NtcCk7 CisgICAgICBzdGQ6Ol9fc29ydF9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX0dMSUJDWFhfTU9W RShfX2NvbXApKTsKICAgICB9CiAKICNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCkBAIC01 MDQsOSArNDkyLDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAg IF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogICAg ICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlKF9fZmlyc3QsIF9fbGFzdCk7CiAK LSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9JdGVyX2xlc3NfaXRlciBfX2NvbXA7CiAgICAg ICByZXR1cm4gX19maXJzdCArIAotCXN0ZDo6X19pc19oZWFwX3VudGlsKF9fZmlyc3QsIHN0 ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KSwgX19jb21wKTsKKwlzdGQ6Ol9faXNfaGVh cF91bnRpbChfX2ZpcnN0LCBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCksCisJCQkg ICAgIF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcygpKTsKICAgICB9CiAKICAgLyoqCkBAIC01 MzIsMTAgKzUyMCw5IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAg ICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKICAg ICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkKF9fZmlyc3QsIF9fbGFz dCwgX19jb21wKTsKIAotICAgICAgdHlwZWRlZiBfX2RlY2x0eXBlKF9fY29tcCkgX0NtcDsK LSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9JdGVyX2NvbXBfaXRlcjxfQ21wPiBfX2NtcChf R0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgICAgcmV0dXJuIF9fZmlyc3QKLQkrIHN0ZDo6 X19pc19oZWFwX3VudGlsKF9fZmlyc3QsIHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0 KSwgX19jbXApOworCSsgc3RkOjpfX2lzX2hlYXBfdW50aWwoX19maXJzdCwgc3RkOjpkaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QpLAorCQkJICAgICAgIF9HTElCQ1hYX01PVkUoX19jb21w KSk7CiAgICAgfQogCiAgIC8qKgpAQCAtNTcyLDkgKzU1OSw4IEBAIF9HTElCQ1hYX0JFR0lO X05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhp dmVfcHJlZChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAKICAgICAgIGNvbnN0IGF1dG8g X19kaXN0ID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwotICAgICAgdHlwZWRl ZiBfX2RlY2x0eXBlKF9fY29tcCkgX0NtcDsKLSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9J dGVyX2NvbXBfaXRlcjxfQ21wPiBfX2NtcChfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwotICAg ICAgcmV0dXJuIHN0ZDo6X19pc19oZWFwX3VudGlsKF9fZmlyc3QsIF9fZGlzdCwgX19jbXAp ID09IF9fZGlzdDsKKyAgICAgIHJldHVybiBzdGQ6Ol9faXNfaGVhcF91bnRpbChfX2ZpcnN0 LCBfX2Rpc3QsCisJCQkJICBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpID09IF9fZGlzdDsKICAg ICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL2Rl cXVlIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL2RlcXVlCmluZGV4IGU0OGRjOTk2OGU4 Li5lYmNhNjNkYzFkYSAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL2Rl cXVlCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9kZXF1ZQpAQCAtNjQsNyArNjQs NyBAQAogI2luY2x1ZGUgPGJpdHMvc3RsX2NvbnN0cnVjdC5oPgogI2luY2x1ZGUgPGJpdHMv c3RsX3VuaW5pdGlhbGl6ZWQuaD4KICNpbmNsdWRlIDxiaXRzL3N0bF9kZXF1ZS5oPgotI2lu Y2x1ZGUgPGJpdHMvcmVmd3JhcC5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPgogI2luY2x1 ZGUgPGJpdHMvcmFuZ2VfYWNjZXNzLmg+CiAjaW5jbHVkZSA8Yml0cy9kZXF1ZS50Y2M+CiAK QEAgLTk5LDEyICs5OSwxMSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgog ICAgIGlubGluZSB0eXBlbmFtZSBkZXF1ZTxfVHAsIF9BbGxvYz46OnNpemVfdHlwZQogICAg IGVyYXNlX2lmKGRlcXVlPF9UcCwgX0FsbG9jPiYgX19jb250LCBfUHJlZGljYXRlIF9fcHJl ZCkKICAgICB7Ci0gICAgICB1c2luZyBuYW1lc3BhY2UgX19nbnVfY3h4OwogICAgICAgX0dM SUJDWFhfU1REX0M6OmRlcXVlPF9UcCwgX0FsbG9jPiYgX191Y29udCA9IF9fY29udDsKICAg ICAgIGNvbnN0IGF1dG8gX19vc3ogPSBfX2NvbnQuc2l6ZSgpOwogICAgICAgY29uc3QgYXV0 byBfX2VuZCA9IF9fdWNvbnQuZW5kKCk7CiAgICAgICBhdXRvIF9fcmVtb3ZlZCA9IHN0ZDo6 X19yZW1vdmVfaWYoX191Y29udC5iZWdpbigpLCBfX2VuZCwKLQkJCQkJX19vcHM6Ol9fcHJl ZF9pdGVyKHN0ZDo6cmVmKF9fcHJlZCkpKTsKKwkJCQkJc3RkOjptb3ZlKF9fcHJlZCkpOwog ICAgICAgaWYgKF9fcmVtb3ZlZCAhPSBfX2VuZCkKIAl7CiAJICBfX2NvbnQuZXJhc2UoX19u aXRlcl93cmFwKF9fY29udC5iZWdpbigpLCBfX3JlbW92ZWQpLApAQCAtMTI0LDcgKzEyMyw3 IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBjb25zdCBhdXRv IF9fb3N6ID0gX19jb250LnNpemUoKTsKICAgICAgIGNvbnN0IGF1dG8gX19lbmQgPSBfX3Vj b250LmVuZCgpOwogICAgICAgYXV0byBfX3JlbW92ZWQgPSBzdGQ6Ol9fcmVtb3ZlX2lmKF9f dWNvbnQuYmVnaW4oKSwgX19lbmQsCi0JCQkJCV9fb3BzOjpfX2l0ZXJfZXF1YWxzX3ZhbChf X3ZhbHVlKSk7CisJCQkJCV9fb3BzOjpfX2VxdWFsX3RvKF9fdmFsdWUpKTsKICAgICAgIGlm IChfX3JlbW92ZWQgIT0gX19lbmQpCiAJewogCSAgX19jb250LmVyYXNlKF9fbml0ZXJfd3Jh cChfX2NvbnQuYmVnaW4oKSwgX19yZW1vdmVkKSwKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12 My9pbmNsdWRlL3N0ZC9mdW5jdGlvbmFsIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL2Z1 bmN0aW9uYWwKaW5kZXggNzI5ZDExYzk4MDQuLjJkOGI4MDZmYTBkIDEwMDY0NAotLS0gYS9s aWJzdGRjKystdjMvaW5jbHVkZS9zdGQvZnVuY3Rpb25hbAorKysgYi9saWJzdGRjKystdjMv aW5jbHVkZS9zdGQvZnVuY3Rpb25hbApAQCAtNTgsNiArNTgsOSBAQAogI2lmIF9HTElCQ1hY X0hPU1RFRAogIyBpbmNsdWRlIDxiaXRzL3N0ZF9mdW5jdGlvbi5oPgkvLyBzdGQ6OmZ1bmN0 aW9uCiAjZW5kaWYKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDE0MDJMCisjIGluY2x1ZGUgPGJp dHMvcHJlZGVmaW5lZF9vcHMuaD4gLy8gc3RkOjpfTm90X2ZuCisjZW5kaWYKICNpZiBfX2Nw bHVzcGx1cyA+PSAyMDE3MDNMCiAjIGlmIF9HTElCQ1hYX0hPU1RFRAogIyAgaW5jbHVkZSA8 dW5vcmRlcmVkX21hcD4KQEAgLTEwMzksNTcgKzEwNDIsNiBAQCBfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfVkVSU0lPTgogI2VuZGlmIC8vIF9fY3BwX2xpYl9iaW5kX2Zyb250CiAKICNp ZiBfX2NwbHVzcGx1cyA+PSAyMDE0MDJMCi0gIC8vLyBHZW5lcmFsaXplZCBuZWdhdG9yLgot ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4+Ci0gICAgY2xhc3MgX05vdF9mbgotICAgIHsKLSAg ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GbjIsIHR5cGVuYW1lLi4uIF9BcmdzPgotCXVzaW5n IF9faW52X3Jlc190ID0gdHlwZW5hbWUgX19pbnZva2VfcmVzdWx0PF9GbjIsIF9BcmdzLi4u Pjo6dHlwZTsKLQotICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgotCXN0YXRpYyBkZWNs dHlwZSghc3RkOjpkZWNsdmFsPF9UcD4oKSkKLQlfU19ub3QoKSBub2V4Y2VwdChub2V4Y2Vw dCghc3RkOjpkZWNsdmFsPF9UcD4oKSkpOwotCi0gICAgcHVibGljOgotICAgICAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZuMj4KLQljb25zdGV4cHIKLQlfTm90X2ZuKF9GbjImJiBfX2ZuLCBp bnQpCi0JOiBfTV9mbihzdGQ6OmZvcndhcmQ8X0ZuMj4oX19mbikpIHsgfQotCi0gICAgICBf Tm90X2ZuKGNvbnN0IF9Ob3RfZm4mIF9fZm4pID0gZGVmYXVsdDsKLSAgICAgIF9Ob3RfZm4o X05vdF9mbiYmIF9fZm4pID0gZGVmYXVsdDsKLSAgICAgIH5fTm90X2ZuKCkgPSBkZWZhdWx0 OwotCi0gICAgICAvLyBNYWNybyB0byBkZWZpbmUgb3BlcmF0b3IoKSB3aXRoIGdpdmVuIGN2 LXF1YWxpZmllcnMgcmVmLXF1YWxpZmllcnMsCi0gICAgICAvLyBmb3J3YXJkaW5nIF9NX2Zu IGFuZCB0aGUgZnVuY3Rpb24gYXJndW1lbnRzIHdpdGggdGhlIHNhbWUgcXVhbGlmaWVycywK LSAgICAgIC8vIGFuZCBkZWR1Y2luZyB0aGUgcmV0dXJuIHR5cGUgYW5kIGV4Y2VwdGlvbi1z cGVjaWZpY2F0aW9uLgotI2RlZmluZSBfR0xJQkNYWF9OT1RfRk5fQ0FMTF9PUCggX1FVQUxT ICkJCQkJXAotICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3MsCQkJCQlcCi0JICAg ICAgIHR5cGVuYW1lID0gZW5hYmxlX2lmX3Q8X19pc19pbnZvY2FibGU8X0ZuIF9RVUFMUywg X0FyZ3MuLi4+Ojp2YWx1ZT4+IFwKLQlfR0xJQkNYWDIwX0NPTlNURVhQUgkJCQkJCVwKLQlk ZWNsdHlwZShfU19ub3Q8X19pbnZfcmVzX3Q8X0ZuIF9RVUFMUywgX0FyZ3MuLi4+PigpKQkJ XAotCW9wZXJhdG9yKCkoX0FyZ3MmJi4uLiBfX2FyZ3MpIF9RVUFMUwkJCQlcCi0Jbm9leGNl cHQoX19pc19ub3Rocm93X2ludm9jYWJsZTxfRm4gX1FVQUxTLCBfQXJncy4uLj46OnZhbHVl CVwKLQkgICAgJiYgbm9leGNlcHQoX1Nfbm90PF9faW52X3Jlc190PF9GbiBfUVVBTFMsIF9B cmdzLi4uPj4oKSkpCVwKLQl7CQkJCQkJCQlcCi0JICByZXR1cm4gIXN0ZDo6X19pbnZva2Uo c3RkOjpmb3J3YXJkPCBfRm4gX1FVQUxTID4oX01fZm4pLAlcCi0JCQkJc3RkOjpmb3J3YXJk PF9BcmdzPihfX2FyZ3MpLi4uKTsJXAotCX0JCQkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICAg IHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzLAkJCQkJXAotCSAgICAgICB0eXBlbmFtZSA9 IGVuYWJsZV9pZl90PCFfX2lzX2ludm9jYWJsZTxfRm4gX1FVQUxTLCBfQXJncy4uLj46OnZh bHVlPj4gXAotCXZvaWQgb3BlcmF0b3IoKShfQXJncyYmLi4uIF9fYXJncykgX1FVQUxTID0g ZGVsZXRlOwotCi0gICAgICBfR0xJQkNYWF9OT1RfRk5fQ0FMTF9PUCggJiApCi0gICAgICBf R0xJQkNYWF9OT1RfRk5fQ0FMTF9PUCggY29uc3QgJiApCi0gICAgICBfR0xJQkNYWF9OT1Rf Rk5fQ0FMTF9PUCggJiYgKQotICAgICAgX0dMSUJDWFhfTk9UX0ZOX0NBTExfT1AoIGNvbnN0 ICYmICkKLSN1bmRlZiBfR0xJQkNYWF9OT1RfRk5fQ0FMTF9PUAotCi0gICAgcHJpdmF0ZToK LSAgICAgIF9GbiBfTV9mbjsKLSAgICB9OwotCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg dHlwZW5hbWUgX1ByZWQ+CiAgICAgc3RydWN0IF9faXNfYnl0ZV9saWtlIDogZmFsc2VfdHlw ZSB7IH07CiAKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9zdHJpbmcg Yi9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQvc3RyaW5nCmluZGV4IDc4ZThiYWNjMDA3Li5h ZjJhN2VmOGNhMSAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL3N0cmlu ZworKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQvc3RyaW5nCkBAIC00OSw3ICs0OSw3 IEBACiAjaW5jbHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4gLy8gRm9yIGxlc3MKICNpbmNs dWRlIDxleHQvbnVtZXJpY190cmFpdHMuaD4KICNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFz ZS5oPgotI2luY2x1ZGUgPGJpdHMvcmVmd3JhcC5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5o PgogI2luY2x1ZGUgPGJpdHMvcmFuZ2VfYWNjZXNzLmg+CiAjaW5jbHVkZSA8Yml0cy9iYXNp Y19zdHJpbmcuaD4KICNpbmNsdWRlIDxiaXRzL2Jhc2ljX3N0cmluZy50Y2M+CkBAIC05NSwx MSArOTUsMTAgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBpbmxp bmUgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6 ZV90eXBlCiAgICAgZXJhc2VfaWYoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19jb250LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgICB7Ci0gICAgICB1c2luZyBu YW1lc3BhY2UgX19nbnVfY3h4OwogICAgICAgY29uc3QgYXV0byBfX29zeiA9IF9fY29udC5z aXplKCk7CiAgICAgICBjb25zdCBhdXRvIF9fZW5kID0gX19jb250LmVuZCgpOwogICAgICAg YXV0byBfX3JlbW92ZWQgPSBzdGQ6Ol9fcmVtb3ZlX2lmKF9fY29udC5iZWdpbigpLCBfX2Vu ZCwKLQkJCQkJX19vcHM6Ol9fcHJlZF9pdGVyKHN0ZDo6cmVmKF9fcHJlZCkpKTsKKwkJCQkJ c3RkOjptb3ZlKF9fcHJlZCkpOwogICAgICAgX19jb250LmVyYXNlKF9fcmVtb3ZlZCwgX19l bmQpOwogICAgICAgcmV0dXJuIF9fb3N6IC0gX19jb250LnNpemUoKTsKICAgICB9CkBAIC0x MTMsNyArMTEyLDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAg IGNvbnN0IGF1dG8gX19vc3ogPSBfX2NvbnQuc2l6ZSgpOwogICAgICAgY29uc3QgYXV0byBf X2VuZCA9IF9fY29udC5lbmQoKTsKICAgICAgIGF1dG8gX19yZW1vdmVkID0gc3RkOjpfX3Jl bW92ZV9pZihfX2NvbnQuYmVnaW4oKSwgX19lbmQsCi0JCQkJCV9fb3BzOjpfX2l0ZXJfZXF1 YWxzX3ZhbChfX3ZhbHVlKSk7CisJCQkJCV9fb3BzOjpfX2VxdWFsX3RvKF9fdmFsdWUpKTsK ICAgICAgIF9fY29udC5lcmFzZShfX3JlbW92ZWQsIF9fZW5kKTsKICAgICAgIHJldHVybiBf X29zeiAtIF9fY29udC5zaXplKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYz L2luY2x1ZGUvc3RkL3ZlY3RvciBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC92ZWN0b3IK aW5kZXggNWUxZDU0YTA0YWMuLjJkZmM3YjQ3OThlIDEwMDY0NAotLS0gYS9saWJzdGRjKyst djMvaW5jbHVkZS9zdGQvdmVjdG9yCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC92 ZWN0b3IKQEAgLTY1LDcgKzY1LDcgQEAKICNpbmNsdWRlIDxiaXRzL3N0bF91bmluaXRpYWxp emVkLmg+CiAjaW5jbHVkZSA8Yml0cy9zdGxfdmVjdG9yLmg+CiAjaW5jbHVkZSA8Yml0cy9z dGxfYnZlY3Rvci5oPgotI2luY2x1ZGUgPGJpdHMvcmVmd3JhcC5oPgorI2luY2x1ZGUgPGJp dHMvbW92ZS5oPgogI2luY2x1ZGUgPGJpdHMvcmFuZ2VfYWNjZXNzLmg+CiAKICNpZm5kZWYg X0dMSUJDWFhfRVhQT1JUX1RFTVBMQVRFCkBAIC0xMTIsMTIgKzExMiwxMSBAQCBfR0xJQkNY WF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgIGlubGluZSB0eXBlbmFtZSB2ZWN0b3I8 X1RwLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgICBlcmFzZV9pZih2ZWN0b3I8X1RwLCBfQWxs b2M+JiBfX2NvbnQsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgIHsKLSAgICAgIHVzaW5nIG5h bWVzcGFjZSBfX2dudV9jeHg7CiAgICAgICBfR0xJQkNYWF9TVERfQzo6dmVjdG9yPF9UcCwg X0FsbG9jPiYgX191Y29udCA9IF9fY29udDsKICAgICAgIGNvbnN0IGF1dG8gX19vc3ogPSBf X2NvbnQuc2l6ZSgpOwogICAgICAgY29uc3QgYXV0byBfX2VuZCA9IF9fdWNvbnQuZW5kKCk7 CiAgICAgICBhdXRvIF9fcmVtb3ZlZCA9IHN0ZDo6X19yZW1vdmVfaWYoX191Y29udC5iZWdp bigpLCBfX2VuZCwKLQkJCQkJX19vcHM6Ol9fcHJlZF9pdGVyKHN0ZDo6cmVmKF9fcHJlZCkp KTsKKwkJCQkJc3RkOjptb3ZlKF9fcHJlZCkpOwogICAgICAgaWYgKF9fcmVtb3ZlZCAhPSBf X2VuZCkKIAl7CiAJICBfX2NvbnQuZXJhc2UoX19uaXRlcl93cmFwKF9fY29udC5iZWdpbigp LCBfX3JlbW92ZWQpLApAQCAtMTM4LDcgKzEzNyw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVT UEFDRV9WRVJTSU9OCiAgICAgICBjb25zdCBhdXRvIF9fb3N6ID0gX19jb250LnNpemUoKTsK ICAgICAgIGNvbnN0IGF1dG8gX19lbmQgPSBfX3Vjb250LmVuZCgpOwogICAgICAgYXV0byBf X3JlbW92ZWQgPSBzdGQ6Ol9fcmVtb3ZlX2lmKF9fdWNvbnQuYmVnaW4oKSwgX19lbmQsCi0J CQkJCV9fb3BzOjpfX2l0ZXJfZXF1YWxzX3ZhbChfX3ZhbHVlKSk7CisJCQkJCV9fb3BzOjpf X2VxdWFsX3RvKF9fdmFsdWUpKTsKICAgICAgIGlmIChfX3JlbW92ZWQgIT0gX19lbmQpCiAJ ewogCSAgX19jb250LmVyYXNlKF9fbml0ZXJfd3JhcChfX2NvbnQuYmVnaW4oKSwgX19yZW1v dmVkKSwK --------------EKbbnkOS5XpO0VTCO1tyZkok--