Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uPaob-00BCxW-V2 for pgsql-hackers@arkaria.postgresql.org; Thu, 12 Jun 2025 05:49:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uPaoX-009Ush-SR for pgsql-hackers@arkaria.postgresql.org; Thu, 12 Jun 2025 05:49:26 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uPaoX-009UsX-7l for pgsql-hackers@lists.postgresql.org; Thu, 12 Jun 2025 05:49:26 +0000 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uPaoU-001aIV-1Q for pgsql-hackers@postgresql.org; Thu, 12 Jun 2025 05:49:25 +0000 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-747fba9f962so508822b3a.0 for ; Wed, 11 Jun 2025 22:49:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20230601.gappssmtp.com; s=20230601; t=1749707360; x=1750312160; darn=postgresql.org; h=mime-version:user-agent:references:in-reply-to:date:to:from:subject :message-id:from:to:cc:subject:date:message-id:reply-to; bh=mRFH5p8e4/NgqvLHLGAWAJe+70Zl9DejjjsK2Z2rfv4=; b=ksnRUG1qWrMFVSsG9NogCdMd9OcfDgT4DJbbiXoa6PQo+EJjuhI4h9io633fTfbIcC 0MDYrKY/B5ToEdfLfha5EH/22V1FwEJu9pkvMYIJfr0eora5CkxgeTSQf8TFSKorDfN1 IfgDrOBX7IwnR4P+Gpl/TAfvXRSISl9HOgqFsOhi8ZEsD21gPD+xSmoteb/K48bqlJuv OAOR6cMjySY1pS08i+i9iqnBynhGDWko325E5LYdh7vL8ZE07UnavMkW/2Qi4pl/oHKG rxCdS0J48TjXLN6mNQpf9btFHPr5oF9iSXYR8Doi51p85o3YDQ/LIBmS+OiiJ6PiOzIA JRcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749707360; x=1750312160; h=mime-version:user-agent:references:in-reply-to:date:to:from:subject :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=mRFH5p8e4/NgqvLHLGAWAJe+70Zl9DejjjsK2Z2rfv4=; b=tReOhxtBAAYQjVPAsaoU593rK1OUv06LWZyy/Rc5Zedd8A2X+kkGlfc6CSNUxFxAxE v9Qh1PheMCAz8i3ZKPWSi/LD4daBzefIwWvblafkE6Rn8qbTjI7u+lPmXRu9G1KlxRHL A2cnHM4/oqSVkiVPmyJy8v6FHGIGzQnTP6KD3Mn8CzPjXd4vLSoE/sGbyrnGLroEs3ZD RRQZBVqz8a5PFKqKu1BzmOOVl5J4wcXQfa9GasKovTl1k7E3x3I5DgMLwvyIEyZZluyp spd+ipkp/tgLbmShFx4TkKrGxyvEYtoDLiuT3/XETYWHNcxeS2WaEDPclLA3d0r0ReFI a5Pg== X-Forwarded-Encrypted: i=1; AJvYcCXVB7zojSdGUA1ui2gGjAG07JTZFMp0quE8yTr0DNkr/eafPxhuxbH4n67aVczG+tuzEIzrZB/1f2bQbtXV@postgresql.org X-Gm-Message-State: AOJu0YxAn1i08SjYsCcu0Mz6FPVKFq+COcB03w41B5VulR4DTVswqUmI 6aDZRG5P4y69nUQq90d15bSNQbJQpFVgVkXGxe6RPFp3qSNWkK/Hkw3mTfAydp2pMp2pfOONM/Z X/dQ= X-Gm-Gg: ASbGncvNWOfpcdXt6uGI/7jV42cDEXWhEW00dMS0IGFHsjrQjS1jMNhPECgR16vX39+ 3c3JVITdoOwjDEE7AZvQh/z+cDrJQkYv9pD/ZJvhf2CsAJNV4Yf582Of1v4sfH+laurAoZiIDMs 8ze37ewUYZuetrGPZIigKFmuzeda0O2aK5N4lfHX6BJyZY/HxqWfshyanNDhWvrTuDVrxibJowh WwlnP6OPScr9nx1aBn5OMyqRbr6NZvQ0szck1sGPkRlElB8euNFuImCfqsh1mbpiNFDRqd3etob QIk0PPwVxaxs8S8K+lsK6c2z2i7lUqwAczVyKqbnEcITHYkCOqaAKMcqSEvLvN9UrCGqb235C0F Z0VU4OC+0cvKZ8Z60BqJbv9q1q/bjFRAi X-Google-Smtp-Source: AGHT+IHR9LJKQlqIvfgBlsJ7UcaVXDgCjelJnHLU8qSGZ6AD9hRV5PQ31atOuPve/SclaKPWhAO+GA== X-Received: by 2002:a05:6a00:398e:b0:73b:ac3d:9d6b with SMTP id d2e1a72fcca58-7487cf74481mr2823094b3a.4.1749707359490; Wed, 11 Jun 2025 22:49:19 -0700 (PDT) Received: from jeff-ws-bridge.lan (c-76-102-242-158.hsd1.ca.comcast.net. [76.102.242.158]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-748809d28f3sm574435b3a.85.2025.06.11.22.49.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jun 2025 22:49:18 -0700 (PDT) Message-ID: <5c3c03133ea4d4e575690360d891e4e0921780bd.camel@j-davis.com> Subject: Re: Collation & ctype method table, and extension hooks From: Jeff Davis To: Andreas Karlsson , pgsql-hackers@postgresql.org, Peter Eisentraut Date: Wed, 11 Jun 2025 22:49:17 -0700 In-Reply-To: References: <2830211e1b6e6a2e26d845780b03e125281ea17b.camel@j-davis.com> <59da7ee4-5e1a-4727-b464-a603c6ed84cd@proxel.se> <247f18f3-09e5-480d-9222-9d0d9684995f@proxel.se> <78a1b434ff40510dc5aaabe986299a09f4da90cf.camel@j-davis.com> <4548a168-62cd-457b-8d06-9ba7b985c477@proxel.se> <7aa46d77b377428058403723440862d12a8a129a.camel@j-davis.com> <54771b2aa90f0c09085ce3f97d7f07ddce47da55.camel@j-davis.com> <679b689354bc4cd394bac850c7a03454d3412c0b.camel@j-davis.com> <1c1b254807813bb708802d5f766ea97e7f06b265.camel@j-davis.com> Content-Type: multipart/mixed; boundary="=-7K8P5soIlOZqH7Zd8hOj" User-Agent: Evolution 3.52.3-0ubuntu1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-7K8P5soIlOZqH7Zd8hOj Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, 2025-02-07 at 11:19 -0800, Jeff Davis wrote: >=20 > Attached v15. Just a rebase. Attached v16. > * commit this on the grounds that it's a desirable code improvement > and > the worst-case regression isn't a major concern; or I plan to commit this soon after branching.=C2=A0There's a general consensu= s that enabling multi-lib provider support is a good idea, and turning the provider behavior into method tables is a prerequisite for that. I doubt the performance issue will be a serious concern and I don't see a good way to avoid it. Regards, Jeff Davis --=-7K8P5soIlOZqH7Zd8hOj Content-Disposition: attachment; filename*0=v16-0001-Control-ctype-behavior-internally-with-a-method-.pat; filename*1=ch Content-Type: text/x-patch; name="v16-0001-Control-ctype-behavior-internally-with-a-method-.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBjOWE0NjQ0ODNlMzM0MWNjYjgyOGNhMGE2YTVmZDFiNjk4ZDU2Y2VlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBG cmksIDI5IE5vdiAyMDI0IDA5OjM3OjQzIC0wODAwClN1YmplY3Q6IFtQQVRDSCB2MTYgMS80XSBD b250cm9sIGN0eXBlIGJlaGF2aW9yIGludGVybmFsbHkgd2l0aCBhIG1ldGhvZAogdGFibGUuCgpQ cmV2aW91c2x5LCBwYXR0ZXJuIG1hdGNoaW5nIGFuZCBjYXNlIG1hcHBpbmcgYmVoYXZpb3IgYnJh bmNoZWQgYmFzZWQKb24gdGhlIHByb3ZpZGVyLgoKUmVmYWN0b3IgdG8gdXNlIGEgbWV0aG9kIHRh YmxlLCB3aGljaCBpcyBsZXNzIGVycm9yLXByb25lIGFuZCBlYXNpZXIKdG8gaG9vay4KLS0tCiBz cmMvYmFja2VuZC9yZWdleC9yZWdjX3BnX2xvY2FsZS5jICAgICAgICB8IDQyOSArKysrLS0tLS0t LS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZS5jICAgICAgICAgICAgICB8 ICAyMiArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2Vfc3VwcG9ydC5jICAgICAgfCAgIDcg Ky0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyAgICAgICAgIHwgMTIxICsrKy0t LQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMgfCAxMTEgKysrKyst CiBzcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2ljdS5jICAgICB8IDExOSArKysrKy0K IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfbGliYy5jICAgIHwgMzMxICsrKysrKysr KysrKysrKy0tCiBzcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaCAgICAgICAgICAgICB8ICA1 MyArKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgIHwgICAxIC0K IDkgZmlsZXMgY2hhbmdlZCwgNjg2IGluc2VydGlvbnMoKyksIDUwOCBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZWdleC9yZWdjX3BnX2xvY2FsZS5jIGIvc3JjL2JhY2tl bmQvcmVnZXgvcmVnY19wZ19sb2NhbGUuYwppbmRleCA3ODE5M2NmYjk2NC4uZDllYWI1MzU3YmMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlZ2V4L3JlZ2NfcGdfbG9jYWxlLmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVnZXgvcmVnY19wZ19sb2NhbGUuYwpAQCAtMjAsNTggKzIwLDEzIEBACiAjaW5j bHVkZSAiY29tbW9uL3VuaWNvZGVfY2F0ZWdvcnkuaCIKICNpbmNsdWRlICJ1dGlscy9wZ19sb2Nh bGUuaCIKIAotLyoKLSAqIEZvciB0aGUgbGliYyBwcm92aWRlciwgdG8gcHJvdmlkZSBhcyBtdWNo IGZ1bmN0aW9uYWxpdHkgYXMgcG9zc2libGUgb24gYQotICogdmFyaWV0eSBvZiBwbGF0Zm9ybXMg d2l0aG91dCBnb2luZyBzbyBmYXIgYXMgdG8gaW1wbGVtZW50IGV2ZXJ5dGhpbmcgZnJvbQotICog c2NyYXRjaCwgd2UgdXNlIHNldmVyYWwgaW1wbGVtZW50YXRpb24gc3RyYXRlZ2llcyBkZXBlbmRp bmcgb24gdGhlCi0gKiBzaXR1YXRpb246Ci0gKgotICogMS4gSW4gQy9QT1NJWCBjb2xsYXRpb25z LCB3ZSB1c2UgaGFyZC13aXJlZCBjb2RlLiAgV2UgY2FuJ3QgZGVwZW5kIG9uCi0gKiB0aGUgPGN0 eXBlLmg+IGZ1bmN0aW9ucyBzaW5jZSB0aG9zZSB3aWxsIG9iZXkgTENfQ1RZUEUuICBOb3RlIHRo YXQgdGhlc2UKLSAqIGNvbGxhdGlvbnMgZG9uJ3QgZ2l2ZSBhIGZpZyBhYm91dCBtdWx0aWJ5dGUg Y2hhcmFjdGVycy4KLSAqCi0gKiAyLiBXaGVuIHdvcmtpbmcgaW4gVVRGOCBlbmNvZGluZywgd2Ug dXNlIHRoZSA8d2N0eXBlLmg+IGZ1bmN0aW9ucy4KLSAqIFRoaXMgYXNzdW1lcyB0aGF0IGV2ZXJ5 IHBsYXRmb3JtIHVzZXMgVW5pY29kZSBjb2RlcG9pbnRzIGRpcmVjdGx5Ci0gKiBhcyB0aGUgd2No YXJfdCByZXByZXNlbnRhdGlvbiBvZiBVbmljb2RlLiAgKFhYWDogSUNVIG1ha2VzIHRoaXMgYXNz dW1wdGlvbgotICogZXZlbiBmb3Igbm9uLVVURjggZW5jb2RpbmdzLCB3aGljaCBtYXkgYmUgYSBw cm9ibGVtLikgIE9uIHNvbWUgcGxhdGZvcm1zCi0gKiB3Y2hhcl90IGlzIG9ubHkgMTYgYml0cyB3 aWRlLCBzbyB3ZSBoYXZlIHRvIHB1bnQgZm9yIGNvZGVwb2ludHMgPiAweEZGRkYuCi0gKgotICog My4gSW4gYWxsIG90aGVyIGVuY29kaW5ncywgd2UgdXNlIHRoZSA8Y3R5cGUuaD4gZnVuY3Rpb25z IGZvciBwZ193Y2hhcgotICogdmFsdWVzIHVwIHRvIDI1NSwgYW5kIHB1bnQgZm9yIHZhbHVlcyBh Ym92ZSB0aGF0LiAgVGhpcyBpcyAxMDAlIGNvcnJlY3QKLSAqIG9ubHkgaW4gc2luZ2xlLWJ5dGUg ZW5jb2RpbmdzIHN1Y2ggYXMgTEFUSU5uLiAgSG93ZXZlciwgbm9uLVVuaWNvZGUKLSAqIG11bHRp Ynl0ZSBlbmNvZGluZ3MgYXJlIG1vc3RseSBGYXIgRWFzdGVybiBjaGFyYWN0ZXIgc2V0cyBmb3Ig d2hpY2ggdGhlCi0gKiBwcm9wZXJ0aWVzIGJlaW5nIHRlc3RlZCBoZXJlIGFyZW4ndCB2ZXJ5IHJl bGV2YW50IGZvciBoaWdoZXIgY29kZSB2YWx1ZXMKLSAqIGFueXdheS4gIFRoZSBkaWZmaWN1bHR5 IHdpdGggdXNpbmcgdGhlIDx3Y3R5cGUuaD4gZnVuY3Rpb25zIHdpdGgKLSAqIG5vbi1Vbmljb2Rl IG11bHRpYnl0ZSBlbmNvZGluZ3MgaXMgdGhhdCB3ZSBjYW4gaGF2ZSBubyBjZXJ0YWludHkgdGhh dAotICogdGhlIHBsYXRmb3JtJ3Mgd2NoYXJfdCByZXByZXNlbnRhdGlvbiBtYXRjaGVzIHdoYXQg d2UgZG8gaW4gcGdfd2NoYXIKLSAqIGNvbnZlcnNpb25zLgotICoKLSAqIEFzIGEgc3BlY2lhbCBj YXNlLCBpbiB0aGUgImRlZmF1bHQiIGNvbGxhdGlvbiwgKDIpIGFuZCAoMykgZm9yY2UgQVNDSUkK LSAqIGxldHRlcnMgdG8gZm9sbG93IEFTQ0lJIHVwY2FzZS9kb3duY2FzZSBydWxlcywgd2hpbGUg aW4gYSBub24tZGVmYXVsdAotICogY29sbGF0aW9uIHdlIGp1c3QgbGV0IHRoZSBsaWJyYXJ5IGZ1 bmN0aW9ucyBkbyB3aGF0IHRoZXkgd2lsbC4gIFRoZSBjYXNlCi0gKiB3aGVyZSB0aGlzIG1hdHRl cnMgaXMgdHJlYXRtZW50IG9mIEkvaSBpbiBUdXJraXNoLCBhbmQgdGhlIGJlaGF2aW9yIGlzCi0g KiBtZWFudCB0byBtYXRjaCB0aGUgdXBwZXIoKS9sb3dlcigpIFNRTCBmdW5jdGlvbnMuCi0gKgot ICogV2Ugc3RvcmUgdGhlIGFjdGl2ZSBjb2xsYXRpb24gc2V0dGluZyBpbiBzdGF0aWMgdmFyaWFi bGVzLiAgSW4gcHJpbmNpcGxlCi0gKiBpdCBjb3VsZCBiZSBwYXNzZWQgZG93biB0byBoZXJlIHZp YSB0aGUgcmVnZXggbGlicmFyeSdzICJzdHJ1Y3QgdmFycyIgZGF0YQotICogc3RydWN0dXJlOyBi dXQgdGhhdCB3b3VsZCByZXF1aXJlIHNvbWV3aGF0IGludmFzaXZlIGNoYW5nZXMgaW4gdGhlIHJl Z2V4Ci0gKiBsaWJyYXJ5LCBhbmQgcmlnaHQgbm93IHRoZXJlJ3Mgbm8gcmVhbCBiZW5lZml0IHRv IGJlIGdhaW5lZCBmcm9tIHRoYXQuCi0gKgotICogTkI6IHRoZSBjb2RpbmcgaGVyZSBhc3N1bWVz IHBnX3djaGFyIGlzIGFuIHVuc2lnbmVkIHR5cGUuCi0gKi8KLQotdHlwZWRlZiBlbnVtCi17Ci0J UEdfUkVHRVhfU1RSQVRFR1lfQywJCS8qIEMgbG9jYWxlIChlbmNvZGluZyBpbmRlcGVuZGVudCkg Ki8KLQlQR19SRUdFWF9TVFJBVEVHWV9CVUlMVElOLAkvKiBidWlsdC1pbiBVbmljb2RlIHNlbWFu dGljcyAqLwotCVBHX1JFR0VYX1NUUkFURUdZX0xJQkNfV0lERSwJLyogVXNlIGxvY2FsZV90IDx3 Y3R5cGUuaD4gZnVuY3Rpb25zICovCi0JUEdfUkVHRVhfU1RSQVRFR1lfTElCQ18xQllURSwJLyog VXNlIGxvY2FsZV90IDxjdHlwZS5oPiBmdW5jdGlvbnMgKi8KLQlQR19SRUdFWF9TVFJBVEVHWV9J Q1UsCQkvKiBVc2UgSUNVIHVjaGFyLmggZnVuY3Rpb25zICovCi19IFBHX0xvY2FsZV9TdHJhdGVn eTsKLQotc3RhdGljIFBHX0xvY2FsZV9TdHJhdGVneSBwZ19yZWdleF9zdHJhdGVneTsKIHN0YXRp YyBwZ19sb2NhbGVfdCBwZ19yZWdleF9sb2NhbGU7CiAKK3N0YXRpYyBzdHJ1Y3QgcGdfbG9jYWxl X3N0cnVjdCBkdW1teV9jX2xvY2FsZSA9IHsKKwkuY29sbGF0ZV9pc19jID0gdHJ1ZSwKKwkuY3R5 cGVfaXNfYyA9IHRydWUsCit9OworCiAvKgogICogSGFyZC13aXJlZCBjaGFyYWN0ZXIgcHJvcGVy dGllcyBmb3IgQyBsb2NhbGUKICAqLwpAQCAtMjI4LDcgKzE4Myw2IEBAIHZvaWQKIHBnX3NldF9y ZWdleF9jb2xsYXRpb24oT2lkIGNvbGxhdGlvbikKIHsKIAlwZ19sb2NhbGVfdCBsb2NhbGUgPSAw OwotCVBHX0xvY2FsZV9TdHJhdGVneSBzdHJhdGVneTsKIAogCWlmICghT2lkSXNWYWxpZChjb2xs YXRpb24pKQogCXsKQEAgLTI0OSw4ICsyMDMsNyBAQCBwZ19zZXRfcmVnZXhfY29sbGF0aW9uKE9p ZCBjb2xsYXRpb24pCiAJCSAqIGNhdGFsb2cgYWNjZXNzIGlzIGF2YWlsYWJsZSwgc28gd2UgY2Fu J3QgY2FsbAogCQkgKiBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oKS4KIAkJICovCi0JCXN0 cmF0ZWd5ID0gUEdfUkVHRVhfU1RSQVRFR1lfQzsKLQkJbG9jYWxlID0gMDsKKwkJbG9jYWxlID0g JmR1bW15X2NfbG9jYWxlOwogCX0KIAllbHNlCiAJewpAQCAtMjY3LDExMyArMjIwLDQxIEBAIHBn X3NldF9yZWdleF9jb2xsYXRpb24oT2lkIGNvbGxhdGlvbikKIAkJCSAqIEMvUE9TSVggY29sbGF0 aW9ucyB1c2UgdGhpcyBwYXRoIHJlZ2FyZGxlc3Mgb2YgZGF0YWJhc2UKIAkJCSAqIGVuY29kaW5n CiAJCQkgKi8KLQkJCXN0cmF0ZWd5ID0gUEdfUkVHRVhfU1RSQVRFR1lfQzsKLQkJCWxvY2FsZSA9 IDA7Ci0JCX0KLQkJZWxzZSBpZiAobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfQlVJ TFRJTikKLQkJewotCQkJQXNzZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KTsK LQkJCXN0cmF0ZWd5ID0gUEdfUkVHRVhfU1RSQVRFR1lfQlVJTFRJTjsKLQkJfQotI2lmZGVmIFVT RV9JQ1UKLQkJZWxzZSBpZiAobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQot CQl7Ci0JCQlzdHJhdGVneSA9IFBHX1JFR0VYX1NUUkFURUdZX0lDVTsKLQkJfQotI2VuZGlmCi0J CWVsc2UKLQkJewotCQkJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJ QkMpOwotCQkJaWYgKEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KQotCQkJCXN0cmF0 ZWd5ID0gUEdfUkVHRVhfU1RSQVRFR1lfTElCQ19XSURFOwotCQkJZWxzZQotCQkJCXN0cmF0ZWd5 ID0gUEdfUkVHRVhfU1RSQVRFR1lfTElCQ18xQllURTsKKwkJCWxvY2FsZSA9ICZkdW1teV9jX2xv Y2FsZTsKIAkJfQogCX0KIAotCXBnX3JlZ2V4X3N0cmF0ZWd5ID0gc3RyYXRlZ3k7CiAJcGdfcmVn ZXhfbG9jYWxlID0gbG9jYWxlOwogfQogCiBzdGF0aWMgaW50CiBwZ193Y19pc2RpZ2l0KHBnX3dj aGFyIGMpCiB7Ci0Jc3dpdGNoIChwZ19yZWdleF9zdHJhdGVneSkKLQl7Ci0JCWNhc2UgUEdfUkVH RVhfU1RSQVRFR1lfQzoKLQkJCXJldHVybiAoYyA8PSAocGdfd2NoYXIpIDEyNyAmJgotCQkJCQko cGdfY2hhcl9wcm9wZXJ0aWVzW2NdICYgUEdfSVNESUdJVCkpOwotCQljYXNlIFBHX1JFR0VYX1NU UkFURUdZX0JVSUxUSU46Ci0JCQlyZXR1cm4gcGdfdV9pc2RpZ2l0KGMsICFwZ19yZWdleF9sb2Nh bGUtPmluZm8uYnVpbHRpbi5jYXNlbWFwX2Z1bGwpOwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZ X0xJQkNfV0lERToKLQkJCWlmIChzaXplb2Yod2NoYXJfdCkgPj0gNCB8fCBjIDw9IChwZ193Y2hh cikgMHhGRkZGKQotCQkJCXJldHVybiBpc3dkaWdpdF9sKCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xv Y2FsZS0+aW5mby5sdCk7Ci0JCQkvKiBGQUxMIFRIUlUgKi8KLQkJY2FzZSBQR19SRUdFWF9TVFJB VEVHWV9MSUJDXzFCWVRFOgotCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYICYm Ci0JCQkJCWlzZGlnaXRfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZv Lmx0KSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9JQ1U6Ci0jaWZkZWYg VVNFX0lDVQotCQkJcmV0dXJuIHVfaXNkaWdpdChjKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JfQot CXJldHVybiAwOwkJCQkJLyogY2FuJ3QgZ2V0IGhlcmUsIGJ1dCBrZWVwIGNvbXBpbGVyIHF1aWV0 ICovCisJaWYgKHBnX3JlZ2V4X2xvY2FsZS0+Y3R5cGVfaXNfYykKKwkJcmV0dXJuIChjIDw9IChw Z193Y2hhcikgMTI3ICYmCisJCQkJKHBnX2NoYXJfcHJvcGVydGllc1tjXSAmIFBHX0lTRElHSVQp KTsKKwllbHNlCisJCXJldHVybiBwZ19yZWdleF9sb2NhbGUtPmN0eXBlLT53Y19pc2RpZ2l0KGMs IHBnX3JlZ2V4X2xvY2FsZSk7CiB9CiAKIHN0YXRpYyBpbnQKIHBnX3djX2lzYWxwaGEocGdfd2No YXIgYykKIHsKLQlzd2l0Y2ggKHBnX3JlZ2V4X3N0cmF0ZWd5KQotCXsKLQkJY2FzZSBQR19SRUdF WF9TVFJBVEVHWV9DOgotCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgMTI3ICYmCi0JCQkJCShw Z19jaGFyX3Byb3BlcnRpZXNbY10gJiBQR19JU0FMUEhBKSk7Ci0JCWNhc2UgUEdfUkVHRVhfU1RS QVRFR1lfQlVJTFRJTjoKLQkJCXJldHVybiBwZ191X2lzYWxwaGEoYyk7Ci0JCWNhc2UgUEdfUkVH RVhfU1RSQVRFR1lfTElCQ19XSURFOgotCQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMg PD0gKHBnX3djaGFyKSAweEZGRkYpCi0JCQkJcmV0dXJuIGlzd2FscGhhX2woKHdpbnRfdCkgYywg cGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KTsKLQkJCS8qIEZBTEwgVEhSVSAqLwotCQljYXNlIFBH X1JFR0VYX1NUUkFURUdZX0xJQkNfMUJZVEU6Ci0JCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSBV Q0hBUl9NQVggJiYKLQkJCQkJaXNhbHBoYV9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9s b2NhbGUtPmluZm8ubHQpKTsKLQkJCWJyZWFrOwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0lD VToKLSNpZmRlZiBVU0VfSUNVCi0JCQlyZXR1cm4gdV9pc2FscGhhKGMpOwotI2VuZGlmCi0JCQli cmVhazsKLQl9Ci0JcmV0dXJuIDA7CQkJCQkvKiBjYW4ndCBnZXQgaGVyZSwgYnV0IGtlZXAgY29t cGlsZXIgcXVpZXQgKi8KKwlpZiAocGdfcmVnZXhfbG9jYWxlLT5jdHlwZV9pc19jKQorCQlyZXR1 cm4gKGMgPD0gKHBnX3djaGFyKSAxMjcgJiYKKwkJCQkocGdfY2hhcl9wcm9wZXJ0aWVzW2NdICYg UEdfSVNBTFBIQSkpOworCWVsc2UKKwkJcmV0dXJuIHBnX3JlZ2V4X2xvY2FsZS0+Y3R5cGUtPndj X2lzYWxwaGEoYywgcGdfcmVnZXhfbG9jYWxlKTsKIH0KIAogc3RhdGljIGludAogcGdfd2NfaXNh bG51bShwZ193Y2hhciBjKQogewotCXN3aXRjaCAocGdfcmVnZXhfc3RyYXRlZ3kpCi0JewotCQlj YXNlIFBHX1JFR0VYX1NUUkFURUdZX0M6Ci0JCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSAxMjcg JiYKLQkJCQkJKHBnX2NoYXJfcHJvcGVydGllc1tjXSAmIFBHX0lTQUxOVU0pKTsKLQkJY2FzZSBQ R19SRUdFWF9TVFJBVEVHWV9CVUlMVElOOgotCQkJcmV0dXJuIHBnX3VfaXNhbG51bShjLCAhcGdf cmVnZXhfbG9jYWxlLT5pbmZvLmJ1aWx0aW4uY2FzZW1hcF9mdWxsKTsKLQkJY2FzZSBQR19SRUdF WF9TVFJBVEVHWV9MSUJDX1dJREU6Ci0JCQlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQgfHwgYyA8 PSAocGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4gaXN3YWxudW1fbCgod2ludF90KSBjLCBw Z19yZWdleF9sb2NhbGUtPmluZm8ubHQpOwotCQkJLyogRkFMTCBUSFJVICovCi0JCWNhc2UgUEdf UkVHRVhfU1RSQVRFR1lfTElCQ18xQllURToKLQkJCXJldHVybiAoYyA8PSAocGdfd2NoYXIpIFVD SEFSX01BWCAmJgotCQkJCQlpc2FsbnVtX2woKHVuc2lnbmVkIGNoYXIpIGMsIHBnX3JlZ2V4X2xv Y2FsZS0+aW5mby5sdCkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfSUNV OgotI2lmZGVmIFVTRV9JQ1UKLQkJCXJldHVybiB1X2lzYWxudW0oYyk7Ci0jZW5kaWYKLQkJCWJy ZWFrOwotCX0KLQlyZXR1cm4gMDsJCQkJCS8qIGNhbid0IGdldCBoZXJlLCBidXQga2VlcCBjb21w aWxlciBxdWlldCAqLworCWlmIChwZ19yZWdleF9sb2NhbGUtPmN0eXBlX2lzX2MpCisJCXJldHVy biAoYyA8PSAocGdfd2NoYXIpIDEyNyAmJgorCQkJCShwZ19jaGFyX3Byb3BlcnRpZXNbY10gJiBQ R19JU0FMTlVNKSk7CisJZWxzZQorCQlyZXR1cm4gcGdfcmVnZXhfbG9jYWxlLT5jdHlwZS0+d2Nf aXNhbG51bShjLCBwZ19yZWdleF9sb2NhbGUpOwogfQogCiBzdGF0aWMgaW50CkBAIC0zODgsMjMx ICsyNjksODcgQEAgcGdfd2NfaXN3b3JkKHBnX3djaGFyIGMpCiBzdGF0aWMgaW50CiBwZ193Y19p c3VwcGVyKHBnX3djaGFyIGMpCiB7Ci0Jc3dpdGNoIChwZ19yZWdleF9zdHJhdGVneSkKLQl7Ci0J CWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfQzoKLQkJCXJldHVybiAoYyA8PSAocGdfd2NoYXIpIDEy NyAmJgotCQkJCQkocGdfY2hhcl9wcm9wZXJ0aWVzW2NdICYgUEdfSVNVUFBFUikpOwotCQljYXNl IFBHX1JFR0VYX1NUUkFURUdZX0JVSUxUSU46Ci0JCQlyZXR1cm4gcGdfdV9pc3VwcGVyKGMpOwot CQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0xJQkNfV0lERToKLQkJCWlmIChzaXplb2Yod2NoYXJf dCkgPj0gNCB8fCBjIDw9IChwZ193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVybiBpc3d1cHBlcl9s KCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7Ci0JCQkvKiBGQUxMIFRIUlUg Ki8KLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9MSUJDXzFCWVRFOgotCQkJcmV0dXJuIChjIDw9 IChwZ193Y2hhcikgVUNIQVJfTUFYICYmCi0JCQkJCWlzdXBwZXJfbCgodW5zaWduZWQgY2hhcikg YywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19SRUdF WF9TVFJBVEVHWV9JQ1U6Ci0jaWZkZWYgVVNFX0lDVQotCQkJcmV0dXJuIHVfaXN1cHBlcihjKTsK LSNlbmRpZgotCQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwkJCQkJLyogY2FuJ3QgZ2V0IGhlcmUs IGJ1dCBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJaWYgKHBnX3JlZ2V4X2xvY2FsZS0+Y3R5cGVf aXNfYykKKwkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgMTI3ICYmCisJCQkJKHBnX2NoYXJfcHJv cGVydGllc1tjXSAmIFBHX0lTVVBQRVIpKTsKKwllbHNlCisJCXJldHVybiBwZ19yZWdleF9sb2Nh bGUtPmN0eXBlLT53Y19pc3VwcGVyKGMsIHBnX3JlZ2V4X2xvY2FsZSk7CiB9CiAKIHN0YXRpYyBp bnQKIHBnX3djX2lzbG93ZXIocGdfd2NoYXIgYykKIHsKLQlzd2l0Y2ggKHBnX3JlZ2V4X3N0cmF0 ZWd5KQotCXsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9DOgotCQkJcmV0dXJuIChjIDw9IChw Z193Y2hhcikgMTI3ICYmCi0JCQkJCShwZ19jaGFyX3Byb3BlcnRpZXNbY10gJiBQR19JU0xPV0VS KSk7Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfQlVJTFRJTjoKLQkJCXJldHVybiBwZ191X2lz bG93ZXIoYyk7Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfTElCQ19XSURFOgotCQkJaWYgKHNp emVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAweEZGRkYpCi0JCQkJcmV0dXJu IGlzd2xvd2VyX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KTsKLQkJCS8q IEZBTEwgVEhSVSAqLwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0xJQkNfMUJZVEU6Ci0JCQly ZXR1cm4gKGMgPD0gKHBnX3djaGFyKSBVQ0hBUl9NQVggJiYKLQkJCQkJaXNsb3dlcl9sKCh1bnNp Z25lZCBjaGFyKSBjLCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubHQpKTsKLQkJCWJyZWFrOwotCQlj YXNlIFBHX1JFR0VYX1NUUkFURUdZX0lDVToKLSNpZmRlZiBVU0VfSUNVCi0JCQlyZXR1cm4gdV9p c2xvd2VyKGMpOwotI2VuZGlmCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7CQkJCQkvKiBjYW4n dCBnZXQgaGVyZSwgYnV0IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwlpZiAocGdfcmVnZXhfbG9j YWxlLT5jdHlwZV9pc19jKQorCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSAxMjcgJiYKKwkJCQko cGdfY2hhcl9wcm9wZXJ0aWVzW2NdICYgUEdfSVNMT1dFUikpOworCWVsc2UKKwkJcmV0dXJuIHBn X3JlZ2V4X2xvY2FsZS0+Y3R5cGUtPndjX2lzbG93ZXIoYywgcGdfcmVnZXhfbG9jYWxlKTsKIH0K IAogc3RhdGljIGludAogcGdfd2NfaXNncmFwaChwZ193Y2hhciBjKQogewotCXN3aXRjaCAocGdf cmVnZXhfc3RyYXRlZ3kpCi0JewotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0M6Ci0JCQlyZXR1 cm4gKGMgPD0gKHBnX3djaGFyKSAxMjcgJiYKLQkJCQkJKHBnX2NoYXJfcHJvcGVydGllc1tjXSAm IFBHX0lTR1JBUEgpKTsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9CVUlMVElOOgotCQkJcmV0 dXJuIHBnX3VfaXNncmFwaChjKTsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9MSUJDX1dJREU6 Ci0JCQlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQgfHwgYyA8PSAocGdfd2NoYXIpIDB4RkZGRikK LQkJCQlyZXR1cm4gaXN3Z3JhcGhfbCgod2ludF90KSBjLCBwZ19yZWdleF9sb2NhbGUtPmluZm8u bHQpOwotCQkJLyogRkFMTCBUSFJVICovCi0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfTElCQ18x QllURToKLQkJCXJldHVybiAoYyA8PSAocGdfd2NoYXIpIFVDSEFSX01BWCAmJgotCQkJCQlpc2dy YXBoX2woKHVuc2lnbmVkIGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCkpOwotCQkJ YnJlYWs7Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfSUNVOgotI2lmZGVmIFVTRV9JQ1UKLQkJ CXJldHVybiB1X2lzZ3JhcGgoYyk7Ci0jZW5kaWYKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsJ CQkJCS8qIGNhbid0IGdldCBoZXJlLCBidXQga2VlcCBjb21waWxlciBxdWlldCAqLworCWlmIChw Z19yZWdleF9sb2NhbGUtPmN0eXBlX2lzX2MpCisJCXJldHVybiAoYyA8PSAocGdfd2NoYXIpIDEy NyAmJgorCQkJCShwZ19jaGFyX3Byb3BlcnRpZXNbY10gJiBQR19JU0dSQVBIKSk7CisJZWxzZQor CQlyZXR1cm4gcGdfcmVnZXhfbG9jYWxlLT5jdHlwZS0+d2NfaXNncmFwaChjLCBwZ19yZWdleF9s b2NhbGUpOwogfQogCiBzdGF0aWMgaW50CiBwZ193Y19pc3ByaW50KHBnX3djaGFyIGMpCiB7Ci0J c3dpdGNoIChwZ19yZWdleF9zdHJhdGVneSkKLQl7Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lf QzoKLQkJCXJldHVybiAoYyA8PSAocGdfd2NoYXIpIDEyNyAmJgotCQkJCQkocGdfY2hhcl9wcm9w ZXJ0aWVzW2NdICYgUEdfSVNQUklOVCkpOwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0JVSUxU SU46Ci0JCQlyZXR1cm4gcGdfdV9pc3ByaW50KGMpOwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZ X0xJQkNfV0lERToKLQkJCWlmIChzaXplb2Yod2NoYXJfdCkgPj0gNCB8fCBjIDw9IChwZ193Y2hh cikgMHhGRkZGKQotCQkJCXJldHVybiBpc3dwcmludF9sKCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xv Y2FsZS0+aW5mby5sdCk7Ci0JCQkvKiBGQUxMIFRIUlUgKi8KLQkJY2FzZSBQR19SRUdFWF9TVFJB VEVHWV9MSUJDXzFCWVRFOgotCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYICYm Ci0JCQkJCWlzcHJpbnRfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZv Lmx0KSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9JQ1U6Ci0jaWZkZWYg VVNFX0lDVQotCQkJcmV0dXJuIHVfaXNwcmludChjKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JfQot CXJldHVybiAwOwkJCQkJLyogY2FuJ3QgZ2V0IGhlcmUsIGJ1dCBrZWVwIGNvbXBpbGVyIHF1aWV0 ICovCisJaWYgKHBnX3JlZ2V4X2xvY2FsZS0+Y3R5cGVfaXNfYykKKwkJcmV0dXJuIChjIDw9IChw Z193Y2hhcikgMTI3ICYmCisJCQkJKHBnX2NoYXJfcHJvcGVydGllc1tjXSAmIFBHX0lTUFJJTlQp KTsKKwllbHNlCisJCXJldHVybiBwZ19yZWdleF9sb2NhbGUtPmN0eXBlLT53Y19pc3ByaW50KGMs IHBnX3JlZ2V4X2xvY2FsZSk7CiB9CiAKIHN0YXRpYyBpbnQKIHBnX3djX2lzcHVuY3QocGdfd2No YXIgYykKIHsKLQlzd2l0Y2ggKHBnX3JlZ2V4X3N0cmF0ZWd5KQotCXsKLQkJY2FzZSBQR19SRUdF WF9TVFJBVEVHWV9DOgotCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgMTI3ICYmCi0JCQkJCShw Z19jaGFyX3Byb3BlcnRpZXNbY10gJiBQR19JU1BVTkNUKSk7Ci0JCWNhc2UgUEdfUkVHRVhfU1RS QVRFR1lfQlVJTFRJTjoKLQkJCXJldHVybiBwZ191X2lzcHVuY3QoYywgIXBnX3JlZ2V4X2xvY2Fs ZS0+aW5mby5idWlsdGluLmNhc2VtYXBfZnVsbCk7Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lf TElCQ19XSURFOgotCQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFy KSAweEZGRkYpCi0JCQkJcmV0dXJuIGlzd3B1bmN0X2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9j YWxlLT5pbmZvLmx0KTsKLQkJCS8qIEZBTEwgVEhSVSAqLwotCQljYXNlIFBHX1JFR0VYX1NUUkFU RUdZX0xJQkNfMUJZVEU6Ci0JCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSBVQ0hBUl9NQVggJiYK LQkJCQkJaXNwdW5jdF9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9sb2NhbGUtPmluZm8u bHQpKTsKLQkJCWJyZWFrOwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0lDVToKLSNpZmRlZiBV U0VfSUNVCi0JCQlyZXR1cm4gdV9pc3B1bmN0KGMpOwotI2VuZGlmCi0JCQlicmVhazsKLQl9Ci0J cmV0dXJuIDA7CQkJCQkvKiBjYW4ndCBnZXQgaGVyZSwgYnV0IGtlZXAgY29tcGlsZXIgcXVpZXQg Ki8KKwlpZiAocGdfcmVnZXhfbG9jYWxlLT5jdHlwZV9pc19jKQorCQlyZXR1cm4gKGMgPD0gKHBn X3djaGFyKSAxMjcgJiYKKwkJCQkocGdfY2hhcl9wcm9wZXJ0aWVzW2NdICYgUEdfSVNQVU5DVCkp OworCWVsc2UKKwkJcmV0dXJuIHBnX3JlZ2V4X2xvY2FsZS0+Y3R5cGUtPndjX2lzcHVuY3QoYywg cGdfcmVnZXhfbG9jYWxlKTsKIH0KIAogc3RhdGljIGludAogcGdfd2NfaXNzcGFjZShwZ193Y2hh ciBjKQogewotCXN3aXRjaCAocGdfcmVnZXhfc3RyYXRlZ3kpCi0JewotCQljYXNlIFBHX1JFR0VY X1NUUkFURUdZX0M6Ci0JCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSAxMjcgJiYKLQkJCQkJKHBn X2NoYXJfcHJvcGVydGllc1tjXSAmIFBHX0lTU1BBQ0UpKTsKLQkJY2FzZSBQR19SRUdFWF9TVFJB VEVHWV9CVUlMVElOOgotCQkJcmV0dXJuIHBnX3VfaXNzcGFjZShjKTsKLQkJY2FzZSBQR19SRUdF WF9TVFJBVEVHWV9MSUJDX1dJREU6Ci0JCQlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQgfHwgYyA8 PSAocGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4gaXN3c3BhY2VfbCgod2ludF90KSBjLCBw Z19yZWdleF9sb2NhbGUtPmluZm8ubHQpOwotCQkJLyogRkFMTCBUSFJVICovCi0JCWNhc2UgUEdf UkVHRVhfU1RSQVRFR1lfTElCQ18xQllURToKLQkJCXJldHVybiAoYyA8PSAocGdfd2NoYXIpIFVD SEFSX01BWCAmJgotCQkJCQlpc3NwYWNlX2woKHVuc2lnbmVkIGNoYXIpIGMsIHBnX3JlZ2V4X2xv Y2FsZS0+aW5mby5sdCkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfSUNV OgotI2lmZGVmIFVTRV9JQ1UKLQkJCXJldHVybiB1X2lzc3BhY2UoYyk7Ci0jZW5kaWYKLQkJCWJy ZWFrOwotCX0KLQlyZXR1cm4gMDsJCQkJCS8qIGNhbid0IGdldCBoZXJlLCBidXQga2VlcCBjb21w aWxlciBxdWlldCAqLworCWlmIChwZ19yZWdleF9sb2NhbGUtPmN0eXBlX2lzX2MpCisJCXJldHVy biAoYyA8PSAocGdfd2NoYXIpIDEyNyAmJgorCQkJCShwZ19jaGFyX3Byb3BlcnRpZXNbY10gJiBQ R19JU1NQQUNFKSk7CisJZWxzZQorCQlyZXR1cm4gcGdfcmVnZXhfbG9jYWxlLT5jdHlwZS0+d2Nf aXNzcGFjZShjLCBwZ19yZWdleF9sb2NhbGUpOwogfQogCiBzdGF0aWMgcGdfd2NoYXIKIHBnX3dj X3RvdXBwZXIocGdfd2NoYXIgYykKIHsKLQlzd2l0Y2ggKHBnX3JlZ2V4X3N0cmF0ZWd5KQorCWlm IChwZ19yZWdleF9sb2NhbGUtPmN0eXBlX2lzX2MpCiAJewotCQljYXNlIFBHX1JFR0VYX1NUUkFU RUdZX0M6Ci0JCQlpZiAoYyA8PSAocGdfd2NoYXIpIDEyNykKLQkJCQlyZXR1cm4gcGdfYXNjaWlf dG91cHBlcigodW5zaWduZWQgY2hhcikgYyk7Ci0JCQlyZXR1cm4gYzsKLQkJY2FzZSBQR19SRUdF WF9TVFJBVEVHWV9CVUlMVElOOgotCQkJcmV0dXJuIHVuaWNvZGVfdXBwZXJjYXNlX3NpbXBsZShj KTsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9MSUJDX1dJREU6Ci0JCQkvKiBmb3JjZSBDIGJl aGF2aW9yIGZvciBBU0NJSSBjaGFyYWN0ZXJzLCBwZXIgY29tbWVudHMgYWJvdmUgKi8KLQkJCWlm IChwZ19yZWdleF9sb2NhbGUtPmlzX2RlZmF1bHQgJiYgYyA8PSAocGdfd2NoYXIpIDEyNykKLQkJ CQlyZXR1cm4gcGdfYXNjaWlfdG91cHBlcigodW5zaWduZWQgY2hhcikgYyk7Ci0JCQlpZiAoc2l6 ZW9mKHdjaGFyX3QpID49IDQgfHwgYyA8PSAocGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4g dG93dXBwZXJfbCgod2ludF90KSBjLCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubHQpOwotCQkJLyog RkFMTCBUSFJVICovCi0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfTElCQ18xQllURToKLQkJCS8q IGZvcmNlIEMgYmVoYXZpb3IgZm9yIEFTQ0lJIGNoYXJhY3RlcnMsIHBlciBjb21tZW50cyBhYm92 ZSAqLwotCQkJaWYgKHBnX3JlZ2V4X2xvY2FsZS0+aXNfZGVmYXVsdCAmJiBjIDw9IChwZ193Y2hh cikgMTI3KQotCQkJCXJldHVybiBwZ19hc2NpaV90b3VwcGVyKCh1bnNpZ25lZCBjaGFyKSBjKTsK LQkJCWlmIChjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYKQotCQkJCXJldHVybiB0b3VwcGVyX2wo KHVuc2lnbmVkIGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7Ci0JCQlyZXR1cm4g YzsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9JQ1U6Ci0jaWZkZWYgVVNFX0lDVQotCQkJcmV0 dXJuIHVfdG91cHBlcihjKTsKLSNlbmRpZgotCQkJYnJlYWs7CisJCWlmIChjIDw9IChwZ193Y2hh cikgMTI3KQorCQkJcmV0dXJuIHBnX2FzY2lpX3RvdXBwZXIoKHVuc2lnbmVkIGNoYXIpIGMpOwor CQlyZXR1cm4gYzsKIAl9Ci0JcmV0dXJuIDA7CQkJCQkvKiBjYW4ndCBnZXQgaGVyZSwgYnV0IGtl ZXAgY29tcGlsZXIgcXVpZXQgKi8KKwllbHNlCisJCXJldHVybiBwZ19yZWdleF9sb2NhbGUtPmN0 eXBlLT53Y190b3VwcGVyKGMsIHBnX3JlZ2V4X2xvY2FsZSk7CiB9CiAKIHN0YXRpYyBwZ193Y2hh cgogcGdfd2NfdG9sb3dlcihwZ193Y2hhciBjKQogewotCXN3aXRjaCAocGdfcmVnZXhfc3RyYXRl Z3kpCisJaWYgKHBnX3JlZ2V4X2xvY2FsZS0+Y3R5cGVfaXNfYykKIAl7Ci0JCWNhc2UgUEdfUkVH RVhfU1RSQVRFR1lfQzoKLQkJCWlmIChjIDw9IChwZ193Y2hhcikgMTI3KQotCQkJCXJldHVybiBw Z19hc2NpaV90b2xvd2VyKCh1bnNpZ25lZCBjaGFyKSBjKTsKLQkJCXJldHVybiBjOwotCQljYXNl IFBHX1JFR0VYX1NUUkFURUdZX0JVSUxUSU46Ci0JCQlyZXR1cm4gdW5pY29kZV9sb3dlcmNhc2Vf c2ltcGxlKGMpOwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0xJQkNfV0lERToKLQkJCS8qIGZv cmNlIEMgYmVoYXZpb3IgZm9yIEFTQ0lJIGNoYXJhY3RlcnMsIHBlciBjb21tZW50cyBhYm92ZSAq LwotCQkJaWYgKHBnX3JlZ2V4X2xvY2FsZS0+aXNfZGVmYXVsdCAmJiBjIDw9IChwZ193Y2hhcikg MTI3KQotCQkJCXJldHVybiBwZ19hc2NpaV90b2xvd2VyKCh1bnNpZ25lZCBjaGFyKSBjKTsKLQkJ CWlmIChzaXplb2Yod2NoYXJfdCkgPj0gNCB8fCBjIDw9IChwZ193Y2hhcikgMHhGRkZGKQotCQkJ CXJldHVybiB0b3dsb3dlcl9sKCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7 Ci0JCQkvKiBGQUxMIFRIUlUgKi8KLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9MSUJDXzFCWVRF OgotCQkJLyogZm9yY2UgQyBiZWhhdmlvciBmb3IgQVNDSUkgY2hhcmFjdGVycywgcGVyIGNvbW1l bnRzIGFib3ZlICovCi0JCQlpZiAocGdfcmVnZXhfbG9jYWxlLT5pc19kZWZhdWx0ICYmIGMgPD0g KHBnX3djaGFyKSAxMjcpCi0JCQkJcmV0dXJuIHBnX2FzY2lpX3RvbG93ZXIoKHVuc2lnbmVkIGNo YXIpIGMpOwotCQkJaWYgKGMgPD0gKHBnX3djaGFyKSBVQ0hBUl9NQVgpCi0JCQkJcmV0dXJuIHRv bG93ZXJfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KTsKLQkJ CXJldHVybiBjOwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0lDVToKLSNpZmRlZiBVU0VfSUNV Ci0JCQlyZXR1cm4gdV90b2xvd2VyKGMpOwotI2VuZGlmCi0JCQlicmVhazsKKwkJaWYgKGMgPD0g KHBnX3djaGFyKSAxMjcpCisJCQlyZXR1cm4gcGdfYXNjaWlfdG9sb3dlcigodW5zaWduZWQgY2hh cikgYyk7CisJCXJldHVybiBjOwogCX0KLQlyZXR1cm4gMDsJCQkJCS8qIGNhbid0IGdldCBoZXJl LCBidXQga2VlcCBjb21waWxlciBxdWlldCAqLworCWVsc2UKKwkJcmV0dXJuIHBnX3JlZ2V4X2xv Y2FsZS0+Y3R5cGUtPndjX3RvbG93ZXIoYywgcGdfcmVnZXhfbG9jYWxlKTsKIH0KIAogCkBAIC03 MzgsMzcgKzQ3NSwyNSBAQCBwZ19jdHlwZV9nZXRfY2FjaGUocGdfd2NfcHJvYmVmdW5jIHByb2Jl ZnVuYywgaW50IGNjbGFzc2NvZGUpCiAJICogd291bGQgYWx3YXlzIGJlIHRydWUgZm9yIHByb2R1 Y3Rpb24gdmFsdWVzIG9mIE1BWF9TSU1QTEVfQ0hSLCBidXQgaXQncwogCSAqIHVzZWZ1bCB0byBh bGxvdyBpdCB0byBiZSBzbWFsbCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4pCiAJICovCi0Jc3dpdGNo IChwZ19yZWdleF9zdHJhdGVneSkKKwlpZiAocGdfcmVnZXhfbG9jYWxlLT5jdHlwZV9pc19jKQog CXsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9DOgogI2lmIE1BWF9TSU1QTEVfQ0hSID49IDEy NwotCQkJbWF4X2NociA9IChwZ193Y2hhcikgMTI3OwotCQkJcGNjLT5jdi5jY2xhc3Njb2RlID0g LTE7CisJCW1heF9jaHIgPSAocGdfd2NoYXIpIDEyNzsKKwkJcGNjLT5jdi5jY2xhc3Njb2RlID0g LTE7CiAjZWxzZQotCQkJbWF4X2NociA9IChwZ193Y2hhcikgTUFYX1NJTVBMRV9DSFI7CisJCW1h eF9jaHIgPSAocGdfd2NoYXIpIE1BWF9TSU1QTEVfQ0hSOwogI2VuZGlmCi0JCQlicmVhazsKLQkJ Y2FzZSBQR19SRUdFWF9TVFJBVEVHWV9CVUlMVElOOgotCQkJbWF4X2NociA9IChwZ193Y2hhcikg TUFYX1NJTVBMRV9DSFI7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9MSUJD X1dJREU6Ci0JCQltYXhfY2hyID0gKHBnX3djaGFyKSBNQVhfU0lNUExFX0NIUjsKLQkJCWJyZWFr OwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0xJQkNfMUJZVEU6Ci0jaWYgTUFYX1NJTVBMRV9D SFIgPj0gVUNIQVJfTUFYCi0JCQltYXhfY2hyID0gKHBnX3djaGFyKSBVQ0hBUl9NQVg7CisJfQor CWVsc2UKKwl7CisJCWlmIChwZ19yZWdleF9sb2NhbGUtPmN0eXBlLT5tYXhfY2hyICE9IDAgJiYK KwkJCXBnX3JlZ2V4X2xvY2FsZS0+Y3R5cGUtPm1heF9jaHIgPD0gTUFYX1NJTVBMRV9DSFIpCisJ CXsKKwkJCW1heF9jaHIgPSBwZ19yZWdleF9sb2NhbGUtPmN0eXBlLT5tYXhfY2hyOwogCQkJcGNj LT5jdi5jY2xhc3Njb2RlID0gLTE7Ci0jZWxzZQotCQkJbWF4X2NociA9IChwZ193Y2hhcikgTUFY X1NJTVBMRV9DSFI7Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZ X0lDVToKKwkJfQorCQllbHNlCiAJCQltYXhfY2hyID0gKHBnX3djaGFyKSBNQVhfU0lNUExFX0NI UjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQXNzZXJ0KGZhbHNlKTsKLQkJCW1heF9jaHIg PSAwOwkJLyogY2FuJ3QgZ2V0IGhlcmUsIGJ1dCBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0JCQli cmVhazsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2Uu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlLmMKaW5kZXggN2Y0Y2Y2MTQ1ODUuLjQyMTZh YzE3ZjQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlLmMKQEAgLTk4LDcgKzk4LDcgQEAgU0JfbG93ZXJfY2hh cih1bnNpZ25lZCBjaGFyIGMsIHBnX2xvY2FsZV90IGxvY2FsZSkKIAllbHNlIGlmIChsb2NhbGUt PmlzX2RlZmF1bHQpCiAJCXJldHVybiBwZ190b2xvd2VyKGMpOwogCWVsc2UKLQkJcmV0dXJuIHRv bG93ZXJfbChjLCBsb2NhbGUtPmluZm8ubHQpOworCQlyZXR1cm4gY2hhcl90b2xvd2VyKGMsIGxv Y2FsZSk7CiB9CiAKIApAQCAtMjA5LDcgKzIwOSwxNyBAQCBHZW5lcmljX1RleHRfSUNfbGlrZSh0 ZXh0ICpzdHIsIHRleHQgKnBhdCwgT2lkIGNvbGxhdGlvbikKIAkgKiB3YXkuCiAJICovCiAKLQlp ZiAocGdfZGF0YWJhc2VfZW5jb2RpbmdfbWF4X2xlbmd0aCgpID4gMSB8fCAobG9jYWxlLT5wcm92 aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKSkKKwlpZiAobG9jYWxlLT5jdHlwZV9pc19jIHx8CisJ CShjaGFyX3RvbG93ZXJfZW5hYmxlZChsb2NhbGUpICYmCisJCSBwZ19kYXRhYmFzZV9lbmNvZGlu Z19tYXhfbGVuZ3RoKCkgPT0gMSkpCisJeworCQlwID0gVkFSREFUQV9BTlkocGF0KTsKKwkJcGxl biA9IFZBUlNJWkVfQU5ZX0VYSERSKHBhdCk7CisJCXMgPSBWQVJEQVRBX0FOWShzdHIpOworCQlz bGVuID0gVkFSU0laRV9BTllfRVhIRFIoc3RyKTsKKwkJcmV0dXJuIFNCX0lNYXRjaFRleHQocywg c2xlbiwgcCwgcGxlbiwgbG9jYWxlKTsKKwl9CisJZWxzZQogCXsKIAkJcGF0ID0gRGF0dW1HZXRU ZXh0UFAoRGlyZWN0RnVuY3Rpb25DYWxsMUNvbGwobG93ZXIsIGNvbGxhdGlvbiwKIAkJCQkJCQkJ CQkJCQkgUG9pbnRlckdldERhdHVtKHBhdCkpKTsKQEAgLTIyNCwxNCArMjM0LDYgQEAgR2VuZXJp Y19UZXh0X0lDX2xpa2UodGV4dCAqc3RyLCB0ZXh0ICpwYXQsIE9pZCBjb2xsYXRpb24pCiAJCWVs c2UKIAkJCXJldHVybiBNQl9NYXRjaFRleHQocywgc2xlbiwgcCwgcGxlbiwgMCk7CiAJfQotCWVs c2UKLQl7Ci0JCXAgPSBWQVJEQVRBX0FOWShwYXQpOwotCQlwbGVuID0gVkFSU0laRV9BTllfRVhI RFIocGF0KTsKLQkJcyA9IFZBUkRBVEFfQU5ZKHN0cik7Ci0JCXNsZW4gPSBWQVJTSVpFX0FOWV9F WEhEUihzdHIpOwotCQlyZXR1cm4gU0JfSU1hdGNoVGV4dChzLCBzbGVuLCBwLCBwbGVuLCBsb2Nh bGUpOwotCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtl X3N1cHBvcnQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlX3N1cHBvcnQuYwppbmRleCA4 ZmRjNjc3MzcxZi4uOTk5ZjIzZjg2ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9saWtlX3N1cHBvcnQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9zdXBwb3J0 LmMKQEAgLTE0OTUsMTMgKzE0OTUsOCBAQCBwYXR0ZXJuX2NoYXJfaXNhbHBoYShjaGFyIGMsIGJv b2wgaXNfbXVsdGlieXRlLAogewogCWlmIChsb2NhbGUtPmN0eXBlX2lzX2MpCiAJCXJldHVybiAo YyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6Jyk7Ci0JZWxzZSBp ZiAoaXNfbXVsdGlieXRlICYmIElTX0hJR0hCSVRfU0VUKGMpKQotCQlyZXR1cm4gdHJ1ZTsKLQll bHNlIGlmIChsb2NhbGUtPnByb3ZpZGVyICE9IENPTExQUk9WSURFUl9MSUJDKQotCQlyZXR1cm4g SVNfSElHSEJJVF9TRVQoYykgfHwKLQkJCShjID49ICdBJyAmJiBjIDw9ICdaJykgfHwgKGMgPj0g J2EnICYmIGMgPD0gJ3onKTsKIAllbHNlCi0JCXJldHVybiBpc2FscGhhX2woKHVuc2lnbmVkIGNo YXIpIGMsIGxvY2FsZS0+aW5mby5sdCk7CisJCXJldHVybiBjaGFyX2lzX2Nhc2VkKGMsIGxvY2Fs ZSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCmluZGV4IGY1ZTMxYzQzM2EwLi40 NTFhYzRlMmQ5YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwpAQCAtODAsMzEgKzgwLDYg QEAgZXh0ZXJuIHBnX2xvY2FsZV90IGNyZWF0ZV9wZ19sb2NhbGVfaWN1KE9pZCBjb2xsaWQsIE1l bW9yeUNvbnRleHQgY29udGV4dCk7CiBleHRlcm4gcGdfbG9jYWxlX3QgY3JlYXRlX3BnX2xvY2Fs ZV9saWJjKE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiBleHRlcm4gY2hhciAq Z2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbl9saWJjKGNvbnN0IGNoYXIgKmNvbGxjb2xsYXRl KTsKIAotZXh0ZXJuIHNpemVfdCBzdHJsb3dlcl9idWlsdGluKGNoYXIgKmRzdCwgc2l6ZV90IGRz dHNpemUsIGNvbnN0IGNoYXIgKnNyYywKLQkJCQkJCQkgICBzc2l6ZV90IHNyY2xlbiwgcGdfbG9j YWxlX3QgbG9jYWxlKTsKLWV4dGVybiBzaXplX3Qgc3RydGl0bGVfYnVpbHRpbihjaGFyICpkc3Qs IHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCi0JCQkJCQkJICAgc3NpemVfdCBzcmNs ZW4sIHBnX2xvY2FsZV90IGxvY2FsZSk7Ci1leHRlcm4gc2l6ZV90IHN0cnVwcGVyX2J1aWx0aW4o Y2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAotCQkJCQkJCSAgIHNz aXplX3Qgc3JjbGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwotZXh0ZXJuIHNpemVfdCBzdHJmb2xk X2J1aWx0aW4oY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAotCQkJ CQkJCSAgc3NpemVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxvY2FsZSk7Ci0KLWV4dGVybiBzaXpl X3Qgc3RybG93ZXJfaWN1KGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNy YywKLQkJCQkJCSAgIHNzaXplX3Qgc3JjbGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwotZXh0ZXJu IHNpemVfdCBzdHJ0aXRsZV9pY3UoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hh ciAqc3JjLAotCQkJCQkJICAgc3NpemVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxvY2FsZSk7Ci1l eHRlcm4gc2l6ZV90IHN0cnVwcGVyX2ljdShjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25z dCBjaGFyICpzcmMsCi0JCQkJCQkgICBzc2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxlX3QgbG9jYWxl KTsKLWV4dGVybiBzaXplX3Qgc3RyZm9sZF9pY3UoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwg Y29uc3QgY2hhciAqc3JjLAotCQkJCQkJICBzc2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxlX3QgbG9j YWxlKTsKLQotZXh0ZXJuIHNpemVfdCBzdHJsb3dlcl9saWJjKGNoYXIgKmRzdCwgc2l6ZV90IGRz dHNpemUsIGNvbnN0IGNoYXIgKnNyYywKLQkJCQkJCQlzc2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxl X3QgbG9jYWxlKTsKLWV4dGVybiBzaXplX3Qgc3RydGl0bGVfbGliYyhjaGFyICpkc3QsIHNpemVf dCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCi0JCQkJCQkJc3NpemVfdCBzcmNsZW4sIHBnX2xv Y2FsZV90IGxvY2FsZSk7Ci1leHRlcm4gc2l6ZV90IHN0cnVwcGVyX2xpYmMoY2hhciAqZHN0LCBz aXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAotCQkJCQkJCXNzaXplX3Qgc3JjbGVuLCBw Z19sb2NhbGVfdCBsb2NhbGUpOwotCiAvKiBHVUMgc2V0dGluZ3MgKi8KIGNoYXIJICAgKmxvY2Fs ZV9tZXNzYWdlczsKIGNoYXIJICAgKmxvY2FsZV9tb25ldGFyeTsKQEAgLTEwOTMsNiArMTA2OCw5 IEBAIGNyZWF0ZV9wZ19sb2NhbGUoT2lkIGNvbGxpZCwgTWVtb3J5Q29udGV4dCBjb250ZXh0KQog CUFzc2VydCgocmVzdWx0LT5jb2xsYXRlX2lzX2MgJiYgcmVzdWx0LT5jb2xsYXRlID09IE5VTEwp IHx8CiAJCSAgICghcmVzdWx0LT5jb2xsYXRlX2lzX2MgJiYgcmVzdWx0LT5jb2xsYXRlICE9IE5V TEwpKTsKIAorCUFzc2VydCgocmVzdWx0LT5jdHlwZV9pc19jICYmIHJlc3VsdC0+Y3R5cGUgPT0g TlVMTCkgfHwKKwkJICAgKCFyZXN1bHQtPmN0eXBlX2lzX2MgJiYgcmVzdWx0LT5jdHlwZSAhPSBO VUxMKSk7CisKIAlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCB0cCwgQW51bV9wZ19j b2xsYXRpb25fY29sbHZlcnNpb24sCiAJCQkJCQkJJmlzbnVsbCk7CiAJaWYgKCFpc251bGwpCkBA IC0xMjU3LDc3ICsxMjM1LDMxIEBAIHNpemVfdAogcGdfc3RybG93ZXIoY2hhciAqZHN0LCBzaXpl X3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCXBnX2xvY2Fs ZV90IGxvY2FsZSkKIHsKLQlpZiAobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfQlVJ TFRJTikKLQkJcmV0dXJuIHN0cmxvd2VyX2J1aWx0aW4oZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xl biwgbG9jYWxlKTsKLSNpZmRlZiBVU0VfSUNVCi0JZWxzZSBpZiAobG9jYWxlLT5wcm92aWRlciA9 PSBDT0xMUFJPVklERVJfSUNVKQotCQlyZXR1cm4gc3RybG93ZXJfaWN1KGRzdCwgZHN0c2l6ZSwg c3JjLCBzcmNsZW4sIGxvY2FsZSk7Ci0jZW5kaWYKLQllbHNlIGlmIChsb2NhbGUtPnByb3ZpZGVy ID09IENPTExQUk9WSURFUl9MSUJDKQotCQlyZXR1cm4gc3RybG93ZXJfbGliYyhkc3QsIGRzdHNp emUsIHNyYywgc3JjbGVuLCBsb2NhbGUpOwotCWVsc2UKLQkJLyogc2hvdWxkbid0IGhhcHBlbiAq LwotCQlQR0xPQ0FMRV9TVVBQT1JUX0VSUk9SKGxvY2FsZS0+cHJvdmlkZXIpOwotCi0JcmV0dXJu IDA7CQkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJcmV0dXJuIGxvY2FsZS0+Y3R5cGUt PnN0cmxvd2VyKGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sIGxvY2FsZSk7CiB9CiAKIHNpemVf dAogcGdfc3RydGl0bGUoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3Jj LCBzc2l6ZV90IHNyY2xlbiwKIAkJCXBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQlpZiAobG9jYWxl LT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfQlVJTFRJTikKLQkJcmV0dXJuIHN0cnRpdGxlX2J1 aWx0aW4oZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbiwgbG9jYWxlKTsKLSNpZmRlZiBVU0VfSUNV Ci0JZWxzZSBpZiAobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQotCQlyZXR1 cm4gc3RydGl0bGVfaWN1KGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sIGxvY2FsZSk7Ci0jZW5k aWYKLQllbHNlIGlmIChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKQotCQly ZXR1cm4gc3RydGl0bGVfbGliYyhkc3QsIGRzdHNpemUsIHNyYywgc3JjbGVuLCBsb2NhbGUpOwot CWVsc2UKLQkJLyogc2hvdWxkbid0IGhhcHBlbiAqLwotCQlQR0xPQ0FMRV9TVVBQT1JUX0VSUk9S KGxvY2FsZS0+cHJvdmlkZXIpOwotCi0JcmV0dXJuIDA7CQkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1 aWV0ICovCisJcmV0dXJuIGxvY2FsZS0+Y3R5cGUtPnN0cnRpdGxlKGRzdCwgZHN0c2l6ZSwgc3Jj LCBzcmNsZW4sIGxvY2FsZSk7CiB9CiAKIHNpemVfdAogcGdfc3RydXBwZXIoY2hhciAqZHN0LCBz aXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCXBnX2xv Y2FsZV90IGxvY2FsZSkKIHsKLQlpZiAobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJf QlVJTFRJTikKLQkJcmV0dXJuIHN0cnVwcGVyX2J1aWx0aW4oZHN0LCBkc3RzaXplLCBzcmMsIHNy Y2xlbiwgbG9jYWxlKTsKLSNpZmRlZiBVU0VfSUNVCi0JZWxzZSBpZiAobG9jYWxlLT5wcm92aWRl ciA9PSBDT0xMUFJPVklERVJfSUNVKQotCQlyZXR1cm4gc3RydXBwZXJfaWN1KGRzdCwgZHN0c2l6 ZSwgc3JjLCBzcmNsZW4sIGxvY2FsZSk7Ci0jZW5kaWYKLQllbHNlIGlmIChsb2NhbGUtPnByb3Zp ZGVyID09IENPTExQUk9WSURFUl9MSUJDKQotCQlyZXR1cm4gc3RydXBwZXJfbGliYyhkc3QsIGRz dHNpemUsIHNyYywgc3JjbGVuLCBsb2NhbGUpOwotCWVsc2UKLQkJLyogc2hvdWxkbid0IGhhcHBl biAqLwotCQlQR0xPQ0FMRV9TVVBQT1JUX0VSUk9SKGxvY2FsZS0+cHJvdmlkZXIpOwotCi0JcmV0 dXJuIDA7CQkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJcmV0dXJuIGxvY2FsZS0+Y3R5 cGUtPnN0cnVwcGVyKGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sIGxvY2FsZSk7CiB9CiAKIHNp emVfdAogcGdfc3RyZm9sZChjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpz cmMsIHNzaXplX3Qgc3JjbGVuLAogCQkgICBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JaWYgKGxv Y2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0JVSUxUSU4pCi0JCXJldHVybiBzdHJmb2xk X2J1aWx0aW4oZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbiwgbG9jYWxlKTsKLSNpZmRlZiBVU0Vf SUNVCi0JZWxzZSBpZiAobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQotCQly ZXR1cm4gc3RyZm9sZF9pY3UoZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbiwgbG9jYWxlKTsKLSNl bmRpZgotCS8qIGZvciBsaWJjLCBqdXN0IHVzZSBzdHJsb3dlciAqLwotCWVsc2UgaWYgKGxvY2Fs ZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpCi0JCXJldHVybiBzdHJsb3dlcl9saWJj KGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sIGxvY2FsZSk7CisJaWYgKGxvY2FsZS0+Y3R5cGUt PnN0cmZvbGQpCisJCXJldHVybiBsb2NhbGUtPmN0eXBlLT5zdHJmb2xkKGRzdCwgZHN0c2l6ZSwg c3JjLCBzcmNsZW4sIGxvY2FsZSk7CiAJZWxzZQotCQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCi0J CVBHTE9DQUxFX1NVUFBPUlRfRVJST1IobG9jYWxlLT5wcm92aWRlcik7Ci0KLQlyZXR1cm4gMDsJ CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwkJcmV0dXJuIGxvY2FsZS0+Y3R5cGUtPnN0 cmxvd2VyKGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sIGxvY2FsZSk7CiB9CiAKIC8qCkBAIC0x NDY0LDYgKzEzOTYsNDEgQEAgcGdfc3Rybnhmcm1fcHJlZml4KGNoYXIgKmRlc3QsIHNpemVfdCBk ZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAogCXJldHVybiBsb2NhbGUtPmNvbGxhdGUtPnN0cm54 ZnJtX3ByZWZpeChkZXN0LCBkZXN0c2l6ZSwgc3JjLCBzcmNsZW4sIGxvY2FsZSk7CiB9CiAKKy8q CisgKiBjaGFyX2lzX2Nhc2VkKCkKKyAqCisgKiBGdXp6eSB0ZXN0IG9mIHdoZXRoZXIgdGhlIGdp dmVuIGNoYXIgaXMgY2FzZS12YXJ5aW5nIG9yIG5vdC4gVGhlIGFyZ3VtZW50CisgKiBpcyBhIHNp bmdsZSBieXRlLCBzbyBpbiBhIG11bHRpYnl0ZSBlbmNvZGluZywganVzdCBhc3N1bWUgYW55IG5v bi1BU0NJSQorICogY2hhciBpcyBjYXNlLXZhcnlpbmcuCisgKi8KK2Jvb2wKK2NoYXJfaXNfY2Fz ZWQoY2hhciBjaCwgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXJldHVybiBsb2NhbGUtPmN0eXBl LT5jaGFyX2lzX2Nhc2VkKGNoLCBsb2NhbGUpOworfQorCisvKgorICogY2hhcl90b2xvd2VyX2Vu YWJsZWQoKQorICoKKyAqIERvZXMgdGhlIHByb3ZpZGVyIHN1cHBvcnQgY2hhcl90b2xvd2VyKCk/ CisgKi8KK2Jvb2wKK2NoYXJfdG9sb3dlcl9lbmFibGVkKHBnX2xvY2FsZV90IGxvY2FsZSkKK3sK KwlyZXR1cm4gKGxvY2FsZS0+Y3R5cGUtPmNoYXJfdG9sb3dlciAhPSBOVUxMKTsKK30KKworLyoK KyAqIGNoYXJfdG9sb3dlcigpCisgKgorICogQ29udmVydCBjaGFyIChzaW5nbGUtYnl0ZSBlbmNv ZGluZykgdG8gbG93ZXJjYXNlLgorICovCitjaGFyCitjaGFyX3RvbG93ZXIodW5zaWduZWQgY2hh ciBjaCwgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXJldHVybiBsb2NhbGUtPmN0eXBlLT5jaGFy X3RvbG93ZXIoY2gsIGxvY2FsZSk7Cit9CisKIC8qCiAgKiBSZXR1cm4gcmVxdWlyZWQgZW5jb2Rp bmcgSUQgZm9yIHRoZSBnaXZlbiBsb2NhbGUsIG9yIC0xIGlmIGFueSBlbmNvZGluZyBpcwogICog dmFsaWQgZm9yIHRoZSBsb2NhbGUuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQv cGdfbG9jYWxlX2J1aWx0aW4uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVp bHRpbi5jCmluZGV4IGY1MTc2ODgzMGNkLi42ZmUwOTA3MDhmZiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKQEAgLTI1LDE1ICsyNSw2IEBACiBleHRlcm4gcGdf bG9jYWxlX3QgY3JlYXRlX3BnX2xvY2FsZV9idWlsdGluKE9pZCBjb2xsaWQsCiAJCQkJCQkJCQkJ CU1lbW9yeUNvbnRleHQgY29udGV4dCk7CiBleHRlcm4gY2hhciAqZ2V0X2NvbGxhdGlvbl9hY3R1 YWxfdmVyc2lvbl9idWlsdGluKGNvbnN0IGNoYXIgKmNvbGxjb2xsYXRlKTsKLWV4dGVybiBzaXpl X3Qgc3RybG93ZXJfYnVpbHRpbihjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNo YXIgKnNyYywKLQkJCQkJCQkgICBzc2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxlX3QgbG9jYWxlKTsK LWV4dGVybiBzaXplX3Qgc3RydGl0bGVfYnVpbHRpbihjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNp emUsIGNvbnN0IGNoYXIgKnNyYywKLQkJCQkJCQkgICBzc2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxl X3QgbG9jYWxlKTsKLWV4dGVybiBzaXplX3Qgc3RydXBwZXJfYnVpbHRpbihjaGFyICpkZXN0LCBz aXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKLQkJCQkJCQkgICBzc2l6ZV90IHNyY2xl biwgcGdfbG9jYWxlX3QgbG9jYWxlKTsKLWV4dGVybiBzaXplX3Qgc3RyZm9sZF9idWlsdGluKGNo YXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAotCQkJCQkJCSAgc3Np emVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxvY2FsZSk7Ci0KIAogc3RydWN0IFdvcmRCb3VuZGFy eVN0YXRlCiB7CkBAIC03Nyw3ICs2OCw3IEBAIGluaXRjYXBfd2JuZXh0KHZvaWQgKnN0YXRlKQog CXJldHVybiB3YnN0YXRlLT5sZW47CiB9CiAKLXNpemVfdAorc3RhdGljIHNpemVfdAogc3RybG93 ZXJfYnVpbHRpbihjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywg c3NpemVfdCBzcmNsZW4sCiAJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKQEAgLTg1LDcgKzc2 LDcgQEAgc3RybG93ZXJfYnVpbHRpbihjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0 IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiAJCQkJCQkJbG9jYWxlLT5pbmZvLmJ1aWx0aW4u Y2FzZW1hcF9mdWxsKTsKIH0KIAotc2l6ZV90CitzdGF0aWMgc2l6ZV90CiBzdHJ0aXRsZV9idWls dGluKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90 IHNyY2xlbiwKIAkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKQogewpAQCAtMTAzLDcgKzk0LDcgQEAg c3RydGl0bGVfYnVpbHRpbihjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIg KnNyYywgc3NpemVfdCBzcmNsZW4sCiAJCQkJCQkJaW5pdGNhcF93Ym5leHQsICZ3YnN0YXRlKTsK IH0KIAotc2l6ZV90CitzdGF0aWMgc2l6ZV90CiBzdHJ1cHBlcl9idWlsdGluKGNoYXIgKmRlc3Qs IHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCQkg cGdfbG9jYWxlX3QgbG9jYWxlKQogewpAQCAtMTExLDcgKzEwMiw3IEBAIHN0cnVwcGVyX2J1aWx0 aW4oY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qg c3JjbGVuLAogCQkJCQkJCWxvY2FsZS0+aW5mby5idWlsdGluLmNhc2VtYXBfZnVsbCk7CiB9CiAK LXNpemVfdAorc3RhdGljIHNpemVfdAogc3RyZm9sZF9idWlsdGluKGNoYXIgKmRlc3QsIHNpemVf dCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCQlwZ19sb2Nh bGVfdCBsb2NhbGUpCiB7CkBAIC0xMTksNiArMTEwLDk4IEBAIHN0cmZvbGRfYnVpbHRpbihjaGFy ICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4s CiAJCQkJCQkgICBsb2NhbGUtPmluZm8uYnVpbHRpbi5jYXNlbWFwX2Z1bGwpOwogfQogCitzdGF0 aWMgYm9vbAord2NfaXNkaWdpdF9idWlsdGluKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2Nh bGUpCit7CisJcmV0dXJuIHBnX3VfaXNkaWdpdCh3YywgIWxvY2FsZS0+aW5mby5idWlsdGluLmNh c2VtYXBfZnVsbCk7Cit9CisKK3N0YXRpYyBib29sCit3Y19pc2FscGhhX2J1aWx0aW4ocGdfd2No YXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gcGdfdV9pc2FscGhhKHdjKTsK K30KKworc3RhdGljIGJvb2wKK3djX2lzYWxudW1fYnVpbHRpbihwZ193Y2hhciB3YywgcGdfbG9j YWxlX3QgbG9jYWxlKQoreworCXJldHVybiBwZ191X2lzYWxudW0od2MsICFsb2NhbGUtPmluZm8u YnVpbHRpbi5jYXNlbWFwX2Z1bGwpOworfQorCitzdGF0aWMgYm9vbAord2NfaXN1cHBlcl9idWls dGluKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJcmV0dXJuIHBnX3VfaXN1 cHBlcih3Yyk7Cit9CisKK3N0YXRpYyBib29sCit3Y19pc2xvd2VyX2J1aWx0aW4ocGdfd2NoYXIg d2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gcGdfdV9pc2xvd2VyKHdjKTsKK30K Kworc3RhdGljIGJvb2wKK3djX2lzZ3JhcGhfYnVpbHRpbihwZ193Y2hhciB3YywgcGdfbG9jYWxl X3QgbG9jYWxlKQoreworCXJldHVybiBwZ191X2lzZ3JhcGgod2MpOworfQorCitzdGF0aWMgYm9v bAord2NfaXNwcmludF9idWlsdGluKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7 CisJcmV0dXJuIHBnX3VfaXNwcmludCh3Yyk7Cit9CisKK3N0YXRpYyBib29sCit3Y19pc3B1bmN0 X2J1aWx0aW4ocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gcGdf dV9pc3B1bmN0KHdjLCAhbG9jYWxlLT5pbmZvLmJ1aWx0aW4uY2FzZW1hcF9mdWxsKTsKK30KKwor c3RhdGljIGJvb2wKK3djX2lzc3BhY2VfYnVpbHRpbihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3Qg bG9jYWxlKQoreworCXJldHVybiBwZ191X2lzc3BhY2Uod2MpOworfQorCitzdGF0aWMgYm9vbAor Y2hhcl9pc19jYXNlZF9idWlsdGluKGNoYXIgY2gsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwly ZXR1cm4gSVNfSElHSEJJVF9TRVQoY2gpIHx8CisJCShjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8 fCAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6Jyk7Cit9CisKK3N0YXRpYyBwZ193Y2hhcgord2NfdG91 cHBlcl9idWlsdGluKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJcmV0dXJu IHVuaWNvZGVfdXBwZXJjYXNlX3NpbXBsZSh3Yyk7Cit9CisKK3N0YXRpYyBwZ193Y2hhcgord2Nf dG9sb3dlcl9idWlsdGluKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJcmV0 dXJuIHVuaWNvZGVfbG93ZXJjYXNlX3NpbXBsZSh3Yyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgY3R5cGVfbWV0aG9kcyBjdHlwZV9tZXRob2RzX2J1aWx0aW4gPSB7CisJLnN0cmxvd2VyID0g c3RybG93ZXJfYnVpbHRpbiwKKwkuc3RydGl0bGUgPSBzdHJ0aXRsZV9idWlsdGluLAorCS5zdHJ1 cHBlciA9IHN0cnVwcGVyX2J1aWx0aW4sCisJLnN0cmZvbGQgPSBzdHJmb2xkX2J1aWx0aW4sCisJ LndjX2lzZGlnaXQgPSB3Y19pc2RpZ2l0X2J1aWx0aW4sCisJLndjX2lzYWxwaGEgPSB3Y19pc2Fs cGhhX2J1aWx0aW4sCisJLndjX2lzYWxudW0gPSB3Y19pc2FsbnVtX2J1aWx0aW4sCisJLndjX2lz dXBwZXIgPSB3Y19pc3VwcGVyX2J1aWx0aW4sCisJLndjX2lzbG93ZXIgPSB3Y19pc2xvd2VyX2J1 aWx0aW4sCisJLndjX2lzZ3JhcGggPSB3Y19pc2dyYXBoX2J1aWx0aW4sCisJLndjX2lzcHJpbnQg PSB3Y19pc3ByaW50X2J1aWx0aW4sCisJLndjX2lzcHVuY3QgPSB3Y19pc3B1bmN0X2J1aWx0aW4s CisJLndjX2lzc3BhY2UgPSB3Y19pc3NwYWNlX2J1aWx0aW4sCisJLmNoYXJfaXNfY2FzZWQgPSBj aGFyX2lzX2Nhc2VkX2J1aWx0aW4sCisJLndjX3RvbG93ZXIgPSB3Y190b2xvd2VyX2J1aWx0aW4s CisJLndjX3RvdXBwZXIgPSB3Y190b3VwcGVyX2J1aWx0aW4sCit9OworCiBwZ19sb2NhbGVfdAog Y3JlYXRlX3BnX2xvY2FsZV9idWlsdGluKE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4 dCkKIHsKQEAgLTE2Miw2ICsyNDUsOCBAQCBjcmVhdGVfcGdfbG9jYWxlX2J1aWx0aW4oT2lkIGNv bGxpZCwgTWVtb3J5Q29udGV4dCBjb250ZXh0KQogCXJlc3VsdC0+ZGV0ZXJtaW5pc3RpYyA9IHRy dWU7CiAJcmVzdWx0LT5jb2xsYXRlX2lzX2MgPSB0cnVlOwogCXJlc3VsdC0+Y3R5cGVfaXNfYyA9 IChzdHJjbXAobG9jc3RyLCAiQyIpID09IDApOworCWlmICghcmVzdWx0LT5jdHlwZV9pc19jKQor CQlyZXN1bHQtPmN0eXBlID0gJmN0eXBlX21ldGhvZHNfYnVpbHRpbjsKIAogCXJldHVybiByZXN1 bHQ7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2ljdS5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYwppbmRleCBhMzJjMzJhMDc0 NC4uMWY0ZWUyZDE5OTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2Nh bGVfaWN1LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYwpAQCAt NDgsMTkgKzQ4LDIyIEBACiAjZGVmaW5lCQlURVhUQlVGTEVOCQkJMTAyNAogCiBleHRlcm4gcGdf bG9jYWxlX3QgY3JlYXRlX3BnX2xvY2FsZV9pY3UoT2lkIGNvbGxpZCwgTWVtb3J5Q29udGV4dCBj b250ZXh0KTsKLWV4dGVybiBzaXplX3Qgc3RybG93ZXJfaWN1KGNoYXIgKmRlc3QsIHNpemVfdCBk ZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAotCQkJCQkJICAgc3NpemVfdCBzcmNsZW4sIHBnX2xv Y2FsZV90IGxvY2FsZSk7Ci1leHRlcm4gc2l6ZV90IHN0cnRpdGxlX2ljdShjaGFyICpkZXN0LCBz aXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKLQkJCQkJCSAgIHNzaXplX3Qgc3JjbGVu LCBwZ19sb2NhbGVfdCBsb2NhbGUpOwotZXh0ZXJuIHNpemVfdCBzdHJ1cHBlcl9pY3UoY2hhciAq ZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCi0JCQkJCQkgICBzc2l6ZV90 IHNyY2xlbiwgcGdfbG9jYWxlX3QgbG9jYWxlKTsKLWV4dGVybiBzaXplX3Qgc3RyZm9sZF9pY3Uo Y2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCi0JCQkJCQkgIHNz aXplX3Qgc3JjbGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwogCiAjaWZkZWYgVVNFX0lDVQogCiBl eHRlcm4gVUNvbGxhdG9yICpwZ191Y29sX29wZW4oY29uc3QgY2hhciAqbG9jX3N0cik7CiAKK3N0 YXRpYyBzaXplX3Qgc3RybG93ZXJfaWN1KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29u c3QgY2hhciAqc3JjLAorCQkJCQkJICAgc3NpemVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxvY2Fs ZSk7CitzdGF0aWMgc2l6ZV90IHN0cnRpdGxlX2ljdShjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNp emUsIGNvbnN0IGNoYXIgKnNyYywKKwkJCQkJCSAgIHNzaXplX3Qgc3JjbGVuLCBwZ19sb2NhbGVf dCBsb2NhbGUpOworc3RhdGljIHNpemVfdCBzdHJ1cHBlcl9pY3UoY2hhciAqZGVzdCwgc2l6ZV90 IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCisJCQkJCQkgICBzc2l6ZV90IHNyY2xlbiwgcGdf bG9jYWxlX3QgbG9jYWxlKTsKK3N0YXRpYyBzaXplX3Qgc3RyZm9sZF9pY3UoY2hhciAqZGVzdCwg c2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCisJCQkJCQkgIHNzaXplX3Qgc3JjbGVu LCBwZ19sb2NhbGVfdCBsb2NhbGUpOworc3RhdGljIGludAlzdHJuY29sbF9pY3UoY29uc3QgY2hh ciAqYXJnMSwgc3NpemVfdCBsZW4xLAorCQkJCQkJIGNvbnN0IGNoYXIgKmFyZzIsIHNzaXplX3Qg bGVuMiwKKwkJCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpOwogc3RhdGljIHNpemVfdCBzdHJueGZy bV9pY3UoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLAogCQkJCQkJICAgY29uc3QgY2hhciAq c3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCQkJCSAgIHBnX2xvY2FsZV90IGxvY2FsZSk7CkBAIC0x MTgsNiArMTIxLDI1IEBAIHN0YXRpYyBpbnQzMl90IHVfc3RyRm9sZENhc2VfZGVmYXVsdChVQ2hh ciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksCiAJCQkJCQkJCQkgY29uc3QgY2hhciAqbG9j YWxlLAogCQkJCQkJCQkJIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwogCitzdGF0aWMgYm9vbAor Y2hhcl9pc19jYXNlZF9pY3UoY2hhciBjaCwgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXJldHVy biBJU19ISUdIQklUX1NFVChjaCkgfHwKKwkJKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8IChj aCA+PSAnYScgJiYgY2ggPD0gJ3onKTsKK30KKworc3RhdGljIHBnX3djaGFyCit0b3VwcGVyX2lj dShwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXJldHVybiB1X3RvdXBwZXIo d2MpOworfQorCitzdGF0aWMgcGdfd2NoYXIKK3RvbG93ZXJfaWN1KHBnX3djaGFyIHdjLCBwZ19s b2NhbGVfdCBsb2NhbGUpCit7CisJcmV0dXJuIHVfdG9sb3dlcih3Yyk7Cit9CisKIHN0YXRpYyBj b25zdCBzdHJ1Y3QgY29sbGF0ZV9tZXRob2RzIGNvbGxhdGVfbWV0aG9kc19pY3UgPSB7CiAJLnN0 cm5jb2xsID0gc3RybmNvbGxfaWN1LAogCS5zdHJueGZybSA9IHN0cm54ZnJtX2ljdSwKQEAgLTEz Niw2ICsxNTgsNzggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xsYXRlX21ldGhvZHMgY29sbGF0 ZV9tZXRob2RzX2ljdV91dGY4ID0gewogCS5zdHJ4ZnJtX2lzX3NhZmUgPSB0cnVlLAogfTsKIAor c3RhdGljIGJvb2wKK3djX2lzZGlnaXRfaWN1KHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2Nh bGUpCit7CisJcmV0dXJuIHVfaXNkaWdpdCh3Yyk7Cit9CisKK3N0YXRpYyBib29sCit3Y19pc2Fs cGhhX2ljdShwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXJldHVybiB1X2lz YWxwaGEod2MpOworfQorCitzdGF0aWMgYm9vbAord2NfaXNhbG51bV9pY3UocGdfd2NoYXIgd2Ms IHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gdV9pc2FsbnVtKHdjKTsKK30KKworc3Rh dGljIGJvb2wKK3djX2lzdXBwZXJfaWN1KHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUp Cit7CisJcmV0dXJuIHVfaXN1cHBlcih3Yyk7Cit9CisKK3N0YXRpYyBib29sCit3Y19pc2xvd2Vy X2ljdShwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXJldHVybiB1X2lzbG93 ZXIod2MpOworfQorCitzdGF0aWMgYm9vbAord2NfaXNncmFwaF9pY3UocGdfd2NoYXIgd2MsIHBn X2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gdV9pc2dyYXBoKHdjKTsKK30KKworc3RhdGlj IGJvb2wKK3djX2lzcHJpbnRfaWN1KHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7 CisJcmV0dXJuIHVfaXNwcmludCh3Yyk7Cit9CisKK3N0YXRpYyBib29sCit3Y19pc3B1bmN0X2lj dShwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXJldHVybiB1X2lzcHVuY3Qo d2MpOworfQorCitzdGF0aWMgYm9vbAord2NfaXNzcGFjZV9pY3UocGdfd2NoYXIgd2MsIHBnX2xv Y2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gdV9pc3NwYWNlKHdjKTsKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBjdHlwZV9tZXRob2RzIGN0eXBlX21ldGhvZHNfaWN1ID0geworCS5zdHJsb3dl ciA9IHN0cmxvd2VyX2ljdSwKKwkuc3RydGl0bGUgPSBzdHJ0aXRsZV9pY3UsCisJLnN0cnVwcGVy ID0gc3RydXBwZXJfaWN1LAorCS5zdHJmb2xkID0gc3RyZm9sZF9pY3UsCisJLndjX2lzZGlnaXQg PSB3Y19pc2RpZ2l0X2ljdSwKKwkud2NfaXNhbHBoYSA9IHdjX2lzYWxwaGFfaWN1LAorCS53Y19p c2FsbnVtID0gd2NfaXNhbG51bV9pY3UsCisJLndjX2lzdXBwZXIgPSB3Y19pc3VwcGVyX2ljdSwK Kwkud2NfaXNsb3dlciA9IHdjX2lzbG93ZXJfaWN1LAorCS53Y19pc2dyYXBoID0gd2NfaXNncmFw aF9pY3UsCisJLndjX2lzcHJpbnQgPSB3Y19pc3ByaW50X2ljdSwKKwkud2NfaXNwdW5jdCA9IHdj X2lzcHVuY3RfaWN1LAorCS53Y19pc3NwYWNlID0gd2NfaXNzcGFjZV9pY3UsCisJLmNoYXJfaXNf Y2FzZWQgPSBjaGFyX2lzX2Nhc2VkX2ljdSwKKwkud2NfdG91cHBlciA9IHRvdXBwZXJfaWN1LAor CS53Y190b2xvd2VyID0gdG9sb3dlcl9pY3UsCit9OwogI2VuZGlmCiAKIHBnX2xvY2FsZV90CkBA IC0yMDYsNiArMzAwLDcgQEAgY3JlYXRlX3BnX2xvY2FsZV9pY3UoT2lkIGNvbGxpZCwgTWVtb3J5 Q29udGV4dCBjb250ZXh0KQogCQlyZXN1bHQtPmNvbGxhdGUgPSAmY29sbGF0ZV9tZXRob2RzX2lj dV91dGY4OwogCWVsc2UKIAkJcmVzdWx0LT5jb2xsYXRlID0gJmNvbGxhdGVfbWV0aG9kc19pY3U7 CisJcmVzdWx0LT5jdHlwZSA9ICZjdHlwZV9tZXRob2RzX2ljdTsKIAogCXJldHVybiByZXN1bHQ7 CiAjZWxzZQpAQCAtMzc5LDcgKzQ3NCw3IEBAIG1ha2VfaWN1X2NvbGxhdG9yKGNvbnN0IGNoYXIg KmljdWxvY3N0ciwgY29uc3QgY2hhciAqaWN1cnVsZXMpCiAJfQogfQogCi1zaXplX3QKK3N0YXRp YyBzaXplX3QKIHN0cmxvd2VyX2ljdShjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0 IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiAJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKQogewpA QCAtMzk5LDcgKzQ5NCw3IEBAIHN0cmxvd2VyX2ljdShjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNp emUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiAJcmV0dXJuIHJlc3VsdF9sZW47 CiB9CiAKLXNpemVfdAorc3RhdGljIHNpemVfdAogc3RydGl0bGVfaWN1KGNoYXIgKmRlc3QsIHNp emVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCSBwZ19s b2NhbGVfdCBsb2NhbGUpCiB7CkBAIC00MTksNyArNTE0LDcgQEAgc3RydGl0bGVfaWN1KGNoYXIg KmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwK IAlyZXR1cm4gcmVzdWx0X2xlbjsKIH0KIAotc2l6ZV90CitzdGF0aWMgc2l6ZV90CiBzdHJ1cHBl cl9pY3UoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXpl X3Qgc3JjbGVuLAogCQkJIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKQEAgLTQzOSw3ICs1MzQsNyBA QCBzdHJ1cHBlcl9pY3UoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpz cmMsIHNzaXplX3Qgc3JjbGVuLAogCXJldHVybiByZXN1bHRfbGVuOwogfQogCi1zaXplX3QKK3N0 YXRpYyBzaXplX3QKIHN0cmZvbGRfaWN1KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29u c3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCXBnX2xvY2FsZV90IGxvY2FsZSkKIHsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfbGliYy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9saWJjLmMKaW5kZXggMTk5ODU3ZTIyZGIuLmJl NzE0ZGI1MjgzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2xp YmMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2xpYmMuYwpAQCAtMzMs NiArMzMsNDYgQEAKICNpbmNsdWRlIDxzaGx3YXBpLmg+CiAjZW5kaWYKIAorLyoKKyAqIEZvciB0 aGUgbGliYyBwcm92aWRlciwgdG8gcHJvdmlkZSBhcyBtdWNoIGZ1bmN0aW9uYWxpdHkgYXMgcG9z c2libGUgb24gYQorICogdmFyaWV0eSBvZiBwbGF0Zm9ybXMgd2l0aG91dCBnb2luZyBzbyBmYXIg YXMgdG8gaW1wbGVtZW50IGV2ZXJ5dGhpbmcgZnJvbQorICogc2NyYXRjaCwgd2UgdXNlIHNldmVy YWwgaW1wbGVtZW50YXRpb24gc3RyYXRlZ2llcyBkZXBlbmRpbmcgb24gdGhlCisgKiBzaXR1YXRp b246CisgKgorICogMS4gSW4gQy9QT1NJWCBjb2xsYXRpb25zLCB3ZSB1c2UgaGFyZC13aXJlZCBj b2RlLiAgV2UgY2FuJ3QgZGVwZW5kIG9uCisgKiB0aGUgPGN0eXBlLmg+IGZ1bmN0aW9ucyBzaW5j ZSB0aG9zZSB3aWxsIG9iZXkgTENfQ1RZUEUuICBOb3RlIHRoYXQgdGhlc2UKKyAqIGNvbGxhdGlv bnMgZG9uJ3QgZ2l2ZSBhIGZpZyBhYm91dCBtdWx0aWJ5dGUgY2hhcmFjdGVycy4KKyAqCisgKiAy LiBXaGVuIHdvcmtpbmcgaW4gVVRGOCBlbmNvZGluZywgd2UgdXNlIHRoZSA8d2N0eXBlLmg+IGZ1 bmN0aW9ucy4KKyAqIFRoaXMgYXNzdW1lcyB0aGF0IGV2ZXJ5IHBsYXRmb3JtIHVzZXMgVW5pY29k ZSBjb2RlcG9pbnRzIGRpcmVjdGx5CisgKiBhcyB0aGUgd2NoYXJfdCByZXByZXNlbnRhdGlvbiBv ZiBVbmljb2RlLiAgKFhYWDogSUNVIG1ha2VzIHRoaXMgYXNzdW1wdGlvbgorICogZXZlbiBmb3Ig bm9uLVVURjggZW5jb2RpbmdzLCB3aGljaCBtYXkgYmUgYSBwcm9ibGVtLikgIE9uIHNvbWUgcGxh dGZvcm1zCisgKiB3Y2hhcl90IGlzIG9ubHkgMTYgYml0cyB3aWRlLCBzbyB3ZSBoYXZlIHRvIHB1 bnQgZm9yIGNvZGVwb2ludHMgPiAweEZGRkYuCisgKgorICogMy4gSW4gYWxsIG90aGVyIGVuY29k aW5ncywgd2UgdXNlIHRoZSA8Y3R5cGUuaD4gZnVuY3Rpb25zIGZvciBwZ193Y2hhcgorICogdmFs dWVzIHVwIHRvIDI1NSwgYW5kIHB1bnQgZm9yIHZhbHVlcyBhYm92ZSB0aGF0LiAgVGhpcyBpcyAx MDAlIGNvcnJlY3QKKyAqIG9ubHkgaW4gc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIHN1Y2ggYXMgTEFU SU5uLiAgSG93ZXZlciwgbm9uLVVuaWNvZGUKKyAqIG11bHRpYnl0ZSBlbmNvZGluZ3MgYXJlIG1v c3RseSBGYXIgRWFzdGVybiBjaGFyYWN0ZXIgc2V0cyBmb3Igd2hpY2ggdGhlCisgKiBwcm9wZXJ0 aWVzIGJlaW5nIHRlc3RlZCBoZXJlIGFyZW4ndCB2ZXJ5IHJlbGV2YW50IGZvciBoaWdoZXIgY29k ZSB2YWx1ZXMKKyAqIGFueXdheS4gIFRoZSBkaWZmaWN1bHR5IHdpdGggdXNpbmcgdGhlIDx3Y3R5 cGUuaD4gZnVuY3Rpb25zIHdpdGgKKyAqIG5vbi1Vbmljb2RlIG11bHRpYnl0ZSBlbmNvZGluZ3Mg aXMgdGhhdCB3ZSBjYW4gaGF2ZSBubyBjZXJ0YWludHkgdGhhdAorICogdGhlIHBsYXRmb3JtJ3Mg d2NoYXJfdCByZXByZXNlbnRhdGlvbiBtYXRjaGVzIHdoYXQgd2UgZG8gaW4gcGdfd2NoYXIKKyAq IGNvbnZlcnNpb25zLgorICoKKyAqIEFzIGEgc3BlY2lhbCBjYXNlLCBpbiB0aGUgImRlZmF1bHQi IGNvbGxhdGlvbiwgKDIpIGFuZCAoMykgZm9yY2UgQVNDSUkKKyAqIGxldHRlcnMgdG8gZm9sbG93 IEFTQ0lJIHVwY2FzZS9kb3duY2FzZSBydWxlcywgd2hpbGUgaW4gYSBub24tZGVmYXVsdAorICog Y29sbGF0aW9uIHdlIGp1c3QgbGV0IHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucyBkbyB3aGF0IHRoZXkg d2lsbC4gIFRoZSBjYXNlCisgKiB3aGVyZSB0aGlzIG1hdHRlcnMgaXMgdHJlYXRtZW50IG9mIEkv aSBpbiBUdXJraXNoLCBhbmQgdGhlIGJlaGF2aW9yIGlzCisgKiBtZWFudCB0byBtYXRjaCB0aGUg dXBwZXIoKS9sb3dlcigpIFNRTCBmdW5jdGlvbnMuCisgKgorICogV2Ugc3RvcmUgdGhlIGFjdGl2 ZSBjb2xsYXRpb24gc2V0dGluZyBpbiBzdGF0aWMgdmFyaWFibGVzLiAgSW4gcHJpbmNpcGxlCisg KiBpdCBjb3VsZCBiZSBwYXNzZWQgZG93biB0byBoZXJlIHZpYSB0aGUgcmVnZXggbGlicmFyeSdz ICJzdHJ1Y3QgdmFycyIgZGF0YQorICogc3RydWN0dXJlOyBidXQgdGhhdCB3b3VsZCByZXF1aXJl IHNvbWV3aGF0IGludmFzaXZlIGNoYW5nZXMgaW4gdGhlIHJlZ2V4CisgKiBsaWJyYXJ5LCBhbmQg cmlnaHQgbm93IHRoZXJlJ3Mgbm8gcmVhbCBiZW5lZml0IHRvIGJlIGdhaW5lZCBmcm9tIHRoYXQu CisgKgorICogTkI6IHRoZSBjb2RpbmcgaGVyZSBhc3N1bWVzIHBnX3djaGFyIGlzIGFuIHVuc2ln bmVkIHR5cGUuCisgKi8KKwogLyoKICAqIFNpemUgb2Ygc3RhY2sgYnVmZmVyIHRvIHVzZSBmb3Ig c3RyaW5nIHRyYW5zZm9ybWF0aW9ucywgdXNlZCB0byBhdm9pZCBoZWFwCiAgKiBhbGxvY2F0aW9u cyBpbiB0eXBpY2FsIGNhc2VzLiBUaGlzIHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggdGhhdCBtb3N0 IHN0cmluZ3MKQEAgLTQzLDEzICs4Myw2IEBACiAKIGV4dGVybiBwZ19sb2NhbGVfdCBjcmVhdGVf cGdfbG9jYWxlX2xpYmMoT2lkIGNvbGxpZCwgTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKIAotZXh0 ZXJuIHNpemVfdCBzdHJsb3dlcl9saWJjKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0 IGNoYXIgKnNyYywKLQkJCQkJCQlzc2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxlX3QgbG9jYWxlKTsK LWV4dGVybiBzaXplX3Qgc3RydGl0bGVfbGliYyhjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBj b25zdCBjaGFyICpzcmMsCi0JCQkJCQkJc3NpemVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxvY2Fs ZSk7Ci1leHRlcm4gc2l6ZV90IHN0cnVwcGVyX2xpYmMoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6 ZSwgY29uc3QgY2hhciAqc3JjLAotCQkJCQkJCXNzaXplX3Qgc3JjbGVuLCBwZ19sb2NhbGVfdCBs b2NhbGUpOwotCiBzdGF0aWMgaW50CXN0cm5jb2xsX2xpYmMoY29uc3QgY2hhciAqYXJnMSwgc3Np emVfdCBsZW4xLAogCQkJCQkJICBjb25zdCBjaGFyICphcmcyLCBzc2l6ZV90IGxlbjIsCiAJCQkJ CQkgIHBnX2xvY2FsZV90IGxvY2FsZSk7CkBAIC04NSw2ICsxMTgsMjUxIEBAIHN0YXRpYyBzaXpl X3Qgc3RydXBwZXJfbGliY19tYihjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCiAJCQkJCQkJ ICAgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCQkJCQkgICBwZ19sb2NhbGVf dCBsb2NhbGUpOwogCitzdGF0aWMgYm9vbAord2NfaXNkaWdpdF9saWJjX3NiKHBnX3djaGFyIHdj LCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJcmV0dXJuIGlzZGlnaXRfbCgodW5zaWduZWQgY2hh cikgd2MsIGxvY2FsZS0+aW5mby5sdCk7Cit9CisKK3N0YXRpYyBib29sCit3Y19pc2FscGhhX2xp YmNfc2IocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gaXNhbHBo YV9sKCh1bnNpZ25lZCBjaGFyKSB3YywgbG9jYWxlLT5pbmZvLmx0KTsKK30KKworc3RhdGljIGJv b2wKK3djX2lzYWxudW1fbGliY19zYihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQor eworCXJldHVybiBpc2FsbnVtX2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUtPmluZm8ubHQp OworfQorCitzdGF0aWMgYm9vbAord2NfaXN1cHBlcl9saWJjX3NiKHBnX3djaGFyIHdjLCBwZ19s b2NhbGVfdCBsb2NhbGUpCit7CisJcmV0dXJuIGlzdXBwZXJfbCgodW5zaWduZWQgY2hhcikgd2Ms IGxvY2FsZS0+aW5mby5sdCk7Cit9CisKK3N0YXRpYyBib29sCit3Y19pc2xvd2VyX2xpYmNfc2Io cGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gaXNsb3dlcl9sKCh1 bnNpZ25lZCBjaGFyKSB3YywgbG9jYWxlLT5pbmZvLmx0KTsKK30KKworc3RhdGljIGJvb2wKK3dj X2lzZ3JhcGhfbGliY19zYihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXJl dHVybiBpc2dyYXBoX2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUtPmluZm8ubHQpOworfQor CitzdGF0aWMgYm9vbAord2NfaXNwcmludF9saWJjX3NiKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVf dCBsb2NhbGUpCit7CisJcmV0dXJuIGlzcHJpbnRfbCgodW5zaWduZWQgY2hhcikgd2MsIGxvY2Fs ZS0+aW5mby5sdCk7Cit9CisKK3N0YXRpYyBib29sCit3Y19pc3B1bmN0X2xpYmNfc2IocGdfd2No YXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gaXNwdW5jdF9sKCh1bnNpZ25l ZCBjaGFyKSB3YywgbG9jYWxlLT5pbmZvLmx0KTsKK30KKworc3RhdGljIGJvb2wKK3djX2lzc3Bh Y2VfbGliY19zYihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXJldHVybiBp c3NwYWNlX2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUtPmluZm8ubHQpOworfQorCitzdGF0 aWMgYm9vbAord2NfaXNkaWdpdF9saWJjX21iKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2Nh bGUpCit7CisJcmV0dXJuIGlzd2RpZ2l0X2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+aW5mby5sdCk7 Cit9CisKK3N0YXRpYyBib29sCit3Y19pc2FscGhhX2xpYmNfbWIocGdfd2NoYXIgd2MsIHBnX2xv Y2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gaXN3YWxwaGFfbCgod2ludF90KSB3YywgbG9jYWxl LT5pbmZvLmx0KTsKK30KKworc3RhdGljIGJvb2wKK3djX2lzYWxudW1fbGliY19tYihwZ193Y2hh ciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXJldHVybiBpc3dhbG51bV9sKCh3aW50X3Qp IHdjLCBsb2NhbGUtPmluZm8ubHQpOworfQorCitzdGF0aWMgYm9vbAord2NfaXN1cHBlcl9saWJj X21iKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJcmV0dXJuIGlzd3VwcGVy X2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+aW5mby5sdCk7Cit9CisKK3N0YXRpYyBib29sCit3Y19p c2xvd2VyX2xpYmNfbWIocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1 cm4gaXN3bG93ZXJfbCgod2ludF90KSB3YywgbG9jYWxlLT5pbmZvLmx0KTsKK30KKworc3RhdGlj IGJvb2wKK3djX2lzZ3JhcGhfbGliY19tYihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxl KQoreworCXJldHVybiBpc3dncmFwaF9sKCh3aW50X3QpIHdjLCBsb2NhbGUtPmluZm8ubHQpOwor fQorCitzdGF0aWMgYm9vbAord2NfaXNwcmludF9saWJjX21iKHBnX3djaGFyIHdjLCBwZ19sb2Nh bGVfdCBsb2NhbGUpCit7CisJcmV0dXJuIGlzd3ByaW50X2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+ aW5mby5sdCk7Cit9CisKK3N0YXRpYyBib29sCit3Y19pc3B1bmN0X2xpYmNfbWIocGdfd2NoYXIg d2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gaXN3cHVuY3RfbCgod2ludF90KSB3 YywgbG9jYWxlLT5pbmZvLmx0KTsKK30KKworc3RhdGljIGJvb2wKK3djX2lzc3BhY2VfbGliY19t YihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXJldHVybiBpc3dzcGFjZV9s KCh3aW50X3QpIHdjLCBsb2NhbGUtPmluZm8ubHQpOworfQorCitzdGF0aWMgY2hhcgorY2hhcl90 b2xvd2VyX2xpYmModW5zaWduZWQgY2hhciBjaCwgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCUFz c2VydChwZ19kYXRhYmFzZV9lbmNvZGluZ19tYXhfbGVuZ3RoKCkgPT0gMSk7CisJcmV0dXJuIHRv bG93ZXJfbChjaCwgbG9jYWxlLT5pbmZvLmx0KTsKK30KKworc3RhdGljIGJvb2wKK2NoYXJfaXNf Y2FzZWRfbGliYyhjaGFyIGNoLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJYm9vbAkJaXNfbXVs dGlieXRlID0gcGdfZGF0YWJhc2VfZW5jb2RpbmdfbWF4X2xlbmd0aCgpID4gMTsKKworCWlmIChp c19tdWx0aWJ5dGUgJiYgSVNfSElHSEJJVF9TRVQoY2gpKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNl CisJCXJldHVybiBpc2FscGhhX2woKHVuc2lnbmVkIGNoYXIpIGNoLCBsb2NhbGUtPmluZm8ubHQp OworfQorCitzdGF0aWMgcGdfd2NoYXIKK3RvdXBwZXJfbGliY19zYihwZ193Y2hhciB3YywgcGdf bG9jYWxlX3QgbG9jYWxlKQoreworCUFzc2VydChHZXREYXRhYmFzZUVuY29kaW5nKCkgIT0gUEdf VVRGOCk7CisKKwkvKiBmb3JjZSBDIGJlaGF2aW9yIGZvciBBU0NJSSBjaGFyYWN0ZXJzLCBwZXIg Y29tbWVudHMgYWJvdmUgKi8KKwlpZiAobG9jYWxlLT5pc19kZWZhdWx0ICYmIHdjIDw9IChwZ193 Y2hhcikgMTI3KQorCQlyZXR1cm4gcGdfYXNjaWlfdG91cHBlcigodW5zaWduZWQgY2hhcikgd2Mp OworCWlmICh3YyA8PSAocGdfd2NoYXIpIFVDSEFSX01BWCkKKwkJcmV0dXJuIHRvdXBwZXJfbCgo dW5zaWduZWQgY2hhcikgd2MsIGxvY2FsZS0+aW5mby5sdCk7CisJZWxzZQorCQlyZXR1cm4gd2M7 Cit9CisKK3N0YXRpYyBwZ193Y2hhcgordG91cHBlcl9saWJjX21iKHBnX3djaGFyIHdjLCBwZ19s b2NhbGVfdCBsb2NhbGUpCit7CisJQXNzZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19V VEY4KTsKKworCS8qIGZvcmNlIEMgYmVoYXZpb3IgZm9yIEFTQ0lJIGNoYXJhY3RlcnMsIHBlciBj b21tZW50cyBhYm92ZSAqLworCWlmIChsb2NhbGUtPmlzX2RlZmF1bHQgJiYgd2MgPD0gKHBnX3dj aGFyKSAxMjcpCisJCXJldHVybiBwZ19hc2NpaV90b3VwcGVyKCh1bnNpZ25lZCBjaGFyKSB3Yyk7 CisJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IHdjIDw9IChwZ193Y2hhcikgMHhGRkZGKQor CQlyZXR1cm4gdG93dXBwZXJfbCgod2ludF90KSB3YywgbG9jYWxlLT5pbmZvLmx0KTsKKwllbHNl CisJCXJldHVybiB3YzsKK30KKworc3RhdGljIHBnX3djaGFyCit0b2xvd2VyX2xpYmNfc2IocGdf d2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlBc3NlcnQoR2V0RGF0YWJhc2VFbmNv ZGluZygpICE9IFBHX1VURjgpOworCisJLyogZm9yY2UgQyBiZWhhdmlvciBmb3IgQVNDSUkgY2hh cmFjdGVycywgcGVyIGNvbW1lbnRzIGFib3ZlICovCisJaWYgKGxvY2FsZS0+aXNfZGVmYXVsdCAm JiB3YyA8PSAocGdfd2NoYXIpIDEyNykKKwkJcmV0dXJuIHBnX2FzY2lpX3RvbG93ZXIoKHVuc2ln bmVkIGNoYXIpIHdjKTsKKwlpZiAod2MgPD0gKHBnX3djaGFyKSBVQ0hBUl9NQVgpCisJCXJldHVy biB0b2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUtPmluZm8ubHQpOworCWVsc2UK KwkJcmV0dXJuIHdjOworfQorCitzdGF0aWMgcGdfd2NoYXIKK3RvbG93ZXJfbGliY19tYihwZ193 Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCUFzc2VydChHZXREYXRhYmFzZUVuY29k aW5nKCkgPT0gUEdfVVRGOCk7CisKKwkvKiBmb3JjZSBDIGJlaGF2aW9yIGZvciBBU0NJSSBjaGFy YWN0ZXJzLCBwZXIgY29tbWVudHMgYWJvdmUgKi8KKwlpZiAobG9jYWxlLT5pc19kZWZhdWx0ICYm IHdjIDw9IChwZ193Y2hhcikgMTI3KQorCQlyZXR1cm4gcGdfYXNjaWlfdG9sb3dlcigodW5zaWdu ZWQgY2hhcikgd2MpOworCWlmIChzaXplb2Yod2NoYXJfdCkgPj0gNCB8fCB3YyA8PSAocGdfd2No YXIpIDB4RkZGRikKKwkJcmV0dXJuIHRvd2xvd2VyX2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+aW5m by5sdCk7CisJZWxzZQorCQlyZXR1cm4gd2M7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3R5 cGVfbWV0aG9kcyBjdHlwZV9tZXRob2RzX2xpYmNfc2IgPSB7CisJLnN0cmxvd2VyID0gc3RybG93 ZXJfbGliY19zYiwKKwkuc3RydGl0bGUgPSBzdHJ0aXRsZV9saWJjX3NiLAorCS5zdHJ1cHBlciA9 IHN0cnVwcGVyX2xpYmNfc2IsCisJLndjX2lzZGlnaXQgPSB3Y19pc2RpZ2l0X2xpYmNfc2IsCisJ LndjX2lzYWxwaGEgPSB3Y19pc2FscGhhX2xpYmNfc2IsCisJLndjX2lzYWxudW0gPSB3Y19pc2Fs bnVtX2xpYmNfc2IsCisJLndjX2lzdXBwZXIgPSB3Y19pc3VwcGVyX2xpYmNfc2IsCisJLndjX2lz bG93ZXIgPSB3Y19pc2xvd2VyX2xpYmNfc2IsCisJLndjX2lzZ3JhcGggPSB3Y19pc2dyYXBoX2xp YmNfc2IsCisJLndjX2lzcHJpbnQgPSB3Y19pc3ByaW50X2xpYmNfc2IsCisJLndjX2lzcHVuY3Qg PSB3Y19pc3B1bmN0X2xpYmNfc2IsCisJLndjX2lzc3BhY2UgPSB3Y19pc3NwYWNlX2xpYmNfc2Is CisJLmNoYXJfaXNfY2FzZWQgPSBjaGFyX2lzX2Nhc2VkX2xpYmMsCisJLmNoYXJfdG9sb3dlciA9 IGNoYXJfdG9sb3dlcl9saWJjLAorCS53Y190b3VwcGVyID0gdG91cHBlcl9saWJjX3NiLAorCS53 Y190b2xvd2VyID0gdG9sb3dlcl9saWJjX3NiLAorCS5tYXhfY2hyID0gVUNIQVJfTUFYLAorfTsK KworLyoKKyAqIE5vbi1VVEY4IG11bHRpYnl0ZSBlbmNvZGluZ3MgdXNlIG11bHRpYnl0ZSBzZW1h bnRpY3MgZm9yIGNhc2UgbWFwcGluZywgYnV0CisgKiBzaW5nbGUtYnl0ZSBzZW1hbnRpY3MgZm9y IHBhdHRlcm4gbWF0Y2hpbmcuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3R5cGVfbWV0aG9k cyBjdHlwZV9tZXRob2RzX2xpYmNfb3RoZXJfbWIgPSB7CisJLnN0cmxvd2VyID0gc3RybG93ZXJf bGliY19tYiwKKwkuc3RydGl0bGUgPSBzdHJ0aXRsZV9saWJjX21iLAorCS5zdHJ1cHBlciA9IHN0 cnVwcGVyX2xpYmNfbWIsCisJLndjX2lzZGlnaXQgPSB3Y19pc2RpZ2l0X2xpYmNfc2IsCisJLndj X2lzYWxwaGEgPSB3Y19pc2FscGhhX2xpYmNfc2IsCisJLndjX2lzYWxudW0gPSB3Y19pc2FsbnVt X2xpYmNfc2IsCisJLndjX2lzdXBwZXIgPSB3Y19pc3VwcGVyX2xpYmNfc2IsCisJLndjX2lzbG93 ZXIgPSB3Y19pc2xvd2VyX2xpYmNfc2IsCisJLndjX2lzZ3JhcGggPSB3Y19pc2dyYXBoX2xpYmNf c2IsCisJLndjX2lzcHJpbnQgPSB3Y19pc3ByaW50X2xpYmNfc2IsCisJLndjX2lzcHVuY3QgPSB3 Y19pc3B1bmN0X2xpYmNfc2IsCisJLndjX2lzc3BhY2UgPSB3Y19pc3NwYWNlX2xpYmNfc2IsCisJ LmNoYXJfaXNfY2FzZWQgPSBjaGFyX2lzX2Nhc2VkX2xpYmMsCisJLmNoYXJfdG9sb3dlciA9IGNo YXJfdG9sb3dlcl9saWJjLAorCS53Y190b3VwcGVyID0gdG91cHBlcl9saWJjX3NiLAorCS53Y190 b2xvd2VyID0gdG9sb3dlcl9saWJjX3NiLAorCS5tYXhfY2hyID0gVUNIQVJfTUFYLAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBjdHlwZV9tZXRob2RzIGN0eXBlX21ldGhvZHNfbGliY191dGY4 ID0geworCS5zdHJsb3dlciA9IHN0cmxvd2VyX2xpYmNfbWIsCisJLnN0cnRpdGxlID0gc3RydGl0 bGVfbGliY19tYiwKKwkuc3RydXBwZXIgPSBzdHJ1cHBlcl9saWJjX21iLAorCS53Y19pc2RpZ2l0 ID0gd2NfaXNkaWdpdF9saWJjX21iLAorCS53Y19pc2FscGhhID0gd2NfaXNhbHBoYV9saWJjX21i LAorCS53Y19pc2FsbnVtID0gd2NfaXNhbG51bV9saWJjX21iLAorCS53Y19pc3VwcGVyID0gd2Nf aXN1cHBlcl9saWJjX21iLAorCS53Y19pc2xvd2VyID0gd2NfaXNsb3dlcl9saWJjX21iLAorCS53 Y19pc2dyYXBoID0gd2NfaXNncmFwaF9saWJjX21iLAorCS53Y19pc3ByaW50ID0gd2NfaXNwcmlu dF9saWJjX21iLAorCS53Y19pc3B1bmN0ID0gd2NfaXNwdW5jdF9saWJjX21iLAorCS53Y19pc3Nw YWNlID0gd2NfaXNzcGFjZV9saWJjX21iLAorCS5jaGFyX2lzX2Nhc2VkID0gY2hhcl9pc19jYXNl ZF9saWJjLAorCS5jaGFyX3RvbG93ZXIgPSBjaGFyX3RvbG93ZXJfbGliYywKKwkud2NfdG91cHBl ciA9IHRvdXBwZXJfbGliY19tYiwKKwkud2NfdG9sb3dlciA9IHRvbG93ZXJfbGliY19tYiwKK307 CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sbGF0ZV9tZXRob2RzIGNvbGxhdGVfbWV0aG9kc19s aWJjID0gewogCS5zdHJuY29sbCA9IHN0cm5jb2xsX2xpYmMsCiAJLnN0cm54ZnJtID0gc3Rybnhm cm1fbGliYywKQEAgLTExOSwzNiArMzk3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xsYXRl X21ldGhvZHMgY29sbGF0ZV9tZXRob2RzX2xpYmNfd2luMzJfdXRmOCA9IHsKIH07CiAjZW5kaWYK IAotc2l6ZV90Ci1zdHJsb3dlcl9saWJjKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0 IGNoYXIgKnNyYywKLQkJCSAgc3NpemVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxvY2FsZSkKLXsK LQlpZiAocGdfZGF0YWJhc2VfZW5jb2RpbmdfbWF4X2xlbmd0aCgpID4gMSkKLQkJcmV0dXJuIHN0 cmxvd2VyX2xpYmNfbWIoZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbiwgbG9jYWxlKTsKLQllbHNl Ci0JCXJldHVybiBzdHJsb3dlcl9saWJjX3NiKGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sIGxv Y2FsZSk7Ci19Ci0KLXNpemVfdAotc3RydGl0bGVfbGliYyhjaGFyICpkc3QsIHNpemVfdCBkc3Rz aXplLCBjb25zdCBjaGFyICpzcmMsCi0JCQkgIHNzaXplX3Qgc3JjbGVuLCBwZ19sb2NhbGVfdCBs b2NhbGUpCi17Ci0JaWYgKHBnX2RhdGFiYXNlX2VuY29kaW5nX21heF9sZW5ndGgoKSA+IDEpCi0J CXJldHVybiBzdHJ0aXRsZV9saWJjX21iKGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sIGxvY2Fs ZSk7Ci0JZWxzZQotCQlyZXR1cm4gc3RydGl0bGVfbGliY19zYihkc3QsIGRzdHNpemUsIHNyYywg c3JjbGVuLCBsb2NhbGUpOwotfQotCi1zaXplX3QKLXN0cnVwcGVyX2xpYmMoY2hhciAqZHN0LCBz aXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAotCQkJICBzc2l6ZV90IHNyY2xlbiwgcGdf bG9jYWxlX3QgbG9jYWxlKQotewotCWlmIChwZ19kYXRhYmFzZV9lbmNvZGluZ19tYXhfbGVuZ3Ro KCkgPiAxKQotCQlyZXR1cm4gc3RydXBwZXJfbGliY19tYihkc3QsIGRzdHNpemUsIHNyYywgc3Jj bGVuLCBsb2NhbGUpOwotCWVsc2UKLQkJcmV0dXJuIHN0cnVwcGVyX2xpYmNfc2IoZHN0LCBkc3Rz aXplLCBzcmMsIHNyY2xlbiwgbG9jYWxlKTsKLX0KLQogc3RhdGljIHNpemVfdAogc3RybG93ZXJf bGliY19zYihjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3Np emVfdCBzcmNsZW4sCiAJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSkKQEAgLTQ4MSw2ICs3MjksMTUg QEAgY3JlYXRlX3BnX2xvY2FsZV9saWJjKE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4 dCkKICNlbmRpZgogCQkJcmVzdWx0LT5jb2xsYXRlID0gJmNvbGxhdGVfbWV0aG9kc19saWJjOwog CX0KKwlpZiAoIXJlc3VsdC0+Y3R5cGVfaXNfYykKKwl7CisJCWlmIChHZXREYXRhYmFzZUVuY29k aW5nKCkgPT0gUEdfVVRGOCkKKwkJCXJlc3VsdC0+Y3R5cGUgPSAmY3R5cGVfbWV0aG9kc19saWJj X3V0Zjg7CisJCWVsc2UgaWYgKHBnX2RhdGFiYXNlX2VuY29kaW5nX21heF9sZW5ndGgoKSA+IDEp CisJCQlyZXN1bHQtPmN0eXBlID0gJmN0eXBlX21ldGhvZHNfbGliY19vdGhlcl9tYjsKKwkJZWxz ZQorCQkJcmVzdWx0LT5jdHlwZSA9ICZjdHlwZV9tZXRob2RzX2xpYmNfc2I7CisJfQogCiAJcmV0 dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5o IGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgKaW5kZXggN2I4Y2JmNThkMmMuLjBmNDk3 ZmE4Y2UyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaAorKysgYi9z cmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaApAQCAtMTIsNiArMTIsOCBAQAogI2lmbmRlZiBf UEdfTE9DQUxFXwogI2RlZmluZSBfUEdfTE9DQUxFXwogCisjaW5jbHVkZSAibWIvcGdfd2NoYXIu aCIKKwogI2lmZGVmIFVTRV9JQ1UKICNpbmNsdWRlIDx1bmljb2RlL3Vjb2wuaD4KICNlbmRpZgpA QCAtNzcsNiArNzksNTIgQEAgc3RydWN0IGNvbGxhdGVfbWV0aG9kcwogCWJvb2wJCXN0cnhmcm1f aXNfc2FmZTsKIH07CiAKK3N0cnVjdCBjdHlwZV9tZXRob2RzCit7CisJLyogY2FzZSBtYXBwaW5n OiBMT1dFUigpL0lOSVRDQVAoKS9VUFBFUigpICovCisJc2l6ZV90CQkoKnN0cmxvd2VyKSAoY2hh ciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLAorCQkJCQkJCSBjb25zdCBjaGFyICpzcmMsIHNzaXpl X3Qgc3JjbGVuLAorCQkJCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpOworCXNpemVfdAkJKCpzdHJ0 aXRsZSkgKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKKwkJCQkJCQkgY29uc3QgY2hhciAq c3JjLCBzc2l6ZV90IHNyY2xlbiwKKwkJCQkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKwlzaXpl X3QJCSgqc3RydXBwZXIpIChjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCisJCQkJCQkJIGNv bnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCisJCQkJCQkJIHBnX2xvY2FsZV90IGxvY2Fs ZSk7CisJc2l6ZV90CQkoKnN0cmZvbGQpIChjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCisJ CQkJCQkJY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKKwkJCQkJCQlwZ19sb2NhbGVf dCBsb2NhbGUpOworCisJLyogcmVxdWlyZWQgKi8KKwlib29sCQkoKndjX2lzZGlnaXQpIChwZ193 Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKwlib29sCQkoKndjX2lzYWxwaGEpIChwZ193 Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKwlib29sCQkoKndjX2lzYWxudW0pIChwZ193 Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKwlib29sCQkoKndjX2lzdXBwZXIpIChwZ193 Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKwlib29sCQkoKndjX2lzbG93ZXIpIChwZ193 Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKwlib29sCQkoKndjX2lzZ3JhcGgpIChwZ193 Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKwlib29sCQkoKndjX2lzcHJpbnQpIChwZ193 Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKwlib29sCQkoKndjX2lzcHVuY3QpIChwZ193 Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKwlib29sCQkoKndjX2lzc3BhY2UpIChwZ193 Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKwlwZ193Y2hhcgkoKndjX3RvdXBwZXIpIChw Z193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKwlwZ193Y2hhcgkoKndjX3RvbG93ZXIp IChwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKworCS8qIHJlcXVpcmVkICovCisJ Ym9vbAkJKCpjaGFyX2lzX2Nhc2VkKSAoY2hhciBjaCwgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKwor CS8qCisJICogT3B0aW9uYWwuIElmIGRlZmluZWQsIHdpbGwgb25seSBiZSBjYWxsZWQgZm9yIHNp bmdsZS1ieXRlIGVuY29kaW5ncy4gSWYKKwkgKiBub3QgZGVmaW5lZCwgb3IgaWYgdGhlIGVuY29k aW5nIGlzIG11bHRpYnl0ZSwgd2lsbCBmYWxsIGJhY2sgdG8KKwkgKiBwZ19zdHJsb3dlcigpLgor CSAqLworCWNoYXIJCSgqY2hhcl90b2xvd2VyKSAodW5zaWduZWQgY2hhciBjaCwgcGdfbG9jYWxl X3QgbG9jYWxlKTsKKworCS8qCisJICogRm9yIHJlZ2V4IGFuZCBwYXR0ZXJuIG1hdGNoaW5nIGVm ZmljaWVuY3ksIHRoZSBtYXhpbXVtIGNoYXIgdmFsdWUKKwkgKiBzdXBwb3J0ZWQgYnkgdGhlIGFi b3ZlIG1ldGhvZHMuIElmIHplcm8sIGxpbWl0IGlzIHNldCBieSByZWdleCBjb2RlLgorCSAqLwor CXBnX3djaGFyCW1heF9jaHI7Cit9OworCiAvKgogICogV2UgdXNlIGEgZGlzY3JpbWluYXRlZCB1 bmlvbiB0byBob2xkIGVpdGhlciBhIGxvY2FsZV90IG9yIGFuIElDVSBjb2xsYXRvci4KICAqIHBn X2xvY2FsZV90IGlzIG9jY2FzaW9uYWxseSBjaGVja2VkIGZvciB0cnV0aCwgc28gbWFrZSBpdCBh IHBvaW50ZXIuCkBAIC0xMDIsNiArMTUwLDcgQEAgc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QKIAli b29sCQlpc19kZWZhdWx0OwogCiAJY29uc3Qgc3RydWN0IGNvbGxhdGVfbWV0aG9kcyAqY29sbGF0 ZTsJLyogTlVMTCBpZiBjb2xsYXRlX2lzX2MgKi8KKwljb25zdCBzdHJ1Y3QgY3R5cGVfbWV0aG9k cyAqY3R5cGU7CS8qIE5VTEwgaWYgY3R5cGVfaXNfYyAqLwogCiAJdW5pb24KIAl7CkBAIC0xMjUs NiArMTc0LDEwIEBAIGV4dGVybiB2b2lkIGluaXRfZGF0YWJhc2VfY29sbGF0aW9uKHZvaWQpOwog ZXh0ZXJuIHBnX2xvY2FsZV90IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihPaWQgY29sbGlk KTsKIAogZXh0ZXJuIGNoYXIgKmdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oY2hhciBjb2xs cHJvdmlkZXIsIGNvbnN0IGNoYXIgKmNvbGxjb2xsYXRlKTsKKworZXh0ZXJuIGJvb2wgY2hhcl9p c19jYXNlZChjaGFyIGNoLCBwZ19sb2NhbGVfdCBsb2NhbGUpOworZXh0ZXJuIGJvb2wgY2hhcl90 b2xvd2VyX2VuYWJsZWQocGdfbG9jYWxlX3QgbG9jYWxlKTsKK2V4dGVybiBjaGFyIGNoYXJfdG9s b3dlcih1bnNpZ25lZCBjaGFyIGNoLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwogZXh0ZXJuIHNpemVf dCBwZ19zdHJsb3dlcihjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLAogCQkJCQkJICBjb25zdCBj aGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAogCQkJCQkJICBwZ19sb2NhbGVfdCBsb2NhbGUpOwpk aWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBhODM0NmNkYTYzMy4uZWVhOGYxZWVlNmIgMTAw NjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xODcyLDcgKzE4NzIsNiBAQCBQR1RhcmdldFNl cnZlclR5cGUKIFBHVGVybmFyeUJvb2wKIFBHVHJhbnNhY3Rpb25TdGF0dXNUeXBlCiBQR1ZlcmJv c2l0eQotUEdfTG9jYWxlX1N0cmF0ZWd5CiBQR19Mb2NrX1N0YXR1cwogUEdfaW5pdF90CiBQR2F1 dGhEYXRhCi0tIAoyLjQzLjAKCg== --=-7K8P5soIlOZqH7Zd8hOj Content-Disposition: attachment; filename="v16-0002-Remove-provider-field-from-pg_locale_t.patch" Content-Type: text/x-patch; name="v16-0002-Remove-provider-field-from-pg_locale_t.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBhOTViNzcxNTcyZDYyNWI4YmJjZGY2MDk1NWYxMTA3NmI2MzMyNjdkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDcgT2N0IDIwMjQgMTI6NTE6MjcgLTA3MDAKU3ViamVjdDogW1BBVENIIHYxNiAyLzRdIFJl bW92ZSBwcm92aWRlciBmaWVsZCBmcm9tIHBnX2xvY2FsZV90LgoKVGhlIGJlaGF2aW9yIG9mIHBn X2xvY2FsZV90IGlzIGVudGlyZWx5IHNwZWNpZmllZCBieSBtZXRob2RzLCBzbyBhCnNlcGFyYXRl IHByb3ZpZGVyIGZpZWxkIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuCi0tLQogc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMgfCAgMSAtCiBzcmMvYmFja2VuZC91dGlscy9h ZHQvcGdfbG9jYWxlX2ljdS5jICAgICB8IDExIC0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC91dGls cy9hZHQvcGdfbG9jYWxlX2xpYmMuYyAgICB8ICA2IC0tLS0tLQogc3JjL2luY2x1ZGUvdXRpbHMv cGdfbG9jYWxlLmggICAgICAgICAgICAgfCAgMSAtCiA0IGZpbGVzIGNoYW5nZWQsIDE5IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVp bHRpbi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKaW5kZXgg NmZlMDkwNzA4ZmYuLjNmZTQxYzg4MGE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvcGdfbG9jYWxlX2J1aWx0aW4uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9j YWxlX2J1aWx0aW4uYwpAQCAtMjQxLDcgKzI0MSw2IEBAIGNyZWF0ZV9wZ19sb2NhbGVfYnVpbHRp bihPaWQgY29sbGlkLCBNZW1vcnlDb250ZXh0IGNvbnRleHQpCiAKIAlyZXN1bHQtPmluZm8uYnVp bHRpbi5sb2NhbGUgPSBNZW1vcnlDb250ZXh0U3RyZHVwKGNvbnRleHQsIGxvY3N0cik7CiAJcmVz dWx0LT5pbmZvLmJ1aWx0aW4uY2FzZW1hcF9mdWxsID0gKHN0cmNtcChsb2NzdHIsICJQR19VTklD T0RFX0ZBU1QiKSA9PSAwKTsKLQlyZXN1bHQtPnByb3ZpZGVyID0gQ09MTFBST1ZJREVSX0JVSUxU SU47CiAJcmVzdWx0LT5kZXRlcm1pbmlzdGljID0gdHJ1ZTsKIAlyZXN1bHQtPmNvbGxhdGVfaXNf YyA9IHRydWU7CiAJcmVzdWx0LT5jdHlwZV9pc19jID0gKHN0cmNtcChsb2NzdHIsICJDIikgPT0g MCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2ljdS5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYwppbmRleCAxZjRlZTJkMTk5MC4u OTY3NDFlMDgyNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVf aWN1LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYwpAQCAtMjky LDcgKzI5Miw2IEBAIGNyZWF0ZV9wZ19sb2NhbGVfaWN1KE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRl eHQgY29udGV4dCkKIAlyZXN1bHQgPSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvKGNvbnRleHQsIHNp emVvZihzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdCkpOwogCXJlc3VsdC0+aW5mby5pY3UubG9jYWxl ID0gTWVtb3J5Q29udGV4dFN0cmR1cChjb250ZXh0LCBpY3Vsb2NzdHIpOwogCXJlc3VsdC0+aW5m by5pY3UudWNvbCA9IGNvbGxhdG9yOwotCXJlc3VsdC0+cHJvdmlkZXIgPSBDT0xMUFJPVklERVJf SUNVOwogCXJlc3VsdC0+ZGV0ZXJtaW5pc3RpYyA9IGRldGVybWluaXN0aWM7CiAJcmVzdWx0LT5j b2xsYXRlX2lzX2MgPSBmYWxzZTsKIAlyZXN1bHQtPmN0eXBlX2lzX2MgPSBmYWxzZTsKQEAgLTU2 OSw4ICs1NjgsNiBAQCBzdHJuY29sbF9pY3VfdXRmOChjb25zdCBjaGFyICphcmcxLCBzc2l6ZV90 IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsIHNzaXplX3QgbGVuMgogCWludAkJCXJlc3VsdDsKIAlV RXJyb3JDb2RlCXN0YXR1czsKIAotCUFzc2VydChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9W SURFUl9JQ1UpOwotCiAJQXNzZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KTsK IAogCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKQEAgLTU5OCw4ICs1OTUsNiBAQCBzdHJueGZybV9p Y3UoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qg c3JjbGVuLAogCXNpemVfdAkJdWNoYXJfYnNpemU7CiAJU2l6ZQkJcmVzdWx0X2JzaXplOwogCi0J QXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7Ci0KIAlpbml0X2lj dV9jb252ZXJ0ZXIoKTsKIAogCXVsZW4gPSB1Y2hhcl9sZW5ndGgoaWN1X2NvbnZlcnRlciwgc3Jj LCBzcmNsZW4pOwpAQCAtNjQ0LDggKzYzOSw2IEBAIHN0cm54ZnJtX3ByZWZpeF9pY3VfdXRmOChj aGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCiAJdWludDMyX3QJc3RhdGVbMl07CiAJVUVycm9y Q29kZQlzdGF0dXM7CiAKLQlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJf SUNVKTsKLQogCUFzc2VydChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCk7CiAKIAl1 aXRlcl9zZXRVVEY4KCZpdGVyLCBzcmMsIHNyY2xlbik7CkBAIC04NDQsOCArODM3LDYgQEAgc3Ry bmNvbGxfaWN1KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwKIAkJCSAgICp1Y2hhcjI7 CiAJaW50CQkJcmVzdWx0OwogCi0JQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJ REVSX0lDVSk7Ci0KIAkvKiBpZiBlbmNvZGluZyBpcyBVVEY4LCB1c2UgbW9yZSBlZmZpY2llbnQg c3RybmNvbGxfaWN1X3V0ZjggKi8KICNpZmRlZiBIQVZFX1VDT0xfU1RSQ09MTFVURjgKIAlBc3Nl cnQoR2V0RGF0YWJhc2VFbmNvZGluZygpICE9IFBHX1VURjgpOwpAQCAtODk0LDggKzg4NSw2IEBA IHN0cm54ZnJtX3ByZWZpeF9pY3UoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLAogCXNpemVf dAkJdWNoYXJfYnNpemU7CiAJU2l6ZQkJcmVzdWx0X2JzaXplOwogCi0JQXNzZXJ0KGxvY2FsZS0+ cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7Ci0KIAkvKiBpZiBlbmNvZGluZyBpcyBVVEY4 LCB1c2UgbW9yZSBlZmZpY2llbnQgc3Rybnhmcm1fcHJlZml4X2ljdV91dGY4ICovCiAJQXNzZXJ0 KEdldERhdGFiYXNlRW5jb2RpbmcoKSAhPSBQR19VVEY4KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9saWJjLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv cGdfbG9jYWxlX2xpYmMuYwppbmRleCBiZTcxNGRiNTI4My4uZTlmOWZjMWUzNjkgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfbGliYy5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfbGliYy5jCkBAIC03MTMsNyArNzEzLDYgQEAgY3JlYXRl X3BnX2xvY2FsZV9saWJjKE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCkKIAlsb2Mg PSBtYWtlX2xpYmNfY29sbGF0b3IoY29sbGF0ZSwgY3R5cGUpOwogCiAJcmVzdWx0ID0gTWVtb3J5 Q29udGV4dEFsbG9jWmVybyhjb250ZXh0LCBzaXplb2Yoc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3Qp KTsKLQlyZXN1bHQtPnByb3ZpZGVyID0gQ09MTFBST1ZJREVSX0xJQkM7CiAJcmVzdWx0LT5kZXRl cm1pbmlzdGljID0gdHJ1ZTsKIAlyZXN1bHQtPmNvbGxhdGVfaXNfYyA9IChzdHJjbXAoY29sbGF0 ZSwgIkMiKSA9PSAwKSB8fAogCQkoc3RyY21wKGNvbGxhdGUsICJQT1NJWCIpID09IDApOwpAQCAt ODMzLDggKzgzMiw2IEBAIHN0cm5jb2xsX2xpYmMoY29uc3QgY2hhciAqYXJnMSwgc3NpemVfdCBs ZW4xLCBjb25zdCBjaGFyICphcmcyLCBzc2l6ZV90IGxlbjIsCiAJY29uc3QgY2hhciAqYXJnMm47 CiAJaW50CQkJcmVzdWx0OwogCi0JQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJ REVSX0xJQkMpOwotCiAJaWYgKGJ1ZnNpemUxICsgYnVmc2l6ZTIgPiBURVhUQlVGTEVOKQogCQli dWYgPSBwYWxsb2MoYnVmc2l6ZTEgKyBidWZzaXplMik7CiAKQEAgLTg4OSw4ICs4ODYsNiBAQCBz dHJueGZybV9saWJjKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3Jj LCBzc2l6ZV90IHNyY2xlbiwKIAlzaXplX3QJCWJ1ZnNpemUgPSBzcmNsZW4gKyAxOwogCXNpemVf dAkJcmVzdWx0OwogCi0JQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJ QkMpOwotCiAJaWYgKHNyY2xlbiA9PSAtMSkKIAkJcmV0dXJuIHN0cnhmcm1fbChkZXN0LCBzcmMs IGRlc3RzaXplLCBsb2NhbGUtPmluZm8ubHQpOwogCkBAIC05OTksNyArOTk0LDYgQEAgc3RybmNv bGxfbGliY193aW4zMl91dGY4KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwgY29uc3Qg Y2hhciAqYXJnMiwKIAlpbnQJCQlyOwogCWludAkJCXJlc3VsdDsKIAotCUFzc2VydChsb2NhbGUt PnByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKTsKIAlBc3NlcnQoR2V0RGF0YWJhc2VFbmNv ZGluZygpID09IFBHX1VURjgpOwogCiAJaWYgKGxlbjEgPT0gLTEpCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5o CmluZGV4IDBmNDk3ZmE4Y2UyLi40NGZmNjBhMjViNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dXRpbHMvcGdfbG9jYWxlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgKQEAg LTE0Myw3ICsxNDMsNiBAQCBzdHJ1Y3QgY3R5cGVfbWV0aG9kcwogICovCiBzdHJ1Y3QgcGdfbG9j YWxlX3N0cnVjdAogewotCWNoYXIJCXByb3ZpZGVyOwogCWJvb2wJCWRldGVybWluaXN0aWM7CiAJ Ym9vbAkJY29sbGF0ZV9pc19jOwogCWJvb2wJCWN0eXBlX2lzX2M7Ci0tIAoyLjQzLjAKCg== --=-7K8P5soIlOZqH7Zd8hOj Content-Disposition: attachment; filename*0=v16-0003-Make-provider-data-in-pg_locale_t-an-opaque-poin.pat; filename*1=ch Content-Type: text/x-patch; name="v16-0003-Make-provider-data-in-pg_locale_t-an-opaque-poin.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAzYzI1YzZkZmY3ODQyYWQwZjVjMmNkYjg4MGUzZDc0NTc0MmVjM2Q3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDcgT2N0IDIwMjQgMTM6MzY6NDQgLTA3MDAKU3ViamVjdDogW1BBVENIIHYxNiAzLzRdIE1h a2UgcHJvdmlkZXIgZGF0YSBpbiBwZ19sb2NhbGVfdCBhbiBvcGFxdWUgcG9pbnRlci4KCi0tLQog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMgfCAgNTUgKysrKystLQog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYyAgICAgfCAgNDAgKysrKy0tCiBz cmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2xpYmMuYyAgICB8IDE2NyArKysrKysrKysr KysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaCAgICAgICAgICAgICB8 ICAxNyArLS0KIDQgZmlsZXMgY2hhbmdlZCwgMTk2IGluc2VydGlvbnMoKyksIDgzIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRp bi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKaW5kZXggM2Zl NDFjODgwYTYuLjJkMDk1NTI3ZTk2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQv cGdfbG9jYWxlX2J1aWx0aW4uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxl X2J1aWx0aW4uYwpAQCAtMjYsNiArMjYsMTIgQEAgZXh0ZXJuIHBnX2xvY2FsZV90IGNyZWF0ZV9w Z19sb2NhbGVfYnVpbHRpbihPaWQgY29sbGlkLAogCQkJCQkJCQkJCQlNZW1vcnlDb250ZXh0IGNv bnRleHQpOwogZXh0ZXJuIGNoYXIgKmdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb25fYnVpbHRp bihjb25zdCBjaGFyICpjb2xsY29sbGF0ZSk7CiAKK3N0cnVjdCBidWlsdGluX3Byb3ZpZGVyCit7 CisJY29uc3QgY2hhciAqbG9jYWxlOworCWJvb2wJCWNhc2VtYXBfZnVsbDsKK307CisKIHN0cnVj dCBXb3JkQm91bmRhcnlTdGF0ZQogewogCWNvbnN0IGNoYXIgKnN0cjsKQEAgLTcyLDI1ICs3OCwz MCBAQCBzdGF0aWMgc2l6ZV90CiBzdHJsb3dlcl9idWlsdGluKGNoYXIgKmRlc3QsIHNpemVfdCBk ZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCQkgcGdfbG9jYWxl X3QgbG9jYWxlKQogeworCXN0cnVjdCBidWlsdGluX3Byb3ZpZGVyICpidWlsdGluOworCisJYnVp bHRpbiA9IChzdHJ1Y3QgYnVpbHRpbl9wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7 CisKIAlyZXR1cm4gdW5pY29kZV9zdHJsb3dlcihkZXN0LCBkZXN0c2l6ZSwgc3JjLCBzcmNsZW4s Ci0JCQkJCQkJbG9jYWxlLT5pbmZvLmJ1aWx0aW4uY2FzZW1hcF9mdWxsKTsKKwkJCQkJCQlidWls dGluLT5jYXNlbWFwX2Z1bGwpOwogfQogCiBzdGF0aWMgc2l6ZV90CiBzdHJ0aXRsZV9idWlsdGlu KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNy Y2xlbiwKIAkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKQogeworCXN0cnVjdCBidWlsdGluX3Byb3Zp ZGVyICpidWlsdGluID0gKHN0cnVjdCBidWlsdGluX3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlk ZXJfZGF0YTsKIAlzdHJ1Y3QgV29yZEJvdW5kYXJ5U3RhdGUgd2JzdGF0ZSA9IHsKIAkJLnN0ciA9 IHNyYywKIAkJLmxlbiA9IHNyY2xlbiwKIAkJLm9mZnNldCA9IDAsCi0JCS5wb3NpeCA9ICFsb2Nh bGUtPmluZm8uYnVpbHRpbi5jYXNlbWFwX2Z1bGwsCisJCS5wb3NpeCA9ICFidWlsdGluLT5jYXNl bWFwX2Z1bGwsCiAJCS5pbml0ID0gZmFsc2UsCiAJCS5wcmV2X2FsbnVtID0gZmFsc2UsCiAJfTsK IAogCXJldHVybiB1bmljb2RlX3N0cnRpdGxlKGRlc3QsIGRlc3RzaXplLCBzcmMsIHNyY2xlbiwK LQkJCQkJCQlsb2NhbGUtPmluZm8uYnVpbHRpbi5jYXNlbWFwX2Z1bGwsCisJCQkJCQkJYnVpbHRp bi0+Y2FzZW1hcF9mdWxsLAogCQkJCQkJCWluaXRjYXBfd2JuZXh0LCAmd2JzdGF0ZSk7CiB9CiAK QEAgLTk4LDIyICsxMDksMzQgQEAgc3RhdGljIHNpemVfdAogc3RydXBwZXJfYnVpbHRpbihjaGFy ICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4s CiAJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKKwlzdHJ1Y3QgYnVpbHRpbl9wcm92aWRlciAq YnVpbHRpbjsKKworCWJ1aWx0aW4gPSAoc3RydWN0IGJ1aWx0aW5fcHJvdmlkZXIgKikgbG9jYWxl LT5wcm92aWRlcl9kYXRhOworCiAJcmV0dXJuIHVuaWNvZGVfc3RydXBwZXIoZGVzdCwgZGVzdHNp emUsIHNyYywgc3JjbGVuLAotCQkJCQkJCWxvY2FsZS0+aW5mby5idWlsdGluLmNhc2VtYXBfZnVs bCk7CisJCQkJCQkJYnVpbHRpbi0+Y2FzZW1hcF9mdWxsKTsKIH0KIAogc3RhdGljIHNpemVfdAog c3RyZm9sZF9idWlsdGluKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAq c3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCQlwZ19sb2NhbGVfdCBsb2NhbGUpCiB7CisJc3RydWN0 IGJ1aWx0aW5fcHJvdmlkZXIgKmJ1aWx0aW47CisKKwlidWlsdGluID0gKHN0cnVjdCBidWlsdGlu X3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKKwogCXJldHVybiB1bmljb2RlX3N0 cmZvbGQoZGVzdCwgZGVzdHNpemUsIHNyYywgc3JjbGVuLAotCQkJCQkJICAgbG9jYWxlLT5pbmZv LmJ1aWx0aW4uY2FzZW1hcF9mdWxsKTsKKwkJCQkJCSAgIGJ1aWx0aW4tPmNhc2VtYXBfZnVsbCk7 CiB9CiAKIHN0YXRpYyBib29sCiB3Y19pc2RpZ2l0X2J1aWx0aW4ocGdfd2NoYXIgd2MsIHBnX2xv Y2FsZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gcGdfdV9pc2RpZ2l0KHdjLCAhbG9jYWxlLT5pbmZv LmJ1aWx0aW4uY2FzZW1hcF9mdWxsKTsKKwlzdHJ1Y3QgYnVpbHRpbl9wcm92aWRlciAqYnVpbHRp bjsKKworCWJ1aWx0aW4gPSAoc3RydWN0IGJ1aWx0aW5fcHJvdmlkZXIgKikgbG9jYWxlLT5wcm92 aWRlcl9kYXRhOworCisJcmV0dXJuIHBnX3VfaXNkaWdpdCh3YywgIWJ1aWx0aW4tPmNhc2VtYXBf ZnVsbCk7CiB9CiAKIHN0YXRpYyBib29sCkBAIC0xMjUsNyArMTQ4LDExIEBAIHdjX2lzYWxwaGFf YnVpbHRpbihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogc3RhdGljIGJvb2wKIHdj X2lzYWxudW1fYnVpbHRpbihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXJl dHVybiBwZ191X2lzYWxudW0od2MsICFsb2NhbGUtPmluZm8uYnVpbHRpbi5jYXNlbWFwX2Z1bGwp OworCXN0cnVjdCBidWlsdGluX3Byb3ZpZGVyICpidWlsdGluOworCisJYnVpbHRpbiA9IChzdHJ1 Y3QgYnVpbHRpbl9wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKKwlyZXR1cm4g cGdfdV9pc2FsbnVtKHdjLCAhYnVpbHRpbi0+Y2FzZW1hcF9mdWxsKTsKIH0KIAogc3RhdGljIGJv b2wKQEAgLTE1NSw3ICsxODIsMTEgQEAgd2NfaXNwcmludF9idWlsdGluKHBnX3djaGFyIHdjLCBw Z19sb2NhbGVfdCBsb2NhbGUpCiBzdGF0aWMgYm9vbAogd2NfaXNwdW5jdF9idWlsdGluKHBnX3dj aGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJuIHBnX3VfaXNwdW5jdCh3Yywg IWxvY2FsZS0+aW5mby5idWlsdGluLmNhc2VtYXBfZnVsbCk7CisJc3RydWN0IGJ1aWx0aW5fcHJv dmlkZXIgKmJ1aWx0aW47CisKKwlidWlsdGluID0gKHN0cnVjdCBidWlsdGluX3Byb3ZpZGVyICop IGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKKworCXJldHVybiBwZ191X2lzcHVuY3Qod2MsICFidWls dGluLT5jYXNlbWFwX2Z1bGwpOwogfQogCiBzdGF0aWMgYm9vbApAQCAtMjA2LDYgKzIzNyw3IEBA IHBnX2xvY2FsZV90CiBjcmVhdGVfcGdfbG9jYWxlX2J1aWx0aW4oT2lkIGNvbGxpZCwgTWVtb3J5 Q29udGV4dCBjb250ZXh0KQogewogCWNvbnN0IGNoYXIgKmxvY3N0cjsKKwlzdHJ1Y3QgYnVpbHRp bl9wcm92aWRlciAqYnVpbHRpbjsKIAlwZ19sb2NhbGVfdCByZXN1bHQ7CiAKIAlpZiAoY29sbGlk ID09IERFRkFVTFRfQ09MTEFUSU9OX09JRCkKQEAgLTIzOSw4ICsyNzEsMTEgQEAgY3JlYXRlX3Bn X2xvY2FsZV9idWlsdGluKE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCkKIAogCXJl c3VsdCA9IE1lbW9yeUNvbnRleHRBbGxvY1plcm8oY29udGV4dCwgc2l6ZW9mKHN0cnVjdCBwZ19s b2NhbGVfc3RydWN0KSk7CiAKLQlyZXN1bHQtPmluZm8uYnVpbHRpbi5sb2NhbGUgPSBNZW1vcnlD b250ZXh0U3RyZHVwKGNvbnRleHQsIGxvY3N0cik7Ci0JcmVzdWx0LT5pbmZvLmJ1aWx0aW4uY2Fz ZW1hcF9mdWxsID0gKHN0cmNtcChsb2NzdHIsICJQR19VTklDT0RFX0ZBU1QiKSA9PSAwKTsKKwli dWlsdGluID0gTWVtb3J5Q29udGV4dEFsbG9jWmVybyhjb250ZXh0LCBzaXplb2Yoc3RydWN0IGJ1 aWx0aW5fcHJvdmlkZXIpKTsKKwlidWlsdGluLT5sb2NhbGUgPSBNZW1vcnlDb250ZXh0U3RyZHVw KGNvbnRleHQsIGxvY3N0cik7CisJYnVpbHRpbi0+Y2FzZW1hcF9mdWxsID0gKHN0cmNtcChsb2Nz dHIsICJQR19VTklDT0RFX0ZBU1QiKSA9PSAwKTsKKwlyZXN1bHQtPnByb3ZpZGVyX2RhdGEgPSAo dm9pZCAqKSBidWlsdGluOworCiAJcmVzdWx0LT5kZXRlcm1pbmlzdGljID0gdHJ1ZTsKIAlyZXN1 bHQtPmNvbGxhdGVfaXNfYyA9IHRydWU7CiAJcmVzdWx0LT5jdHlwZV9pc19jID0gKHN0cmNtcChs b2NzdHIsICJDIikgPT0gMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdf bG9jYWxlX2ljdS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYwppbmRl eCA5Njc0MWUwODI2OS4uNDk3YmU5NWE4NjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9wZ19sb2NhbGVfaWN1LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2Fs ZV9pY3UuYwpAQCAtNTEsNiArNTEsMTIgQEAgZXh0ZXJuIHBnX2xvY2FsZV90IGNyZWF0ZV9wZ19s b2NhbGVfaWN1KE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiAKICNpZmRlZiBV U0VfSUNVCiAKK3N0cnVjdCBpY3VfcHJvdmlkZXIKK3sKKwljb25zdCBjaGFyICpsb2NhbGU7CisJ VUNvbGxhdG9yICAqdWNvbDsKK307CisKIGV4dGVybiBVQ29sbGF0b3IgKnBnX3Vjb2xfb3Blbihj b25zdCBjaGFyICpsb2Nfc3RyKTsKIAogc3RhdGljIHNpemVfdCBzdHJsb3dlcl9pY3UoY2hhciAq ZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCkBAIC0yMzksNiArMjQ1LDcg QEAgY3JlYXRlX3BnX2xvY2FsZV9pY3UoT2lkIGNvbGxpZCwgTWVtb3J5Q29udGV4dCBjb250ZXh0 KQogCWJvb2wJCWRldGVybWluaXN0aWM7CiAJY29uc3QgY2hhciAqaWN1bG9jc3RyOwogCWNvbnN0 IGNoYXIgKmljdXJ1bGVzID0gTlVMTDsKKwlzdHJ1Y3QgaWN1X3Byb3ZpZGVyICppY3U7CiAJVUNv bGxhdG9yICAqY29sbGF0b3I7CiAJcGdfbG9jYWxlX3QgcmVzdWx0OwogCkBAIC0yOTAsOCArMjk3 LDEyIEBAIGNyZWF0ZV9wZ19sb2NhbGVfaWN1KE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29u dGV4dCkKIAljb2xsYXRvciA9IG1ha2VfaWN1X2NvbGxhdG9yKGljdWxvY3N0ciwgaWN1cnVsZXMp OwogCiAJcmVzdWx0ID0gTWVtb3J5Q29udGV4dEFsbG9jWmVybyhjb250ZXh0LCBzaXplb2Yoc3Ry dWN0IHBnX2xvY2FsZV9zdHJ1Y3QpKTsKLQlyZXN1bHQtPmluZm8uaWN1LmxvY2FsZSA9IE1lbW9y eUNvbnRleHRTdHJkdXAoY29udGV4dCwgaWN1bG9jc3RyKTsKLQlyZXN1bHQtPmluZm8uaWN1LnVj b2wgPSBjb2xsYXRvcjsKKworCWljdSA9IE1lbW9yeUNvbnRleHRBbGxvY1plcm8oY29udGV4dCwg c2l6ZW9mKHN0cnVjdCBpY3VfcHJvdmlkZXIpKTsKKwlpY3UtPmxvY2FsZSA9IE1lbW9yeUNvbnRl eHRTdHJkdXAoY29udGV4dCwgaWN1bG9jc3RyKTsKKwlpY3UtPnVjb2wgPSBjb2xsYXRvcjsKKwly ZXN1bHQtPnByb3ZpZGVyX2RhdGEgPSAodm9pZCAqKSBpY3U7CisKIAlyZXN1bHQtPmRldGVybWlu aXN0aWMgPSBkZXRlcm1pbmlzdGljOwogCXJlc3VsdC0+Y29sbGF0ZV9pc19jID0gZmFsc2U7CiAJ cmVzdWx0LT5jdHlwZV9pc19jID0gZmFsc2U7CkBAIC01NjcsMTEgKzU3OCwxMiBAQCBzdHJuY29s bF9pY3VfdXRmOChjb25zdCBjaGFyICphcmcxLCBzc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKmFy ZzIsIHNzaXplX3QgbGVuMgogewogCWludAkJCXJlc3VsdDsKIAlVRXJyb3JDb2RlCXN0YXR1czsK KwlzdHJ1Y3QgaWN1X3Byb3ZpZGVyICppY3UgPSAoc3RydWN0IGljdV9wcm92aWRlciAqKSBsb2Nh bGUtPnByb3ZpZGVyX2RhdGE7CiAKIAlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygpID09IFBH X1VURjgpOwogCiAJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCXJlc3VsdCA9IHVjb2xfc3RyY29s bFVURjgobG9jYWxlLT5pbmZvLmljdS51Y29sLAorCXJlc3VsdCA9IHVjb2xfc3RyY29sbFVURjgo aWN1LT51Y29sLAogCQkJCQkJCSAgYXJnMSwgbGVuMSwKIAkJCQkJCQkgIGFyZzIsIGxlbjIsCiAJ CQkJCQkJICAmc3RhdHVzKTsKQEAgLTU5NSw2ICs2MDcsOCBAQCBzdHJueGZybV9pY3UoY2hhciAq ZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAog CXNpemVfdAkJdWNoYXJfYnNpemU7CiAJU2l6ZQkJcmVzdWx0X2JzaXplOwogCisJc3RydWN0IGlj dV9wcm92aWRlciAqaWN1ID0gKHN0cnVjdCBpY3VfcHJvdmlkZXIgKikgbG9jYWxlLT5wcm92aWRl cl9kYXRhOworCiAJaW5pdF9pY3VfY29udmVydGVyKCk7CiAKIAl1bGVuID0gdWNoYXJfbGVuZ3Ro KGljdV9jb252ZXJ0ZXIsIHNyYywgc3JjbGVuKTsKQEAgLTYwOCw3ICs2MjIsNyBAQCBzdHJueGZy bV9pY3UoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXpl X3Qgc3JjbGVuLAogCiAJdWxlbiA9IHVjaGFyX2NvbnZlcnQoaWN1X2NvbnZlcnRlciwgdWNoYXIs IHVsZW4gKyAxLCBzcmMsIHNyY2xlbik7CiAKLQlyZXN1bHRfYnNpemUgPSB1Y29sX2dldFNvcnRL ZXkobG9jYWxlLT5pbmZvLmljdS51Y29sLAorCXJlc3VsdF9ic2l6ZSA9IHVjb2xfZ2V0U29ydEtl eShpY3UtPnVjb2wsCiAJCQkJCQkJCSAgIHVjaGFyLCB1bGVuLAogCQkJCQkJCQkgICAodWludDhf dCAqKSBkZXN0LCBkZXN0c2l6ZSk7CiAKQEAgLTYzOSwxMiArNjUzLDE0IEBAIHN0cm54ZnJtX3By ZWZpeF9pY3VfdXRmOChjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCiAJdWludDMyX3QJc3Rh dGVbMl07CiAJVUVycm9yQ29kZQlzdGF0dXM7CiAKKwlzdHJ1Y3QgaWN1X3Byb3ZpZGVyICppY3Ug PSAoc3RydWN0IGljdV9wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKIAlBc3Nl cnQoR2V0RGF0YWJhc2VFbmNvZGluZygpID09IFBHX1VURjgpOwogCiAJdWl0ZXJfc2V0VVRGOCgm aXRlciwgc3JjLCBzcmNsZW4pOwogCXN0YXRlWzBdID0gc3RhdGVbMV0gPSAwOwkvKiB3b24ndCBu ZWVkIHRoYXQgYWdhaW4gKi8KIAlzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JcmVzdWx0ID0gdWNv bF9uZXh0U29ydEtleVBhcnQobG9jYWxlLT5pbmZvLmljdS51Y29sLAorCXJlc3VsdCA9IHVjb2xf bmV4dFNvcnRLZXlQYXJ0KGljdS0+dWNvbCwKIAkJCQkJCQkJICAmaXRlciwKIAkJCQkJCQkJICBz dGF0ZSwKIAkJCQkJCQkJICAodWludDhfdCAqKSBkZXN0LApAQCAtNzUxLDExICs3NjcsMTMgQEAg aWN1X2NvbnZlcnRfY2FzZShJQ1VfQ29udmVydF9GdW5jIGZ1bmMsIHBnX2xvY2FsZV90IG15bG9j YWxlLAogCVVFcnJvckNvZGUJc3RhdHVzOwogCWludDMyX3QJCWxlbl9kZXN0OwogCisJc3RydWN0 IGljdV9wcm92aWRlciAqaWN1ID0gKHN0cnVjdCBpY3VfcHJvdmlkZXIgKikgbXlsb2NhbGUtPnBy b3ZpZGVyX2RhdGE7CisKIAlsZW5fZGVzdCA9IGxlbl9zb3VyY2U7CQkvKiB0cnkgZmlyc3Qgd2l0 aCBzYW1lIGxlbmd0aCAqLwogCSpidWZmX2Rlc3QgPSBwYWxsb2MobGVuX2Rlc3QgKiBzaXplb2Yo KipidWZmX2Rlc3QpKTsKIAlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAJbGVuX2Rlc3QgPSBmdW5j KCpidWZmX2Rlc3QsIGxlbl9kZXN0LCBidWZmX3NvdXJjZSwgbGVuX3NvdXJjZSwKLQkJCQkJbXls b2NhbGUtPmluZm8uaWN1LmxvY2FsZSwgJnN0YXR1cyk7CisJCQkJCWljdS0+bG9jYWxlLCAmc3Rh dHVzKTsKIAlpZiAoc3RhdHVzID09IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKQogCXsKIAkJLyog dHJ5IGFnYWluIHdpdGggYWRqdXN0ZWQgbGVuZ3RoICovCkBAIC03NjMsNyArNzgxLDcgQEAgaWN1 X2NvbnZlcnRfY2FzZShJQ1VfQ29udmVydF9GdW5jIGZ1bmMsIHBnX2xvY2FsZV90IG15bG9jYWxl LAogCQkqYnVmZl9kZXN0ID0gcGFsbG9jKGxlbl9kZXN0ICogc2l6ZW9mKCoqYnVmZl9kZXN0KSk7 CiAJCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKIAkJbGVuX2Rlc3QgPSBmdW5jKCpidWZmX2Rlc3Qs IGxlbl9kZXN0LCBidWZmX3NvdXJjZSwgbGVuX3NvdXJjZSwKLQkJCQkJCW15bG9jYWxlLT5pbmZv LmljdS5sb2NhbGUsICZzdGF0dXMpOworCQkJCQkJaWN1LT5sb2NhbGUsICZzdGF0dXMpOwogCX0K IAlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAJCWVyZXBvcnQoRVJST1IsCkBAIC04MzcsNiArODU1 LDggQEAgc3RybmNvbGxfaWN1KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwKIAkJCSAg ICp1Y2hhcjI7CiAJaW50CQkJcmVzdWx0OwogCisJc3RydWN0IGljdV9wcm92aWRlciAqaWN1ID0g KHN0cnVjdCBpY3VfcHJvdmlkZXIgKikgbG9jYWxlLT5wcm92aWRlcl9kYXRhOworCiAJLyogaWYg ZW5jb2RpbmcgaXMgVVRGOCwgdXNlIG1vcmUgZWZmaWNpZW50IHN0cm5jb2xsX2ljdV91dGY4ICov CiAjaWZkZWYgSEFWRV9VQ09MX1NUUkNPTExVVEY4CiAJQXNzZXJ0KEdldERhdGFiYXNlRW5jb2Rp bmcoKSAhPSBQR19VVEY4KTsKQEAgLTg1OSw3ICs4NzksNyBAQCBzdHJuY29sbF9pY3UoY29uc3Qg Y2hhciAqYXJnMSwgc3NpemVfdCBsZW4xLAogCXVsZW4xID0gdWNoYXJfY29udmVydChpY3VfY29u dmVydGVyLCB1Y2hhcjEsIHVsZW4xICsgMSwgYXJnMSwgbGVuMSk7CiAJdWxlbjIgPSB1Y2hhcl9j b252ZXJ0KGljdV9jb252ZXJ0ZXIsIHVjaGFyMiwgdWxlbjIgKyAxLCBhcmcyLCBsZW4yKTsKIAot CXJlc3VsdCA9IHVjb2xfc3RyY29sbChsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJcmVzdWx0ID0g dWNvbF9zdHJjb2xsKGljdS0+dWNvbCwKIAkJCQkJCSAgdWNoYXIxLCB1bGVuMSwKIAkJCQkJCSAg dWNoYXIyLCB1bGVuMik7CiAKQEAgLTg4NSw2ICs5MDUsOCBAQCBzdHJueGZybV9wcmVmaXhfaWN1 KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKIAlzaXplX3QJCXVjaGFyX2JzaXplOwogCVNp emUJCXJlc3VsdF9ic2l6ZTsKIAorCXN0cnVjdCBpY3VfcHJvdmlkZXIgKmljdSA9IChzdHJ1Y3Qg aWN1X3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKKwogCS8qIGlmIGVuY29kaW5n IGlzIFVURjgsIHVzZSBtb3JlIGVmZmljaWVudCBzdHJueGZybV9wcmVmaXhfaWN1X3V0ZjggKi8K IAlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygpICE9IFBHX1VURjgpOwogCkBAIC05MDQsNyAr OTI2LDcgQEAgc3Rybnhmcm1fcHJlZml4X2ljdShjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUs CiAJdWl0ZXJfc2V0U3RyaW5nKCZpdGVyLCB1Y2hhciwgdWxlbik7CiAJc3RhdGVbMF0gPSBzdGF0 ZVsxXSA9IDA7CS8qIHdvbid0IG5lZWQgdGhhdCBhZ2FpbiAqLwogCXN0YXR1cyA9IFVfWkVST19F UlJPUjsKLQlyZXN1bHRfYnNpemUgPSB1Y29sX25leHRTb3J0S2V5UGFydChsb2NhbGUtPmluZm8u aWN1LnVjb2wsCisJcmVzdWx0X2JzaXplID0gdWNvbF9uZXh0U29ydEtleVBhcnQoaWN1LT51Y29s LAogCQkJCQkJCQkJCSZpdGVyLAogCQkJCQkJCQkJCXN0YXRlLAogCQkJCQkJCQkJCSh1aW50OF90 ICopIGRlc3QsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2xp YmMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfbGliYy5jCmluZGV4IGU5Zjlm YzFlMzY5Li40MWZkNjU3YWNlNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bn X2xvY2FsZV9saWJjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9saWJj LmMKQEAgLTEsMyArMSw0IEBACisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBQb3N0Z3JlU1FM IGxvY2FsZSB1dGlsaXRpZXMgZm9yIGxpYmMKQEAgLTgxLDYgKzgyLDExIEBACiAgKi8KICNkZWZp bmUJCVRFWFRCVUZMRU4JCQkxMDI0CiAKK3N0cnVjdCBsaWJjX3Byb3ZpZGVyCit7CisJbG9jYWxl X3QJbHQ7Cit9OworCiBleHRlcm4gcGdfbG9jYWxlX3QgY3JlYXRlX3BnX2xvY2FsZV9saWJjKE9p ZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiAKIHN0YXRpYyBpbnQJc3RybmNvbGxf bGliYyhjb25zdCBjaGFyICphcmcxLCBzc2l6ZV90IGxlbjEsCkBAIC0xMjEsMTE2ICsxMjcsMTU0 IEBAIHN0YXRpYyBzaXplX3Qgc3RydXBwZXJfbGliY19tYihjaGFyICpkZXN0LCBzaXplX3QgZGVz dHNpemUsCiBzdGF0aWMgYm9vbAogd2NfaXNkaWdpdF9saWJjX3NiKHBnX3djaGFyIHdjLCBwZ19s b2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJuIGlzZGlnaXRfbCgodW5zaWduZWQgY2hhcikgd2Ms IGxvY2FsZS0+aW5mby5sdCk7CisJc3RydWN0IGxpYmNfcHJvdmlkZXIgKmxpYmMgPSAoc3RydWN0 IGxpYmNfcHJvdmlkZXIgKikgbG9jYWxlLT5wcm92aWRlcl9kYXRhOworCisJcmV0dXJuIGlzZGln aXRfbCgodW5zaWduZWQgY2hhcikgd2MsIGxpYmMtPmx0KTsKIH0KIAogc3RhdGljIGJvb2wKIHdj X2lzYWxwaGFfbGliY19zYihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXJl dHVybiBpc2FscGhhX2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUtPmluZm8ubHQpOworCXN0 cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVjdCBsaWJjX3Byb3ZpZGVyICopIGxvY2Fs ZS0+cHJvdmlkZXJfZGF0YTsKKworCXJldHVybiBpc2FscGhhX2woKHVuc2lnbmVkIGNoYXIpIHdj LCBsaWJjLT5sdCk7CiB9CiAKIHN0YXRpYyBib29sCiB3Y19pc2FsbnVtX2xpYmNfc2IocGdfd2No YXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gaXNhbG51bV9sKCh1bnNpZ25l ZCBjaGFyKSB3YywgbG9jYWxlLT5pbmZvLmx0KTsKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGli YyA9IChzdHJ1Y3QgbGliY19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKKwly ZXR1cm4gaXNhbG51bV9sKCh1bnNpZ25lZCBjaGFyKSB3YywgbGliYy0+bHQpOwogfQogCiBzdGF0 aWMgYm9vbAogd2NfaXN1cHBlcl9saWJjX3NiKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2Nh bGUpCiB7Ci0JcmV0dXJuIGlzdXBwZXJfbCgodW5zaWduZWQgY2hhcikgd2MsIGxvY2FsZS0+aW5m by5sdCk7CisJc3RydWN0IGxpYmNfcHJvdmlkZXIgKmxpYmMgPSAoc3RydWN0IGxpYmNfcHJvdmlk ZXIgKikgbG9jYWxlLT5wcm92aWRlcl9kYXRhOworCisJcmV0dXJuIGlzdXBwZXJfbCgodW5zaWdu ZWQgY2hhcikgd2MsIGxpYmMtPmx0KTsKIH0KIAogc3RhdGljIGJvb2wKIHdjX2lzbG93ZXJfbGli Y19zYihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXJldHVybiBpc2xvd2Vy X2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUtPmluZm8ubHQpOworCXN0cnVjdCBsaWJjX3By b3ZpZGVyICpsaWJjID0gKHN0cnVjdCBsaWJjX3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJf ZGF0YTsKKworCXJldHVybiBpc2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsaWJjLT5sdCk7 CiB9CiAKIHN0YXRpYyBib29sCiB3Y19pc2dyYXBoX2xpYmNfc2IocGdfd2NoYXIgd2MsIHBnX2xv Y2FsZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gaXNncmFwaF9sKCh1bnNpZ25lZCBjaGFyKSB3Yywg bG9jYWxlLT5pbmZvLmx0KTsKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGliYyA9IChzdHJ1Y3Qg bGliY19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKKwlyZXR1cm4gaXNncmFw aF9sKCh1bnNpZ25lZCBjaGFyKSB3YywgbGliYy0+bHQpOwogfQogCiBzdGF0aWMgYm9vbAogd2Nf aXNwcmludF9saWJjX3NiKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0 dXJuIGlzcHJpbnRfbCgodW5zaWduZWQgY2hhcikgd2MsIGxvY2FsZS0+aW5mby5sdCk7CisJc3Ry dWN0IGxpYmNfcHJvdmlkZXIgKmxpYmMgPSAoc3RydWN0IGxpYmNfcHJvdmlkZXIgKikgbG9jYWxl LT5wcm92aWRlcl9kYXRhOworCisJcmV0dXJuIGlzcHJpbnRfbCgodW5zaWduZWQgY2hhcikgd2Ms IGxpYmMtPmx0KTsKIH0KIAogc3RhdGljIGJvb2wKIHdjX2lzcHVuY3RfbGliY19zYihwZ193Y2hh ciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXJldHVybiBpc3B1bmN0X2woKHVuc2lnbmVk IGNoYXIpIHdjLCBsb2NhbGUtPmluZm8ubHQpOworCXN0cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJj ID0gKHN0cnVjdCBsaWJjX3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKKworCXJl dHVybiBpc3B1bmN0X2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsaWJjLT5sdCk7CiB9CiAKIHN0YXRp YyBib29sCiB3Y19pc3NwYWNlX2xpYmNfc2IocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2Fs ZSkKIHsKLQlyZXR1cm4gaXNzcGFjZV9sKCh1bnNpZ25lZCBjaGFyKSB3YywgbG9jYWxlLT5pbmZv Lmx0KTsKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGliYyA9IChzdHJ1Y3QgbGliY19wcm92aWRl ciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKKwlyZXR1cm4gaXNzcGFjZV9sKCh1bnNpZ25l ZCBjaGFyKSB3YywgbGliYy0+bHQpOwogfQogCiBzdGF0aWMgYm9vbAogd2NfaXNkaWdpdF9saWJj X21iKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJuIGlzd2RpZ2l0 X2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+aW5mby5sdCk7CisJc3RydWN0IGxpYmNfcHJvdmlkZXIg KmxpYmMgPSAoc3RydWN0IGxpYmNfcHJvdmlkZXIgKikgbG9jYWxlLT5wcm92aWRlcl9kYXRhOwor CisJcmV0dXJuIGlzd2RpZ2l0X2woKHdpbnRfdCkgd2MsIGxpYmMtPmx0KTsKIH0KIAogc3RhdGlj IGJvb2wKIHdjX2lzYWxwaGFfbGliY19tYihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxl KQogewotCXJldHVybiBpc3dhbHBoYV9sKCh3aW50X3QpIHdjLCBsb2NhbGUtPmluZm8ubHQpOwor CXN0cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVjdCBsaWJjX3Byb3ZpZGVyICopIGxv Y2FsZS0+cHJvdmlkZXJfZGF0YTsKKworCXJldHVybiBpc3dhbHBoYV9sKCh3aW50X3QpIHdjLCBs aWJjLT5sdCk7CiB9CiAKIHN0YXRpYyBib29sCiB3Y19pc2FsbnVtX2xpYmNfbWIocGdfd2NoYXIg d2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gaXN3YWxudW1fbCgod2ludF90KSB3 YywgbG9jYWxlLT5pbmZvLmx0KTsKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGliYyA9IChzdHJ1 Y3QgbGliY19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKKwlyZXR1cm4gaXN3 YWxudW1fbCgod2ludF90KSB3YywgbGliYy0+bHQpOwogfQogCiBzdGF0aWMgYm9vbAogd2NfaXN1 cHBlcl9saWJjX21iKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJu IGlzd3VwcGVyX2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+aW5mby5sdCk7CisJc3RydWN0IGxpYmNf cHJvdmlkZXIgKmxpYmMgPSAoc3RydWN0IGxpYmNfcHJvdmlkZXIgKikgbG9jYWxlLT5wcm92aWRl cl9kYXRhOworCisJcmV0dXJuIGlzd3VwcGVyX2woKHdpbnRfdCkgd2MsIGxpYmMtPmx0KTsKIH0K IAogc3RhdGljIGJvb2wKIHdjX2lzbG93ZXJfbGliY19tYihwZ193Y2hhciB3YywgcGdfbG9jYWxl X3QgbG9jYWxlKQogewotCXJldHVybiBpc3dsb3dlcl9sKCh3aW50X3QpIHdjLCBsb2NhbGUtPmlu Zm8ubHQpOworCXN0cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVjdCBsaWJjX3Byb3Zp ZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKKworCXJldHVybiBpc3dsb3dlcl9sKCh3aW50 X3QpIHdjLCBsaWJjLT5sdCk7CiB9CiAKIHN0YXRpYyBib29sCiB3Y19pc2dyYXBoX2xpYmNfbWIo cGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gaXN3Z3JhcGhfbCgo d2ludF90KSB3YywgbG9jYWxlLT5pbmZvLmx0KTsKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGli YyA9IChzdHJ1Y3QgbGliY19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKKwly ZXR1cm4gaXN3Z3JhcGhfbCgod2ludF90KSB3YywgbGliYy0+bHQpOwogfQogCiBzdGF0aWMgYm9v bAogd2NfaXNwcmludF9saWJjX21iKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7 Ci0JcmV0dXJuIGlzd3ByaW50X2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+aW5mby5sdCk7CisJc3Ry dWN0IGxpYmNfcHJvdmlkZXIgKmxpYmMgPSAoc3RydWN0IGxpYmNfcHJvdmlkZXIgKikgbG9jYWxl LT5wcm92aWRlcl9kYXRhOworCisJcmV0dXJuIGlzd3ByaW50X2woKHdpbnRfdCkgd2MsIGxpYmMt Pmx0KTsKIH0KIAogc3RhdGljIGJvb2wKIHdjX2lzcHVuY3RfbGliY19tYihwZ193Y2hhciB3Yywg cGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXJldHVybiBpc3dwdW5jdF9sKCh3aW50X3QpIHdjLCBs b2NhbGUtPmluZm8ubHQpOworCXN0cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVjdCBs aWJjX3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKKworCXJldHVybiBpc3dwdW5j dF9sKCh3aW50X3QpIHdjLCBsaWJjLT5sdCk7CiB9CiAKIHN0YXRpYyBib29sCiB3Y19pc3NwYWNl X2xpYmNfbWIocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gaXN3 c3BhY2VfbCgod2ludF90KSB3YywgbG9jYWxlLT5pbmZvLmx0KTsKKwlzdHJ1Y3QgbGliY19wcm92 aWRlciAqbGliYyA9IChzdHJ1Y3QgbGliY19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2Rh dGE7CisKKwlyZXR1cm4gaXN3c3BhY2VfbCgod2ludF90KSB3YywgbGliYy0+bHQpOwogfQogCiBz dGF0aWMgY2hhcgogY2hhcl90b2xvd2VyX2xpYmModW5zaWduZWQgY2hhciBjaCwgcGdfbG9jYWxl X3QgbG9jYWxlKQogeworCXN0cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVjdCBsaWJj X3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKKwogCUFzc2VydChwZ19kYXRhYmFz ZV9lbmNvZGluZ19tYXhfbGVuZ3RoKCkgPT0gMSk7Ci0JcmV0dXJuIHRvbG93ZXJfbChjaCwgbG9j YWxlLT5pbmZvLmx0KTsKKwlyZXR1cm4gdG9sb3dlcl9sKGNoLCBsaWJjLT5sdCk7CiB9CiAKIHN0 YXRpYyBib29sCkBAIC0yMzgsMjIgKzI4MiwyNiBAQCBjaGFyX2lzX2Nhc2VkX2xpYmMoY2hhciBj aCwgcGdfbG9jYWxlX3QgbG9jYWxlKQogewogCWJvb2wJCWlzX211bHRpYnl0ZSA9IHBnX2RhdGFi YXNlX2VuY29kaW5nX21heF9sZW5ndGgoKSA+IDE7CiAKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAq bGliYyA9IChzdHJ1Y3QgbGliY19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisK IAlpZiAoaXNfbXVsdGlieXRlICYmIElTX0hJR0hCSVRfU0VUKGNoKSkKIAkJcmV0dXJuIHRydWU7 CiAJZWxzZQotCQlyZXR1cm4gaXNhbHBoYV9sKCh1bnNpZ25lZCBjaGFyKSBjaCwgbG9jYWxlLT5p bmZvLmx0KTsKKwkJcmV0dXJuIGlzYWxwaGFfbCgodW5zaWduZWQgY2hhcikgY2gsIGxpYmMtPmx0 KTsKIH0KIAogc3RhdGljIHBnX3djaGFyCiB0b3VwcGVyX2xpYmNfc2IocGdfd2NoYXIgd2MsIHBn X2xvY2FsZV90IGxvY2FsZSkKIHsKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGliYyA9IChzdHJ1 Y3QgbGliY19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKIAlBc3NlcnQoR2V0 RGF0YWJhc2VFbmNvZGluZygpICE9IFBHX1VURjgpOwogCiAJLyogZm9yY2UgQyBiZWhhdmlvciBm b3IgQVNDSUkgY2hhcmFjdGVycywgcGVyIGNvbW1lbnRzIGFib3ZlICovCiAJaWYgKGxvY2FsZS0+ aXNfZGVmYXVsdCAmJiB3YyA8PSAocGdfd2NoYXIpIDEyNykKIAkJcmV0dXJuIHBnX2FzY2lpX3Rv dXBwZXIoKHVuc2lnbmVkIGNoYXIpIHdjKTsKIAlpZiAod2MgPD0gKHBnX3djaGFyKSBVQ0hBUl9N QVgpCi0JCXJldHVybiB0b3VwcGVyX2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUtPmluZm8u bHQpOworCQlyZXR1cm4gdG91cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSB3YywgbGliYy0+bHQpOwog CWVsc2UKIAkJcmV0dXJuIHdjOwogfQpAQCAtMjYxLDEzICszMDksMTUgQEAgdG91cHBlcl9saWJj X3NiKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiBzdGF0aWMgcGdfd2NoYXIKIHRv dXBwZXJfbGliY19tYihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogeworCXN0cnVj dCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVjdCBsaWJjX3Byb3ZpZGVyICopIGxvY2FsZS0+ cHJvdmlkZXJfZGF0YTsKKwogCUFzc2VydChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRG OCk7CiAKIAkvKiBmb3JjZSBDIGJlaGF2aW9yIGZvciBBU0NJSSBjaGFyYWN0ZXJzLCBwZXIgY29t bWVudHMgYWJvdmUgKi8KIAlpZiAobG9jYWxlLT5pc19kZWZhdWx0ICYmIHdjIDw9IChwZ193Y2hh cikgMTI3KQogCQlyZXR1cm4gcGdfYXNjaWlfdG91cHBlcigodW5zaWduZWQgY2hhcikgd2MpOwog CWlmIChzaXplb2Yod2NoYXJfdCkgPj0gNCB8fCB3YyA8PSAocGdfd2NoYXIpIDB4RkZGRikKLQkJ cmV0dXJuIHRvd3VwcGVyX2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+aW5mby5sdCk7CisJCXJldHVy biB0b3d1cHBlcl9sKCh3aW50X3QpIHdjLCBsaWJjLT5sdCk7CiAJZWxzZQogCQlyZXR1cm4gd2M7 CiB9CkBAIC0yNzUsMTMgKzMyNSwxNSBAQCB0b3VwcGVyX2xpYmNfbWIocGdfd2NoYXIgd2MsIHBn X2xvY2FsZV90IGxvY2FsZSkKIHN0YXRpYyBwZ193Y2hhcgogdG9sb3dlcl9saWJjX3NiKHBnX3dj aGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7CisJc3RydWN0IGxpYmNfcHJvdmlkZXIgKmxp YmMgPSAoc3RydWN0IGxpYmNfcHJvdmlkZXIgKikgbG9jYWxlLT5wcm92aWRlcl9kYXRhOworCiAJ QXNzZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSAhPSBQR19VVEY4KTsKIAogCS8qIGZvcmNlIEMg YmVoYXZpb3IgZm9yIEFTQ0lJIGNoYXJhY3RlcnMsIHBlciBjb21tZW50cyBhYm92ZSAqLwogCWlm IChsb2NhbGUtPmlzX2RlZmF1bHQgJiYgd2MgPD0gKHBnX3djaGFyKSAxMjcpCiAJCXJldHVybiBw Z19hc2NpaV90b2xvd2VyKCh1bnNpZ25lZCBjaGFyKSB3Yyk7CiAJaWYgKHdjIDw9IChwZ193Y2hh cikgVUNIQVJfTUFYKQotCQlyZXR1cm4gdG9sb3dlcl9sKCh1bnNpZ25lZCBjaGFyKSB3YywgbG9j YWxlLT5pbmZvLmx0KTsKKwkJcmV0dXJuIHRvbG93ZXJfbCgodW5zaWduZWQgY2hhcikgd2MsIGxp YmMtPmx0KTsKIAllbHNlCiAJCXJldHVybiB3YzsKIH0KQEAgLTI4OSwxMyArMzQxLDE1IEBAIHRv bG93ZXJfbGliY19zYihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogc3RhdGljIHBn X3djaGFyCiB0b2xvd2VyX2xpYmNfbWIocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkK IHsKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGliYyA9IChzdHJ1Y3QgbGliY19wcm92aWRlciAq KSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKIAlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygp ID09IFBHX1VURjgpOwogCiAJLyogZm9yY2UgQyBiZWhhdmlvciBmb3IgQVNDSUkgY2hhcmFjdGVy cywgcGVyIGNvbW1lbnRzIGFib3ZlICovCiAJaWYgKGxvY2FsZS0+aXNfZGVmYXVsdCAmJiB3YyA8 PSAocGdfd2NoYXIpIDEyNykKIAkJcmV0dXJuIHBnX2FzY2lpX3RvbG93ZXIoKHVuc2lnbmVkIGNo YXIpIHdjKTsKIAlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQgfHwgd2MgPD0gKHBnX3djaGFyKSAw eEZGRkYpCi0JCXJldHVybiB0b3dsb3dlcl9sKCh3aW50X3QpIHdjLCBsb2NhbGUtPmluZm8ubHQp OworCQlyZXR1cm4gdG93bG93ZXJfbCgod2ludF90KSB3YywgbGliYy0+bHQpOwogCWVsc2UKIAkJ cmV0dXJuIHdjOwogfQpAQCAtNDA2LDcgKzQ2MCw3IEBAIHN0cmxvd2VyX2xpYmNfc2IoY2hhciAq ZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAog CiAJaWYgKHNyY2xlbiArIDEgPD0gZGVzdHNpemUpCiAJewotCQlsb2NhbGVfdAlsb2MgPSBsb2Nh bGUtPmluZm8ubHQ7CisJCXN0cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVjdCBsaWJj X3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKIAkJY2hhcgkgICAqcDsKIAogCQlp ZiAoc3JjbGVuICsgMSA+IGRlc3RzaXplKQpAQCAtNDI3LDcgKzQ4MSw3IEBAIHN0cmxvd2VyX2xp YmNfc2IoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXpl X3Qgc3JjbGVuLAogCQkJaWYgKGxvY2FsZS0+aXNfZGVmYXVsdCkKIAkJCQkqcCA9IHBnX3RvbG93 ZXIoKHVuc2lnbmVkIGNoYXIpICpwKTsKIAkJCWVsc2UKLQkJCQkqcCA9IHRvbG93ZXJfbCgodW5z aWduZWQgY2hhcikgKnAsIGxvYyk7CisJCQkJKnAgPSB0b2xvd2VyX2woKHVuc2lnbmVkIGNoYXIp ICpwLCBsaWJjLT5sdCk7CiAJCX0KIAl9CiAKQEAgLTQzOCw3ICs0OTIsOCBAQCBzdGF0aWMgc2l6 ZV90CiBzdHJsb3dlcl9saWJjX21iKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3Qg Y2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKQogewot CWxvY2FsZV90CWxvYyA9IGxvY2FsZS0+aW5mby5sdDsKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAq bGliYyA9IChzdHJ1Y3QgbGliY19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisK IAlzaXplX3QJCXJlc3VsdF9zaXplOwogCXdjaGFyX3QgICAgKndvcmtzcGFjZTsKIAljaGFyCSAg ICpyZXN1bHQ7CkBAIC00NjAsNyArNTE1LDcgQEAgc3RybG93ZXJfbGliY19tYihjaGFyICpkZXN0 LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiAJY2hh cjJ3Y2hhcih3b3Jrc3BhY2UsIHNyY2xlbiArIDEsIHNyYywgc3JjbGVuLCBsb2NhbGUpOwogCiAJ Zm9yIChjdXJyX2NoYXIgPSAwOyB3b3Jrc3BhY2VbY3Vycl9jaGFyXSAhPSAwOyBjdXJyX2NoYXIr KykKLQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3dsb3dlcl9sKHdvcmtzcGFjZVtjdXJyX2No YXJdLCBsb2MpOworCQl3b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IHRvd2xvd2VyX2wod29ya3NwYWNl W2N1cnJfY2hhcl0sIGxpYmMtPmx0KTsKIAogCS8qCiAJICogTWFrZSByZXN1bHQgbGFyZ2UgZW5v dWdoOyBjYXNlIGNoYW5nZSBtaWdodCBjaGFuZ2UgbnVtYmVyIG9mIGJ5dGVzCkBAIC00OTEsNyAr NTQ2LDcgQEAgc3RydGl0bGVfbGliY19zYihjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNv bnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiAKIAlpZiAoc3JjbGVuICsgMSA8PSBkZXN0 c2l6ZSkKIAl7Ci0JCWxvY2FsZV90CWxvYyA9IGxvY2FsZS0+aW5mby5sdDsKKwkJc3RydWN0IGxp YmNfcHJvdmlkZXIgKmxpYmMgPSAoc3RydWN0IGxpYmNfcHJvdmlkZXIgKikgbG9jYWxlLT5wcm92 aWRlcl9kYXRhOwogCQlpbnQJCQl3YXNhbG51bSA9IGZhbHNlOwogCQljaGFyCSAgICpwOwogCkBA IC01MTcsMTEgKzU3MiwxMSBAQCBzdHJ0aXRsZV9saWJjX3NiKGNoYXIgKmRlc3QsIHNpemVfdCBk ZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCWVsc2UKIAkJCXsK IAkJCQlpZiAod2FzYWxudW0pCi0JCQkJCSpwID0gdG9sb3dlcl9sKCh1bnNpZ25lZCBjaGFyKSAq cCwgbG9jKTsKKwkJCQkJKnAgPSB0b2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpICpwLCBsaWJjLT5s dCk7CiAJCQkJZWxzZQotCQkJCQkqcCA9IHRvdXBwZXJfbCgodW5zaWduZWQgY2hhcikgKnAsIGxv Yyk7CisJCQkJCSpwID0gdG91cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbGliYy0+bHQpOwog CQkJfQotCQkJd2FzYWxudW0gPSBpc2FsbnVtX2woKHVuc2lnbmVkIGNoYXIpICpwLCBsb2MpOwor CQkJd2FzYWxudW0gPSBpc2FsbnVtX2woKHVuc2lnbmVkIGNoYXIpICpwLCBsaWJjLT5sdCk7CiAJ CX0KIAl9CiAKQEAgLTUzMiw3ICs1ODcsOCBAQCBzdGF0aWMgc2l6ZV90CiBzdHJ0aXRsZV9saWJj X21iKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90 IHNyY2xlbiwKIAkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCWxvY2FsZV90CWxvYyA9IGxv Y2FsZS0+aW5mby5sdDsKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGliYyA9IChzdHJ1Y3QgbGli Y19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKIAlpbnQJCQl3YXNhbG51bSA9 IGZhbHNlOwogCXNpemVfdAkJcmVzdWx0X3NpemU7CiAJd2NoYXJfdCAgICAqd29ya3NwYWNlOwpA QCAtNTU3LDEwICs2MTMsMTAgQEAgc3RydGl0bGVfbGliY19tYihjaGFyICpkZXN0LCBzaXplX3Qg ZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiAJZm9yIChjdXJyX2No YXIgPSAwOyB3b3Jrc3BhY2VbY3Vycl9jaGFyXSAhPSAwOyBjdXJyX2NoYXIrKykKIAl7CiAJCWlm ICh3YXNhbG51bSkKLQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gdG93bG93ZXJfbCh3b3Jrc3Bh Y2VbY3Vycl9jaGFyXSwgbG9jKTsKKwkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gdG93bG93ZXJf bCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbGliYy0+bHQpOwogCQllbHNlCi0JCQl3b3Jrc3BhY2Vb Y3Vycl9jaGFyXSA9IHRvd3VwcGVyX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIGxvYyk7Ci0JCXdh c2FsbnVtID0gaXN3YWxudW1fbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbG9jKTsKKwkJCXdvcmtz cGFjZVtjdXJyX2NoYXJdID0gdG93dXBwZXJfbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbGliYy0+ bHQpOworCQl3YXNhbG51bSA9IGlzd2FsbnVtX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIGxpYmMt Pmx0KTsKIAl9CiAKIAkvKgpAQCAtNTkyLDcgKzY0OCw3IEBAIHN0cnVwcGVyX2xpYmNfc2IoY2hh ciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVu LAogCiAJaWYgKHNyY2xlbiArIDEgPD0gZGVzdHNpemUpCiAJewotCQlsb2NhbGVfdAlsb2MgPSBs b2NhbGUtPmluZm8ubHQ7CisJCXN0cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVjdCBs aWJjX3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKIAkJY2hhcgkgICAqcDsKIAog CQltZW1jcHkoZGVzdCwgc3JjLCBzcmNsZW4pOwpAQCAtNjEwLDcgKzY2Niw3IEBAIHN0cnVwcGVy X2xpYmNfc2IoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNz aXplX3Qgc3JjbGVuLAogCQkJaWYgKGxvY2FsZS0+aXNfZGVmYXVsdCkKIAkJCQkqcCA9IHBnX3Rv dXBwZXIoKHVuc2lnbmVkIGNoYXIpICpwKTsKIAkJCWVsc2UKLQkJCQkqcCA9IHRvdXBwZXJfbCgo dW5zaWduZWQgY2hhcikgKnAsIGxvYyk7CisJCQkJKnAgPSB0b3VwcGVyX2woKHVuc2lnbmVkIGNo YXIpICpwLCBsaWJjLT5sdCk7CiAJCX0KIAl9CiAKQEAgLTYyMSw3ICs2NzcsOCBAQCBzdGF0aWMg c2l6ZV90CiBzdHJ1cHBlcl9saWJjX21iKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29u c3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKQog ewotCWxvY2FsZV90CWxvYyA9IGxvY2FsZS0+aW5mby5sdDsKKwlzdHJ1Y3QgbGliY19wcm92aWRl ciAqbGliYyA9IChzdHJ1Y3QgbGliY19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7 CisKIAlzaXplX3QJCXJlc3VsdF9zaXplOwogCXdjaGFyX3QgICAgKndvcmtzcGFjZTsKIAljaGFy CSAgICpyZXN1bHQ7CkBAIC02NDMsNyArNzAwLDcgQEAgc3RydXBwZXJfbGliY19tYihjaGFyICpk ZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiAJ Y2hhcjJ3Y2hhcih3b3Jrc3BhY2UsIHNyY2xlbiArIDEsIHNyYywgc3JjbGVuLCBsb2NhbGUpOwog CiAJZm9yIChjdXJyX2NoYXIgPSAwOyB3b3Jrc3BhY2VbY3Vycl9jaGFyXSAhPSAwOyBjdXJyX2No YXIrKykKLQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3d1cHBlcl9sKHdvcmtzcGFjZVtjdXJy X2NoYXJdLCBsb2MpOworCQl3b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IHRvd3VwcGVyX2wod29ya3Nw YWNlW2N1cnJfY2hhcl0sIGxpYmMtPmx0KTsKIAogCS8qCiAJICogTWFrZSByZXN1bHQgbGFyZ2Ug ZW5vdWdoOyBjYXNlIGNoYW5nZSBtaWdodCBjaGFuZ2UgbnVtYmVyIG9mIGJ5dGVzCkBAIC02NzEs NiArNzI4LDcgQEAgY3JlYXRlX3BnX2xvY2FsZV9saWJjKE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRl eHQgY29udGV4dCkKIAljb25zdCBjaGFyICpjb2xsYXRlOwogCWNvbnN0IGNoYXIgKmN0eXBlOwog CWxvY2FsZV90CWxvYzsKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGliYzsKIAlwZ19sb2NhbGVf dCByZXN1bHQ7CiAKIAlpZiAoY29sbGlkID09IERFRkFVTFRfQ09MTEFUSU9OX09JRCkKQEAgLTcw OSwxNiArNzY3LDE5IEBAIGNyZWF0ZV9wZ19sb2NhbGVfbGliYyhPaWQgY29sbGlkLCBNZW1vcnlD b250ZXh0IGNvbnRleHQpCiAJCVJlbGVhc2VTeXNDYWNoZSh0cCk7CiAJfQogCi0KIAlsb2MgPSBt YWtlX2xpYmNfY29sbGF0b3IoY29sbGF0ZSwgY3R5cGUpOwogCiAJcmVzdWx0ID0gTWVtb3J5Q29u dGV4dEFsbG9jWmVybyhjb250ZXh0LCBzaXplb2Yoc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QpKTsK KworCWxpYmMgPSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvKGNvbnRleHQsIHNpemVvZihzdHJ1Y3Qg bGliY19wcm92aWRlcikpOworCWxpYmMtPmx0ID0gbG9jOworCXJlc3VsdC0+cHJvdmlkZXJfZGF0 YSA9ICh2b2lkICopIGxpYmM7CisKIAlyZXN1bHQtPmRldGVybWluaXN0aWMgPSB0cnVlOwogCXJl c3VsdC0+Y29sbGF0ZV9pc19jID0gKHN0cmNtcChjb2xsYXRlLCAiQyIpID09IDApIHx8CiAJCShz dHJjbXAoY29sbGF0ZSwgIlBPU0lYIikgPT0gMCk7CiAJcmVzdWx0LT5jdHlwZV9pc19jID0gKHN0 cmNtcChjdHlwZSwgIkMiKSA9PSAwKSB8fAogCQkoc3RyY21wKGN0eXBlLCAiUE9TSVgiKSA9PSAw KTsKLQlyZXN1bHQtPmluZm8ubHQgPSBsb2M7CiAJaWYgKCFyZXN1bHQtPmNvbGxhdGVfaXNfYykK IAl7CiAjaWZkZWYgV0lOMzIKQEAgLTgzMiw2ICs4OTMsOCBAQCBzdHJuY29sbF9saWJjKGNvbnN0 IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwgc3NpemVfdCBsZW4y LAogCWNvbnN0IGNoYXIgKmFyZzJuOwogCWludAkJCXJlc3VsdDsKIAorCXN0cnVjdCBsaWJjX3By b3ZpZGVyICpsaWJjID0gKHN0cnVjdCBsaWJjX3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJf ZGF0YTsKKwogCWlmIChidWZzaXplMSArIGJ1ZnNpemUyID4gVEVYVEJVRkxFTikKIAkJYnVmID0g cGFsbG9jKGJ1ZnNpemUxICsgYnVmc2l6ZTIpOwogCkBAIC04NjIsNyArOTI1LDcgQEAgc3RybmNv bGxfbGliYyhjb25zdCBjaGFyICphcmcxLCBzc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIs IHNzaXplX3QgbGVuMiwKIAkJYXJnMm4gPSBidWYyOwogCX0KIAotCXJlc3VsdCA9IHN0cmNvbGxf bChhcmcxbiwgYXJnMm4sIGxvY2FsZS0+aW5mby5sdCk7CisJcmVzdWx0ID0gc3RyY29sbF9sKGFy ZzFuLCBhcmcybiwgbGliYy0+bHQpOwogCiAJaWYgKGJ1ZiAhPSBzYnVmKQogCQlwZnJlZShidWYp OwpAQCAtODg2LDggKzk0OSwxMCBAQCBzdHJueGZybV9saWJjKGNoYXIgKmRlc3QsIHNpemVfdCBk ZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAlzaXplX3QJCWJ1ZnNp emUgPSBzcmNsZW4gKyAxOwogCXNpemVfdAkJcmVzdWx0OwogCisJc3RydWN0IGxpYmNfcHJvdmlk ZXIgKmxpYmMgPSAoc3RydWN0IGxpYmNfcHJvdmlkZXIgKikgbG9jYWxlLT5wcm92aWRlcl9kYXRh OworCiAJaWYgKHNyY2xlbiA9PSAtMSkKLQkJcmV0dXJuIHN0cnhmcm1fbChkZXN0LCBzcmMsIGRl c3RzaXplLCBsb2NhbGUtPmluZm8ubHQpOworCQlyZXR1cm4gc3RyeGZybV9sKGRlc3QsIHNyYywg ZGVzdHNpemUsIGxpYmMtPmx0KTsKIAogCWlmIChidWZzaXplID4gVEVYVEJVRkxFTikKIAkJYnVm ID0gcGFsbG9jKGJ1ZnNpemUpOwpAQCAtODk2LDcgKzk2MSw3IEBAIHN0cm54ZnJtX2xpYmMoY2hh ciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVu LAogCW1lbWNweShidWYsIHNyYywgc3JjbGVuKTsKIAlidWZbc3JjbGVuXSA9ICdcMCc7CiAKLQly ZXN1bHQgPSBzdHJ4ZnJtX2woZGVzdCwgYnVmLCBkZXN0c2l6ZSwgbG9jYWxlLT5pbmZvLmx0KTsK KwlyZXN1bHQgPSBzdHJ4ZnJtX2woZGVzdCwgYnVmLCBkZXN0c2l6ZSwgbGliYy0+bHQpOwogCiAJ aWYgKGJ1ZiAhPSBzYnVmKQogCQlwZnJlZShidWYpOwpAQCAtOTk0LDYgKzEwNTksOCBAQCBzdHJu Y29sbF9saWJjX3dpbjMyX3V0ZjgoY29uc3QgY2hhciAqYXJnMSwgc3NpemVfdCBsZW4xLCBjb25z dCBjaGFyICphcmcyLAogCWludAkJCXI7CiAJaW50CQkJcmVzdWx0OwogCisJc3RydWN0IGxpYmNf cHJvdmlkZXIgKmxpYmMgPSAoc3RydWN0IGxpYmNfcHJvdmlkZXIgKikgbG9jYWxlLT5wcm92aWRl cl9kYXRhOworCiAJQXNzZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KTsKIAog CWlmIChsZW4xID09IC0xKQpAQCAtMTAzOCw3ICsxMTA1LDcgQEAgc3RybmNvbGxfbGliY193aW4z Ml91dGY4KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwK IAkoKExQV1NUUikgYTJwKVtyXSA9IDA7CiAKIAllcnJubyA9IDA7Ci0JcmVzdWx0ID0gd2NzY29s bF9sKChMUFdTVFIpIGExcCwgKExQV1NUUikgYTJwLCBsb2NhbGUtPmluZm8ubHQpOworCXJlc3Vs dCA9IHdjc2NvbGxfbCgoTFBXU1RSKSBhMXAsIChMUFdTVFIpIGEycCwgbGliYy0+bHQpOwogCWlm IChyZXN1bHQgPT0gMjE0NzQ4MzY0NykJLyogX05MU0NNUEVSUk9SOyBtaXNzaW5nIGZyb20gbWlu Z3cgaGVhZGVycyAqLwogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2coImNvdWxkIG5vdCBj b21wYXJlIFVuaWNvZGUgc3RyaW5nczogJW0iKSkpOwpAQCAtMTE2Nyw4ICsxMjM0LDEwIEBAIHdj aGFyMmNoYXIoY2hhciAqdG8sIGNvbnN0IHdjaGFyX3QgKmZyb20sIHNpemVfdCB0b2xlbiwgcGdf bG9jYWxlX3QgbG9jYWxlKQogCX0KIAllbHNlCiAJeworCQlzdHJ1Y3QgbGliY19wcm92aWRlciAq bGliYyA9IChzdHJ1Y3QgbGliY19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisK IAkJLyogVXNlIHdjc3RvbWJzX2wgZm9yIG5vbmRlZmF1bHQgbG9jYWxlcyAqLwotCQlyZXN1bHQg PSB3Y3N0b21ic19sKHRvLCBmcm9tLCB0b2xlbiwgbG9jYWxlLT5pbmZvLmx0KTsKKwkJcmVzdWx0 ID0gd2NzdG9tYnNfbCh0bywgZnJvbSwgdG9sZW4sIGxpYmMtPmx0KTsKIAl9CiAKIAlyZXR1cm4g cmVzdWx0OwpAQCAtMTIyNyw4ICsxMjk2LDEwIEBAIGNoYXIyd2NoYXIod2NoYXJfdCAqdG8sIHNp emVfdCB0b2xlbiwgY29uc3QgY2hhciAqZnJvbSwgc2l6ZV90IGZyb21sZW4sCiAJCX0KIAkJZWxz ZQogCQl7CisJCQlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGliYyA9IChzdHJ1Y3QgbGliY19wcm92 aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKIAkJCS8qIFVzZSBtYnN0b3djc19sIGZv ciBub25kZWZhdWx0IGxvY2FsZXMgKi8KLQkJCXJlc3VsdCA9IG1ic3Rvd2NzX2wodG8sIHN0ciwg dG9sZW4sIGxvY2FsZS0+aW5mby5sdCk7CisJCQlyZXN1bHQgPSBtYnN0b3djc19sKHRvLCBzdHIs IHRvbGVuLCBsaWJjLT5sdCk7CiAJCX0KIAogCQlwZnJlZShzdHIpOwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUu aAppbmRleCA0NGZmNjBhMjViNC4uZDI1OGNhNzU2YWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3V0aWxzL3BnX2xvY2FsZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oCkBA IC0xNTEsMjIgKzE1MSw3IEBAIHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0CiAJY29uc3Qgc3RydWN0 IGNvbGxhdGVfbWV0aG9kcyAqY29sbGF0ZTsJLyogTlVMTCBpZiBjb2xsYXRlX2lzX2MgKi8KIAlj b25zdCBzdHJ1Y3QgY3R5cGVfbWV0aG9kcyAqY3R5cGU7CS8qIE5VTEwgaWYgY3R5cGVfaXNfYyAq LwogCi0JdW5pb24KLQl7Ci0JCXN0cnVjdAotCQl7Ci0JCQljb25zdCBjaGFyICpsb2NhbGU7Ci0J CQlib29sCQljYXNlbWFwX2Z1bGw7Ci0JCX0JCQlidWlsdGluOwotCQlsb2NhbGVfdAlsdDsKLSNp ZmRlZiBVU0VfSUNVCi0JCXN0cnVjdAotCQl7Ci0JCQljb25zdCBjaGFyICpsb2NhbGU7Ci0JCQlV Q29sbGF0b3IgICp1Y29sOwotCQl9CQkJaWN1OwotI2VuZGlmCi0JfQkJCWluZm87CisJdm9pZAkg ICAqcHJvdmlkZXJfZGF0YTsKIH07CiAKIGV4dGVybiB2b2lkIGluaXRfZGF0YWJhc2VfY29sbGF0 aW9uKHZvaWQpOwotLSAKMi40My4wCgo= --=-7K8P5soIlOZqH7Zd8hOj Content-Disposition: attachment; filename="v16-0004-Don-t-include-ICU-headers-in-pg_locale.h.patch" Content-Type: text/x-patch; name="v16-0004-Don-t-include-ICU-headers-in-pg_locale.h.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBjYjQ0MTA2MWY0NDdkM2FjMmZhYThjZGIyZjc2OGNhNDJjNWQ4ZjI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDkgT2N0IDIwMjQgMTA6MDA6NTggLTA3MDAKU3ViamVjdDogW1BBVENIIHYxNiA0LzRdIERv bid0IGluY2x1ZGUgSUNVIGhlYWRlcnMgaW4gcGdfbG9jYWxlLmguCgotLS0KIHNyYy9iYWNrZW5k L2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYyAgfCA0ICsrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9mb3JtYXR0aW5nLmMgICAgfCA0IC0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2Nh bGUuYyAgICAgfCA0ICsrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfaWN1LmMg fCAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMgICAgICAgfCA0ICsrKysKIHNy Yy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oICAgICAgICAgfCA0IC0tLS0KIDYgZmlsZXMgY2hh bmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9j b2xsYXRpb25jbWRzLmMKaW5kZXggOGFjYmZiYmVkYTAuLmE1N2ZlOTNjMzg3IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29sbGF0aW9uY21kcy5jCkBAIC0xNCw2ICsxNCwxMCBAQAogICovCiAjaW5jbHVk ZSAicG9zdGdyZXMuaCIKIAorI2lmZGVmIFVTRV9JQ1UKKyNpbmNsdWRlIDx1bmljb2RlL3Vjb2wu aD4KKyNlbmRpZgorCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUg ImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2Zvcm1hdHRpbmcuYwppbmRleCA1YmQxZTAxZjdlNC4uYjNkNWUwNDM2ZWUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2Zvcm1hdHRpbmcuYwpAQCAtNzAsMTAgKzcwLDYgQEAKICNpbmNsdWRlIDxsaW1pdHMu aD4KICNpbmNsdWRlIDx3Y3R5cGUuaD4KIAotI2lmZGVmIFVTRV9JQ1UKLSNpbmNsdWRlIDx1bmlj b2RlL3VzdHJpbmcuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24u aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tb24vaW50Lmgi CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKaW5kZXggNDUxYWM0ZTJkOWIuLjQ5YmI3ZmMwMTA0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC0zMyw2ICszMywxMCBAQAogCiAjaW5j bHVkZSA8dGltZS5oPgogCisjaWZkZWYgVVNFX0lDVQorI2luY2x1ZGUgPHVuaWNvZGUvdWNvbC5o PgorI2VuZGlmCisKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgi CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2ljdS5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYwppbmRleCA0OTdiZTk1YTg2OS4uZDM3 YTc2YTlhZjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfaWN1 LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYwpAQCAtMTMsNiAr MTMsNyBAQAogCiAjaWZkZWYgVVNFX0lDVQogI2luY2x1ZGUgPHVuaWNvZGUvdWNudi5oPgorI2lu Y2x1ZGUgPHVuaWNvZGUvdWNvbC5oPgogI2luY2x1ZGUgPHVuaWNvZGUvdXN0cmluZy5oPgogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKaW5kZXggM2U0ZDU1NjhiZGUuLjZmYmM5ODRjNTM0IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKQEAgLTE3LDYgKzE3LDEwIEBACiAjaW5jbHVkZSA8Y3R5 cGUuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KIAorI2lmZGVmIFVTRV9JQ1UKKyNpbmNsdWRlIDx1 bmljb2RlL3VjaGFyLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgImFjY2Vzcy9kZXRvYXN0LmgiCiAj aW5jbHVkZSAiYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19jb2xsYXRpb24uaCIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5o IGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgKaW5kZXggZDI1OGNhNzU2YWIuLjFmZjA3 ZGE0Y2IzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaAorKysgYi9z cmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaApAQCAtMTQsMTAgKzE0LDYgQEAKIAogI2luY2x1 ZGUgIm1iL3BnX3djaGFyLmgiCiAKLSNpZmRlZiBVU0VfSUNVCi0jaW5jbHVkZSA8dW5pY29kZS91 Y29sLmg+Ci0jZW5kaWYKLQogLyogdXNlIGZvciBsaWJjIGxvY2FsZSBuYW1lcyAqLwogI2RlZmlu ZSBMT0NBTEVfTkFNRV9CVUZMRU4gMTI4CiAKLS0gCjIuNDMuMAoK --=-7K8P5soIlOZqH7Zd8hOj--