From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 110407 invoked by alias); 25 Feb 2020 14:27:59 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 110399 invoked by uid 89); 25 Feb 2020 14:27:58 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-24.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LOTSOFHASH,RCVD_IN_DNSWL_LOW,SCC_5_SHORT_WORD_LINES autolearn=ham version=3.3.1 spammy=35000, 5407, cosmetic X-HELO: eggs.gnu.org Received: from eggs.gnu.org (HELO eggs.gnu.org) (209.51.188.92) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 25 Feb 2020 14:27:48 +0000 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6bBV-00061r-WD for gcc-patches@gcc.gnu.org; Tue, 25 Feb 2020 09:27:45 -0500 Received: from foss.arm.com ([217.140.110.172]:59542) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1j6bBV-00061Q-LS for gcc-patches@gcc.gnu.org; Tue, 25 Feb 2020 09:27:41 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DB32431B; Tue, 25 Feb 2020 06:24:38 -0800 (PST) Received: from [10.2.78.84] (e121093-lin.cambridge.arm.com [10.2.78.84]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1953A3F703; Tue, 25 Feb 2020 06:24:37 -0800 (PST) Subject: Re: [GCC][PATCH][AArch64] Add bfloat16 vldn/vstn intrinsics To: gcc-patches@gcc.gnu.org, Richard.Earnshaw@arm.com, Kyrylo.Tkachov@arm.com, richard.sandiford@arm.com References: <7928d8c8-8976-47ad-bb24-848bfb84c5b9@VE1EUR03FT042.eop-EUR03.prod.protection.outlook.com> From: Mihail Ionescu Message-ID: <1d980ad1-e7c7-9266-4af5-874282999316@foss.arm.com> Date: Tue, 25 Feb 2020 14:27:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------652D109011D2B0311B6010CE" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 217.140.110.172 X-IsSubscribed: yes X-SW-Source: 2020-02/txt/msg01393.txt.bz2 This is a multi-part message in MIME format. --------------652D109011D2B0311B6010CE Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable Content-length: 3877 Hi Richard, On 02/18/2020 05:06 PM, Richard Sandiford wrote: > Thanks. When trying a bootstrap locally I get: >=20 > include/arm_neon.h:34709:38: error: cannot convert =E2=80=98const __bf16*= =E2=80=99 to =E2=80=98const __fp16*=E2=80=99 > 34709 | __o =3D __builtin_aarch64_ld1x2v4hf ((const __builtin_aarch64_s= imd_bf *) __a); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~= ~~~~~~~~~~~~ > | | > | const __bf16* >=20 > I think the affected lines are: >=20 > Mihail Ionescu writes: >> +__extension__ extern __inline bfloat16x4x2_t >> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) >> +vld1_bf16_x2 (const bfloat16_t *__a) >> +{ >> + bfloat16x4x2_t ret; >> + __builtin_aarch64_simd_oi __o; >> + __o =3D __builtin_aarch64_ld1x2v4hf ((const __builtin_aarch64_simd_bf= *) __a); >=20 > bf rather than hf here (the error above). >=20 >> + ret.val[0] =3D (bfloat16x4_t) __builtin_aarch64_get_dregoiv4bf (__o, = 0); >> + ret.val[1] =3D (bfloat16x4_t) __builtin_aarch64_get_dregoiv4bf (__o, = 1); >> + return ret; >> +} >> [...] >> +__extension__ extern __inline bfloat16x4x2_t >> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) >> +vld2_dup_bf16 (const bfloat16_t * __a) >> +{ >> + bfloat16x4x2_t ret; >> + __builtin_aarch64_simd_oi __o; >> + __o =3D __builtin_aarch64_ld2rv4bf ((const __builtin_aarch64_simd_bf = *) __a); >> + ret.val[0] =3D (bfloat16x4_t) __builtin_aarch64_get_dregoiv4hf (__o, = 0); >=20 > Here too (although the choice is cosmetic). >=20 >> + ret.val[1] =3D (bfloat16x4_t) __builtin_aarch64_get_dregoiv4bf (__o, = 1); >> + return ret; >> +} >> + >> +__extension__ extern __inline bfloat16x8x2_t >> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) >> +vld2q_dup_bf16 (const bfloat16_t * __a) >> +{ >> + bfloat16x8x2_t ret; >> + __builtin_aarch64_simd_oi __o; >> + __o =3D __builtin_aarch64_ld2rv8bf ((const __builtin_aarch64_simd_bf = *) __a); >> + ret.val[0] =3D (bfloat16x8_t) __builtin_aarch64_get_qregoiv8hf (__o, = 0); >=20 > Same here (again cosmetic). >=20 >> + ret.val[1] =3D (bfloat16x8_t) __builtin_aarch64_get_qregoiv8bf (__o, = 1); >> + return ret; >> +} >> [...] >> +__extension__ extern __inline void >> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) >> +vst1_bf16_x3 (bfloat16_t * __a, bfloat16x4x3_t __val) >> +{ >> + __builtin_aarch64_simd_ci __o; >> + bfloat16x8x3_t __temp; >> + __temp.val[0] =3D vcombine_bf16 (__val.val[0], vcreate_bf16 (__AARCH6= 4_UINT64_C (0))); >> + __temp.val[1] =3D vcombine_bf16 (__val.val[1], vcreate_bf16 (__AARCH6= 4_UINT64_C (0))); >> + __temp.val[2] =3D vcombine_bf16 (__val.val[2], vcreate_bf16 (__AARCH6= 4_UINT64_C (0))); >> + __o =3D __builtin_aarch64_set_qregciv8bf (__o, (bfloat16x8_t) __temp.= val[0], 0); >> + __o =3D __builtin_aarch64_set_qregciv8bf (__o, (bfloat16x8_t) __temp.= val[1], 1); >> + __o =3D __builtin_aarch64_set_qregciv8bf (__o, (bfloat16x8_t) __temp.= val[2], 2); >> + __builtin_aarch64_st1x3v4hf ((__builtin_aarch64_simd_bf *) __a, __o); >=20 > Here too, to avoid: >=20 > include/arm_neon.h:35000:32: error: cannot convert =E2=80=98__bf16*=E2=80= =99 to =E2=80=98__fp16*=E2=80=99 > 35000 | __builtin_aarch64_st1x3v4hf ((__builtin_aarch64_simd_bf *) __a,= __o); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > | | > | __bf16* >=20 > Looks good otherwise. I guess this shows we should be running the > intrinsics tests for C++ as well as C (in general, not just for this patc= h). >=20 > Richard >=20 Thanks for pointing this out. I've updated the patch with the fixes. The ChangeLog is the same. Regards, Mihail --------------652D109011D2B0311B6010CE Content-Type: text/plain; charset=UTF-8; name="diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="diff" Content-length: 40309 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWJ1aWx0 aW5zLmMgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1idWlsdGlucy5j CmluZGV4IDMzMjQ1ZTRiODc5MzRiNzgzY2NmZTVjODUxMmJhMzc1YmE4MGIz MjkuLjc0ZmNjZTgzNTUwMzg5OTNmYjY2OTg2Y2U1Mzg1ZDZiNGVlMWYwYzYg MTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWJ1aWx0 aW5zLmMKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtYnVpbHRp bnMuYwpAQCAtMzcwLDYgKzM3MCwxMiBAQCBhYXJjaDY0X3R5cGVzX3N0b3Jl c3RydWN0X2xhbmVfcXVhbGlmaWVyc1tTSU1EX01BWF9CVUlMVElOX0FSR1Nd CiAjZGVmaW5lIFZBUjE0KFQsIFgsIE1BUCwgQSwgQiwgQywgRCwgRSwgRiwg RywgSCwgSSwgSiwgSywgTCwgTSwgTikgXAogICBWQVIxMyAoVCwgWCwgTUFQ LCBBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNKSBcCiAg IFZBUjEgKFQsIFgsIE1BUCwgTikKKyNkZWZpbmUgVkFSMTUoVCwgWCwgTUFQ LCBBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNLCBOLCBP KSBcCisgIFZBUjE0IChULCBYLCBNQVAsIEEsIEIsIEMsIEQsIEUsIEYsIEcs IEgsIEksIEosIEssIEwsIE0sIE4pIFwKKyAgVkFSMSAoVCwgWCwgTUFQLCBP KQorI2RlZmluZSBWQVIxNihULCBYLCBNQVAsIEEsIEIsIEMsIEQsIEUsIEYs IEcsIEgsIEksIEosIEssIEwsIE0sIE4sIE8sIFApIFwKKyAgVkFSMTUgKFQs IFgsIE1BUCwgQSwgQiwgQywgRCwgRSwgRiwgRywgSCwgSSwgSiwgSywgTCwg TSwgTiwgTykgXAorICBWQVIxIChULCBYLCBNQVAsIFApCiAKICNpbmNsdWRl ICJhYXJjaDY0LWJ1aWx0aW4taXRlcmF0b3JzLmgiCiAKQEAgLTUzNCw2ICs1 NDAsNyBAQCBjb25zdCBjaGFyICphYXJjaDY0X3NjYWxhcl9idWlsdGluX3R5 cGVzW10gPSB7CiAgICJfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIiwKICAg Il9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kiLAogICAiX19idWlsdGluX2Fh cmNoNjRfc2ltZF94aSIsCisgICJfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2Jm IiwKICAgTlVMTAogfTsKIApAQCAtODQ3LDYgKzg1NCw4IEBAIGFhcmNoNjRf aW5pdF9zaW1kX2J1aWx0aW5fc2NhbGFyX3R5cGVzICh2b2lkKQogCQkJCQkg ICAgICJfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3BvbHkxMjgiKTsKICAgKCps YW5nX2hvb2tzLnR5cGVzLnJlZ2lzdGVyX2J1aWx0aW5fdHlwZSkgKGludFRJ X3R5cGVfbm9kZSwKIAkJCQkJICAgICAiX19idWlsdGluX2FhcmNoNjRfc2lt ZF90aSIpOworICAoKmxhbmdfaG9va3MudHlwZXMucmVnaXN0ZXJfYnVpbHRp bl90eXBlKSAoYWFyY2g2NF9iZjE2X3R5cGVfbm9kZSwKKwkJCQkJICAgICAi X19idWlsdGluX2FhcmNoNjRfc2ltZF9iZiIpOwogICAvKiBVbnNpZ25lZCBp bnRlZ2VyIHR5cGVzIGZvciB2YXJpb3VzIG1vZGUgc2l6ZXMuICAqLwogICAo KmxhbmdfaG9va3MudHlwZXMucmVnaXN0ZXJfYnVpbHRpbl90eXBlKSAodW5z aWduZWRfaW50UUlfdHlwZV9ub2RlLAogCQkJCQkgICAgICJfX2J1aWx0aW5f YWFyY2g2NF9zaW1kX3VxaSIpOwpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9h YXJjaDY0L2FybV9uZW9uLmggYi9nY2MvY29uZmlnL2FhcmNoNjQvYXJtX25l b24uaAppbmRleCAzY2MzYWNlODNmYWJmMjVkOGUyZTZlNzAzODJkMzM1YWZk OTc0MjkwLi45ZDI3ZmJiOWNhNDdjMjFiNWVlYjY2NmQ3Y2NjMTNmYmI5NGZk Yjg3IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYXJtX25lb24u aAorKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYXJtX25lb24uaApAQCAtNzYs NiArNzYsMzYgQEAgdHlwZWRlZiBkb3VibGUgZmxvYXQ2NF90OwogdHlwZWRl ZiBfX0JmbG9hdDE2eDRfdCBiZmxvYXQxNng0X3Q7CiB0eXBlZGVmIF9fQmZs b2F0MTZ4OF90IGJmbG9hdDE2eDhfdDsKIAordHlwZWRlZiBzdHJ1Y3QgYmZs b2F0MTZ4NHgyX3QKK3sKKyAgYmZsb2F0MTZ4NF90IHZhbFsyXTsKK30gYmZs b2F0MTZ4NHgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGJmbG9hdDE2eDh4Ml90 Cit7CisgIGJmbG9hdDE2eDhfdCB2YWxbMl07Cit9IGJmbG9hdDE2eDh4Ml90 OworCit0eXBlZGVmIHN0cnVjdCBiZmxvYXQxNng0eDNfdAoreworICBiZmxv YXQxNng0X3QgdmFsWzNdOworfSBiZmxvYXQxNng0eDNfdDsKKwordHlwZWRl ZiBzdHJ1Y3QgYmZsb2F0MTZ4OHgzX3QKK3sKKyAgYmZsb2F0MTZ4OF90IHZh bFszXTsKK30gYmZsb2F0MTZ4OHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGJm bG9hdDE2eDR4NF90Cit7CisgIGJmbG9hdDE2eDRfdCB2YWxbNF07Cit9IGJm bG9hdDE2eDR4NF90OworCit0eXBlZGVmIHN0cnVjdCBiZmxvYXQxNng4eDRf dAoreworICBiZmxvYXQxNng4X3QgdmFsWzRdOworfSBiZmxvYXQxNng4eDRf dDsKKwogdHlwZWRlZiBzdHJ1Y3QgaW50OHg4eDJfdAogewogICBpbnQ4eDhf dCB2YWxbMl07CkBAIC0zNDY0OSw2ICszNDY3OSwxMyBAQCB2Y3JlYXRlX2Jm MTYgKHVpbnQ2NF90IF9fYSkKICAgcmV0dXJuIChiZmxvYXQxNng0X3QpIF9f YTsKIH0KIAorX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgYmZsb2F0 MTZ4OF90CitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9f Z251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2Y29tYmluZV9iZjE2 IChiZmxvYXQxNng0X3QgX19hLCBiZmxvYXQxNng0X3QgX19iKQoreworICBy ZXR1cm4gKGJmbG9hdDE2eDhfdClfX2J1aWx0aW5fYWFyY2g2NF9jb21iaW5l djRiZiAoX19hLCBfX2IpOworfQorCiAvKiB2ZHVwICovCiAKIF9fZXh0ZW5z aW9uX18gZXh0ZXJuIF9faW5saW5lIGJmbG9hdDE2eDRfdApAQCAtMzQ3MDcs NiArMzQ3NDQsNDQ4IEBAIHZkdXBoX2xhbmVxX2JmMTYgKGJmbG9hdDE2eDhf dCBfX2EsIGNvbnN0IGludCBfX2IpCiAgIHJldHVybiBfX2FhcmNoNjRfdmdl dF9sYW5lX2FueSAoX19hLCBfX2IpOwogfQogCisvKiB2bGQgKi8KKworX19l eHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgYmZsb2F0MTZ4NF90CitfX2F0 dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9f LCBfX2FydGlmaWNpYWxfXykpCit2bGQxX2JmMTYgKGNvbnN0IGJmbG9hdDE2 X3QgKl9fYSkKK3sKKyAgcmV0dXJuIChiZmxvYXQxNng0X3QpIF9fYnVpbHRp bl9hYXJjaDY0X2xkMXY0YmYgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18g ZXh0ZXJuIF9faW5saW5lIGJmbG9hdDE2eDhfdAorX19hdHRyaWJ1dGVfXyAo KF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQordmxkMXFfYmYxNiAoY29uc3QgYmZsb2F0MTZfdCAqX19hKQor eworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfbGQxdjhiZiAoX19hKTsK K30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgYmZsb2F0MTZ4 NHgyX3QKK19fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19n bnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZsZDFfYmYxNl94MiAo Y29uc3QgYmZsb2F0MTZfdCAqX19hKQoreworICBiZmxvYXQxNng0eDJfdCBy ZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28g PSBfX2J1aWx0aW5fYWFyY2g2NF9sZDF4MnY0YmYgKChjb25zdCBfX2J1aWx0 aW5fYWFyY2g2NF9zaW1kX2JmICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAo YmZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ29pdjRi ZiAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChiZmxvYXQxNng0X3QpIF9f YnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnb2l2NGJmIChfX28sIDEpOworICBy ZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu ZSBiZmxvYXQxNng4eDJfdAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lu bGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordmxk MXFfYmYxNl94MiAoY29uc3QgYmZsb2F0MTZfdCAqX19hKQoreworICBiZmxv YXQxNng4eDJfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kg X19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDF4MnY4YmYgKChj b25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2JmICopIF9fYSk7CisgIHJl dC52YWxbMF0gPSAoYmZsb2F0MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9n ZXRfcXJlZ29pdjhiZiAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChiZmxv YXQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnb2l2OGJmIChf X28sIDEpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIGV4 dGVybiBfX2lubGluZSBiZmxvYXQxNng0eDNfdAorX19hdHRyaWJ1dGVfXyAo KF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQordmxkMV9iZjE2X3gzIChjb25zdCBiZmxvYXQxNl90ICpfX2Ep Cit7CisgIGJmbG9hdDE2eDR4M190IF9faTsKKyAgX19idWlsdGluX2FhcmNo NjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xk MXgzdjRiZiAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfYmYgKikg X19hKTsKKyAgX19pLnZhbFswXSA9IChiZmxvYXQxNng0X3QpIF9fYnVpbHRp bl9hYXJjaDY0X2dldF9kcmVnY2l2NGJmICAoX19vLCAwKTsKKyAgX19pLnZh bFsxXSA9IChiZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9k cmVnY2l2NGJmICAoX19vLCAxKTsKKyAgX19pLnZhbFsyXSA9IChiZmxvYXQx Nng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2NGJmICAoX19v LCAyKTsKKyAgcmV0dXJuIF9faTsKK30KKworX19leHRlbnNpb25fXyBleHRl cm4gX19pbmxpbmUgYmZsb2F0MTZ4OHgzX3QKK19fYXR0cmlidXRlX18gKChf X2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKK3ZsZDFxX2JmMTZfeDMgKGNvbnN0IGJmbG9hdDE2X3QgKl9fYSkK K3sKKyAgYmZsb2F0MTZ4OHgzX3QgX19pOworICBfX2J1aWx0aW5fYWFyY2g2 NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQx eDN2OGJmICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9iZiAqKSBf X2EpOworICBfX2kudmFsWzBdID0gKGJmbG9hdDE2eDhfdCkgX19idWlsdGlu X2FhcmNoNjRfZ2V0X3FyZWdjaXY4YmYgIChfX28sIDApOworICBfX2kudmFs WzFdID0gKGJmbG9hdDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3Fy ZWdjaXY4YmYgIChfX28sIDEpOworICBfX2kudmFsWzJdID0gKGJmbG9hdDE2 eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY4YmYgIChfX28s IDIpOworICByZXR1cm4gX19pOworfQorX19leHRlbnNpb25fXyBleHRlcm4g X19pbmxpbmUgYmZsb2F0MTZ4NHg0X3QKK19fYXR0cmlidXRlX18gKChfX2Fs d2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKK3ZsZDFfYmYxNl94NCAoY29uc3QgYmZsb2F0MTZfdCAqX19hKQorewor ICB1bmlvbiB7IGJmbG9hdDE2eDR4NF90IF9faTsgX19idWlsdGluX2FhcmNo NjRfc2ltZF94aSBfX287IH0gX19hdTsKKyAgX19hdS5fX28KKyAgICA9IF9f YnVpbHRpbl9hYXJjaDY0X2xkMXg0djRiZiAoKGNvbnN0IF9fYnVpbHRpbl9h YXJjaDY0X3NpbWRfYmYgKikgX19hKTsKKyAgcmV0dXJuIF9fYXUuX19pOwor fQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBiZmxvYXQxNng4 eDRfdAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2du dV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordmxkMXFfYmYxNl94NCAo Y29uc3QgYmZsb2F0MTZfdCAqX19hKQoreworICB1bmlvbiB7IGJmbG9hdDE2 eDh4NF90IF9faTsgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287IH0g X19hdTsKKyAgX19hdS5fX28KKyAgICA9IF9fYnVpbHRpbl9hYXJjaDY0X2xk MXg0djhiZiAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfYmYgKikg X19hKTsKKyAgcmV0dXJuIF9fYXUuX19pOworfQorCitfX2V4dGVuc2lvbl9f IGV4dGVybiBfX2lubGluZSBiZmxvYXQxNng0X3QKK19fYXR0cmlidXRlX18g KChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKK3ZsZDFfbGFuZV9iZjE2IChjb25zdCBiZmxvYXQxNl90ICpf X3NyYywgYmZsb2F0MTZ4NF90IF9fdmVjLCBjb25zdCBpbnQgX19sYW5lKQor eworICByZXR1cm4gX19hYXJjaDY0X3ZzZXRfbGFuZV9hbnkgKCpfX3NyYywg X192ZWMsIF9fbGFuZSk7Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9f aW5saW5lIGJmbG9hdDE2eDhfdAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlz X2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor dmxkMXFfbGFuZV9iZjE2IChjb25zdCBiZmxvYXQxNl90ICpfX3NyYywgYmZs b2F0MTZ4OF90IF9fdmVjLCBjb25zdCBpbnQgX19sYW5lKQoreworICByZXR1 cm4gX19hYXJjaDY0X3ZzZXRfbGFuZV9hbnkgKCpfX3NyYywgX192ZWMsIF9f bGFuZSk7Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGJm bG9hdDE2eDRfdAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9f LCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordmxkMV9kdXBf YmYxNiAoY29uc3QgYmZsb2F0MTZfdCogX19hKQoreworICByZXR1cm4gdmR1 cF9uX2JmMTYgKCpfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBf X2lubGluZSBiZmxvYXQxNng4X3QKK19fYXR0cmlidXRlX18gKChfX2Fsd2F5 c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK K3ZsZDFxX2R1cF9iZjE2IChjb25zdCBiZmxvYXQxNl90KiBfX2EpCit7Cisg IHJldHVybiB2ZHVwcV9uX2JmMTYgKCpfX2EpOworfQorCitfX2V4dGVuc2lv bl9fIGV4dGVybiBfX2lubGluZSBiZmxvYXQxNng0eDJfdAorX19hdHRyaWJ1 dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQordmxkMl9iZjE2IChjb25zdCBiZmxvYXQxNl90ICog X19hKQoreworICBiZmxvYXQxNng0eDJfdCByZXQ7CisgIF9fYnVpbHRpbl9h YXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2 NF9sZDJ2NGJmIChfX2EpOworICByZXQudmFsWzBdID0gKGJmbG9hdDE2eDRf dCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdvaXY0YmYgKF9fbywgMCk7 CisgIHJldC52YWxbMV0gPSAoYmZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fYWFy Y2g2NF9nZXRfZHJlZ29pdjRiZiAoX19vLCAxKTsKKyAgcmV0dXJuIHJldDsK K30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgYmZsb2F0MTZ4 OHgyX3QKK19fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19n bnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZsZDJxX2JmMTYgKGNv bnN0IGJmbG9hdDE2X3QgKiBfX2EpCit7CisgIGJmbG9hdDE2eDh4Ml90IHJl dDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9 IF9fYnVpbHRpbl9hYXJjaDY0X2xkMnY4YmYgKChjb25zdCBfX2J1aWx0aW5f YWFyY2g2NF9zaW1kX2JmICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoYmZs b2F0MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjhiZiAo X19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChiZmxvYXQxNng4X3QpIF9fYnVp bHRpbl9hYXJjaDY0X2dldF9xcmVnb2l2OGJmIChfX28sIDEpOworICByZXR1 cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBi ZmxvYXQxNng0eDJfdAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGlu ZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordmxkMl9k dXBfYmYxNiAoY29uc3QgYmZsb2F0MTZfdCAqIF9fYSkKK3sKKyAgYmZsb2F0 MTZ4NHgyX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9f bzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQycnY0YmYgKChjb25z dCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2JmICopIF9fYSk7CisgIHJldC52 YWxbMF0gPSAoYmZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRf ZHJlZ29pdjRiZiAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChiZmxvYXQx Nng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnb2l2NGJmIChfX28s IDEpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVy biBfX2lubGluZSBiZmxvYXQxNng4eDJfdAorX19hdHRyaWJ1dGVfXyAoKF9f YWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFs X18pKQordmxkMnFfZHVwX2JmMTYgKGNvbnN0IGJmbG9hdDE2X3QgKiBfX2Ep Cit7CisgIGJmbG9hdDE2eDh4Ml90IHJldDsKKyAgX19idWlsdGluX2FhcmNo NjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xk MnJ2OGJmICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9iZiAqKSBf X2EpOworICByZXQudmFsWzBdID0gKGJmbG9hdDE2eDhfdCkgX19idWlsdGlu X2FhcmNoNjRfZ2V0X3FyZWdvaXY4YmYgKF9fbywgMCk7CisgIHJldC52YWxb MV0gPSAoYmZsb2F0MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJl Z29pdjhiZiAoX19vLCAxKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRl bnNpb25fXyBleHRlcm4gX19pbmxpbmUgYmZsb2F0MTZ4NHgzX3QKK19fYXR0 cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKK3ZsZDNfYmYxNiAoY29uc3QgYmZsb2F0MTZf dCAqIF9fYSkKK3sKKyAgYmZsb2F0MTZ4NHgzX3QgcmV0OworICBfX2J1aWx0 aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2Fh cmNoNjRfbGQzdjRiZiAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRf YmYgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChiZmxvYXQxNng0X3QpIF9f YnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2NGJmIChfX28sIDApOworICBy ZXQudmFsWzFdID0gKGJmbG9hdDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRf Z2V0X2RyZWdjaXY0YmYgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAoYmZs b2F0MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjRiZiAo X19vLCAyKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBl eHRlcm4gX19pbmxpbmUgYmZsb2F0MTZ4OHgzX3QKK19fYXR0cmlidXRlX18g KChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKK3ZsZDNxX2JmMTYgKGNvbnN0IGJmbG9hdDE2X3QgKiBfX2Ep Cit7CisgIGJmbG9hdDE2eDh4M190IHJldDsKKyAgX19idWlsdGluX2FhcmNo NjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xk M3Y4YmYgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2JmICopIF9f YSk7CisgIHJldC52YWxbMF0gPSAoYmZsb2F0MTZ4OF90KSBfX2J1aWx0aW5f YWFyY2g2NF9nZXRfcXJlZ2NpdjhiZiAoX19vLCAwKTsKKyAgcmV0LnZhbFsx XSA9IChiZmxvYXQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVn Y2l2OGJmIChfX28sIDEpOworICByZXQudmFsWzJdID0gKGJmbG9hdDE2eDhf dCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY4YmYgKF9fbywgMik7 CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9f aW5saW5lIGJmbG9hdDE2eDR4M190CitfX2F0dHJpYnV0ZV9fICgoX19hbHdh eXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp Cit2bGQzX2R1cF9iZjE2IChjb25zdCBiZmxvYXQxNl90ICogX19hKQorewor ICBiZmxvYXQxNng0eDNfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3Np bWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDNydjRi ZiAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfYmYgKikgX19hKTsK KyAgcmV0LnZhbFswXSA9IChiZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9hYXJj aDY0X2dldF9kcmVnY2l2NGJmIChfX28sIDApOworICByZXQudmFsWzFdID0g KGJmbG9hdDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaXY0 YmYgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAoYmZsb2F0MTZ4NF90KSBf X2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjRiZiAoX19vLCAyKTsKKyAg cmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxp bmUgYmZsb2F0MTZ4OHgzX3QKK19fYXR0cmlidXRlX18gKChfX2Fsd2F5c19p bmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK3Zs ZDNxX2R1cF9iZjE2IChjb25zdCBiZmxvYXQxNl90ICogX19hKQoreworICBi ZmxvYXQxNng4eDNfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRf Y2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDNydjhiZiAo KGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfYmYgKikgX19hKTsKKyAg cmV0LnZhbFswXSA9IChiZmxvYXQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0 X2dldF9xcmVnY2l2OGJmIChfX28sIDApOworICByZXQudmFsWzFdID0gKGJm bG9hdDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY4YmYg KF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAoYmZsb2F0MTZ4OF90KSBfX2J1 aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjhiZiAoX19vLCAyKTsKKyAgcmV0 dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUg YmZsb2F0MTZ4NHg0X3QKK19fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxp bmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZsZDRf YmYxNiAoY29uc3QgYmZsb2F0MTZfdCAqIF9fYSkKK3sKKyAgYmZsb2F0MTZ4 NHg0X3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsK KyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQ0djRiZiAoKGNvbnN0IF9f YnVpbHRpbl9hYXJjaDY0X3NpbWRfYmYgKikgX19hKTsKKyAgcmV0LnZhbFsw XSA9IChiZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVn eGl2NGJmIChfX28sIDApOworICByZXQudmFsWzFdID0gKGJmbG9hdDE2eDRf dCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWd4aXY0YmYgKF9fbywgMSk7 CisgIHJldC52YWxbMl0gPSAoYmZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fYWFy Y2g2NF9nZXRfZHJlZ3hpdjRiZiAoX19vLCAyKTsKKyAgcmV0LnZhbFszXSA9 IChiZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGl2 NGJmIChfX28sIDMpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lv bl9fIGV4dGVybiBfX2lubGluZSBiZmxvYXQxNng4eDRfdAorX19hdHRyaWJ1 dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQordmxkNHFfYmYxNiAoY29uc3QgYmZsb2F0MTZfdCAq IF9fYSkKK3sKKyAgYmZsb2F0MTZ4OHg0X3QgcmV0OworICBfX2J1aWx0aW5f YWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNo NjRfbGQ0djhiZiAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfYmYg KikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChiZmxvYXQxNng4X3QpIF9fYnVp bHRpbl9hYXJjaDY0X2dldF9xcmVneGl2OGJmIChfX28sIDApOworICByZXQu dmFsWzFdID0gKGJmbG9hdDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0 X3FyZWd4aXY4YmYgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAoYmZsb2F0 MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjhiZiAoX19v LCAyKTsKKyAgcmV0LnZhbFszXSA9IChiZmxvYXQxNng4X3QpIF9fYnVpbHRp bl9hYXJjaDY0X2dldF9xcmVneGl2OGJmIChfX28sIDMpOworICByZXR1cm4g cmV0OworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBiZmxv YXQxNng0eDRfdAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9f LCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordmxkNF9kdXBf YmYxNiAoY29uc3QgYmZsb2F0MTZfdCAqIF9fYSkKK3sKKyAgYmZsb2F0MTZ4 NHg0X3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsK KyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQ0cnY0YmYgKChjb25zdCBf X2J1aWx0aW5fYWFyY2g2NF9zaW1kX2JmICopIF9fYSk7CisgIHJldC52YWxb MF0gPSAoYmZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJl Z3hpdjRiZiAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChiZmxvYXQxNng0 X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGl2NGJmIChfX28sIDEp OworICByZXQudmFsWzJdID0gKGJmbG9hdDE2eDRfdCkgX19idWlsdGluX2Fh cmNoNjRfZ2V0X2RyZWd4aXY0YmYgKF9fbywgMik7CisgIHJldC52YWxbM10g PSAoYmZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hp djRiZiAoX19vLCAzKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNp b25fXyBleHRlcm4gX19pbmxpbmUgYmZsb2F0MTZ4OHg0X3QKK19fYXR0cmli dXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9f YXJ0aWZpY2lhbF9fKSkKK3ZsZDRxX2R1cF9iZjE2IChjb25zdCBiZmxvYXQx Nl90ICogX19hKQoreworICBiZmxvYXQxNng4eDRfdCByZXQ7CisgIF9fYnVp bHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5f YWFyY2g2NF9sZDRydjhiZiAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3Np bWRfYmYgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChiZmxvYXQxNng4X3Qp IF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVneGl2OGJmIChfX28sIDApOwor ICByZXQudmFsWzFdID0gKGJmbG9hdDE2eDhfdCkgX19idWlsdGluX2FhcmNo NjRfZ2V0X3FyZWd4aXY4YmYgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAo YmZsb2F0MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjhi ZiAoX19vLCAyKTsKKyAgcmV0LnZhbFszXSA9IChiZmxvYXQxNng4X3QpIF9f YnVpbHRpbl9hYXJjaDY0X2dldF9xcmVneGl2OGJmIChfX28sIDMpOworICBy ZXR1cm4gcmV0OworfQorCisvKiB2c3QgKi8KKworX19leHRlbnNpb25fXyBl eHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlz X2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor dnN0MV9iZjE2IChiZmxvYXQxNl90ICpfX2EsIGJmbG9hdDE2eDRfdCBfX2Ip Cit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXY0YmYgKF9fYSwgX19iKTsK K30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9pZAorX19h dHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQordnN0MV9iZjE2X3gyIChiZmxvYXQxNl90 ICogX19hLCBiZmxvYXQxNng0eDJfdCBfX3ZhbCkKK3sKKyAgX19idWlsdGlu X2FhcmNoNjRfc2ltZF9vaSBfX287CisgIGJmbG9hdDE2eDh4Ml90IF9fdGVt cDsKKyAgX190ZW1wLnZhbFswXSA9IHZjb21iaW5lX2JmMTYgKF9fdmFsLnZh bFswXSwgdmNyZWF0ZV9iZjE2IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7 CisgIF9fdGVtcC52YWxbMV0gPSB2Y29tYmluZV9iZjE2IChfX3ZhbC52YWxb MV0sIHZjcmVhdGVfYmYxNiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOwor ICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjhiZiAoX19v LCBfX3RlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNo NjRfc2V0X3FyZWdvaXY4YmYgKF9fbywgX190ZW1wLnZhbFsxXSwgMSk7Cisg IF9fYnVpbHRpbl9hYXJjaDY0X3N0MXgydjRiZiAoX19hLCBfX28pOworfQor CitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJp YnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCit2c3QxcV9iZjE2X3gyIChiZmxvYXQxNl90ICog X19hLCBiZmxvYXQxNng4eDJfdCBfX3ZhbCkKK3sKKyAgX19idWlsdGluX2Fh cmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0 X3NldF9xcmVnb2l2OGJmIChfX28sIF9fdmFsLnZhbFswXSwgMCk7CisgIF9f byA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2OGJmIChfX28sIF9f dmFsLnZhbFsxXSwgMSk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXgydjhi ZiAoX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lu bGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18s IF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2c3QxX2JmMTZf eDMgKGJmbG9hdDE2X3QgKiBfX2EsIGJmbG9hdDE2eDR4M190IF9fdmFsKQor eworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgYmZsb2F0 MTZ4OHgzX3QgX190ZW1wOworICBfX3RlbXAudmFsWzBdID0gdmNvbWJpbmVf YmYxNiAoX192YWwudmFsWzBdLCB2Y3JlYXRlX2JmMTYgKF9fQUFSQ0g2NF9V SU5UNjRfQyAoMCkpKTsKKyAgX190ZW1wLnZhbFsxXSA9IHZjb21iaW5lX2Jm MTYgKF9fdmFsLnZhbFsxXSwgdmNyZWF0ZV9iZjE2IChfX0FBUkNINjRfVUlO VDY0X0MgKDApKSk7CisgIF9fdGVtcC52YWxbMl0gPSB2Y29tYmluZV9iZjE2 IChfX3ZhbC52YWxbMl0sIHZjcmVhdGVfYmYxNiAoX19BQVJDSDY0X1VJTlQ2 NF9DICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJl Z2NpdjhiZiAoX19vLCAoYmZsb2F0MTZ4OF90KSBfX3RlbXAudmFsWzBdLCAw KTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4YmYg KF9fbywgKGJmbG9hdDE2eDhfdCkgX190ZW1wLnZhbFsxXSwgMSk7CisgIF9f byA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2OGJmIChfX28sIChi ZmxvYXQxNng4X3QpIF9fdGVtcC52YWxbMl0sIDIpOworICBfX2J1aWx0aW5f YWFyY2g2NF9zdDF4M3Y0YmYgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2Jm ICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19p bmxpbmUgdm9pZAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9f LCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordnN0MXFfYmYx Nl94MyAoYmZsb2F0MTZfdCAqIF9fYSwgYmZsb2F0MTZ4OHgzX3QgX192YWwp Cit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28g PSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjhiZiAoX19vLCAoYmZs b2F0MTZ4OF90KSBfX3ZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0 aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjhiZiAoX19vLCAoYmZsb2F0MTZ4OF90 KSBfX3ZhbC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2 NF9zZXRfcXJlZ2NpdjhiZiAoX19vLCAoYmZsb2F0MTZ4OF90KSBfX3ZhbC52 YWxbMl0sIDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4M3Y4YmYgKChf X2J1aWx0aW5fYWFyY2g2NF9zaW1kX2JmICopIF9fYSwgX19vKTsKK30KKwor X19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1 dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQordnN0MV9iZjE2X3g0IChiZmxvYXQxNl90ICogX19h LCBiZmxvYXQxNng0eDRfdCB2YWwpCit7CisgIHVuaW9uIHsgYmZsb2F0MTZ4 NHg0X3QgX19pOyBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsgfSBf X3UgPSB7IHZhbCB9OworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4NHY0YmYg KChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2JmICopIF9fYSwgX191Ll9fbyk7 Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19f YXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZzdDFxX2JmMTZfeDQgKGJmbG9hdDE2 X3QgKiBfX2EsIGJmbG9hdDE2eDh4NF90IHZhbCkKK3sKKyAgdW5pb24geyBi ZmxvYXQxNng4eDRfdCBfX2k7IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkg X19vOyB9IF9fdSA9IHsgdmFsIH07CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0 MXg0djhiZiAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfYmYgKikgX19hLCBf X3UuX19vKTsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUg dm9pZAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2du dV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordnN0MXFfYmYxNiAoYmZs b2F0MTZfdCAqX19hLCBiZmxvYXQxNng4X3QgX19iKQoreworICBfX2J1aWx0 aW5fYWFyY2g2NF9zdDF2OGJmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5z aW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChf X2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKK3ZzdDFfbGFuZV9iZjE2IChiZmxvYXQxNl90ICpfX2EsIGJmbG9h dDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2xhbmUpCit7CisgICpfX2EgPSBf X2FhcmNoNjRfdmdldF9sYW5lX2FueSAoX19iLCBfX2xhbmUpOworfQorCitf X2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0 ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCit2c3QxcV9sYW5lX2JmMTYgKGJmbG9hdDE2X3QgKl9f YSwgYmZsb2F0MTZ4OF90IF9fYiwgY29uc3QgaW50IF9fbGFuZSkKK3sKKyAg Kl9fYSA9IF9fYWFyY2g2NF92Z2V0X2xhbmVfYW55IChfX2IsIF9fbGFuZSk7 Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19f YXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZzdDJfYmYxNiAoYmZsb2F0MTZfdCAq IF9fYSwgYmZsb2F0MTZ4NHgyX3QgX192YWwpCit7CisgIF9fYnVpbHRpbl9h YXJjaDY0X3NpbWRfb2kgX19vOworICBiZmxvYXQxNng4eDJfdCBfX3RlbXA7 CisgIF9fdGVtcC52YWxbMF0gPSB2Y29tYmluZV9iZjE2IChfX3ZhbC52YWxb MF0sIHZjcmVhdGVfYmYxNiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOwor ICBfX3RlbXAudmFsWzFdID0gdmNvbWJpbmVfYmYxNiAoX192YWwudmFsWzFd LCB2Y3JlYXRlX2JmMTYgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAg X19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXY4YmYgKF9fbywg X190ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0 X3NldF9xcmVnb2l2OGJmIChfX28sIF9fdGVtcC52YWxbMV0sIDEpOworICBf X2J1aWx0aW5fYWFyY2g2NF9zdDJ2NGJmIChfX2EsIF9fbyk7Cit9CisKK19f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRl X18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0 aWZpY2lhbF9fKSkKK3ZzdDJxX2JmMTYgKGJmbG9hdDE2X3QgKiBfX2EsIGJm bG9hdDE2eDh4Ml90IF9fdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9z aW1kX29pIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3Fy ZWdvaXY4YmYgKF9fbywgX192YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19i dWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXY4YmYgKF9fbywgX192YWwudmFs WzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QydjhiZiAoX19hLCBf X28pOworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB2b2lk CitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lu bGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2c3QzX2JmMTYgKGJmbG9hdDE2 X3QgKiBfX2EsIGJmbG9hdDE2eDR4M190IF9fdmFsKQoreworICBfX2J1aWx0 aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgYmZsb2F0MTZ4OHgzX3QgX190 ZW1wOworICBfX3RlbXAudmFsWzBdID0gdmNvbWJpbmVfYmYxNiAoX192YWwu dmFsWzBdLCB2Y3JlYXRlX2JmMTYgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkp KTsKKyAgX190ZW1wLnZhbFsxXSA9IHZjb21iaW5lX2JmMTYgKF9fdmFsLnZh bFsxXSwgdmNyZWF0ZV9iZjE2IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7 CisgIF9fdGVtcC52YWxbMl0gPSB2Y29tYmluZV9iZjE2IChfX3ZhbC52YWxb Ml0sIHZjcmVhdGVfYmYxNiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOwor ICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjhiZiAoX19v LCAoYmZsb2F0MTZ4OF90KSBfX3RlbXAudmFsWzBdLCAwKTsKKyAgX19vID0g X19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4YmYgKF9fbywgKGJmbG9h dDE2eDhfdCkgX190ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRp bl9hYXJjaDY0X3NldF9xcmVnY2l2OGJmIChfX28sIChiZmxvYXQxNng4X3Qp IF9fdGVtcC52YWxbMl0sIDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDN2 NGJmICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9iZiAqKSBfX2EsIF9fbyk7 Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19f YXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZzdDNxX2JmMTYgKGJmbG9hdDE2X3Qg KiBfX2EsIGJmbG9hdDE2eDh4M190IF9fdmFsKQoreworICBfX2J1aWx0aW5f YWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNo NjRfc2V0X3FyZWdjaXY4YmYgKF9fbywgKGJmbG9hdDE2eDhfdCkgX192YWwu dmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3Fy ZWdjaXY4YmYgKF9fbywgKGJmbG9hdDE2eDhfdCkgX192YWwudmFsWzFdLCAx KTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4YmYg KF9fbywgKGJmbG9hdDE2eDhfdCkgX192YWwudmFsWzJdLCAyKTsKKyAgX19i dWlsdGluX2FhcmNoNjRfc3QzdjhiZiAoKF9fYnVpbHRpbl9hYXJjaDY0X3Np bWRfYmYgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVy biBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5s aW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2c3Q0 X2JmMTYgKGJmbG9hdDE2X3QgKiBfX2EsIGJmbG9hdDE2eDR4NF90IF9fdmFs KQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgYmZs b2F0MTZ4OHg0X3QgX190ZW1wOworICBfX3RlbXAudmFsWzBdID0gdmNvbWJp bmVfYmYxNiAoX192YWwudmFsWzBdLCB2Y3JlYXRlX2JmMTYgKF9fQUFSQ0g2 NF9VSU5UNjRfQyAoMCkpKTsKKyAgX190ZW1wLnZhbFsxXSA9IHZjb21iaW5l X2JmMTYgKF9fdmFsLnZhbFsxXSwgdmNyZWF0ZV9iZjE2IChfX0FBUkNINjRf VUlOVDY0X0MgKDApKSk7CisgIF9fdGVtcC52YWxbMl0gPSB2Y29tYmluZV9i ZjE2IChfX3ZhbC52YWxbMl0sIHZjcmVhdGVfYmYxNiAoX19BQVJDSDY0X1VJ TlQ2NF9DICgwKSkpOworICBfX3RlbXAudmFsWzNdID0gdmNvbWJpbmVfYmYx NiAoX192YWwudmFsWzNdLCB2Y3JlYXRlX2JmMTYgKF9fQUFSQ0g2NF9VSU5U NjRfQyAoMCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3Fy ZWd4aXY4YmYgKF9fbywgKGJmbG9hdDE2eDhfdCkgX190ZW1wLnZhbFswXSwg MCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2OGJm IChfX28sIChiZmxvYXQxNng4X3QpIF9fdGVtcC52YWxbMV0sIDEpOworICBf X28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjhiZiAoX19vLCAo YmZsb2F0MTZ4OF90KSBfX3RlbXAudmFsWzJdLCAyKTsKKyAgX19vID0gX19i dWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXY4YmYgKF9fbywgKGJmbG9hdDE2 eDhfdCkgX190ZW1wLnZhbFszXSwgMyk7CisgIF9fYnVpbHRpbl9hYXJjaDY0 X3N0NHY0YmYgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2JmICopIF9fYSwg X19vKTsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9p ZAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordnN0NHFfYmYxNiAoYmZsb2F0 MTZfdCAqIF9fYSwgYmZsb2F0MTZ4OHg0X3QgX192YWwpCit7CisgIF9fYnVp bHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5f YWFyY2g2NF9zZXRfcXJlZ3hpdjhiZiAoX19vLCAoYmZsb2F0MTZ4OF90KSBf X3ZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9z ZXRfcXJlZ3hpdjhiZiAoX19vLCAoYmZsb2F0MTZ4OF90KSBfX3ZhbC52YWxb MV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hp djhiZiAoX19vLCAoYmZsb2F0MTZ4OF90KSBfX3ZhbC52YWxbMl0sIDIpOwor ICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjhiZiAoX19v LCAoYmZsb2F0MTZ4OF90KSBfX3ZhbC52YWxbM10sIDMpOworICBfX2J1aWx0 aW5fYWFyY2g2NF9zdDR2OGJmICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9i ZiAqKSBfX2EsIF9fbyk7Cit9CisKIC8qIHZyZWludGVycHJldCAqLwogCiBf X2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBiZmxvYXQxNng0X3QKQEAg LTM0OTgyLDcgKzM1NDYxLDcgQEAgdnJlaW50ZXJwcmV0X2YzMl9iZjE2IChi ZmxvYXQxNng0X3QgX19hKQogICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYTsK IH0KIAotX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgZmxvYXQzMngy X3QKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGZsb2F0NjR4MV90 CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnJlaW50ZXJwcmV0X2Y2NF9i ZjE2IChiZmxvYXQxNng0X3QgX19hKQogewpkaWZmIC0tZ2l0IGEvZ2NjL2Nv bmZpZy9hYXJjaDY0L2l0ZXJhdG9ycy5tZCBiL2djYy9jb25maWcvYWFyY2g2 NC9pdGVyYXRvcnMubWQKaW5kZXggNzZjOGQ5YWJiZTc5MzU1MDc4Nzk5YTRj YTIyN2IyYTM1MjYzNmVmNC4uMjE4OGU3YTM2ZjRiMmI1ZWRiNGRhYTUxNzc1 MzYwYWI5OWZhNjU3ZCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0 L2l0ZXJhdG9ycy5tZAorKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvaXRlcmF0 b3JzLm1kCkBAIC04NCw3ICs4NCw3IEBACiAoZGVmaW5lX21vZGVfaXRlcmF0 b3IgVlNEUV9JX0RJIFtWOFFJIFYxNlFJIFY0SEkgVjhISSBWMlNJIFY0U0kg VjJESSBESV0pCiAKIDs7IERvdWJsZSB2ZWN0b3IgbW9kZXMuCi0oZGVmaW5l X21vZGVfaXRlcmF0b3IgVkQgW1Y4UUkgVjRISSBWNEhGIFYyU0kgVjJTRl0p CisoZGVmaW5lX21vZGVfaXRlcmF0b3IgVkQgW1Y4UUkgVjRISSBWNEhGIFYy U0kgVjJTRiBWNEJGXSkKIAogOzsgRG91YmxlIHZlY3RvciBtb2RlcyBzdWl0 YWJsZSBmb3IgbW92aW5nLiAgSW5jbHVkZXMgQkZtb2RlLgogKGRlZmluZV9t b2RlX2l0ZXJhdG9yIFZETU9WIFtWOFFJIFY0SEkgVjRIRiBWNEJGIFYyU0kg VjJTRl0pCkBAIC0xMDIsMTAgKzEwMiwxMCBAQAogKGRlZmluZV9tb2RlX2l0 ZXJhdG9yIFZEUV9CSFNJIFtWOFFJIFYxNlFJIFY0SEkgVjhISSBWMlNJIFY0 U0ldKQogCiA7OyBRdWFkIHZlY3RvciBtb2Rlcy4KLShkZWZpbmVfbW9kZV9p dGVyYXRvciBWUSBbVjE2UUkgVjhISSBWNFNJIFYyREkgVjhIRiBWNFNGIFYy REZdKQorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIFZRIFtWMTZRSSBWOEhJIFY0 U0kgVjJESSBWOEhGIFY0U0YgVjJERiBWOEJGXSkKIAogOzsgQ29weSBvZiB0 aGUgYWJvdmUuCi0oZGVmaW5lX21vZGVfaXRlcmF0b3IgVlEyIFtWMTZRSSBW OEhJIFY0U0kgVjJESSBWOEhGIFY0U0YgVjJERl0pCisoZGVmaW5lX21vZGVf aXRlcmF0b3IgVlEyIFtWMTZRSSBWOEhJIFY0U0kgVjJESSBWOEhGIFY4QkYg VjRTRiBWMkRGXSkKIAogOzsgUXVhZCB2ZWN0b3IgbW9kZXMgc3VpdGFibGUg Zm9yIG1vdmluZy4gIEluY2x1ZGVzIEJGbW9kZS4KIChkZWZpbmVfbW9kZV9p dGVyYXRvciBWUU1PViBbVjE2UUkgVjhISSBWNFNJIFYyREkgVjhIRiBWOEJG IFY0U0YgVjJERl0pCkBAIC0xMTcsNyArMTE3LDcgQEAKIChkZWZpbmVfbW9k ZV9pdGVyYXRvciBWUV9JIFtWMTZRSSBWOEhJIFY0U0kgVjJESV0pCiAKIDs7 IFZRIHdpdGhvdXQgMiBlbGVtZW50IG1vZGVzLgotKGRlZmluZV9tb2RlX2l0 ZXJhdG9yIFZRX05PMkUgW1YxNlFJIFY4SEkgVjRTSSBWOEhGIFY0U0ZdKQor KGRlZmluZV9tb2RlX2l0ZXJhdG9yIFZRX05PMkUgW1YxNlFJIFY4SEkgVjRT SSBWOEhGIFY0U0YgVjhCRl0pCiAKIDs7IFF1YWQgdmVjdG9yIHdpdGggb25s eSAyIGVsZW1lbnQgbW9kZXMuCiAoZGVmaW5lX21vZGVfaXRlcmF0b3IgVlFf MkUgW1YyREkgVjJERl0pCkBAIC0xOTcsNyArMTk3LDcgQEAKIAkJCQkgIFY0 SEYgVjhIRiBWNEJGIFY4QkYgVjJTRiBWNFNGIFYyREYgREldKQogCiA7OyBB bGwgQWR2YW5jZWQgU0lNRCBtb2RlcywgcGx1cyBESSBhbmQgREYuCi0oZGVm aW5lX21vZGVfaXRlcmF0b3IgVkFMTERJRiBbVjhRSSBWMTZRSSBWNEhJIFY4 SEkgVjJTSSBWNFNJCisoZGVmaW5lX21vZGVfaXRlcmF0b3IgVkFMTERJRiBb VjhRSSBWMTZRSSBWNEhJIFY4SEkgVjJTSSBWNFNJIFY0QkYgVjhCRgogCQkJ ICAgICAgIFYyREkgVjRIRiBWOEhGIFYyU0YgVjRTRiBWMkRGIERJIERGXSkK IAogOzsgQWR2YW5jZWQgU0lNRCBtb2RlcyBmb3IgSW50ZWdlciByZWR1Y3Rp b24gYWNyb3NzIGxhbmVzLgpAQCAtMjIwLDcgKzIyMCw3IEBACiAoZGVmaW5l X21vZGVfaXRlcmF0b3IgVlFXIFtWMTZRSSBWOEhJIFY0U0ldKQogCiA7OyBE b3VibGUgdmVjdG9yIG1vZGVzIGZvciBjb21iaW5lcy4KLShkZWZpbmVfbW9k ZV9pdGVyYXRvciBWREMgW1Y4UUkgVjRISSBWNEhGIFYyU0kgVjJTRiBESSBE Rl0pCisoZGVmaW5lX21vZGVfaXRlcmF0b3IgVkRDIFtWOFFJIFY0SEkgVjRC RiBWNEhGIFYyU0kgVjJTRiBESSBERl0pCiAKIDs7IEFkdmFuY2VkIFNJTUQg bW9kZXMgZXhjZXB0IGRvdWJsZSBpbnQuCiAoZGVmaW5lX21vZGVfaXRlcmF0 b3IgVkRRSUYgW1Y4UUkgVjE2UUkgVjRISSBWOEhJIFYyU0kgVjRTSSBWMlNG IFY0U0YgVjJERl0pCkBAIC0xMDE0LDcgKzEwMTQsNyBAQAogCiA7OyBEb3Vi bGUgbW9kZXMgb2YgdmVjdG9yIG1vZGVzLgogKGRlZmluZV9tb2RlX2F0dHIg VkRCTCBbKFY4UUkgIlYxNlFJIikgKFY0SEkgIlY4SEkiKQotCQkJKFY0SEYg IlY4SEYiKQorCQkJKFY0SEYgIlY4SEYiKSAgKFY0QkYgIlY4QkYiKQogCQkJ KFYyU0kgIlY0U0kiKSAgKFYyU0YgIlY0U0YiKQogCQkJKFNJICAgIlYyU0ki KSAgKERJICAgIlYyREkiKQogCQkJKERGICAgIlYyREYiKV0pCkBAIC0xMDI0 LDcgKzEwMjQsNyBAQAogCiA7OyBEb3VibGUgbW9kZXMgb2YgdmVjdG9yIG1v ZGVzIChsb3dlciBjYXNlKS4KIChkZWZpbmVfbW9kZV9hdHRyIFZkYmwgWyhW OFFJICJ2MTZxaSIpIChWNEhJICJ2OGhpIikKLQkJCShWNEhGICJ2OGhmIikK KwkJCShWNEhGICJ2OGhmIikgIChWNEJGICJ2OGJmIikKIAkJCShWMlNJICJ2 NHNpIikgIChWMlNGICJ2NHNmIikKIAkJCShTSSAgICJ2MnNpIikgIChESSAg ICJ2MmRpIikKIAkJCShERiAgICJ2MmRmIildKQpAQCAtMTE0NSw2ICsxMTQ1 LDcgQEAKIAkJCSAgICAgICAoVjJTSSAiVjJTSSIpIChWNFNJICAiVjRTSSIp CiAJCQkgICAgICAgKERJICAgIkRJIikgICAoVjJESSAgIlYyREkiKQogCQkJ ICAgICAgIChWNEhGICJWNEhJIikgKFY4SEYgICJWOEhJIikKKwkJCSAgICAg ICAoVjRCRiAiVjRISSIpIChWOEJGICAiVjhISSIpCiAJCQkgICAgICAgKFYy U0YgIlYyU0kiKSAoVjRTRiAgIlY0U0kiKQogCQkJICAgICAgIChERiAgICJE SSIpICAgKFYyREYgICJWMkRJIikKIAkJCSAgICAgICAoU0YgICAiU0kiKSAg IChTSSAgICAiU0kiKQpAQCAtMTE2MSw2ICsxMTYyLDcgQEAKIAkJCSAgICAg ICAoVjJTSSAidjJzaSIpIChWNFNJICAidjRzaSIpCiAJCQkgICAgICAgKERJ ICAgImRpIikgICAoVjJESSAgInYyZGkiKQogCQkJICAgICAgIChWNEhGICJ2 NGhpIikgKFY4SEYgICJ2OGhpIikKKwkJCSAgICAgICAoVjRCRiAidjRoaSIp IChWOEJGICAidjhoaSIpCiAJCQkgICAgICAgKFYyU0YgInYyc2kiKSAoVjRT RiAgInY0c2kiKQogCQkJICAgICAgIChERiAgICJkaSIpICAgKFYyREYgICJ2 MmRpIikKIAkJCSAgICAgICAoU0YgICAic2kiKQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYWR2c2ltZC1pbnRyaW5z aWNzL2JmMTZfdmxkbi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2Fh cmNoNjQvYWR2c2ltZC1pbnRyaW5zaWNzL2JmMTZfdmxkbi5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLmNmMjQ1MDkxYWY2NThmNTg2NTlkM2MzNGRmZTlm MTY0YzM5MmZjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvYWFyY2g2NC9hZHZzaW1kLWludHJpbnNpY3MvYmYxNl92 bGRuLmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qIHsgZGctZG8gYXNzZW1ibGUg eyB0YXJnZXQgeyBhYXJjaDY0Ki0qLSogfSB9IH0gKi8KKy8qIHsgZGctc2tp cC1pZiAiIiB7ICotKi0qIH0geyAiLWZuby1mYXQtbHRvLW9iamVjdHMiIH0g fSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXJtX3Y4 XzJhX2JmMTZfbmVvbl9vayB9ICovCisvKiB7IGRnLWFkZC1vcHRpb25zIGFy bV92OF8yYV9iZjE2X25lb24gfSAgKi8KKworI2luY2x1ZGUgPGFybV9uZW9u Lmg+CisKK2JmbG9hdDE2eDRfdAordGVzdF92bGQxX2R1cF9iZjE2IChiZmxv YXQxNl90ICogcHRyKQoreworICByZXR1cm4gdmxkMV9kdXBfYmYxNiAocHRy KTsKK30KKworYmZsb2F0MTZ4OF90Cit0ZXN0X3ZsZDFxX2R1cF9iZjE2IChi ZmxvYXQxNl90ICogcHRyKQoreworICByZXR1cm4gdmxkMXFfZHVwX2JmMTYg KHB0cik7Cit9CisKK2JmbG9hdDE2eDRfdAordGVzdF92bGQxX2xhbmVfYmYx NiAoYmZsb2F0MTZfdCAqIHB0ciwgYmZsb2F0MTZ4NF90IHNyYykKK3sKKyAg cmV0dXJuIHZsZDFfbGFuZV9iZjE2IChwdHIsIHNyYywgMyk7Cit9CisKK2Jm bG9hdDE2eDhfdAordGVzdF92bGQxcV9sYW5lX2JmMTYgKGJmbG9hdDE2X3Qg KiBwdHIsIGJmbG9hdDE2eDhfdCBzcmMpCit7CisgIHJldHVybiB2bGQxcV9s YW5lX2JmMTYgKHB0ciwgc3JjLCA3KTsKK30KKworYmZsb2F0MTZ4NF90Cit0 ZXN0X3ZsZDFfYmYxNiAoYmZsb2F0MTZfdCAqIHB0cikKK3sKKyAgcmV0dXJu IHZsZDFfYmYxNiAocHRyKTsKK30KKworYmZsb2F0MTZ4OF90Cit0ZXN0X3Zs ZDFxX2JmMTYgKGJmbG9hdDE2X3QgKiBwdHIpCit7CisgIHJldHVybiB2bGQx cV9iZjE2IChwdHIpOworfQorCitiZmxvYXQxNng0eDJfdAordGVzdF92bGQx X2JmMTZfeDIgKGJmbG9hdDE2X3QgKiBwdHIpCit7CisgIHJldHVybiB2bGQx X2JmMTZfeDIgKHB0cik7Cit9CisKK2JmbG9hdDE2eDh4Ml90Cit0ZXN0X3Zs ZDFxX2JmMTZfeDIgKGJmbG9hdDE2X3QgKiBwdHIpCit7CisgIHJldHVybiB2 bGQxcV9iZjE2X3gyIChwdHIpOworfQorCitiZmxvYXQxNng0eDNfdAordGVz dF92bGQxX2JmMTZfeDMgKGJmbG9hdDE2X3QgKiBwdHIpCit7CisgIHJldHVy biB2bGQxX2JmMTZfeDMgKHB0cik7Cit9CisKK2JmbG9hdDE2eDh4M190Cit0 ZXN0X3ZsZDFxX2JmMTZfeDMgKGJmbG9hdDE2X3QgKiBwdHIpCit7CisgIHJl dHVybiB2bGQxcV9iZjE2X3gzIChwdHIpOworfQorCitiZmxvYXQxNng0eDRf dAordGVzdF92bGQxX2JmMTZfeDQgKGJmbG9hdDE2X3QgKiBwdHIpCit7Cisg IHJldHVybiB2bGQxX2JmMTZfeDQgKHB0cik7Cit9CisKK2JmbG9hdDE2eDh4 NF90Cit0ZXN0X3ZsZDFxX2JmMTZfeDQgKGJmbG9hdDE2X3QgKiBwdHIpCit7 CisgIHJldHVybiB2bGQxcV9iZjE2X3g0IChwdHIpOworfQorCitiZmxvYXQx Nng0eDJfdAordGVzdF92bGQyX2JmMTYgKGJmbG9hdDE2X3QgKiBwdHIpCit7 CisgIHJldHVybiB2bGQyX2JmMTYgKHB0cik7Cit9CisKK2JmbG9hdDE2eDh4 Ml90Cit0ZXN0X3ZsZDJxX2JmMTYgKGJmbG9hdDE2X3QgKiBwdHIpCit7Cisg IHJldHVybiB2bGQycV9iZjE2IChwdHIpOworfQorCitiZmxvYXQxNng0eDJf dAordGVzdF92bGQyX2R1cF9iZjE2IChiZmxvYXQxNl90ICogcHRyKQorewor ICByZXR1cm4gdmxkMl9kdXBfYmYxNiAocHRyKTsKK30KKworYmZsb2F0MTZ4 OHgyX3QKK3Rlc3RfdmxkMnFfZHVwX2JmMTYgKGJmbG9hdDE2X3QgKiBwdHIp Cit7CisgIHJldHVybiB2bGQycV9kdXBfYmYxNiAocHRyKTsKK30KKworYmZs b2F0MTZ4NHgzX3QKK3Rlc3RfdmxkM19iZjE2IChiZmxvYXQxNl90ICogcHRy KQoreworICByZXR1cm4gdmxkM19iZjE2IChwdHIpOworfQorCitiZmxvYXQx Nng4eDNfdAordGVzdF92bGQzcV9iZjE2IChiZmxvYXQxNl90ICogcHRyKQor eworICByZXR1cm4gdmxkM3FfYmYxNiAocHRyKTsKK30KKworYmZsb2F0MTZ4 NHgzX3QKK3Rlc3RfdmxkM19kdXBfYmYxNiAoYmZsb2F0MTZfdCAqIHB0cikK K3sKKyAgcmV0dXJuIHZsZDNfZHVwX2JmMTYgKHB0cik7Cit9CisKK2JmbG9h dDE2eDh4M190Cit0ZXN0X3ZsZDNxX2R1cF9iZjE2IChiZmxvYXQxNl90ICog cHRyKQoreworICByZXR1cm4gdmxkM3FfZHVwX2JmMTYgKHB0cik7Cit9CisK K2JmbG9hdDE2eDR4NF90Cit0ZXN0X3ZsZDRfYmYxNiAoYmZsb2F0MTZfdCAq IHB0cikKK3sKKyByZXR1cm4gdmxkNF9iZjE2IChwdHIpOworfQorCitiZmxv YXQxNng4eDRfdAordGVzdF92bGQ0cV9iZjE2IChiZmxvYXQxNl90ICogcHRy KQoreworIHJldHVybiB2bGQ0cV9iZjE2IChwdHIpOworfQorCitiZmxvYXQx Nng0eDRfdAordGVzdF92bGQ0X2R1cF9iZjE2IChiZmxvYXQxNl90ICogcHRy KQoreworICByZXR1cm4gdmxkNF9kdXBfYmYxNiAocHRyKTsKK30KKworYmZs b2F0MTZ4OHg0X3QKK3Rlc3RfdmxkNHFfZHVwX2JmMTYgKGJmbG9hdDE2X3Qg KiBwdHIpCit7CisgIHJldHVybiB2bGQ0cV9kdXBfYmYxNiAocHRyKTsKK30K ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0 L2FkdnNpbWQtaW50cmluc2ljcy9iZjE2X3ZzdG4uYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9hYXJjaDY0L2FkdnNpbWQtaW50cmluc2ljcy9iZjE2 X3ZzdG4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjJiM2VlMzZkZGRh MGE0ODg0MzQwMDAzYWNjMDcxMTA1Yjk3M2MxCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYWR2c2ltZC1p bnRyaW5zaWNzL2JmMTZfdnN0bi5jCkBAIC0wLDAgKzEsMTA3IEBACisvKiB7 IGRnLWRvIGFzc2VtYmxlIHsgdGFyZ2V0IHsgYWFyY2g2NCotKi0qIH0gfSB9 ICovCisvKiB7IGRnLXNraXAtaWYgIiIgeyAqLSotKiB9IHsgIi1mbm8tZmF0 LWx0by1vYmplY3RzIiB9IH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3Rp dmUtdGFyZ2V0IGFybV92OF8yYV9iZjE2X25lb25fb2sgfSAqLworLyogeyBk Zy1hZGQtb3B0aW9ucyBhcm1fdjhfMmFfYmYxNl9uZW9uIH0gICovCisKKyNp bmNsdWRlIDxhcm1fbmVvbi5oPgorCit2b2lkCit0ZXN0X3ZzdDFfYmYxNl94 MiAoYmZsb2F0MTZfdCAqcHRyLCBiZmxvYXQxNng0eDJfdCB2YWwpCit7Cisg IHZzdDFfYmYxNl94MiAocHRyLCB2YWwpOworfQorCit2b2lkCit0ZXN0X3Zz dDFxX2JmMTZfeDIgKGJmbG9hdDE2X3QgKnB0ciwgYmZsb2F0MTZ4OHgyX3Qg dmFsKQoreworICB2c3QxcV9iZjE2X3gyIChwdHIsIHZhbCk7Cit9CisKK3Zv aWQKK3Rlc3RfdnN0MV9iZjE2X3gzIChiZmxvYXQxNl90ICpwdHIsIGJmbG9h dDE2eDR4M190IHZhbCkKK3sKKyAgdnN0MV9iZjE2X3gzIChwdHIsIHZhbCk7 Cit9CisKK3ZvaWQKK3Rlc3RfdnN0MXFfYmYxNl94MyAoYmZsb2F0MTZfdCAq cHRyLCBiZmxvYXQxNng4eDNfdCB2YWwpCit7CisgIHZzdDFxX2JmMTZfeDMg KHB0ciwgdmFsKTsKK30KKwordm9pZAordGVzdF92c3QxX2JmMTZfeDQgKGJm bG9hdDE2X3QgKnB0ciwgYmZsb2F0MTZ4NHg0X3QgdmFsKQoreworICB2c3Qx X2JmMTZfeDQgKHB0ciwgdmFsKTsKK30KKwordm9pZAordGVzdF92c3QxcV9i ZjE2X3g0IChiZmxvYXQxNl90ICpwdHIsIGJmbG9hdDE2eDh4NF90IHZhbCkK K3sKKyAgdnN0MXFfYmYxNl94NCAocHRyLCB2YWwpOworfQorCit2b2lkCit0 ZXN0X3ZzdDFfbGFuZV9iZjE2IChiZmxvYXQxNl90ICpwdHIsIGJmbG9hdDE2 eDRfdCB2YWwpCit7CisgIHZzdDFfbGFuZV9iZjE2IChwdHIsIHZhbCwgMyk7 Cit9CisKK3ZvaWQKK3Rlc3RfdnN0MXFfbGFuZV9iZjE2IChiZmxvYXQxNl90 ICpwdHIsIGJmbG9hdDE2eDhfdCB2YWwpCit7CisgIHZzdDFxX2xhbmVfYmYx NiAocHRyLCB2YWwsIDcpOworfQorCit2b2lkCit0ZXN0X3ZzdDFfYmYxNiAo YmZsb2F0MTZfdCAqcHRyLCBiZmxvYXQxNng0X3QgdmFsKQoreworICB2c3Qx X2JmMTYgKHB0ciwgdmFsKTsKK30KKwordm9pZAordGVzdF92c3QxcV9iZjE2 IChiZmxvYXQxNl90ICpwdHIsIGJmbG9hdDE2eDhfdCB2YWwpCit7CisgIHZz dDFxX2JmMTYgKHB0ciwgdmFsKTsKK30KKwordm9pZAordGVzdF92c3QyX2Jm MTYgKGJmbG9hdDE2X3QgKnB0ciwgYmZsb2F0MTZ4NHgyX3QgdmFsKQorewor ICB2c3QyX2JmMTYgKHB0ciwgdmFsKTsKK30KKwordm9pZAordGVzdF92c3Qy cV9iZjE2IChiZmxvYXQxNl90ICpwdHIsIGJmbG9hdDE2eDh4Ml90IHZhbCkK K3sKKyAgdnN0MnFfYmYxNiAocHRyLCB2YWwpOworfQorCit2b2lkCit0ZXN0 X3ZzdDNfYmYxNiAoYmZsb2F0MTZfdCAqcHRyLCBiZmxvYXQxNng0eDNfdCB2 YWwpCit7CisgIHZzdDNfYmYxNiAocHRyLCB2YWwpOworfQorCit2b2lkCit0 ZXN0X3ZzdDNxX2JmMTYgKGJmbG9hdDE2X3QgKnB0ciwgYmZsb2F0MTZ4OHgz X3QgdmFsKQoreworICB2c3QzcV9iZjE2IChwdHIsIHZhbCk7Cit9CisKK3Zv aWQKK3Rlc3RfdnN0NF9iZjE2IChiZmxvYXQxNl90ICpwdHIsIGJmbG9hdDE2 eDR4NF90IHZhbCkKK3sKKyAgdnN0NF9iZjE2IChwdHIsIHZhbCk7Cit9CisK K3ZvaWQKK3Rlc3RfdnN0NHFfYmYxNiAoYmZsb2F0MTZfdCAqcHRyLCBiZmxv YXQxNng4eDRfdCB2YWwpCit7CisgIHZzdDRxX2JmMTYgKHB0ciwgdmFsKTsK K30KKworaW50IG1haW4oKQoreworICByZXR1cm4gMDsKK30K --------------652D109011D2B0311B6010CE--