From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 127262 invoked by alias); 18 Dec 2018 21:13:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 127241 invoked by uid 89); 18 Dec 2018 21:13:38 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-16.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS,TIME_LIMIT_EXCEEDED autolearn=unavailable version=3.3.2 spammy=ai, pi, ba, ci X-HELO: mail-oi1-f196.google.com Received: from mail-oi1-f196.google.com (HELO mail-oi1-f196.google.com) (209.85.167.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 18 Dec 2018 21:13:27 +0000 Received: by mail-oi1-f196.google.com with SMTP id t204so3159008oie.7 for ; Tue, 18 Dec 2018 13:13:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=o8diTC0bsQHEwV8dUg2Rqioa8mKSb8hsRlxlVxf8kTo=; b=TthhN6JDPedtV7im4XWmfVIzwsBPySynH+RBqo5EpoQwMshrXifACaPNqHVDZfUrM3 el/7H+IWjtiBP458aQq53DyoPkNgFGW3x5IhcK5B32OY7QkMU+vjGjzArcGtEyXDh6jh 1J4Azqsf5XIhCYjysHFijY3uMfIuTiIMgSINxHcfVT30dTvBEU8219ttsVRYg3tpj0nI zQvWyHYefiiqiH4v3ubCnL9OZgusFbfq2oTHGOj1cq5uX8Im7vkLf7GMan4CtRSY39aY G8ICroFE7NKelT7FDrUvKMVlHGvGLaWOgoIC0XKlmMwDEMRJ1Jpw6d64/Q83l859pyGo ELLQ== MIME-Version: 1.0 References: <24f8a201-bb3e-3acb-b679-570a8796358d@redhat.com> <20181218141051.GA3461@gmail.com> <14946d45-0983-12ad-3f93-99da07b3886e@redhat.com> In-Reply-To: <14946d45-0983-12ad-3f93-99da07b3886e@redhat.com> From: "H.J. Lu" Date: Tue, 18 Dec 2018 21:13:00 -0000 Message-ID: Subject: V8 [PATCH] C/C++: Add -Waddress-of-packed-member To: Jason Merrill Cc: Richard Guenther , "Joseph S. Myers" , Martin Sebor , GCC Patches Content-Type: multipart/mixed; boundary="0000000000003c802d057d525e4d" X-IsSubscribed: yes X-SW-Source: 2018-12/txt/msg01341.txt.bz2 --0000000000003c802d057d525e4d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Content-length: 4654 On Tue, Dec 18, 2018 at 12:36 PM Jason Merrill wrote: > > On 12/18/18 9:10 AM, H.J. Lu wrote: > > + switch (TREE_CODE (rhs)) > > + { > > + case ADDR_EXPR: > > + base =3D TREE_OPERAND (rhs, 0); > > + while (handled_component_p (base)) > > + { > > + if (TREE_CODE (base) =3D=3D COMPONENT_REF) > > + break; > > + base =3D TREE_OPERAND (base, 0); > > + } > > + if (TREE_CODE (base) !=3D COMPONENT_REF) > > + return NULL_TREE; > > + object =3D TREE_OPERAND (base, 0); > > + field =3D TREE_OPERAND (base, 1); > > + break; > > + case COMPONENT_REF: > > + object =3D TREE_OPERAND (rhs, 0); > > + field =3D TREE_OPERAND (rhs, 1); > > + break; > > + default: > > + return NULL_TREE; > > + } > > + > > + tree context =3D check_alignment_of_packed_member (type, field); > > + if (context) > > + return context; > > + > > + /* Check alignment of the object. */ > > + while (TREE_CODE (object) =3D=3D COMPONENT_REF) > > + { > > + field =3D TREE_OPERAND (object, 1); > > + context =3D check_alignment_of_packed_member (type, field); > > + if (context) > > + return context; > > + object =3D TREE_OPERAND (object, 0); > > + } > > + > > You can see interleaved COMPONENT_REF and ARRAY_REF that this still > doesn't look like it will handle, something like > > struct A > { > int i; > }; > > struct B > { > char c; > __attribute ((packed)) A ar[4]; > }; > > B b; > > int *p =3D &b.ar[1].i; > > Rather than have a loop in the ADDR_EXPR case of the switch, you can > handle everything in the lower loop. And not have a switch at all, just > strip any ADDR_EXPR before the loop. I changed it to if (TREE_CODE (rhs) =3D=3D ADDR_EXPR) rhs =3D TREE_OPERAND (rhs, 0); while (handled_component_p (rhs)) { if (TREE_CODE (rhs) =3D=3D COMPONENT_REF) break; rhs =3D TREE_OPERAND (rhs, 0); } if (TREE_CODE (rhs) !=3D COMPONENT_REF) return NULL_TREE; object =3D TREE_OPERAND (rhs, 0); field =3D TREE_OPERAND (rhs, 1); [hjl@gnu-cfl-1 pr51628-6]$ cat a.i struct A { int i; } __attribute ((packed)); struct B { char c; struct A ar[4]; }; struct B b; int *p =3D &b.ar[1].i; [hjl@gnu-cfl-1 pr51628-6]$ make a.s /export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/ -O2 -S a.i a.i:14:10: warning: taking address of packed member of =E2=80=98struct A=E2= =80=99 may result in an unaligned pointer value [-Waddress-of-packed-member] 14 | int *p =3D &b.ar[1].i; | ^~~~~~~~~~ [hjl@gnu-cfl-1 pr51628-6]$ > > +check_and_warn_address_of_packed_member (tree type, tree rhs) > > +{ > > + if (TREE_CODE (rhs) !=3D COND_EXPR) > > + { > > + tree context =3D check_address_of_packed_member (type, rhs); > > + if (context) > > + { > > + location_t loc =3D EXPR_LOC_OR_LOC (rhs, input_location); > > + warning_at (loc, OPT_Waddress_of_packed_member, > > + "taking address of packed member of %qT may result " > > + "in an unaligned pointer value", > > + context); > > + } > > + return; > > + } > > + > > + /* Check the THEN path. */ > > + check_and_warn_address_of_packed_member (type, TREE_OPERAND (rhs, 1)= ); > > + > > + /* Check the ELSE path. */ > > + check_and_warn_address_of_packed_member (type, TREE_OPERAND (rhs, 2)= ); > > +} > > You probably also want to handle COMPOUND_EXPR. > Done. [hjl@gnu-cfl-1 pr51628-5]$ cat c.i struct A { int i; } __attribute__ ((packed)); int* foo3 (struct A *p1, int *q1, int *q2, struct A *p2) { return q1 ? (*q1 =3D 1, &p1->i) : (q2 ? (*q2 =3D 2, &p2->i): q2); } [hjl@gnu-cfl-1 pr51628-5]$ /export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/ -O2 -S c.i c.i: In function =E2=80=98foo3=E2=80=99: c.i:8:25: warning: taking address of packed member of =E2=80=98struct A=E2= =80=99 may result in an unaligned pointer value [-Waddress-of-packed-member] 8 | return q1 ? (*q1 =3D 1, &p1->i) : (q2 ? (*q2 =3D 2, &p2->i): q2); | ^~~~~~ c.i:8:51: warning: taking address of packed member of =E2=80=98struct A=E2= =80=99 may result in an unaligned pointer value [-Waddress-of-packed-member] 8 | return q1 ? (*q1 =3D 1, &p1->i) : (q2 ? (*q2 =3D 2, &p2->i): q2); | ^~~~~~ [hjl@gnu-cfl-1 pr51628-5]$ Here is the updated patch. OK for trunk? Thanks. --=20 H.J. --0000000000003c802d057d525e4d Content-Type: text/x-patch; charset="UTF-8"; name="0001-C-C-Add-Waddress-of-packed-member.patch" Content-Disposition: attachment; filename="0001-C-C-Add-Waddress-of-packed-member.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jpu8s1hz0 Content-length: 70354 RnJvbSAyMmU2MGExNmNhNWZkOWM1OTFlNmI0NGMwMjQ1Y2M1MWYxMmQ1YjZj IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhq bC50b29sc0BnbWFpbC5jb20+CkRhdGU6IEZyaSwgMTIgSmFuIDIwMTggMjE6 MTI6MDUgLTA4MDAKU3ViamVjdDogW1BBVENIXSBDL0MrKzogQWRkIC1XYWRk cmVzcy1vZi1wYWNrZWQtbWVtYmVyCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRl bnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRy YW5zZmVyLUVuY29kaW5nOiA4Yml0CgpXaGVuIGFkZHJlc3Mgb2YgcGFja2Vk IG1lbWJlciBvZiBzdHJ1Y3Qgb3IgdW5pb24gaXMgdGFrZW4sIGl0IG1heSBy ZXN1bHQKaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUuICBUaGlzIHBh dGNoIGFkZHMgLVdhZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIKdG8gY2hlY2sg YWxpZ25tZW50IGF0IHBvaW50ZXIgYXNzaWdubWVudCBhbmQgd2FybiB1bmFs aWduZWQgYWRkcmVzcyBhcwp3ZWxsIGFzIHVuYWxpZ25lZCBwb2ludGVyOgoK JCBjYXQgeC5pCnN0cnVjdCBwYWlyX3QKewogIGNoYXIgYzsKICBpbnQgaTsK fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CgpleHRlcm4gc3RydWN0IHBh aXJfdCBwOwppbnQgKmFkZHIgPSAmcC5pOwokIGdjYyAtTzIgLVMgeC5pCngu aTo4OjEzOiB3YXJuaW5nOiB0YWtpbmcgYWRkcmVzcyBvZiBwYWNrZWQgbWVt YmVyIG9mIOKAmHN0cnVjdCBwYWlyX3TigJkgbWF5IHJlc3VsdCBpbiBhbiB1 bmFsaWduZWQgcG9pbnRlciB2YWx1ZSBbLVdhZGRyZXNzLW9mLXBhY2tlZC1t ZW1iZXJdCjggfCBpbnQgKmFkZHIgPSAmcC5pOwogIHwgICAgICAgICAgICAg XgoKJCBjYXQgYy5pCnN0cnVjdCBCIHsgaW50IGk7IH07CnN0cnVjdCBDIHsg c3RydWN0IEIgYjsgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cgpsb25n KiBnOCAoc3RydWN0IEMgKnApIHsgcmV0dXJuIHA7IH0KJCBnY2MgLU8yIC1T IGMuaSAtV25vLWluY29tcGF0aWJsZS1wb2ludGVyLXR5cGVzCmMuaTogSW4g ZnVuY3Rpb24g4oCYZzjigJk6CmMuaTo0OjE4OiB3YXJuaW5nOiBjb252ZXJ0 aW5nIGEgcGFja2VkIOKAmHN0cnVjdCBDICrigJkgcG9pbnRlciAoYWxpZ25t ZW50IDEpIHRvIOKAmGxvbmcgaW50ICrigJkgKGFsaWdubWVudCA4KSBtYXkg bWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSBbLVdh ZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXJdCjQgfCBsb25nKiBnOCAoc3RydWN0 IEMgKnApIHsgcmV0dXJuIHA7IH0KICB8ICAgICAgICAgICAgICAgICAgXgpj Lmk6Mjo4OiBub3RlOiBkZWZpbmVkIGhlcmUKMiB8IHN0cnVjdCBDIHsgc3Ry dWN0IEIgYjsgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAgfCAgICAg ICAgXgokCgpUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiAg U2luY2UgcmVhZF9lbmNvZGVkX3ZhbHVlX3dpdGhfYmFzZQppbiB1bndpbmQt cGUuaCBoYXMKCiAgdW5pb24gdW5hbGlnbmVkCiAgICB7CiAgICAgIHZvaWQg KnB0cjsKICAgICAgdW5zaWduZWQgdTIgX19hdHRyaWJ1dGVfXyAoKG1vZGUg KEhJKSkpOwogICAgICB1bnNpZ25lZCB1NCBfX2F0dHJpYnV0ZV9fICgobW9k ZSAoU0kpKSk7CiAgICAgIHVuc2lnbmVkIHU4IF9fYXR0cmlidXRlX18gKCht b2RlIChESSkpKTsKICAgICAgc2lnbmVkIHMyIF9fYXR0cmlidXRlX18gKCht b2RlIChISSkpKTsKICAgICAgc2lnbmVkIHM0IF9fYXR0cmlidXRlX18gKCht b2RlIChTSSkpKTsKICAgICAgc2lnbmVkIHM4IF9fYXR0cmlidXRlX18gKCht b2RlIChESSkpKTsKICAgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykp OwogIF9VbndpbmRfSW50ZXJuYWxfUHRyIHJlc3VsdDsKCmFuZCBHQ0Mgd2Fy bnM6CgpnY2MvbGliZ2NjL3Vud2luZC1wZS5oOjIxMDozNzogd2FybmluZzog dGFraW5nIGFkZHJlc3Mgb2YgcGFja2VkIG1lbWJlciBvZiAndW5pb24gdW5h bGlnbmVkJyBtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZh bHVlIFstV2FkZHJlc3Mtb2YtcGFja2VkLW1lbWJlcl0KICAgIHJlc3VsdCA9 IChfVW53aW5kX0ludGVybmFsX1B0cikgdS0+cHRyOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBeCndlIG5lZWQgdG8gYWRkIEdDQyBw cmFnbWEgdG8gaWdub3JlIC1XYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyLgoK Z2NjL2MvCgoJUFIgYy81MTYyOAoJKiBkb2MvaW52b2tlLnRleGk6IERvY3Vt ZW50IC1Xbm8tYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyLgoKZ2NjL2MtZmFt aWx5LwoKCVBSIGMvNTE2MjgKCSogYy1jb21tb24uaCAod2Fybl9mb3JfYWRk cmVzc19vcl9wb2ludGVyX29mX3BhY2tlZF9tZW1iZXIpOiBOZXcuCgkqIGMt d2Fybi5jIChjaGVja19hbGlnbm1lbnRfb2ZfcGFja2VkX21lbWJlcik6IE5l dyBmdW5jdGlvbi4KCShjaGVja19hZGRyZXNzX29mX3BhY2tlZF9tZW1iZXIp OiBMaWtld2lzZS4KCShjaGVja19hbmRfd2Fybl9hZGRyZXNzX29mX3BhY2tl ZF9tZW1iZXIpOiBMaWtld2lzZS4KCSh3YXJuX2Zvcl9hZGRyZXNzX29yX3Bv aW50ZXJfb2ZfcGFja2VkX21lbWJlcik6IExpa2V3aXNlLgoJKiBjLm9wdDog QWRkIC1Xbm8tYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyLgoKZ2NjL2MvCgoJ UFIgYy81MTYyOAoJKiBjLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25t ZW50KTogQ2FsbAoJd2Fybl9mb3JfYWRkcmVzc19vcl9wb2ludGVyX29mX3Bh Y2tlZF9tZW1iZXIuCgpnY2MvY3AvCgoJUFIgYy81MTYyOAoJKiBjYWxsLmMg KGNvbnZlcnRfZm9yX2FyZ19wYXNzaW5nKTogQ2FsbAoJd2Fybl9mb3JfYWRk cmVzc19vcl9wb2ludGVyX29mX3BhY2tlZF9tZW1iZXIuCgkqIHR5cGVjay5j IChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogTGlrZXdpc2UuCgpnY2MvdGVz dHN1aXRlLwoKCVBSIGMvNTE2MjgKCSogYy1jKystY29tbW9uL3ByNTE2Mjgt MS5jOiBOZXcgdGVzdC4KCSogYy1jKystY29tbW9uL3ByNTE2MjgtMi5jOiBM aWtld2lzZS4KCSogYy1jKystY29tbW9uL3ByNTE2MjgtMy5jOiBMaWtld2lz ZS4KCSogYy1jKystY29tbW9uL3ByNTE2MjgtNC5jOiBMaWtld2lzZS4KCSog Yy1jKystY29tbW9uL3ByNTE2MjgtNS5jOiBMaWtld2lzZS4KCSogYy1jKyst Y29tbW9uL3ByNTE2MjgtNi5jOiBMaWtld2lzZS4KCSogYy1jKystY29tbW9u L3ByNTE2MjgtNy5jOiBMaWtld2lzZS4KCSogYy1jKystY29tbW9uL3ByNTE2 MjgtOC5jOiBMaWtld2lzZS4KCSogYy1jKystY29tbW9uL3ByNTE2MjgtOS5j OiBMaWtld2lzZS4KCSogYy1jKystY29tbW9uL3ByNTE2MjgtMTAuYzogTGlr ZXdpc2UuCgkqIGMtYysrLWNvbW1vbi9wcjUxNjI4LTExLmM6IExpa2V3aXNl LgoJKiBjLWMrKy1jb21tb24vcHI1MTYyOC0xMi5jOiBMaWtld2lzZS4KCSog Yy1jKystY29tbW9uL3ByNTE2MjgtMTMuYzogTGlrZXdpc2UuCgkqIGMtYysr LWNvbW1vbi9wcjUxNjI4LTE0LmM6IExpa2V3aXNlLgoJKiBjLWMrKy1jb21t b24vcHI1MTYyOC0xNS5jOiBMaWtld2lzZS4KCSogYy1jKystY29tbW9uL3By NTE2MjgtMjYuYzogTGlrZXdpc2UuCgkqIGMtYysrLWNvbW1vbi9wcjUxNjI4 LTI3LmM6IExpa2V3aXNlLgoJKiBjLWMrKy1jb21tb24vcHI1MTYyOC0yOC5j OiBMaWtld2lzZS4KCSogYy1jKystY29tbW9uL3ByNTE2MjgtMjkuYzogTGlr ZXdpc2UuCgkqIGMtYysrLWNvbW1vbi9wcjUxNjI4LTMwLmM6IExpa2V3aXNl LgoJKiBjLWMrKy1jb21tb24vcHI1MTYyOC0zMS5jOiBMaWtld2lzZS4KCSog Yy1jKystY29tbW9uL3ByNTE2MjgtMzIuYzogTGlrZXdpc2UuCgkqIGdjYy5k Zy9wcjUxNjI4LTE3LmM6IExpa2V3aXNlLgoJKiBnY2MuZGcvcHI1MTYyOC0x OC5jOiBMaWtld2lzZS4KCSogZ2NjLmRnL3ByNTE2MjgtMTkuYzogTGlrZXdp c2UuCgkqIGdjYy5kZy9wcjUxNjI4LTIwLmM6IExpa2V3aXNlLgoJKiBnY2Mu ZGcvcHI1MTYyOC0yMS5jOiBMaWtld2lzZS4KCSogZ2NjLmRnL3ByNTE2Mjgt MjIuYzogTGlrZXdpc2UuCgkqIGdjYy5kZy9wcjUxNjI4LTIzLmM6IExpa2V3 aXNlLgoJKiBnY2MuZGcvcHI1MTYyOC0yNC5jOiBMaWtld2lzZS4KCSogZ2Nj LmRnL3ByNTE2MjgtMjUuYzogTGlrZXdpc2UuCgkqIGMtYysrLWNvbW1vbi9h c2FuL21pc2FsaWduLTEuYzogQWRkCgktV25vLWFkZHJlc3Mtb2YtcGFja2Vk LW1lbWJlci4KCSogYy1jKystY29tbW9uL2FzYW4vbWlzYWxpZ24tMi5jOiBM aWtld2lzZS4KCSogYy1jKystY29tbW9uL3Vic2FuL2FsaWduLTIuYzogTGlr ZXdpc2UuCgkqIGMtYysrLWNvbW1vbi91YnNhbi9hbGlnbi00LmM6IExpa2V3 aXNlLgoJKiBjLWMrKy1jb21tb24vdWJzYW4vYWxpZ24tNi5jOiBMaWtld2lz ZS4KCSogYy1jKystY29tbW9uL3Vic2FuL2FsaWduLTcuYzogTGlrZXdpc2Uu CgkqIGMtYysrLWNvbW1vbi91YnNhbi9hbGlnbi04LmM6IExpa2V3aXNlLgoJ KiBjLWMrKy1jb21tb24vdWJzYW4vYWxpZ24tMTAuYzogTGlrZXdpc2UuCgkq IGcrKy5kZy91YnNhbi9hbGlnbi0yLkM6IExpa2V3aXNlLgoJKiBnY2MudGFy Z2V0L2kzODYvYXZ4NTEyYnctdm1vdmRxdTE2LTIuYzogTGlrZXdpc2UuCgkq IGdjYy50YXJnZXQvaTM4Ni9hdng1MTJmLXZtb3ZkcXUzMi0yLmM6IExpa2V3 aXNlLgoJKiBnY2MudGFyZ2V0L2kzODYvYXZ4NTEyZi12bW92ZHF1NjQtMi5j OiBMaWtld2lzZS4KCSogZ2NjLnRhcmdldC9pMzg2L2F2eDUxMnZsLXZtb3Zk cXUxNi0yLmM6IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0L2kzODYvYXZ4NTEy dmwtdm1vdmRxdTMyLTIuYzogTGlrZXdpc2UuCgkqIGdjYy50YXJnZXQvaTM4 Ni9hdng1MTJ2bC12bW92ZHF1NjQtMi5jOiBMaWtld2lzZS4KCmxpYmdjYy8K CgkqIHVud2luZC1wZS5oIChyZWFkX2VuY29kZWRfdmFsdWVfd2l0aF9iYXNl KTogQWRkIEdDQyBwcmFnbWEKCXRvIGlnbm9yZSAtV2FkZHJlc3Mtb2YtcGFj a2VkLW1lbWJlci4KLS0tCiBnY2MvYy1mYW1pbHkvYy1jb21tb24uaCAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZ2NjL2MtZmFtaWx5L2Mtd2Fy bi5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTc4ICsrKysrKysrKysr KysrKysrKwogZ2NjL2MtZmFtaWx5L2Mub3B0ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICA0ICsKIGdjYy9jL2MtdHlwZWNrLmMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAxMSArLQogZ2NjL2NwL2NhbGwuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzICsKIGdjYy9j cC90eXBlY2suYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg MiArCiBnY2MvZG9jL2ludm9rZS50ZXhpICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDggKwogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNh bi9taXNhbGlnbi0xLmMgIHwgICAyICstCiBnY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9hc2FuL21pc2FsaWduLTIuYyAgfCAgIDIgKy0KIGdjYy90ZXN0 c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMS5jICAgICAgICB8ICAyOSAr KysKIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMTAuYyAg ICAgICB8ICAyNCArKysKIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3By NTE2MjgtMTEuYyAgICAgICB8ICAxNyArKwogZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vcHI1MTYyOC0xMi5jICAgICAgIHwgIDE4ICsrCiBnY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTEzLmMgICAgICAgfCAgIDkg KwogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0xNC5jICAg ICAgIHwgICA5ICsKIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2 MjgtMTUuYyAgICAgICB8ICAxNCArKwogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vcHI1MTYyOC0xNi5jICAgICAgIHwgIDEzICsrCiBnY2MvdGVzdHN1 aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTIuYyAgICAgICAgfCAgMjkgKysr CiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTI2LmMgICAg ICAgfCAgMzMgKysrKwogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1 MTYyOC0yNy5jICAgICAgIHwgIDEyICsrCiBnY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9wcjUxNjI4LTI4LmMgICAgICAgfCAgMjYgKysrCiBnY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTI5LmMgICAgICAgfCAgMTYg KysKIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMy5jICAg ICAgICB8ICAzNSArKysrCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9w cjUxNjI4LTMwLmMgICAgICAgfCAgMjMgKysrCiBnY2MvdGVzdHN1aXRlL2Mt YysrLWNvbW1vbi9wcjUxNjI4LTMxLmMgICAgICAgfCAgMTYgKysKIGdjYy90 ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMzIuYyAgICAgICB8ICAx OSArKwogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC00LmMg ICAgICAgIHwgIDM1ICsrKysKIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L3ByNTE2MjgtNS5jICAgICAgICB8ICAzNSArKysrCiBnY2MvdGVzdHN1aXRl L2MtYysrLWNvbW1vbi9wcjUxNjI4LTYuYyAgICAgICAgfCAgMzUgKysrKwog Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC03LmMgICAgICAg IHwgIDI5ICsrKwogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYy OC04LmMgICAgICAgIHwgIDM2ICsrKysKIGdjYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL3ByNTE2MjgtOS5jICAgICAgICB8ICAzNiArKysrCiBnY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi91YnNhbi9hbGlnbi0xMC5jICAgfCAgIDIg Ky0KIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vic2FuL2FsaWduLTIu YyAgICB8ICAgMiArLQogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vdWJz YW4vYWxpZ24tNC5jICAgIHwgICAyICstCiBnY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi91YnNhbi9hbGlnbi02LmMgICAgfCAgIDIgKy0KIGdjYy90ZXN0 c3VpdGUvYy1jKystY29tbW9uL3Vic2FuL2FsaWduLTcuYyAgICB8ICAgMiAr LQogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vdWJzYW4vYWxpZ24tOC5j ICAgIHwgICAyICstCiBnY2MvdGVzdHN1aXRlL2crKy5kZy91YnNhbi9hbGln bi0yLkMgICAgICAgICAgfCAgIDIgKy0KIGdjYy90ZXN0c3VpdGUvZ2NjLmRn L3ByNTE2MjgtMTcuYyAgICAgICAgICAgICB8ICAxMCArCiBnY2MvdGVzdHN1 aXRlL2djYy5kZy9wcjUxNjI4LTE4LmMgICAgICAgICAgICAgfCAgMjMgKysr CiBnY2MvdGVzdHN1aXRlL2djYy5kZy9wcjUxNjI4LTE5LmMgICAgICAgICAg ICAgfCAgMjYgKysrCiBnY2MvdGVzdHN1aXRlL2djYy5kZy9wcjUxNjI4LTIw LmMgICAgICAgICAgICAgfCAgMTEgKysKIGdjYy90ZXN0c3VpdGUvZ2NjLmRn L3ByNTE2MjgtMjEuYyAgICAgICAgICAgICB8ICAxMSArKwogZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvcHI1MTYyOC0yMi5jICAgICAgICAgICAgIHwgICA5ICsK IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMjMuYyAgICAgICAgICAg ICB8ICAgOSArCiBnY2MvdGVzdHN1aXRlL2djYy5kZy9wcjUxNjI4LTI0LmMg ICAgICAgICAgICAgfCAgMTAgKwogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1 MTYyOC0yNS5jICAgICAgICAgICAgIHwgICA5ICsKIC4uLi9nY2MudGFyZ2V0 L2kzODYvYXZ4NTEyYnctdm1vdmRxdTE2LTIuYyAgICB8ICAgMiArLQogLi4u L2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLXZtb3ZkcXUzMi0yLmMgICAgIHwg ICAyICstCiAuLi4vZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtdm1vdmRxdTY0 LTIuYyAgICAgfCAgIDIgKy0KIC4uLi9nY2MudGFyZ2V0L2kzODYvYXZ4NTEy dmwtdm1vdmRxdTE2LTIuYyAgICB8ICAgMiArLQogLi4uL2djYy50YXJnZXQv aTM4Ni9hdng1MTJ2bC12bW92ZHF1MzItMi5jICAgIHwgICAyICstCiAuLi4v Z2NjLnRhcmdldC9pMzg2L2F2eDUxMnZsLXZtb3ZkcXU2NC0yLmMgICAgfCAg IDIgKy0KIGxpYmdjYy91bndpbmQtcGUuaCAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgNSArCiA1NSBmaWxlcyBjaGFuZ2VkLCA4OTIgaW5zZXJ0 aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0xLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUx NjI4LTEwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2Mt YysrLWNvbW1vbi9wcjUxNjI4LTExLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTEyLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUx NjI4LTEzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2Mt YysrLWNvbW1vbi9wcjUxNjI4LTE0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTE1LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUx NjI4LTE2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2Mt YysrLWNvbW1vbi9wcjUxNjI4LTIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMjYuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2 MjgtMjcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1j KystY29tbW9uL3ByNTE2MjgtMjguYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMjkuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2 MjgtMy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vcHI1MTYyOC0zMC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0zMS5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYy OC0zMi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vcHI1MTYyOC00LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTUuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2Mjgt Ni5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vcHI1MTYyOC03LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTguYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtOS5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1 MTYyOC0xNy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvcHI1MTYyOC0xOC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0xOS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0yMC5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0yMS5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1 MTYyOC0yMi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvcHI1MTYyOC0yMy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0yNC5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0yNS5jCgpkaWZmIC0t Z2l0IGEvZ2NjL2MtZmFtaWx5L2MtY29tbW9uLmggYi9nY2MvYy1mYW1pbHkv Yy1jb21tb24uaAppbmRleCA0MTg3MzQzYzBiMy4uZWIwYWQ2MDk0MGQgMTAw NjQ0Ci0tLSBhL2djYy9jLWZhbWlseS9jLWNvbW1vbi5oCisrKyBiL2djYy9j LWZhbWlseS9jLWNvbW1vbi5oCkBAIC0xMjgyLDYgKzEyODIsNyBAQCBleHRl cm4gdm9pZCBjX2RvX3N3aXRjaF93YXJuaW5ncyAoc3BsYXlfdHJlZSwgbG9j YXRpb25fdCwgdHJlZSwgdHJlZSwgYm9vbCwKIAkJCQkgIGJvb2wpOwogZXh0 ZXJuIHZvaWQgd2Fybl9mb3Jfb21pdHRlZF9jb25kb3AgKGxvY2F0aW9uX3Qs IHRyZWUpOwogZXh0ZXJuIGJvb2wgd2Fybl9mb3JfcmVzdHJpY3QgKHVuc2ln bmVkLCB0cmVlICosIHVuc2lnbmVkKTsKK2V4dGVybiB2b2lkIHdhcm5fZm9y X2FkZHJlc3Nfb3JfcG9pbnRlcl9vZl9wYWNrZWRfbWVtYmVyIChib29sLCB0 cmVlLCB0cmVlKTsKIAogLyogUGxhY2VzIHdoZXJlIGFuIGx2YWx1ZSwgb3Ig bW9kaWZpYWJsZSBsdmFsdWUsIG1heSBiZSByZXF1aXJlZC4KICAgIFVzZWQg dG8gc2VsZWN0IGRpYWdub3N0aWMgbWVzc2FnZXMgaW4gbHZhbHVlX2Vycm9y IGFuZApkaWZmIC0tZ2l0IGEvZ2NjL2MtZmFtaWx5L2Mtd2Fybi5jIGIvZ2Nj L2MtZmFtaWx5L2Mtd2Fybi5jCmluZGV4IDc5OGFkMWJjYjM5Li45YjI4OTVl ZGRiNSAxMDA2NDQKLS0tIGEvZ2NjL2MtZmFtaWx5L2Mtd2Fybi5jCisrKyBi L2djYy9jLWZhbWlseS9jLXdhcm4uYwpAQCAtMjYxNiwzICsyNjE2LDE4MSBA QCB3YXJuX2Zvcl9tdWx0aXN0YXRlbWVudF9tYWNyb3MgKGxvY2F0aW9uX3Qg Ym9keV9sb2MsIGxvY2F0aW9uX3QgbmV4dF9sb2MsCiAgICAgaW5mb3JtIChn dWFyZF9sb2MsICJzb21lIHBhcnRzIG9mIG1hY3JvIGV4cGFuc2lvbiBhcmUg bm90IGd1YXJkZWQgYnkgIgogCSAgICAidGhpcyAlcXMgY2xhdXNlIiwgZ3Vh cmRfdGluZm9fdG9fc3RyaW5nIChrZXl3b3JkKSk7CiB9CisKKy8qIFJldHVy biBzdHJ1Y3Qgb3IgdW5pb24gdHlwZSBpZiB0aGUgYWxpZ25tZW50IG9mIGRh dGEgbWVtZWJlciwgRklFTEQsCisgICBpcyBsZXNzIHRoYW4gdGhlIGFsaWdu bWVudCBvZiBUWVBFLiAgT3RoZXJ3aXNlLCByZXR1cm4gTlVMTF9UUkVFLiAg Ki8KKworc3RhdGljIHRyZWUKK2NoZWNrX2FsaWdubWVudF9vZl9wYWNrZWRf bWVtYmVyICh0cmVlIHR5cGUsIHRyZWUgZmllbGQpCit7CisgIC8qIENoZWNr IGFsaWdubWVudCBvZiB0aGUgZGF0YSBtZW1iZXIuICAqLworICBpZiAoVFJF RV9DT0RFIChmaWVsZCkgPT0gRklFTERfREVDTAorICAgICAgJiYgKERFQ0xf UEFDS0VEIChmaWVsZCkKKwkgIHx8IFRZUEVfUEFDS0VEIChUUkVFX1RZUEUg KGZpZWxkKSkpKQorICAgIHsKKyAgICAgIC8qIENoZWNrIHRoZSBleHBlY3Rl ZCBhbGlnbm1lbnQgYWdhaW5zdCB0aGUgZmllbGQgYWxpZ25tZW50LiAgKi8K KyAgICAgIHVuc2lnbmVkIGludCB0eXBlX2FsaWduID0gVFlQRV9BTElHTiAo dHlwZSk7CisgICAgICB0cmVlIGNvbnRleHQgPSBERUNMX0NPTlRFWFQgKGZp ZWxkKTsKKyAgICAgIHVuc2lnbmVkIGludCByZWNvcmRfYWxpZ24gPSBUWVBF X0FMSUdOIChjb250ZXh0KTsKKyAgICAgIGlmICgocmVjb3JkX2FsaWduICUg dHlwZV9hbGlnbikgIT0gMCkKKwlyZXR1cm4gY29udGV4dDsKKyAgICAgIHRy ZWUgZmllbGRfb2ZmID0gYnl0ZV9wb3NpdGlvbiAoZmllbGQpOworICAgICAg aWYgKCFtdWx0aXBsZV9vZl9wIChUUkVFX1RZUEUgKGZpZWxkX29mZiksIGZp ZWxkX29mZiwKKwkJCSAgc2l6ZV9pbnQgKHR5cGVfYWxpZ24gLyBCSVRTX1BF Ul9VTklUKSkpCisJcmV0dXJuIGNvbnRleHQ7CisgICAgfQorCisgIHJldHVy biBOVUxMX1RSRUU7Cit9CisKKy8qIFJldHVybiBzdHJ1Y3Qgb3IgdW5pb24g dHlwZSBpZiB0aGUgcmlnaHQgaGFuZCB2YWx1ZSwgUkhTLCB0YWtlcyB0aGUK KyAgIHVuYWxpZ25lZCBhZGRyZXNzIG9mIHBhY2tlZCBtZW1iZXIgb2Ygc3Ry dWN0IG9yIHVuaW9uIHdoZW4gYXNzaWduaW5nCisgICB0byBUWVBFLiAgT3Ro ZXJ3aXNlLCByZXR1cm4gTlVMTF9UUkVFLiAgKi8KKworc3RhdGljIHRyZWUK K2NoZWNrX2FkZHJlc3Nfb2ZfcGFja2VkX21lbWJlciAodHJlZSB0eXBlLCB0 cmVlIHJocykKK3sKKyAgdHJlZSBvYmplY3Q7CisgIHRyZWUgZmllbGQ7CisK KyAgaWYgKElORElSRUNUX1JFRl9QIChyaHMpKQorICAgIHJocyA9IFRSRUVf T1BFUkFORCAocmhzLCAwKTsKKworICBpZiAoVFJFRV9DT0RFIChyaHMpID09 IEFERFJfRVhQUikKKyAgICByaHMgPSBUUkVFX09QRVJBTkQgKHJocywgMCk7 CisgIHdoaWxlIChoYW5kbGVkX2NvbXBvbmVudF9wIChyaHMpKQorICAgIHsK KyAgICAgIGlmIChUUkVFX0NPREUgKHJocykgPT0gQ09NUE9ORU5UX1JFRikK KwlicmVhazsKKyAgICAgIHJocyA9IFRSRUVfT1BFUkFORCAocmhzLCAwKTsK KyAgICB9CisKKyAgaWYgKFRSRUVfQ09ERSAocmhzKSAhPSBDT01QT05FTlRf UkVGKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisKKyAgb2JqZWN0ID0gVFJF RV9PUEVSQU5EIChyaHMsIDApOworICBmaWVsZCA9IFRSRUVfT1BFUkFORCAo cmhzLCAxKTsKKworICB0cmVlIGNvbnRleHQgPSBjaGVja19hbGlnbm1lbnRf b2ZfcGFja2VkX21lbWJlciAodHlwZSwgZmllbGQpOworICBpZiAoY29udGV4 dCkKKyAgICByZXR1cm4gY29udGV4dDsKKworICAvKiBDaGVjayBhbGlnbm1l bnQgb2YgdGhlIG9iamVjdC4gICovCisgIHdoaWxlIChUUkVFX0NPREUgKG9i amVjdCkgPT0gQ09NUE9ORU5UX1JFRikKKyAgICB7CisgICAgICBmaWVsZCA9 IFRSRUVfT1BFUkFORCAob2JqZWN0LCAxKTsKKyAgICAgIGNvbnRleHQgPSBj aGVja19hbGlnbm1lbnRfb2ZfcGFja2VkX21lbWJlciAodHlwZSwgZmllbGQp OworICAgICAgaWYgKGNvbnRleHQpCisJcmV0dXJuIGNvbnRleHQ7CisgICAg ICBvYmplY3QgPSBUUkVFX09QRVJBTkQgKG9iamVjdCwgMCk7CisgICAgfQor CisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKy8qIENoZWNrIGFuZCB3YXJu IGlmIHRoZSByaWdodCBoYW5kIHZhbHVlLCBSSFMsIHRha2VzIHRoZSB1bmFs aWduZWQKKyAgIGFkZHJlc3Mgb2YgcGFja2VkIG1lbWJlciBvZiBzdHJ1Y3Qg b3IgdW5pb24gd2hlbiBhc3NpZ25pbmcgdG8gVFlQRS4gICovCisKK3N0YXRp YyB2b2lkCitjaGVja19hbmRfd2Fybl9hZGRyZXNzX29mX3BhY2tlZF9tZW1i ZXIgKHRyZWUgdHlwZSwgdHJlZSByaHMpCit7CisgIGlmIChUUkVFX0NPREUg KHJocykgIT0gQ09ORF9FWFBSKQorICAgIHsKKyAgICAgIHdoaWxlIChUUkVF X0NPREUgKHJocykgPT0gQ09NUE9VTkRfRVhQUikKKwlyaHMgPSBUUkVFX09Q RVJBTkQgKHJocywgMSk7CisKKyAgICAgIHRyZWUgY29udGV4dCA9IGNoZWNr X2FkZHJlc3Nfb2ZfcGFja2VkX21lbWJlciAodHlwZSwgcmhzKTsKKyAgICAg IGlmIChjb250ZXh0KQorCXsKKwkgIGxvY2F0aW9uX3QgbG9jID0gRVhQUl9M T0NfT1JfTE9DIChyaHMsIGlucHV0X2xvY2F0aW9uKTsKKwkgIHdhcm5pbmdf YXQgKGxvYywgT1BUX1dhZGRyZXNzX29mX3BhY2tlZF9tZW1iZXIsCisJCSAg ICAgICJ0YWtpbmcgYWRkcmVzcyBvZiBwYWNrZWQgbWVtYmVyIG9mICVxVCBt YXkgcmVzdWx0ICIKKwkJICAgICAgImluIGFuIHVuYWxpZ25lZCBwb2ludGVy IHZhbHVlIiwKKwkJICAgICAgY29udGV4dCk7CisJfQorICAgICAgcmV0dXJu OworICAgIH0KKworICAvKiBDaGVjayB0aGUgVEhFTiBwYXRoLiAgKi8KKyAg Y2hlY2tfYW5kX3dhcm5fYWRkcmVzc19vZl9wYWNrZWRfbWVtYmVyICh0eXBl LCBUUkVFX09QRVJBTkQgKHJocywgMSkpOworCisgIC8qIENoZWNrIHRoZSBF TFNFIHBhdGguICAqLworICBjaGVja19hbmRfd2Fybl9hZGRyZXNzX29mX3Bh Y2tlZF9tZW1iZXIgKHR5cGUsIFRSRUVfT1BFUkFORCAocmhzLCAyKSk7Cit9 CisKKy8qIFdhcm4gaWYgdGhlIHJpZ2h0IGhhbmQgdmFsdWUsIFJIUzoKKyAg IDEuIEZvciBDT05WRVJUX1AgPT0gdHJ1ZSwgaXMgYSBwb2ludGVyIHZhbHVl IHdoaWNoIGlzbid0IGFsaWduZWQgdG8gYQorICAgICAgcG9pbnRlciB0eXBl IFRZUEUuCisgICAyLiBGb3IgQ09OVkVSVF9QID09IGZhbHNlLCBpcyBhbiBh ZGRyZXNzIHdoaWNoIHRha2VzIHRoZSB1bmFsaWduZWQKKyAgICAgIGFkZHJl c3Mgb2YgcGFja2VkIG1lbWJlciBvZiBzdHJ1Y3Qgb3IgdW5pb24gd2hlbiBh c3NpZ25pbmcgdG8gVFlQRS4KKyovCisKK3ZvaWQKK3dhcm5fZm9yX2FkZHJl c3Nfb3JfcG9pbnRlcl9vZl9wYWNrZWRfbWVtYmVyIChib29sIGNvbnZlcnRf cCwgdHJlZSB0eXBlLAorCQkJCQkgICAgICB0cmVlIHJocykKK3sKKyAgaWYg KCF3YXJuX2FkZHJlc3Nfb2ZfcGFja2VkX21lbWJlcikKKyAgICByZXR1cm47 CisKKyAgLyogRG9uJ3Qgd2FybiBpZiB3ZSBkb24ndCBhc3NpZ24gUkhTIHRv IGEgcG9pbnRlci4gICovCisgIGlmICghUE9JTlRFUl9UWVBFX1AgKHR5cGUp KQorICAgIHJldHVybjsKKworICB3aGlsZSAoVFJFRV9DT0RFIChyaHMpID09 IENPTVBPVU5EX0VYUFIpCisgICAgcmhzID0gVFJFRV9PUEVSQU5EIChyaHMs IDEpOworCisgIGlmIChjb252ZXJ0X3ApCisgICAgeworICAgICAgYm9vbCBy aHNwb2ludGVyX3A7CisgICAgICB0cmVlIHJoc3R5cGU7CisKKyAgICAgIC8q IENoZWNrIHRoZSBvcmlnaW5hbCB0eXBlIG9mIFJIUy4gICovCisgICAgICBz d2l0Y2ggKFRSRUVfQ09ERSAocmhzKSkKKwl7CisJY2FzZSBQQVJNX0RFQ0w6 CisJY2FzZSBWQVJfREVDTDoKKwkgIHJoc3R5cGUgPSBUUkVFX1RZUEUgKHJo cyk7CisJICByaHNwb2ludGVyX3AgPSBQT0lOVEVSX1RZUEVfUCAocmhzdHlw ZSk7CisJICBicmVhazsKKwljYXNlIE5PUF9FWFBSOgorCSAgcmhzID0gVFJF RV9PUEVSQU5EIChyaHMsIDApOworCSAgaWYgKFRSRUVfQ09ERSAocmhzKSA9 PSBBRERSX0VYUFIpCisJICAgIHJocyA9IFRSRUVfT1BFUkFORCAocmhzLCAw KTsKKwkgIHJoc3R5cGUgPSBUUkVFX1RZUEUgKHJocyk7CisJICByaHNwb2lu dGVyX3AgPSBUUkVFX0NPREUgKHJoc3R5cGUpID09IEFSUkFZX1RZUEU7CisJ ICBicmVhazsKKwlkZWZhdWx0OgorCSAgcmV0dXJuOworCX0KKworICAgICAg aWYgKHJoc3BvaW50ZXJfcCAmJiBUWVBFX1BBQ0tFRCAoVFJFRV9UWVBFIChy aHN0eXBlKSkpCisJeworCSAgdW5zaWduZWQgaW50IHR5cGVfYWxpZ24gPSBU WVBFX0FMSUdOX1VOSVQgKFRSRUVfVFlQRSAodHlwZSkpOworCSAgdW5zaWdu ZWQgaW50IHJoc19hbGlnbiA9IFRZUEVfQUxJR05fVU5JVCAoVFJFRV9UWVBF IChyaHN0eXBlKSk7CisJICBpZiAoKHJoc19hbGlnbiAlIHR5cGVfYWxpZ24p ICE9IDApCisJICAgIHsKKwkgICAgICBsb2NhdGlvbl90IGxvY2F0aW9uID0g RVhQUl9MT0NfT1JfTE9DIChyaHMsIGlucHV0X2xvY2F0aW9uKTsKKwkgICAg ICB3YXJuaW5nX2F0IChsb2NhdGlvbiwgT1BUX1dhZGRyZXNzX29mX3BhY2tl ZF9tZW1iZXIsCisJCQkgICJjb252ZXJ0aW5nIGEgcGFja2VkICVxVCBwb2lu dGVyIChhbGlnbm1lbnQgJWQpICIKKwkJCSAgInRvICVxVCAoYWxpZ25tZW50 ICVkKSBtYXkgbWF5IHJlc3VsdCBpbiBhbiAiCisJCQkgICJ1bmFsaWduZWQg cG9pbnRlciB2YWx1ZSIsCisJCQkgIHJoc3R5cGUsIHJoc19hbGlnbiwgdHlw ZSwgdHlwZV9hbGlnbik7CisJICAgICAgdHJlZSBkZWNsID0gVFlQRV9TVFVC X0RFQ0wgKFRSRUVfVFlQRSAocmhzdHlwZSkpOworCSAgICAgIGluZm9ybSAo REVDTF9TT1VSQ0VfTE9DQVRJT04gKGRlY2wpLCAiZGVmaW5lZCBoZXJlIik7 CisJICAgICAgZGVjbCA9IFRZUEVfU1RVQl9ERUNMIChUUkVFX1RZUEUgKHR5 cGUpKTsKKwkgICAgICBpZiAoZGVjbCkKKwkJaW5mb3JtIChERUNMX1NPVVJD RV9MT0NBVElPTiAoZGVjbCksICJkZWZpbmVkIGhlcmUiKTsKKwkgICAgfQor CX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBHZXQgdGhlIHR5 cGUgb2YgdGhlIHBvaW50ZXIgcG9pbnRpbmcgdG8uICAqLworICAgICAgdHlw ZSA9IFRSRUVfVFlQRSAodHlwZSk7CisKKyAgICAgIGlmIChUUkVFX0NPREUg KHJocykgPT0gTk9QX0VYUFIpCisJcmhzID0gVFJFRV9PUEVSQU5EIChyaHMs IDApOworCisgICAgICBjaGVja19hbmRfd2Fybl9hZGRyZXNzX29mX3BhY2tl ZF9tZW1iZXIgKHR5cGUsIHJocyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEv Z2NjL2MtZmFtaWx5L2Mub3B0IGIvZ2NjL2MtZmFtaWx5L2Mub3B0CmluZGV4 IDA3ZmYxYzg0Zjk2Li4yMmNjZjkxMGE4NSAxMDA2NDQKLS0tIGEvZ2NjL2Mt ZmFtaWx5L2Mub3B0CisrKyBiL2djYy9jLWZhbWlseS9jLm9wdApAQCAtNjI1 LDYgKzYyNSwxMCBAQCBXaW5jb21wYXRpYmxlLXBvaW50ZXItdHlwZXMKIEMg T2JqQyBWYXIod2Fybl9pbmNvbXBhdGlibGVfcG9pbnRlcl90eXBlcykgSW5p dCgxKSBXYXJuaW5nCiBXYXJuIHdoZW4gdGhlcmUgaXMgYSBjb252ZXJzaW9u IGJldHdlZW4gcG9pbnRlcnMgdGhhdCBoYXZlIGluY29tcGF0aWJsZSB0eXBl cy4KIAorV2FkZHJlc3Mtb2YtcGFja2VkLW1lbWJlcgorQyBPYmpDIEMrKyBP YmpDKysgVmFyKHdhcm5fYWRkcmVzc19vZl9wYWNrZWRfbWVtYmVyKSBJbml0 KDEpIFdhcm5pbmcKK1dhcm4gd2hlbiB0aGUgYWRkcmVzcyBvZiBwYWNrZWQg bWVtYmVyIG9mIHN0cnVjdCBvciB1bmlvbiBpcyB0YWtlbi4KKwogV2luaXQt c2VsZgogQyBPYmpDIEMrKyBPYmpDKysgVmFyKHdhcm5faW5pdF9zZWxmKSBX YXJuaW5nIExhbmdFbmFibGVkQnkoQysrIE9iakMrKyxXYWxsKQogV2FybiBh Ym91dCB2YXJpYWJsZXMgd2hpY2ggYXJlIGluaXRpYWxpemVkIHRvIHRoZW1z ZWx2ZXMuCmRpZmYgLS1naXQgYS9nY2MvYy9jLXR5cGVjay5jIGIvZ2NjL2Mv Yy10eXBlY2suYwppbmRleCAxYTg5NzI3MzA4OC4uZGE0YTgxNjlkNTYgMTAw NjQ0Ci0tLSBhL2djYy9jL2MtdHlwZWNrLmMKKysrIGIvZ2NjL2MvYy10eXBl Y2suYwpAQCAtNjcyNCw3ICs2NzI0LDExIEBAIGNvbnZlcnRfZm9yX2Fzc2ln bm1lbnQgKGxvY2F0aW9uX3QgbG9jYXRpb24sIGxvY2F0aW9uX3QgZXhwcl9s b2MsIHRyZWUgdHlwZSwKICAgICB9CiAKICAgaWYgKFRZUEVfTUFJTl9WQVJJ QU5UICh0eXBlKSA9PSBUWVBFX01BSU5fVkFSSUFOVCAocmhzdHlwZSkpCi0g ICAgcmV0dXJuIHJoczsKKyAgICB7CisgICAgICB3YXJuX2Zvcl9hZGRyZXNz X29yX3BvaW50ZXJfb2ZfcGFja2VkX21lbWJlciAoZmFsc2UsIHR5cGUsCisJ CQkJCQkgICAgb3JpZ19yaHMpOworICAgICAgcmV0dXJuIHJoczsKKyAgICB9 CiAKICAgaWYgKGNvZGVyID09IFZPSURfVFlQRSkKICAgICB7CkBAIC03Mjc5 LDYgKzcyODMsMTEgQEAgY29udmVydF9mb3JfYXNzaWdubWVudCAobG9jYXRp b25fdCBsb2NhdGlvbiwgbG9jYXRpb25fdCBleHByX2xvYywgdHJlZSB0eXBl LAogCSAgICB9CiAJfQogCisgICAgICAvKiBJZiBSSFMgaXMndCBhbiBhZGRy ZXNzLCBjaGVjayBwb2ludGVyIG9yIGFycmF5IG9mIHBhY2tlZAorCSBzdHJ1 Y3Qgb3IgdW5pb24uICAqLworICAgICAgd2Fybl9mb3JfYWRkcmVzc19vcl9w b2ludGVyX29mX3BhY2tlZF9tZW1iZXIKKwkoVFJFRV9DT0RFIChvcmlnX3Jo cykgIT0gQUREUl9FWFBSLCB0eXBlLCBvcmlnX3Jocyk7CisKICAgICAgIHJl dHVybiBjb252ZXJ0ICh0eXBlLCByaHMpOwogICAgIH0KICAgZWxzZSBpZiAo Y29kZWwgPT0gUE9JTlRFUl9UWVBFICYmIGNvZGVyID09IEFSUkFZX1RZUEUp CmRpZmYgLS1naXQgYS9nY2MvY3AvY2FsbC5jIGIvZ2NjL2NwL2NhbGwuYwpp bmRleCA2MzI4YTM2YjYwNC4uNDBmZmM4NjMwOTEgMTAwNjQ0Ci0tLSBhL2dj Yy9jcC9jYWxsLmMKKysrIGIvZ2NjL2NwL2NhbGwuYwpAQCAtNzYxOCw2ICs3 NjE4LDkgQEAgY29udmVydF9mb3JfYXJnX3Bhc3NpbmcgKHRyZWUgdHlwZSwg dHJlZSB2YWwsIHRzdWJzdF9mbGFnc190IGNvbXBsYWluKQogCX0KICAgICAg IG1heWJlX3dhcm5fcGFybV9hYmkgKHR5cGUsIGNwX2V4cHJfbG9jX29yX2xv YyAodmFsLCBpbnB1dF9sb2NhdGlvbikpOwogICAgIH0KKworICB3YXJuX2Zv cl9hZGRyZXNzX29yX3BvaW50ZXJfb2ZfcGFja2VkX21lbWJlciAoZmFsc2Us IHR5cGUsIHZhbCk7CisKICAgcmV0dXJuIHZhbDsKIH0KIApkaWZmIC0tZ2l0 IGEvZ2NjL2NwL3R5cGVjay5jIGIvZ2NjL2NwL3R5cGVjay5jCmluZGV4IDQ3 ZGRhZDE2ZmMxLi43MGI2MGE5MjhmNCAxMDA2NDQKLS0tIGEvZ2NjL2NwL3R5 cGVjay5jCisrKyBiL2djYy9jcC90eXBlY2suYwpAQCAtOTAzNiw2ICs5MDM2 LDggQEAgY29udmVydF9mb3JfYXNzaWdubWVudCAodHJlZSB0eXBlLCB0cmVl IHJocywKICAgICAgIFRSRUVfTk9fV0FSTklORyAocmhzKSA9IDE7CiAgICAg fQogCisgIHdhcm5fZm9yX2FkZHJlc3Nfb3JfcG9pbnRlcl9vZl9wYWNrZWRf bWVtYmVyIChmYWxzZSwgdHlwZSwgcmhzKTsKKwogICByZXR1cm4gcGVyZm9y bV9pbXBsaWNpdF9jb252ZXJzaW9uX2ZsYWdzIChzdHJpcF90b3BfcXVhbHMg KHR5cGUpLCByaHMsCiAJCQkJCSAgICBjb21wbGFpbiwgZmxhZ3MpOwogfQpk aWZmIC0tZ2l0IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52 b2tlLnRleGkKaW5kZXggYWMyZWU1OWQ5MmMuLjQ3ZjJmYzNmNTE4IDEwMDY0 NAotLS0gYS9nY2MvZG9jL2ludm9rZS50ZXhpCisrKyBiL2djYy9kb2MvaW52 b2tlLnRleGkKQEAgLTM1OCw2ICszNTgsNyBAQCBPYmplY3RpdmUtQyBhbmQg T2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCiAtV3VzZWxlc3MtY2FzdCAgLVd2 YXJpYWRpYy1tYWNyb3MgIC1XdmVjdG9yLW9wZXJhdGlvbi1wZXJmb3JtYW5j ZSBAZ29sCiAtV3ZsYSAgLVd2bGEtbGFyZ2VyLXRoYW49QHZhcntieXRlLXNp emV9ICAtV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhciBAZ29sCiAtV3dyaXRlLXN0 cmluZ3MgQGdvbAorLVdhZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIgQGdvbAog LVd6ZXJvLWFzLW51bGwtcG9pbnRlci1jb25zdGFudCAgLVdoc2F9CiAKIEBp dGVtIEMgYW5kIE9iamVjdGl2ZS1DLW9ubHkgV2FybmluZyBPcHRpb25zCkBA IC02OTgxLDYgKzY5ODIsMTMgQEAgYmVoYXZpb3IgYW5kIGFyZSBub3QgcG9y dGFibGUgaW4gQywgc28gdGhleSB1c3VhbGx5IGluZGljYXRlIHRoYXQgdGhl CiBwcm9ncmFtbWVyIGludGVuZGVkIHRvIHVzZSBAY29kZXtzdHJjbXB9LiAg VGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkKIEBvcHRpb257LVdhbGx9Lgog CitAaXRlbSAtV2FkZHJlc3Mtb2YtcGFja2VkLW1lbWJlcgorQG9waW5kZXgg V2FkZHJlc3Mtb2YtcGFja2VkLW1lbWJlcgorQG9waW5kZXggV25vLWFkZHJl c3Mtb2YtcGFja2VkLW1lbWJlcgorV2FybiB3aGVuIHRoZSBhZGRyZXNzIG9m IHBhY2tlZCBtZW1iZXIgb2Ygc3RydWN0IG9yIHVuaW9uIGlzIHRha2VuLAor d2hpY2ggdXN1YWxseSByZXN1bHRzIGluIGFuIHVuYWxpZ25lZCBwb2ludGVy IHZhbHVlLiAgVGhpcyBpcworZW5hYmxlZCBieSBkZWZhdWx0LgorCiBAaXRl bSAtV2xvZ2ljYWwtb3AKIEBvcGluZGV4IFdsb2dpY2FsLW9wCiBAb3BpbmRl eCBXbm8tbG9naWNhbC1vcApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vYXNhbi9taXNhbGlnbi0xLmMgYi9nY2MvdGVzdHN1aXRl L2MtYysrLWNvbW1vbi9hc2FuL21pc2FsaWduLTEuYwppbmRleCA1Y2Q2MDVh YzA0NS4uZWJlYjAzMDY3MDYgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUv Yy1jKystY29tbW9uL2FzYW4vbWlzYWxpZ24tMS5jCisrKyBiL2djYy90ZXN0 c3VpdGUvYy1jKystY29tbW9uL2FzYW4vbWlzYWxpZ24tMS5jCkBAIC0xLDUg KzEsNSBAQAogLyogeyBkZy1kbyBydW4geyB0YXJnZXQgeyBpbHAzMiB8fCBs cDY0IH0gfSB9ICovCi0vKiB7IGRnLXNraXAtaWYgIiIgeyAqLSotKiB9ICB7 ICIqIiB9IHsgIi1PMiIgfSB9ICovCisvKiB7IGRnLXNraXAtaWYgIiIgeyAq LSotKiB9ICB7ICIqIiB9IHsgIi1PMiAtV25vLWFkZHJlc3Mtb2YtcGFja2Vk LW1lbWJlciIgfSB9ICovCiAvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAi LWZuby1vbWl0LWZyYW1lLXBvaW50ZXIiIHsgdGFyZ2V0ICotKi1kYXJ3aW4q IH0gfSAqLwogLyogeyBkZy1zaG91bGRmYWlsICJhc2FuIiB9ICovCiAKZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4vbWlz YWxpZ24tMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9t aXNhbGlnbi0yLmMKaW5kZXggYTZlZDQ5YmFjMDUuLmIyN2UyMmQzNWE4IDEw MDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL21p c2FsaWduLTIuYworKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9h c2FuL21pc2FsaWduLTIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIHsgZGctZG8g cnVuIHsgdGFyZ2V0IHsgaWxwMzIgfHwgbHA2NCB9IH0gfSAqLwotLyogeyBk Zy1za2lwLWlmICIiIHsgKi0qLSogfSAgeyAiKiIgfSB7ICItTzIiIH0gfSAq LworLyogeyBkZy1za2lwLWlmICIiIHsgKi0qLSogfSAgeyAiKiIgfSB7ICIt TzIgLVduby1hZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIiIH0gfSAqLwogLyog eyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1mbm8tb21pdC1mcmFtZS1wb2lu dGVyIiB7IHRhcmdldCAqLSotZGFyd2luKiB9IH0gKi8KIC8qIHsgZGctc2hv dWxkZmFpbCAiYXNhbiIgfSAqLwogCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTEuYyBiL2djYy90ZXN0c3VpdGUv Yy1jKystY29tbW9uL3ByNTE2MjgtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi41MzI0ZjljYzk2NAotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMS5j CkBAIC0wLDAgKzEsMjkgQEAKKy8qIFBSIGMvNTE2MjguICAqLworLyogeyBk Zy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8iIH0gKi8K Kworc3RydWN0IHBhaXJfdAoreworICBpbnQgeDsKKyAgaW50IGk7Cit9IF9f YXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCAoNCkpKTsKKworZXh0ZXJu IHN0cnVjdCBwYWlyX3QgcDsKK2V4dGVybiBpbnQgKng7CitleHRlcm4gdm9p ZCBiYXIgKGludCAqKTsKKworaW50ICphZGRyID0gJnAuaTsKKworaW50ICoK K2ZvbyAodm9pZCkKK3sKKyAgc3RydWN0IHBhaXJfdCBhcnJbMl0gPSB7IHsg MSwgMTAgfSwgeyAyLCAyMCB9IH07CisgIGludCAqcDAsICpwMTsKKyAgcDAg PSAmYXJyWzBdLmk7CisgIGJhciAocDApOworICBwMSA9ICZhcnJbMV0uaTsK KyAgYmFyIChwMSk7CisgIGJhciAoJnAuaSk7CisgIHggPSAmcC5pOworICBy ZXR1cm4gJnAuaTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1j KystY29tbW9uL3ByNTE2MjgtMTAuYyBiL2djYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL3ByNTE2MjgtMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uMDg1ZmUxNjA4YzQKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTEwLmMKQEAg LTAsMCArMSwyNCBAQAorLyogUFIgYy81MTYyOC4gICovCisvKiB7IGRnLWRv IHJ1biB7IHRhcmdldCBpbnQxMjggfSB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1PMiIgfSAqLworCitzdHJ1Y3QgcGFpcl90Cit7CisgIGNoYXIgYzsKKyAg X19pbnQxMjhfdCBpOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisK K3R5cGVkZWYgc3RydWN0IHVuYWxpZ25lZF9pbnQxMjhfdF8KK3sKKyAgX19p bnQxMjhfdCB2YWx1ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdW5h bGlnbmVkX2ludDEyOF90OworCitzdHJ1Y3QgcGFpcl90IHAgPSB7MCwgMX07 Cit1bmFsaWduZWRfaW50MTI4X3QgKmFkZHIgPSAodW5hbGlnbmVkX2ludDEy OF90ICopICZwLmk7CisKK2ludCAKK21haW4oKSAKK3sKKyAgYWRkci0+dmFs dWUgPSB+KF9faW50MTI4X3QpMDsKKyAgcmV0dXJuIChwLmkgIT0gMSkgPyAw IDogMTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29t bW9uL3ByNTE2MjgtMTEuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L3ByNTE2MjgtMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNzY2MTIzMmFjODgKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTExLmMKQEAgLTAsMCAr MSwxNyBAQAorLyogUFIgYy81MTYyOC4gICovCisvKiB7IGRnLWRvIGNvbXBp bGUgeyB0YXJnZXQgaW50MTI4IH0gfSAqLworLyogeyBkZy1vcHRpb25zICIt TyIgfSAqLworCitzdHJ1Y3QgdHVwbGVfdAoreworICBjaGFyIGNbMTJdOwor ICBfX2ludDEyOF90IGk7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxp Z25lZCAoOCkpKTsKKwordHlwZWRlZiBzdHJ1Y3QgdW5hbGlnbmVkX2ludDEy OF90XworeworICBfX2ludDEyOF90IHZhbHVlOworfSBfX2F0dHJpYnV0ZV9f ICgocGFja2VkLCBhbGlnbmVkKDQpKSkgdW5hbGlnbmVkX2ludDEyOF90Owor CitzdHJ1Y3QgdHVwbGVfdCBwID0ge3swfSwgMX07Cit1bmFsaWduZWRfaW50 MTI4X3QgKmFkZHIgPSAodW5hbGlnbmVkX2ludDEyOF90ICopKCZwLmkpOwpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYy OC0xMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0x Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5i YzIyMWZhODdlZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv Yy1jKystY29tbW9uL3ByNTE2MjgtMTIuYwpAQCAtMCwwICsxLDE4IEBACisv KiBQUiBjLzUxNjI4LiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdl dCBpbnQxMjggfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIiB9ICovCisK K3N0cnVjdCB0dXBsZV90Cit7CisgIGNoYXIgY1sxMF07CisgIF9faW50MTI4 X3QgaTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkICg4KSkp OworCit0eXBlZGVmIHN0cnVjdCB1bmFsaWduZWRfaW50MTI4X3RfCit7Cisg IF9faW50MTI4X3QgdmFsdWU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQs IGFsaWduZWQoNCkpKSB1bmFsaWduZWRfaW50MTI4X3Q7CisKK3N0cnVjdCB0 dXBsZV90IHAgPSB7ezB9LCAxfTsKK3VuYWxpZ25lZF9pbnQxMjhfdCAqYWRk ciA9ICh1bmFsaWduZWRfaW50MTI4X3QgKikoJnAuaSk7CisvKiB7IGRnLXdh cm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFs dWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMTMuYyBiL2dj Yy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMTMuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGVkZDVlN2Y4NGQK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi9wcjUxNjI4LTEzLmMKQEAgLTAsMCArMSw5IEBACisvKiBQUiBjLzUxNjI4 LiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlv bnMgIi1PIiB9ICovCisKK3N0cnVjdCBCIHsgaW50IGk7IH07CitzdHJ1Y3Qg QyB7IHN0cnVjdCBCIGI7IH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwor CitpbnQqIGg0IChzdHJ1Y3QgQyAqcCkgeyByZXR1cm4gJnAtPmIuaTsgfQor LyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBw b2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4 LTE0LmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTE0 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY1 MDM3OGI4NjUxCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vcHI1MTYyOC0xNC5jCkBAIC0wLDAgKzEsOSBAQAorLyog UFIgYy81MTYyOC4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyog eyBkZy1vcHRpb25zICItTyIgfSAqLworCitzdHJ1Y3QgQSB7CisgIGludCBp OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3ZvaWQqIGYwIChz dHJ1Y3QgQSAqcCkgeyByZXR1cm4gJnAtPmk7IH0KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMTUuYyBiL2djYy90 ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMTUuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmNhYzZkNzBhZDUKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9w cjUxNjI4LTE1LmMKQEAgLTAsMCArMSwxNCBAQAorLyogUFIgYy81MTYyOC4g ICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25z ICItTyIgfSAqLworCitzdHJ1Y3QgQSB7CisgIGludCBpOworfSBfX2F0dHJp YnV0ZV9fICgocGFja2VkKSk7CisKK2ludCoKK2YgKHN0cnVjdCBBICpwLCBp bnQgKnEpCit7CisgIHJldHVybiBxID8gcSA6ICZwLT5pOworLyogeyBkZy13 YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZh bHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTE2LmMg Yi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTE2LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNkNTAyZmU3 NmI4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vcHI1MTYyOC0xNi5jCkBAIC0wLDAgKzEsMTMgQEAKKy8qIFBSIGMv NTE2MjguICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGct b3B0aW9ucyAiLU8iIH0gKi8KKworc3RydWN0IF9fYXR0cmlidXRlX18gKChw YWNrZWQpKSBBIHsgaW50IGk7IH07CitzdHJ1Y3QgQiB7CisgIHN0cnVjdCBB IGE7Cit9IGI7CisKK2ludCAqcCA9IChpbnQqKSZiLmEuaTsKKy8qIHsgZGct d2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2 YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworaW50ICpxID0g KGludCopJmIuYTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBh biB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSog fSAuLTEgfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vcHI1MTYyOC0yLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi9wcjUxNjI4LTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uYWJmYjg0ZGRkMDUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTIuYwpAQCAtMCwwICsx LDI5IEBACisvKiBQUiBjLzUxNjI4LiAgKi8KKy8qIHsgZGctZG8gY29tcGls ZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIiB9ICovCisKK3N0cnVjdCBw YWlyX3QKK3sKKyAgaW50IHg7CisgIGludCBpOworfSBfX2F0dHJpYnV0ZV9f KChwYWNrZWQsIGFsaWduZWQgKDgpKSk7CisKK2V4dGVybiBzdHJ1Y3QgcGFp cl90IHA7CitleHRlcm4gaW50ICp4OworZXh0ZXJuIHZvaWQgYmFyIChpbnQg Kik7CisKK2ludCAqYWRkciA9ICZwLmk7CisKK2ludCAqCitmb28gKHZvaWQp Cit7CisgIHN0cnVjdCBwYWlyX3QgYXJyWzJdID0geyB7IDEsIDEwIH0sIHsg MiwgMjAgfSB9OworICBpbnQgKnAwLCAqcDE7CisgIHAwID0gJmFyclswXS5p OworICBiYXIgKHAwKTsKKyAgcDEgPSAmYXJyWzFdLmk7CisgIGJhciAocDEp OworICBiYXIgKCZwLmkpOworICB4ID0gJnAuaTsKKyAgcmV0dXJuICZwLmk7 Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9w cjUxNjI4LTI2LmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUx NjI4LTI2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjIwNDIzNzk4NjBhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0yNi5jCkBAIC0wLDAgKzEsMzMg QEAKKy8qIFBSIGMvNTE2MjguICAqLworLyogeyBkZy1kbyBjb21waWxlIH0g Ki8KKy8qIHsgZGctb3B0aW9ucyAiLU8iIH0gKi8KKworc3RydWN0IEEgewor ICBpbnQgaTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1 Y3QgQSBwID0gezF9OworaW50ICphZGRyOworCitpbnQgaSwgajsKKwordm9p ZAorZm9vMSAodm9pZCkKK3sKKyAgYWRkciA9IChpID0gLTEsICZwLmkpOwor LyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBw b2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCit9 CisKK3ZvaWQKK2ZvbzIgKHZvaWQpCit7CisgIGFkZHIgPSAoaSA9IC0xLCBq ID0gLTIsICZwLmkpOworLyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGlu IGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSot KiB9IC4tMSB9ICovCit9CisKK3ZvaWQKK2ZvbzMgKHZvaWQpCit7CisgIGFk ZHIgPSAoaSA9IC0xLCAoaiA9IC0yLCAmcC5pKSk7CisvKiB7IGRnLXdhcm5p bmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUi ICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KK30KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMjcuYyBiL2dj Yy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMjcuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWFlMWVmZDdhZmIK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi9wcjUxNjI4LTI3LmMKQEAgLTAsMCArMSwxMiBAQAorLyogUFIgYy81MTYy OC4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRp b25zICItTyIgfSAqLworCitzdHJ1Y3QgQSB7IGludCBpOyB9IF9fYXR0cmli dXRlX18gKChwYWNrZWQpKTsKK3N0cnVjdCBCIHsgc3RydWN0IEEgYTsgfTsK K3N0cnVjdCBDIHsgc3RydWN0IEIgYjsgfTsKKworZXh0ZXJuIHN0cnVjdCBD ICpwOworCitpbnQqIGc4ICh2b2lkKSB7IHJldHVybiAmcC0+Yi5hLmk7IH0K Ky8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQg cG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLwpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYy OC0yOC5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0y OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4z OGRkMTE2YzViYgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv Yy1jKystY29tbW9uL3ByNTE2MjgtMjguYwpAQCAtMCwwICsxLDI2IEBACisv KiBQUiBjLzUxNjI4LiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisv KiB7IGRnLW9wdGlvbnMgIi1PIiB9ICovCisKK3N0cnVjdCBBIHsgCisgIGlu dCBpOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2ludCAqCitm b28zIChzdHJ1Y3QgQSAqcDEsIGludCAqcTEsIGludCAqcTIsIHN0cnVjdCBB ICpwMikgCit7CisgIHJldHVybiAocTEgCisJICA/ICZwMS0+aQorLyogeyBk Zy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVy IHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCisJICA6IChx MiA/ICZwMi0+aSA6IHEyKSk7CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1 bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0 ICotKi0qIH0gLi0xIH0gKi8KK30KKworaW50KgorZm9vNCAoc3RydWN0IEEg KnAxLCBpbnQgKnExLCBpbnQgKnEyLCBzdHJ1Y3QgQSAqcDIpIAoreworICBy ZXR1cm4gKHExID8gKCpxMSA9IDEsICZwMS0+aSkKKy8qIHsgZGctd2Fybmlu ZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIg IiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworCSAgOiAocTIgPyAoKnEy ID0gMiwgJnAyLT5pKTogcTIpKTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJl c3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJn ZXQgKi0qLSogfSAuLTEgfSAqLworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0yOS5jIGIvZ2NjL3Rlc3RzdWl0 ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0yOS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NGIzNzIyZDJjOAotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2Mjgt MjkuYwpAQCAtMCwwICsxLDE2IEBACisvKiBQUiBjLzUxNjI4LiAgKi8KKy8q IHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIiB9 ICovCisKK3N0cnVjdCBBIHsgaW50IGk7IH07CitzdHJ1Y3QgQiB7IHN0cnVj dCBBIGE7IH07CitzdHJ1Y3QgQyB7IHN0cnVjdCBCIGIgX19hdHRyaWJ1dGVf XyAoKHBhY2tlZCkpOyB9OworCitleHRlcm4gc3RydWN0IEMgKnA7CisKK2lu dCoKK2c4ICh2b2lkKQoreworICByZXR1cm4gJnAtPmIuYS5pOworLyogeyBk Zy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVy IHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCit9CmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTMu YyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMy5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wZWE5NGM4 NDVhMAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL3ByNTE2MjgtMy5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qIFBSIGMv NTE2MjguICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGct b3B0aW9ucyAiLU8iIH0gKi8KKworc3RydWN0IHBhaXJfdAoreworICBpbnQg eDsKKyAgaW50IGk7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25l ZCAoMikpKTsKKworZXh0ZXJuIHN0cnVjdCBwYWlyX3QgcDsKK2V4dGVybiBp bnQgKng7CitleHRlcm4gdm9pZCBiYXIgKGludCAqKTsKKworaW50ICphZGRy ID0gJnAuaTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1 bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAu LTEgfSAqLworCitpbnQgKgorZm9vICh2b2lkKQoreworICBzdHJ1Y3QgcGFp cl90IGFyclsyXSA9IHsgeyAxLCAxMCB9LCB7IDIsIDIwIH0gfTsKKyAgaW50 ICpwMCwgKnAxOworICBwMCA9ICZhcnJbMF0uaTsKKy8qIHsgZGctd2Fybmlu ZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIg IiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworICBiYXIgKHAwKTsKKyAg cDEgPSAmYXJyWzFdLmk7CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQg aW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICot Ki0qIH0gLi0xIH0gKi8KKyAgYmFyIChwMSk7CisgIGJhciAoJnAuaSk7Cisv KiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBv aW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KKyAg eCA9ICZwLmk7CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4g dW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0g Li0xIH0gKi8KKyAgcmV0dXJuICZwLmk7CisvKiB7IGRnLXdhcm5pbmcgIm1h eSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsg dGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KK30KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMzAuYyBiL2djYy90ZXN0 c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMzAuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTc4ZWRmNGU4ZjkKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUx NjI4LTMwLmMKQEAgLTAsMCArMSwyMyBAQAorLyogUFIgYy81MTYyOC4gICov CisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICIt TyIgfSAqLworCitzdHJ1Y3QgQSB7IF9fY29tcGxleCBpbnQgaTsgfTsKK3N0 cnVjdCBCIHsgc3RydWN0IEEgYTsgfTsKK3N0cnVjdCBDIHsgc3RydWN0IEIg YiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7IH07CisKK2V4dGVybiBzdHJ1 Y3QgQyAqcDsKKworaW50KgorZm9vMSAodm9pZCkKK3sKKyAgcmV0dXJuICZf X3JlYWwocC0+Yi5hLmkpOworLyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0 IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAq LSotKiB9IC4tMSB9ICovCit9CisKK2ludCoKK2ZvbzIgKHZvaWQpCit7Cisg IHJldHVybiAmX19pbWFnKHAtPmIuYS5pKTsKKy8qIHsgZGctd2FybmluZyAi bWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIg eyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworfQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0zMS5jIGIvZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0zMS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NzMwZjUzZjU4MgotLS0g L2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3By NTE2MjgtMzEuYwpAQCAtMCwwICsxLDE2IEBACisvKiBQUiBjLzUxNjI4LiAg Ki8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1PIiB9ICovCisKK3R5cGVkZWYgaW50IHY0c2kgX19hdHRyaWJ1dGVfXygo dmVjdG9yX3NpemUoMTYpKSk7CitzdHJ1Y3QgWAoreworICB2NHNpIHg7Cit9 IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHg7CisKK2ludCAqCitmb28oKQor eworICByZXR1cm4gJngueFsxXTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJl c3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJn ZXQgKi0qLSogfSAuLTEgfSAqLworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0zMi5jIGIvZ2NjL3Rlc3RzdWl0 ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0zMi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iNWM0MmNkMGU3MwotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2Mjgt MzIuYwpAQCAtMCwwICsxLDE5IEBACisvKiBQUiBjLzUxNjI4LiAgKi8KKy8q IHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIiB9 ICovCisKK3N0cnVjdCBBCit7CisgICBpbnQgaTsKK30gX19hdHRyaWJ1dGUg KChwYWNrZWQpKTsKKworc3RydWN0IEIKK3sKKyAgIGNoYXIgYzsKKyAgIHN0 cnVjdCBBIGFyWzRdOworfTsKKworc3RydWN0IEIgYjsKKworaW50ICpwID0g JmIuYXJbMV0uaTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBh biB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSog fSAuLTEgfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vcHI1MTYyOC00LmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi9wcjUxNjI4LTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uYzRjMWZiNzJkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTQuYwpAQCAtMCwwICsx LDM1IEBACisvKiBQUiBjLzUxNjI4LiAgKi8KKy8qIHsgZGctZG8gY29tcGls ZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIiB9ICovCisKK3N0cnVjdCBw YWlyX3QKK3sKKyAgaW50IHg7CisgIGludCBpOworfSBfX2F0dHJpYnV0ZV9f KChwYWNrZWQpKTsKKworZXh0ZXJuIHN0cnVjdCBwYWlyX3QgcDsKK2V4dGVy biBpbnQgKng7CitleHRlcm4gdm9pZCBiYXIgKGludCAqKTsKKworaW50ICph ZGRyID0gJnAuaTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBh biB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSog fSAuLTEgfSAqLworCitpbnQgKgorZm9vICh2b2lkKQoreworICBzdHJ1Y3Qg cGFpcl90IGFyclsyXSA9IHsgeyAxLCAxMCB9LCB7IDIsIDIwIH0gfTsKKyAg aW50ICpwMCwgKnAxOworICBwMCA9ICZhcnJbMF0uaTsKKy8qIHsgZGctd2Fy bmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1 ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworICBiYXIgKHAwKTsK KyAgcDEgPSAmYXJyWzFdLmk7CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1 bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0 ICotKi0qIH0gLi0xIH0gKi8KKyAgYmFyIChwMSk7CisgIGJhciAoJnAuaSk7 CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVk IHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8K KyAgeCA9ICZwLmk7CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4g YW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0q IH0gLi0xIH0gKi8KKyAgcmV0dXJuICZwLmk7CisvKiB7IGRnLXdhcm5pbmcg Im1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIi IHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KK30KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtNS5jIGIvZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC01LmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlkN2MzMDlhMGVmCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1 MTYyOC01LmMKQEAgLTAsMCArMSwzNSBAQAorLyogUFIgYy81MTYyOC4gICov CisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICIt TyIgfSAqLworCitzdHJ1Y3QgcGFpcl90Cit7CisgIGNoYXIgeDsKKyAgaW50 IGk7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitleHRlcm4gc3Ry dWN0IHBhaXJfdCBwOworZXh0ZXJuIGludCAqeDsKK2V4dGVybiB2b2lkIGJh ciAoaW50ICopOworCitpbnQgKmFkZHIgPSAmcC5pOworLyogeyBkZy13YXJu aW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVl IiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCisKK2ludCAqCitmb28g KHZvaWQpCit7CisgIHN0cnVjdCBwYWlyX3QgYXJyWzJdID0geyB7IDEsIDEw IH0sIHsgMiwgMjAgfSB9OworICBpbnQgKnAwLCAqcDE7CisgIHAwID0gJmFy clswXS5pOworLyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVu YWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4t MSB9ICovCisgIGJhciAocDApOworICBwMSA9ICZhcnJbMV0uaTsKKy8qIHsg ZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRl ciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworICBiYXIg KHAxKTsKKyAgYmFyICgmcC5pKTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJl c3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJn ZXQgKi0qLSogfSAuLTEgfSAqLworICB4ID0gJnAuaTsKKy8qIHsgZGctd2Fy bmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1 ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworICByZXR1cm4gJnAu aTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWdu ZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAq LworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24v cHI1MTYyOC02LmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUx NjI4LTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uNTJhYTA3YTRjZjMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTYuYwpAQCAtMCwwICsxLDM1IEBA CisvKiBQUiBjLzUxNjI4LiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1PIiB9ICovCisKK3N0cnVjdCBwYWlyX3QK K3sKKyAgY2hhciB4OworICBpbnQgaTsKK30gX19hdHRyaWJ1dGVfXygocGFj a2VkLCBhbGlnbmVkICg0KSkpOworCitleHRlcm4gc3RydWN0IHBhaXJfdCBw OworZXh0ZXJuIGludCAqeDsKK2V4dGVybiB2b2lkIGJhciAoaW50ICopOwor CitpbnQgKmFkZHIgPSAmcC5pOworLyogeyBkZy13YXJuaW5nICJtYXkgcmVz dWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdl dCAqLSotKiB9IC4tMSB9ICovCisKK2ludCAqCitmb28gKHZvaWQpCit7Cisg IHN0cnVjdCBwYWlyX3QgYXJyWzJdID0geyB7IDEsIDEwIH0sIHsgMiwgMjAg fSB9OworICBpbnQgKnAwLCAqcDE7CisgIHAwID0gJmFyclswXS5pOworLyog eyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2lu dGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCisgIGJh ciAocDApOworICBwMSA9ICZhcnJbMV0uaTsKKy8qIHsgZGctd2FybmluZyAi bWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIg eyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworICBiYXIgKHAxKTsKKyAgYmFy ICgmcC5pKTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1 bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAu LTEgfSAqLworICB4ID0gJnAuaTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJl c3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJn ZXQgKi0qLSogfSAuLTEgfSAqLworICByZXR1cm4gJnAuaTsKKy8qIHsgZGct d2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2 YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworfQpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC03LmMg Yi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTcuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWU0YTY4MWY5 NjYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi9wcjUxNjI4LTcuYwpAQCAtMCwwICsxLDI5IEBACisvKiBQUiBjLzUx NjI4LiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9w dGlvbnMgIi1PIiB9ICovCisKK3N0cnVjdCBwYWlyX3QKK3sKKyAgaW50IHg7 CisgIGludCBpWzRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWdu ZWQgKDQpKSk7CisKK2V4dGVybiBzdHJ1Y3QgcGFpcl90IHA7CitleHRlcm4g aW50ICp4OworZXh0ZXJuIHZvaWQgYmFyIChpbnQgKik7CisKK2ludCAqYWRk ciA9IHAuaTsKKworaW50ICoKK2ZvbyAoc3RydWN0IHBhaXJfdCAqcCkKK3sK KyAgaW50ICpwMCwgKnAxOworICBwMCA9IHAtPmk7CisgIGJhciAocDApOwor ICBwMSA9ICZwLT5pWzFdOworICBiYXIgKHAxKTsKKyAgYmFyIChwLT5pKTsK KyAgYmFyICgmcC0+aVsyXSk7CisgIHggPSBwLT5pOworICByZXR1cm4gJnAt PmlbM107Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi9wcjUxNjI4LTguYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L3ByNTE2MjgtOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5jYzJkYWUwOTZhZQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtOC5jCkBAIC0wLDAgKzEs MzYgQEAKKy8qIFBSIGMvNTE2MjguICAqLworLyogeyBkZy1kbyBjb21waWxl IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8iIH0gKi8KKworc3RydWN0IHBh aXJfdAoreworICBjaGFyIHg7CisgIGludCBpWzRdOworfSBfX2F0dHJpYnV0 ZV9fICgocGFja2VkLCBhbGlnbmVkICg0KSkpOworCitleHRlcm4gc3RydWN0 IHBhaXJfdCBwOworZXh0ZXJuIGludCAqeDsKK2V4dGVybiB2b2lkIGJhciAo aW50ICopOworCitpbnQgKmFkZHIgPSBwLmk7CisvKiB7IGRnLXdhcm5pbmcg Im1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIi IHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KKworaW50ICoKK2ZvbyAoc3Ry dWN0IHBhaXJfdCAqcCkKK3sKKyAgaW50ICpwMCwgKnAxOworICBwMCA9IHAt Pmk7CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGln bmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0g Ki8KKyAgYmFyIChwMCk7CisgIHAxID0gJnAtPmlbMV07CisvKiB7IGRnLXdh cm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFs dWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KKyAgYmFyIChwMSk7 CisgIGJhciAocC0+aSk7CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQg aW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICot Ki0qIH0gLi0xIH0gKi8KKyAgYmFyICgmcC0+aVsyXSk7CisvKiB7IGRnLXdh cm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFs dWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KKyAgeCA9IHAtPmk7 CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVk IHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8K KyAgcmV0dXJuICZwLT5pWzNdOworLyogeyBkZy13YXJuaW5nICJtYXkgcmVz dWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdl dCAqLSotKiB9IC4tMSB9ICovCit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTkuYyBiL2djYy90ZXN0c3VpdGUv Yy1jKystY29tbW9uL3ByNTE2MjgtOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi4wNDcwYWEzYjkzZAotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtOS5j CkBAIC0wLDAgKzEsMzYgQEAKKy8qIFBSIGMvNTE2MjguICAqLworLyogeyBk Zy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8iIH0gKi8K Kworc3RydWN0IHBhaXJfdAoreworICBpbnQgeDsKKyAgaW50IGlbNF07Cit9 IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZXh0ZXJuIHN0cnVjdCBw YWlyX3QgcDsKK2V4dGVybiBpbnQgKng7CitleHRlcm4gdm9pZCBiYXIgKGlu dCAqKTsKKworaW50ICphZGRyID0gcC5pOworLyogeyBkZy13YXJuaW5nICJt YXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7 IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCisKK2ludCAqCitmb28gKHN0cnVj dCBwYWlyX3QgKnApCit7CisgIGludCAqcDAsICpwMTsKKyAgcDAgPSBwLT5p OworLyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25l ZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICov CisgIGJhciAocDApOworICBwMSA9ICZwLT5pWzFdOworLyogeyBkZy13YXJu aW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVl IiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCisgIGJhciAocDEpOwor ICBiYXIgKHAtPmkpOworLyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGlu IGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSot KiB9IC4tMSB9ICovCisgIGJhciAoJnAtPmlbMl0pOworLyogeyBkZy13YXJu aW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVl IiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCisgIHggPSBwLT5pOwor LyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBw b2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCisg IHJldHVybiAmcC0+aVszXTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3Vs dCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQg Ki0qLSogfSAuLTEgfSAqLworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9jLWMrKy1jb21tb24vdWJzYW4vYWxpZ24tMTAuYyBiL2djYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL3Vic2FuL2FsaWduLTEwLmMKaW5kZXggNTZhZTll YmZlMzAuLjYyMTA1MzMxNzNjIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRl L2MtYysrLWNvbW1vbi91YnNhbi9hbGlnbi0xMC5jCisrKyBiL2djYy90ZXN0 c3VpdGUvYy1jKystY29tbW9uL3Vic2FuL2FsaWduLTEwLmMKQEAgLTEsNiAr MSw2IEBACiAvKiBMaW1pdCB0aGlzIHRvIGtub3duIG5vbi1zdHJpY3QgYWxp Z25tZW50IHRhcmdldHMuICAqLwogLyogeyBkZy1kbyBydW4geyB0YXJnZXQg eyBpPzg2LSotbGludXgqIHg4Nl82NC0qLWxpbnV4KiB9IH0gfSAqLwotLyog eyBkZy1vcHRpb25zICItTyAtZnNhbml0aXplPWFsaWdubWVudCAtZnNhbml0 aXplLXJlY292ZXI9YWxpZ25tZW50IiB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1PIC1mc2FuaXRpemU9YWxpZ25tZW50IC1mc2FuaXRpemUtcmVjb3Zlcj1h bGlnbm1lbnQgLVduby1hZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIiIH0gKi8K IAogc3RydWN0IFIgeyBpbnQgYTsgfSByOwogc3RydWN0IFMgeyBzdHJ1Y3Qg UiBhOyBjaGFyIGI7IGxvbmcgbG9uZyBjOyBzaG9ydCBkWzEwXTsgfTsKZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vic2FuL2Fs aWduLTIuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vic2FuL2Fs aWduLTIuYwppbmRleCAwNzFkZThjMjAyYS4uMzM2YjFjM2M5MDcgMTAwNjQ0 Ci0tLSBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vic2FuL2FsaWdu LTIuYworKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi91YnNhbi9h bGlnbi0yLmMKQEAgLTEsNiArMSw2IEBACiAvKiBMaW1pdCB0aGlzIHRvIGtu b3duIG5vbi1zdHJpY3QgYWxpZ25tZW50IHRhcmdldHMuICAqLwogLyogeyBk Zy1kbyBydW4geyB0YXJnZXQgeyBpPzg2LSotbGludXgqIHg4Nl82NC0qLWxp bnV4KiB9IH0gfSAqLwotLyogeyBkZy1vcHRpb25zICItZnNhbml0aXplPWFs aWdubWVudCIgfSAqLworLyogeyBkZy1vcHRpb25zICItZnNhbml0aXplPWFs aWdubWVudCAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciIgfSAqLwog CiBzdHJ1Y3QgUyB7IGludCBhOyBjaGFyIGI7IGxvbmcgbG9uZyBjOyBzaG9y dCBkWzEwXTsgfTsKIHN0cnVjdCBUIHsgY2hhciBhOyBsb25nIGxvbmcgYjsg fTsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vi c2FuL2FsaWduLTQuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vi c2FuL2FsaWduLTQuYwppbmRleCAzMjUyNTk1ZDMzMC4uZDVmZWVlZTI5YzYg MTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vic2Fu L2FsaWduLTQuYworKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi91 YnNhbi9hbGlnbi00LmMKQEAgLTEsNiArMSw2IEBACiAvKiBMaW1pdCB0aGlz IHRvIGtub3duIG5vbi1zdHJpY3QgYWxpZ25tZW50IHRhcmdldHMuICAqLwog LyogeyBkZy1kbyBydW4geyB0YXJnZXQgeyBpPzg2LSotbGludXgqIHg4Nl82 NC0qLWxpbnV4KiB9IH0gfSAqLwotLyogeyBkZy1vcHRpb25zICItZnNhbml0 aXplPW51bGwsYWxpZ25tZW50IiB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1m c2FuaXRpemU9bnVsbCxhbGlnbm1lbnQgLVduby1hZGRyZXNzLW9mLXBhY2tl ZC1tZW1iZXIiIH0gKi8KIAogI2luY2x1ZGUgImFsaWduLTIuYyIKIApkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vdWJzYW4vYWxp Z24tNi5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vdWJzYW4vYWxp Z24tNi5jCmluZGV4IDMzNjQ3NDZmYjI3Li4wMzAyYjdiODg5NCAxMDA2NDQK LS0tIGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vdWJzYW4vYWxpZ24t Ni5jCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vic2FuL2Fs aWduLTYuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIExpbWl0IHRoaXMgdG8ga25v d24gbm9uLXN0cmljdCBhbGlnbm1lbnQgdGFyZ2V0cy4gICovCiAvKiB7IGRn LWRvIHJ1biB7IHRhcmdldCB7IGk/ODYtKi1saW51eCogeDg2XzY0LSotbGlu dXgqIH0gfSB9ICovCi0vKiB7IGRnLW9wdGlvbnMgIi1PIC1mc2FuaXRpemU9 YWxpZ25tZW50IC1mc2FuaXRpemUtcmVjb3Zlcj1hbGlnbm1lbnQiIH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLU8gLWZzYW5pdGl6ZT1hbGlnbm1lbnQgLWZz YW5pdGl6ZS1yZWNvdmVyPWFsaWdubWVudCAtV25vLWFkZHJlc3Mtb2YtcGFj a2VkLW1lbWJlciIgfSAqLwogCiBzdHJ1Y3QgUyB7IGludCBhOyBjaGFyIGI7 IGxvbmcgbG9uZyBjOyBzaG9ydCBkWzEwXTsgfTsKIHN0cnVjdCBUIHsgY2hh ciBhOyBsb25nIGxvbmcgYjsgfTsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL3Vic2FuL2FsaWduLTcuYyBiL2djYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL3Vic2FuL2FsaWduLTcuYwppbmRleCBlYzRlODdm NTZkNS4uZGQxZThjOTFjZWYgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUv Yy1jKystY29tbW9uL3Vic2FuL2FsaWduLTcuYworKysgYi9nY2MvdGVzdHN1 aXRlL2MtYysrLWNvbW1vbi91YnNhbi9hbGlnbi03LmMKQEAgLTEsNiArMSw2 IEBACiAvKiBMaW1pdCB0aGlzIHRvIGtub3duIG5vbi1zdHJpY3QgYWxpZ25t ZW50IHRhcmdldHMuICAqLwogLyogeyBkZy1kbyBydW4geyB0YXJnZXQgeyBp Pzg2LSotbGludXgqIHg4Nl82NC0qLWxpbnV4KiB9IH0gfSAqLwotLyogeyBk Zy1vcHRpb25zICItTyAtZnNhbml0aXplPWFsaWdubWVudCAtZm5vLXNhbml0 aXplLXJlY292ZXI9YWxpZ25tZW50IC1mZHVtcC10cmVlLXNhbm9wdC1kZXRh aWxzIiB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1mc2FuaXRpemU9YWxp Z25tZW50IC1mbm8tc2FuaXRpemUtcmVjb3Zlcj1hbGlnbm1lbnQgLVduby1h ZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIgLWZkdW1wLXRyZWUtc2Fub3B0LWRl dGFpbHMiIH0gKi8KIC8qIHsgZGctc2tpcC1pZiAiIiB7ICotKi0qIH0geyAi LWZsdG8gLWZuby1mYXQtbHRvLW9iamVjdHMiIH0gfSAqLwogLyogeyBkZy1z aG91bGRmYWlsICJ1YnNhbiIgfSAqLwogCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi91YnNhbi9hbGlnbi04LmMgYi9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi91YnNhbi9hbGlnbi04LmMKaW5kZXggNjFj MWNlYjY2ODIuLjVmZTBlMGZlOTMxIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1 aXRlL2MtYysrLWNvbW1vbi91YnNhbi9hbGlnbi04LmMKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vdWJzYW4vYWxpZ24tOC5jCkBAIC0xLDYg KzEsNiBAQAogLyogTGltaXQgdGhpcyB0byBrbm93biBub24tc3RyaWN0IGFs aWdubWVudCB0YXJnZXRzLiAgKi8KIC8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0 IHsgaT84Ni0qLWxpbnV4KiB4ODZfNjQtKi1saW51eCogfSB9IH0gKi8KLS8q IHsgZGctb3B0aW9ucyAiLU8gLWZzYW5pdGl6ZT1hbGlnbm1lbnQgLWZzYW5p dGl6ZS11bmRlZmluZWQtdHJhcC1vbi1lcnJvciAtZmR1bXAtdHJlZS1zYW5v cHQtZGV0YWlscyIgfSAqLworLyogeyBkZy1vcHRpb25zICItTyAtZnNhbml0 aXplPWFsaWdubWVudCAtZnNhbml0aXplLXVuZGVmaW5lZC10cmFwLW9uLWVy cm9yIC1Xbm8tYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyIC1mZHVtcC10cmVl LXNhbm9wdC1kZXRhaWxzIiB9ICovCiAvKiB7IGRnLXNraXAtaWYgIiIgeyAq LSotKiB9IHsgIi1mbHRvIC1mbm8tZmF0LWx0by1vYmplY3RzIiB9IH0gKi8K IC8qIHsgZGctc2hvdWxkZmFpbCAidWJzYW4iIH0gKi8KIApkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdWJzYW4vYWxpZ24tMi5DIGIvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvdWJzYW4vYWxpZ24tMi5DCmluZGV4IDNlNGY1 NDg1ZDAyLi5jOTdlZGU4ODM5MiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvdWJzYW4vYWxpZ24tMi5DCisrKyBiL2djYy90ZXN0c3VpdGUv ZysrLmRnL3Vic2FuL2FsaWduLTIuQwpAQCAtMSw2ICsxLDYgQEAKIC8vIExp bWl0IHRoaXMgdG8ga25vd24gbm9uLXN0cmljdCBhbGlnbm1lbnQgdGFyZ2V0 cy4KIC8vIHsgZGctZG8gcnVuIHsgdGFyZ2V0IHsgaT84Ni0qLWxpbnV4KiB4 ODZfNjQtKi1saW51eCogfSB9IH0KLS8vIHsgZGctb3B0aW9ucyAiLWZzYW5p dGl6ZT1hbGlnbm1lbnQgLVdhbGwgLVduby11bnVzZWQtdmFyaWFibGUgLXN0 ZD1jKysxMSIgfQorLy8geyBkZy1vcHRpb25zICItZnNhbml0aXplPWFsaWdu bWVudCAtV2FsbCAtV25vLXVudXNlZC12YXJpYWJsZSAtV25vLWFkZHJlc3Mt b2YtcGFja2VkLW1lbWJlciAtc3RkPWMrKzExIiB9CiAKIHR5cGVkZWYgY29u c3QgbG9uZyBpbnQgTDsKIHN0cnVjdCBTIHsgbG9uZyBpbnQgbDsgY2hhciBi dWZbMSArIHNpemVvZiAoaW50KSArIHNpemVvZiAoTCldOyB9IHM7CmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjUxNjI4LTE3LmMgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy9wcjUxNjI4LTE3LmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBiZTk1YjIyOTRlCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0x Ny5jCkBAIC0wLDAgKzEsMTAgQEAKKy8qIFBSIGMvNTE2MjguICAqLworLyog eyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8gLVdu by1pbmNvbXBhdGlibGUtcG9pbnRlci10eXBlcyIgfSAqLworCitzdHJ1Y3Qg QSB7CisgIGludCBpOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisK K2xvbmcqIGY4IChzdHJ1Y3QgQSAqcCkgeyByZXR1cm4gJnAtPmk7IH0KKy8q IHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9p bnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0xOC5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0xOC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wM2EwNGVmZjc1YwotLS0g L2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2Mjgt MTguYwpAQCAtMCwwICsxLDIzIEBACisvKiBQUiBjLzUxNjI4LiAgKi8KKy8q IHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIiB9 ICovCisKK3ZvaWQgZm9vIChpbnQgKik7CisKK2ludCAqCitiYXIgKGludCBu LCBpbnQgaywgdm9pZCAqcHRyKQoreworICBzdHJ1Y3QgQQorICB7CisgICAg aW50IGNba107CisgICAgaW50IHhbbl07CisgIH0gX19hdHRyaWJ1dGVfXyAo KHBhY2tlZCwgYWxpZ25lZCAoNCkpKTsKKyAgc3RydWN0IEEgKnAgPSAoc3Ry dWN0IEEgKikgcHRyOworCisgIGludCAqcDAsICpwMTsKKyAgcDAgPSBwLT54 OworICBmb28gKHAwKTsKKyAgcDEgPSAmcC0+eFsxXTsKKyAgZm9vIChwMSk7 CisgIHJldHVybiAmcC0+eFsxXTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMTkuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ByNTE2MjgtMTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uN2ZmMDNlODVjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy9wcjUxNjI4LTE5LmMKQEAgLTAsMCArMSwy NiBAQAorLyogUFIgYy81MTYyOC4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLworLyogeyBkZy1vcHRpb25zICItTyIgfSAqLworCit2b2lkIGZvbyAo aW50ICopOworCitpbnQgKgorYmFyIChpbnQgbiwgaW50IGssIHZvaWQgKnB0 cikKK3sKKyAgc3RydWN0IEEKKyAgeworICAgIGNoYXIgY1trXTsKKyAgICBp bnQgeFtuXTsKKyAgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisgIHN0 cnVjdCBBICpwID0gKHN0cnVjdCBBICopIHB0cjsKKworICBpbnQgKnAwLCAq cDE7CisgIHAwID0gcC0+eDsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3Vs dCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQg Ki0qLSogfSAuLTEgfSAqLworICBmb28gKHAwKTsKKyAgcDEgPSAmcC0+eFsx XTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWdu ZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAq LworICBmb28gKHAxKTsKKyAgcmV0dXJuICZwLT54WzFdOworLyogeyBkZy13 YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZh bHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjUxNjI4LTIwLmMgYi9nY2Mv dGVzdHN1aXRlL2djYy5kZy9wcjUxNjI4LTIwLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgwODg4MjgzYjczCi0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0yMC5j CkBAIC0wLDAgKzEsMTEgQEAKKy8qIFBSIGMvNTE2MjguICAqLworLyogeyBk Zy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8gLVduby1p bmNvbXBhdGlibGUtcG9pbnRlci10eXBlcyIgfSAqLworCitzdHJ1Y3QgQiB7 IGludCBpOyB9Oworc3RydWN0IEMgeyBzdHJ1Y3QgQiBiOyB9IF9fYXR0cmli dXRlX18gKChwYWNrZWQpKTsKKworZXh0ZXJuIHN0cnVjdCBDICpwOworCits b25nKiBnOCAodm9pZCkgeyByZXR1cm4gcDsgfQorLyogeyBkZy13YXJuaW5n ICJtYXkgbWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1 ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLwpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0yMS5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvcHI1MTYyOC0yMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi4zMDc3ZTcyYzhkNQotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMjEuYwpAQCAt MCwwICsxLDExIEBACisvKiBQUiBjLzUxNjI4LiAgKi8KKy8qIHsgZGctZG8g Y29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1Xbm8taW5jb21w YXRpYmxlLXBvaW50ZXItdHlwZXMiIH0gKi8KKworc3RydWN0IEIgeyBpbnQg aTsgfTsKK3N0cnVjdCBDIHsgc3RydWN0IEIgYjsgfSBfX2F0dHJpYnV0ZV9f ICgocGFja2VkKSk7CisKK2V4dGVybiBzdHJ1Y3QgQyBwW107CisKK2xvbmcq IGc4ICh2b2lkKSB7IHJldHVybiBwOyB9CisvKiB7IGRnLXdhcm5pbmcgIm1h eSBtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAi IiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy9wcjUxNjI4LTIyLmMgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy9wcjUxNjI4LTIyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjFiZDVkNzkxNjM5Ci0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0yMi5jCkBAIC0wLDAg KzEsOSBAQAorLyogUFIgYy81MTYyOC4gICovCisvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTyAtV25vLWluY29tcGF0aWJs ZS1wb2ludGVyLXR5cGVzIiB9ICovCisKK3N0cnVjdCBCIHsgaW50IGk7IH07 CitzdHJ1Y3QgQyB7IHN0cnVjdCBCIGI7IH0gX19hdHRyaWJ1dGVfXyAoKHBh Y2tlZCkpOworCitpbnQqIGc0IChzdHJ1Y3QgQyAqcCkgeyByZXR1cm4gJnAt PmI7IH0KKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFs aWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEg fSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYy OC0yMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0yMy5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NzA5YmU2 MGFjOAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ByNTE2MjgtMjMuYwpAQCAtMCwwICsxLDkgQEAKKy8qIFBSIGMvNTE2Mjgu ICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLU8gLVduby1pbmNvbXBhdGlibGUtcG9pbnRlci10eXBlcyIgfSAqLwor CitzdHJ1Y3QgQSB7CisgIGludCBpOworfSBfX2F0dHJpYnV0ZV9fICgocGFj a2VkKSk7CisKK2NoYXIqIGYwIChzdHJ1Y3QgQSAqcCkgeyByZXR1cm4gJnAt Pmk7IH0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2 MjgtMjQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMjQuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2FkOTlj ZDJmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy9wcjUxNjI4LTI0LmMKQEAgLTAsMCArMSwxMCBAQAorLyogUFIgYy81MTYy OC4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRp b25zICItTyAtV25vLWluY29tcGF0aWJsZS1wb2ludGVyLXR5cGVzIiB9ICov CisKK3N0cnVjdCBBIHsKKyAgaW50IGk7Cit9IF9fYXR0cmlidXRlX18gKChw YWNrZWQpKTsKKworc2hvcnQqIGYyIChzdHJ1Y3QgQSAqcCkgeyByZXR1cm4g JnAtPmk7IH0KKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1 bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAu LTEgfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1 MTYyOC0yNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0yNS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yZmM1 YzAyODcxMQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ByNTE2MjgtMjUuYwpAQCAtMCwwICsxLDkgQEAKKy8qIFBSIGMvNTE2 MjguICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLU8gLVduby1pbmNvbXBhdGlibGUtcG9pbnRlci10eXBlcyIgfSAq LworCitzdHJ1Y3QgQiB7IGludCBpOyB9Oworc3RydWN0IEMgeyBzdHJ1Y3Qg QiBiOyB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworbG9uZyogZzgg KHN0cnVjdCBDICpwKSB7IHJldHVybiBwOyB9CisvKiB7IGRnLXdhcm5pbmcg Im1heSBtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVl IiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJidy12bW92ZHF1 MTYtMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEy Ynctdm1vdmRxdTE2LTIuYwppbmRleCBhNjE2MDljNDBkMi4uYzZlM2ViZGM1 MDcgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L2F2eDUxMmJ3LXZtb3ZkcXUxNi0yLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvYXZ4NTEyYnctdm1vdmRxdTE2LTIuYwpAQCAtMSw1 ICsxLDUgQEAKIC8qIHsgZGctZG8gcnVuIH0gKi8KLS8qIHsgZGctb3B0aW9u cyAiLU8yIC1tYXZ4NTEyYnciIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8y IC1tYXZ4NTEyYncgLVduby1hZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIiIH0g Ki8KIC8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGF2eDUxMmJ3 IH0gKi8KIAogI2RlZmluZSBBVlg1MTJCVwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEyZi12bW92ZHF1MzItMi5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEyZi12bW92 ZHF1MzItMi5jCmluZGV4IGYyZWRjM2RmZjdiLi45NWE2NTdmYzVmZiAxMDA2 NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEy Zi12bW92ZHF1MzItMi5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2F2eDUxMmYtdm1vdmRxdTMyLTIuYwpAQCAtMSw1ICsxLDUgQEAK IC8qIHsgZGctZG8gcnVuIH0gKi8KLS8qIHsgZGctb3B0aW9ucyAiLU8yIC1t YXZ4NTEyZiIgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1hdng1MTJm IC1Xbm8tYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyIiB9ICovCiAvKiB7IGRn LXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBhdng1MTJmIH0gKi8KIAogI2Rl ZmluZSBBVlg1MTJGCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9hdng1MTJmLXZtb3ZkcXU2NC0yLmMgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLXZtb3ZkcXU2NC0yLmMKaW5k ZXggMTQxNzY5NjVhY2UuLjk1NGIwOTFkOTc2IDEwMDY0NAotLS0gYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLXZtb3ZkcXU2NC0y LmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEy Zi12bW92ZHF1NjQtMi5jCkBAIC0xLDUgKzEsNSBAQAogLyogeyBkZy1kbyBy dW4gfSAqLwotLyogeyBkZy1vcHRpb25zICItTzIgLW1hdng1MTJmIiB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWF2eDUxMmYgLVduby1hZGRyZXNz LW9mLXBhY2tlZC1tZW1iZXIiIH0gKi8KIC8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IGF2eDUxMmYgfSAqLwogCiAjZGVmaW5lIEFWWDUxMkYK ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2 eDUxMnZsLXZtb3ZkcXUxNi0yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9hdng1MTJ2bC12bW92ZHF1MTYtMi5jCmluZGV4IDQ1YWU4M2Q0 NTUyLi44MTQ2NWY4ZDlhMCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvYXZ4NTEydmwtdm1vdmRxdTE2LTIuYworKysgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC12bW92ZHF1 MTYtMi5jCkBAIC0xLDUgKzEsNSBAQAogLyogeyBkZy1kbyBydW4gfSAqLwot LyogeyBkZy1vcHRpb25zICItTzIgLW1hdng1MTJidyAtbWF2eDUxMnZsIiB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWF2eDUxMmJ3IC1tYXZ4NTEy dmwgLVduby1hZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIiIH0gKi8KIC8qIHsg ZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGF2eDUxMnZsIH0gKi8KIC8q IHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGF2eDUxMmJ3IH0gKi8K IApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv YXZ4NTEydmwtdm1vdmRxdTMyLTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L2F2eDUxMnZsLXZtb3ZkcXUzMi0yLmMKaW5kZXggNGI5Mjhk MGNkNDIuLjE5MzkwNjY0YmQwIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC12bW92ZHF1MzItMi5jCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMnZsLXZtb3Zk cXUzMi0yLmMKQEAgLTEsNSArMSw1IEBACiAvKiB7IGRnLWRvIHJ1biB9ICov Ci0vKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWF2eDUxMnZsIiB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1PMiAtbWF2eDUxMnZsIC1Xbm8tYWRkcmVzcy1vZi1w YWNrZWQtbWVtYmVyIiB9ICovCiAvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZl LXRhcmdldCBhdng1MTJ2bCB9ICovCiAKICNkZWZpbmUgQVZYNTEyVkwKZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUx MnZsLXZtb3ZkcXU2NC0yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9hdng1MTJ2bC12bW92ZHF1NjQtMi5jCmluZGV4IDE4NjNlZDM2MTZm Li5hZWEwYzEyYTVmZiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvYXZ4NTEydmwtdm1vdmRxdTY0LTIuYworKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC12bW92ZHF1NjQt Mi5jCkBAIC0xLDUgKzEsNSBAQAogLyogeyBkZy1kbyBydW4gfSAqLwotLyog eyBkZy1vcHRpb25zICItTzIgLW1hdng1MTJ2bCIgfSAqLworLyogeyBkZy1v cHRpb25zICItTzIgLW1hdng1MTJ2bCAtV25vLWFkZHJlc3Mtb2YtcGFja2Vk LW1lbWJlciIgfSAqLwogLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgYXZ4NTEydmwgfSAqLwogCiAjZGVmaW5lIEFWWDUxMlZMCmRpZmYgLS1n aXQgYS9saWJnY2MvdW53aW5kLXBlLmggYi9saWJnY2MvdW53aW5kLXBlLmgK aW5kZXggZGQ1YWU5NWZjMmMuLjA1YzJmYjRkZDUwIDEwMDY0NAotLS0gYS9s aWJnY2MvdW53aW5kLXBlLmgKKysrIGIvbGliZ2NjL3Vud2luZC1wZS5oCkBA IC0xNzcsNiArMTc3LDkgQEAgcmVhZF9zbGViMTI4IChjb25zdCB1bnNpZ25l ZCBjaGFyICpwLCBfc2xlYjEyOF90ICp2YWwpCiAgICBUaGUgZnVuY3Rpb24g cmV0dXJucyBQIGluY3JlbWVudGVkIHBhc3QgdGhlIHZhbHVlLiAgQkFTRSBp cyBhcyBnaXZlbgogICAgYnkgYmFzZV9vZl9lbmNvZGVkX3ZhbHVlIGZvciB0 aGlzIGVuY29kaW5nIGluIHRoZSBhcHByb3ByaWF0ZSBjb250ZXh0LiAgKi8K IAorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIEdDQyBk aWFnbm9zdGljIGlnbm9yZWQgIi1XYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVy IgorCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqCiByZWFkX2VuY29k ZWRfdmFsdWVfd2l0aF9iYXNlICh1bnNpZ25lZCBjaGFyIGVuY29kaW5nLCBf VW53aW5kX1B0ciBiYXNlLAogCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqcCwgX1Vud2luZF9QdHIgKnZhbCkKQEAgLTI3MCw2ICsyNzMsOCBAQCBy ZWFkX2VuY29kZWRfdmFsdWVfd2l0aF9iYXNlICh1bnNpZ25lZCBjaGFyIGVu Y29kaW5nLCBfVW53aW5kX1B0ciBiYXNlLAogICByZXR1cm4gcDsKIH0KIAor I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKwogI2lmbmRlZiBOT19CQVNF X09GX0VOQ09ERURfVkFMVUUKIAogLyogTGlrZSByZWFkX2VuY29kZWRfdmFs dWVfd2l0aF9iYXNlLCBidXQgZ2V0IHRoZSBiYXNlIGZyb20gdGhlIGNvbnRl eHQKLS0gCjIuMTkuMgoK --0000000000003c802d057d525e4d--