From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 53938 invoked by alias); 19 Dec 2018 17:36:31 -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 53924 invoked by uid 89); 19 Dec 2018 17:36:30 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-11.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM,GIT_PATCH_1,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS,TIME_LIMIT_EXCEEDED autolearn=unavailable version=3.3.2 spammy=ba, pi, align-2.c, align2c X-HELO: mail-ot1-f66.google.com Received: from mail-ot1-f66.google.com (HELO mail-ot1-f66.google.com) (209.85.210.66) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 19 Dec 2018 17:36:19 +0000 Received: by mail-ot1-f66.google.com with SMTP id s5so19832469oth.7 for ; Wed, 19 Dec 2018 09:36:19 -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=bPapS0s+sNzM1VxCt3k9GzNkSlZvNoDqrHygmvGgJ8E=; b=uxBWhOAK8N8T2Cv+pmRJ/FX/CjZa3Kwe6r2ajYObNrmw8QAHHnAAe3K0aXCemaXzDC LiOGfoXaLr5cHumN/G86qkJrXcRNMH/F/SmpSD8f/ng1velpWUOZjmuGbymG5d6NwAKc oH/qmF8B8V8qXWNq70HnPANd46K7s0DG1dwMDPoejujKekEFpbvJQk76d0L+7/WvPaXW yTIXQEuFd9U+5RuhN3FqBHzSYB5tBo/tkNXqXxQLU2UusL3VRCWwfYnQz3NmY8uG8p/e 8zuY5raLKOZ8OS/ND8PxHKTKKRNuUpB7SOXejzJ4zQQ0V+OKlQeB03pa/0T1NVhNfvea +khA== MIME-Version: 1.0 References: <24f8a201-bb3e-3acb-b679-570a8796358d@redhat.com> <20181218141051.GA3461@gmail.com> <14946d45-0983-12ad-3f93-99da07b3886e@redhat.com> <7f0ae96e-87b8-5db9-97b5-90094c4dace7@redhat.com> In-Reply-To: From: "H.J. Lu" Date: Wed, 19 Dec 2018 17:36:00 -0000 Message-ID: Subject: V9 [PATCH] C/C++: Add -Waddress-of-packed-member To: Jason Merrill , Sandra Loosemore Cc: Richard Guenther , "Joseph S. Myers" , Martin Sebor , GCC Patches Content-Type: multipart/mixed; boundary="000000000000939e90057d6373cd" X-IsSubscribed: yes X-SW-Source: 2018-12/txt/msg01405.txt.bz2 --000000000000939e90057d6373cd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Content-length: 6947 On Wed, Dec 19, 2018 at 6:51 AM H.J. Lu wrote: > > On Tue, Dec 18, 2018 at 2:14 PM Jason Merrill wrote: > > > > On 12/18/18 4:12 PM, H.J. Lu wrote: > > > On Tue, Dec 18, 2018 at 12:36 PM Jason Merrill wro= te: > > >> > > >> 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); > > > > That still doesn't warn about my testcase above. > > > > > [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; > > > > This testcase is importantly different because 'i' is packed, whereas in > > my testcase only the ar member of B is packed. > > > > My suggestion was that this loop: > > > > > + /* 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); > > > + } > > > > could loop over all handled_component_p, but only call > > check_alignment_of_packed_member for COMPONENT_REF. > > Thanks for the hint. I changed it to > > /* Check alignment of the object. */ > while (handled_component_p (object)) > { > if (TREE_CODE (object) =3D=3D COMPONENT_REF) > { > do > { > 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); > } > while (TREE_CODE (object) =3D=3D COMPONENT_REF); > } > else > object =3D TREE_OPERAND (object, 0); > } I got [hjl@gnu-cfl-1 pr51628-6]$ cat a.i struct A { int i; }; struct B { char c; __attribute ((packed)) 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 B=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]$ > > > + if (TREE_CODE (rhs) !=3D COND_EXPR) > > > + { > > > + while (TREE_CODE (rhs) =3D=3D COMPOUND_EXPR) > > > + rhs =3D TREE_OPERAND (rhs, 1); > > > > What if you have a COND_EXPR inside a COMPOUND_EXPR? > > > > It works for me: > > [hjl@gnu-cfl-1 pr51628-5]$ cat c.i > struct A { > int i; > } __attribute__ ((packed)); > > int* > foo3 (struct A *p1, int **q1, int *q2, int *q3, struct A *p2) > { > return q1 ? (*q1 =3D 1, &p1->i) : (q2 ? (*q1 =3D &p1->i, *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 \u2018foo3\u2019: > c.i:8:20: warning: assignment to \u2018int *\u2019 from > \u2018int\u2019 makes pointer from integer without a cast > [-Wint-conversion] > 8 | return q1 ? (*q1 =3D 1, &p1->i) : (q2 ? (*q1 =3D &p1->i, *q2 =3D > 2, &p2->i): q2); > | ^ > c.i:8:48: warning: taking address of packed member of \u2018struct > A\u2019 may result in an unaligned pointer value > [-Waddress-of-packed-member] > 8 | return q1 ? (*q1 =3D 1, &p1->i) : (q2 ? (*q1 =3D &p1->i, *q2 =3D > 2, &p2->i): q2); > | ^~~~~~ > c.i:8:25: warning: taking address of packed member of \u2018struct > A\u2019 may result in an unaligned pointer value > [-Waddress-of-packed-member] > 8 | return q1 ? (*q1 =3D 1, &p1->i) : (q2 ? (*q1 =3D &p1->i, *q2 =3D > 2, &p2->i): q2); > | ^~~~~~ > c.i:8:65: warning: taking address of packed member of \u2018struct > A\u2019 may result in an unaligned pointer value > [-Waddress-of-packed-member] > 8 | return q1 ? (*q1 =3D 1, &p1->i) : (q2 ? (*q1 =3D &p1->i, *q2 =3D > 2, &p2->i): q2); > | ^= ~~~~~ > [hjl@gnu-cfl-1 pr51628-5]$ > > If it isn't what you meant, can you give me a testcase? > Here is the updated patch. OK for trunk? Thanks. --=20 H.J. --000000000000939e90057d6373cd 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_jpvgi9ew0 Content-length: 72265 RnJvbSA0YTU0MThkNWU5MzM2OWNiNTY0OGJhNmMwZjMzMjAzYmI2ZmE4YTNm 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 bi5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTg3ICsrKysrKysrKysr KysrKysrKwogZ2NjL2MtZmFtaWx5L2Mub3B0ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICA0ICsKIGdjYy9jL2MtdHlwZWNrLmMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAxMSArLQogZ2NjL2NwL2NhbGwuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzICsKIGdjYy9j cC90eXBlY2suYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg MiArCiBnY2MvZG9jL2ludm9rZS50ZXhpICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMTQgKy0KIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2Fz YW4vbWlzYWxpZ24tMS5jICB8ICAgMiArLQogZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vYXNhbi9taXNhbGlnbi0yLmMgIHwgICAyICstCiBnY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTEuYyAgICAgICAgfCAgMjkg KysrCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTEwLmMg ICAgICAgfCAgMjQgKysrCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9w cjUxNjI4LTExLmMgICAgICAgfCAgMTcgKysKIGdjYy90ZXN0c3VpdGUvYy1j KystY29tbW9uL3ByNTE2MjgtMTIuYyAgICAgICB8ICAxOCArKwogZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0xMy5jICAgICAgIHwgICA5 ICsKIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMTQuYyAg ICAgICB8ICAgOSArCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUx NjI4LTE1LmMgICAgICAgfCAgMTQgKysKIGdjYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL3ByNTE2MjgtMTYuYyAgICAgICB8ICAxMyArKwogZ2NjL3Rlc3Rz dWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0yLmMgICAgICAgIHwgIDI5ICsr KwogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0yNi5jICAg ICAgIHwgIDMzICsrKysKIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3By NTE2MjgtMjcuYyAgICAgICB8ICAxMiArKwogZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vcHI1MTYyOC0yOC5jICAgICAgIHwgIDMxICsrKwogZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0yOS5jICAgICAgIHwgIDE2 ICsrCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTMuYyAg ICAgICAgfCAgMzUgKysrKwogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24v cHI1MTYyOC0zMC5jICAgICAgIHwgIDIzICsrKwogZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vcHI1MTYyOC0zMS5jICAgICAgIHwgIDE2ICsrCiBnY2Mv dGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTMyLmMgICAgICAgfCAg MTkgKysKIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtNC5j ICAgICAgICB8ICAzNSArKysrCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi9wcjUxNjI4LTUuYyAgICAgICAgfCAgMzUgKysrKwogZ2NjL3Rlc3RzdWl0 ZS9jLWMrKy1jb21tb24vcHI1MTYyOC02LmMgICAgICAgIHwgIDM1ICsrKysK IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtNy5jICAgICAg ICB8ICAyOSArKysKIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2 MjgtOC5jICAgICAgICB8ICAzNiArKysrCiBnY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9wcjUxNjI4LTkuYyAgICAgICAgfCAgMzYgKysrKwogZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vdWJzYW4vYWxpZ24tMTAuYyAgIHwgICAy ICstCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi91YnNhbi9hbGlnbi0y LmMgICAgfCAgIDIgKy0KIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vi c2FuL2FsaWduLTQuYyAgICB8ICAgMiArLQogZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vdWJzYW4vYWxpZ24tNi5jICAgIHwgICAyICstCiBnY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi91YnNhbi9hbGlnbi03LmMgICAgfCAgIDIg Ky0KIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vic2FuL2FsaWduLTgu YyAgICB8ICAgMiArLQogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdWJzYW4vYWxp Z24tMi5DICAgICAgICAgIHwgICAyICstCiBnY2MvdGVzdHN1aXRlL2djYy5k Zy9wcjUxNjI4LTE3LmMgICAgICAgICAgICAgfCAgMTAgKwogZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvcHI1MTYyOC0xOC5jICAgICAgICAgICAgIHwgIDIzICsr KwogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0xOS5jICAgICAgICAg ICAgIHwgIDI2ICsrKwogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0y MC5jICAgICAgICAgICAgIHwgIDExICsrCiBnY2MvdGVzdHN1aXRlL2djYy5k Zy9wcjUxNjI4LTIxLmMgICAgICAgICAgICAgfCAgMTEgKysKIGdjYy90ZXN0 c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMjIuYyAgICAgICAgICAgICB8ICAgOSAr CiBnY2MvdGVzdHN1aXRlL2djYy5kZy9wcjUxNjI4LTIzLmMgICAgICAgICAg ICAgfCAgIDkgKwogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0yNC5j ICAgICAgICAgICAgIHwgIDEwICsKIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3By NTE2MjgtMjUuYyAgICAgICAgICAgICB8ICAgOSArCiAuLi4vZ2NjLnRhcmdl dC9pMzg2L2F2eDUxMmJ3LXZtb3ZkcXUxNi0yLmMgICAgfCAgIDIgKy0KIC4u Li9nY2MudGFyZ2V0L2kzODYvYXZ4NTEyZi12bW92ZHF1MzItMi5jICAgICB8 ICAgMiArLQogLi4uL2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLXZtb3ZkcXU2 NC0yLmMgICAgIHwgICAyICstCiAuLi4vZ2NjLnRhcmdldC9pMzg2L2F2eDUx MnZsLXZtb3ZkcXUxNi0yLmMgICAgfCAgIDIgKy0KIC4uLi9nY2MudGFyZ2V0 L2kzODYvYXZ4NTEydmwtdm1vdmRxdTMyLTIuYyAgICB8ICAgMiArLQogLi4u L2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC12bW92ZHF1NjQtMi5jICAgIHwg ICAyICstCiBsaWJnY2MvdW53aW5kLXBlLmggICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDUgKwogNTUgZmlsZXMgY2hhbmdlZCwgOTA5IGluc2Vy dGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1 MTYyOC0xMC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vcHI1MTYyOC0xMS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0xMi5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1 MTYyOC0xMy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vcHI1MTYyOC0xNC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0xNS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1 MTYyOC0xNi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vcHI1MTYyOC0yLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTI2LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUx NjI4LTI3LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2Mt YysrLWNvbW1vbi9wcjUxNjI4LTI4LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTI5LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUx NjI4LTMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1j KystY29tbW9uL3ByNTE2MjgtMzAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMzEuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2 MjgtMzIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1j KystY29tbW9uL3ByNTE2MjgtNC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC01LmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4 LTYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL3ByNTE2MjgtNy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC04LmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTku YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3By NTE2MjgtMTcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv Z2NjLmRnL3ByNTE2MjgtMTguYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90 ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMTkuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMjAuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMjEu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3By NTE2MjgtMjIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv Z2NjLmRnL3ByNTE2MjgtMjMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90 ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMjQuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMjUuYwoKZGlmZiAt LWdpdCBhL2djYy9jLWZhbWlseS9jLWNvbW1vbi5oIGIvZ2NjL2MtZmFtaWx5 L2MtY29tbW9uLmgKaW5kZXggNDE4NzM0M2MwYjMuLmViMGFkNjA5NDBkIDEw MDY0NAotLS0gYS9nY2MvYy1mYW1pbHkvYy1jb21tb24uaAorKysgYi9nY2Mv Yy1mYW1pbHkvYy1jb21tb24uaApAQCAtMTI4Miw2ICsxMjgyLDcgQEAgZXh0 ZXJuIHZvaWQgY19kb19zd2l0Y2hfd2FybmluZ3MgKHNwbGF5X3RyZWUsIGxv Y2F0aW9uX3QsIHRyZWUsIHRyZWUsIGJvb2wsCiAJCQkJICBib29sKTsKIGV4 dGVybiB2b2lkIHdhcm5fZm9yX29taXR0ZWRfY29uZG9wIChsb2NhdGlvbl90 LCB0cmVlKTsKIGV4dGVybiBib29sIHdhcm5fZm9yX3Jlc3RyaWN0ICh1bnNp Z25lZCwgdHJlZSAqLCB1bnNpZ25lZCk7CitleHRlcm4gdm9pZCB3YXJuX2Zv cl9hZGRyZXNzX29yX3BvaW50ZXJfb2ZfcGFja2VkX21lbWJlciAoYm9vbCwg dHJlZSwgdHJlZSk7CiAKIC8qIFBsYWNlcyB3aGVyZSBhbiBsdmFsdWUsIG9y IG1vZGlmaWFibGUgbHZhbHVlLCBtYXkgYmUgcmVxdWlyZWQuCiAgICBVc2Vk IHRvIHNlbGVjdCBkaWFnbm9zdGljIG1lc3NhZ2VzIGluIGx2YWx1ZV9lcnJv ciBhbmQKZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLXdhcm4uYyBiL2dj Yy9jLWZhbWlseS9jLXdhcm4uYwppbmRleCA3OThhZDFiY2IzOS4uMmMyYWVm YmQ2M2YgMTAwNjQ0Ci0tLSBhL2djYy9jLWZhbWlseS9jLXdhcm4uYworKysg Yi9nY2MvYy1mYW1pbHkvYy13YXJuLmMKQEAgLTI2MTYsMyArMjYxNiwxOTAg QEAgd2Fybl9mb3JfbXVsdGlzdGF0ZW1lbnRfbWFjcm9zIChsb2NhdGlvbl90 IGJvZHlfbG9jLCBsb2NhdGlvbl90IG5leHRfbG9jLAogICAgIGluZm9ybSAo Z3VhcmRfbG9jLCAic29tZSBwYXJ0cyBvZiBtYWNybyBleHBhbnNpb24gYXJl IG5vdCBndWFyZGVkIGJ5ICIKIAkgICAgInRoaXMgJXFzIGNsYXVzZSIsIGd1 YXJkX3RpbmZvX3RvX3N0cmluZyAoa2V5d29yZCkpOwogfQorCisvKiBSZXR1 cm4gc3RydWN0IG9yIHVuaW9uIHR5cGUgaWYgdGhlIGFsaWdubWVudCBvZiBk YXRhIG1lbWViZXIsIEZJRUxELAorICAgaXMgbGVzcyB0aGFuIHRoZSBhbGln bm1lbnQgb2YgVFlQRS4gIE90aGVyd2lzZSwgcmV0dXJuIE5VTExfVFJFRS4g ICovCisKK3N0YXRpYyB0cmVlCitjaGVja19hbGlnbm1lbnRfb2ZfcGFja2Vk X21lbWJlciAodHJlZSB0eXBlLCB0cmVlIGZpZWxkKQoreworICAvKiBDaGVj ayBhbGlnbm1lbnQgb2YgdGhlIGRhdGEgbWVtYmVyLiAgKi8KKyAgaWYgKFRS RUVfQ09ERSAoZmllbGQpID09IEZJRUxEX0RFQ0wKKyAgICAgICYmIChERUNM X1BBQ0tFRCAoZmllbGQpCisJICB8fCBUWVBFX1BBQ0tFRCAoVFJFRV9UWVBF IChmaWVsZCkpKSkKKyAgICB7CisgICAgICAvKiBDaGVjayB0aGUgZXhwZWN0 ZWQgYWxpZ25tZW50IGFnYWluc3QgdGhlIGZpZWxkIGFsaWdubWVudC4gICov CisgICAgICB1bnNpZ25lZCBpbnQgdHlwZV9hbGlnbiA9IFRZUEVfQUxJR04g KHR5cGUpOworICAgICAgdHJlZSBjb250ZXh0ID0gREVDTF9DT05URVhUIChm aWVsZCk7CisgICAgICB1bnNpZ25lZCBpbnQgcmVjb3JkX2FsaWduID0gVFlQ RV9BTElHTiAoY29udGV4dCk7CisgICAgICBpZiAoKHJlY29yZF9hbGlnbiAl IHR5cGVfYWxpZ24pICE9IDApCisJcmV0dXJuIGNvbnRleHQ7CisgICAgICB0 cmVlIGZpZWxkX29mZiA9IGJ5dGVfcG9zaXRpb24gKGZpZWxkKTsKKyAgICAg IGlmICghbXVsdGlwbGVfb2ZfcCAoVFJFRV9UWVBFIChmaWVsZF9vZmYpLCBm aWVsZF9vZmYsCisJCQkgIHNpemVfaW50ICh0eXBlX2FsaWduIC8gQklUU19Q RVJfVU5JVCkpKQorCXJldHVybiBjb250ZXh0OworICAgIH0KKworICByZXR1 cm4gTlVMTF9UUkVFOworfQorCisvKiBSZXR1cm4gc3RydWN0IG9yIHVuaW9u IHR5cGUgaWYgdGhlIHJpZ2h0IGhhbmQgdmFsdWUsIFJIUywgdGFrZXMgdGhl CisgICB1bmFsaWduZWQgYWRkcmVzcyBvZiBwYWNrZWQgbWVtYmVyIG9mIHN0 cnVjdCBvciB1bmlvbiB3aGVuIGFzc2lnbmluZworICAgdG8gVFlQRS4gIE90 aGVyd2lzZSwgcmV0dXJuIE5VTExfVFJFRS4gICovCisKK3N0YXRpYyB0cmVl CitjaGVja19hZGRyZXNzX29mX3BhY2tlZF9tZW1iZXIgKHRyZWUgdHlwZSwg dHJlZSByaHMpCit7CisgIHRyZWUgb2JqZWN0OworICB0cmVlIGZpZWxkOwor CisgIGlmIChJTkRJUkVDVF9SRUZfUCAocmhzKSkKKyAgICByaHMgPSBUUkVF X09QRVJBTkQgKHJocywgMCk7CisKKyAgaWYgKFRSRUVfQ09ERSAocmhzKSA9 PSBBRERSX0VYUFIpCisgICAgcmhzID0gVFJFRV9PUEVSQU5EIChyaHMsIDAp OworICB3aGlsZSAoaGFuZGxlZF9jb21wb25lbnRfcCAocmhzKSkKKyAgICB7 CisgICAgICBpZiAoVFJFRV9DT0RFIChyaHMpID09IENPTVBPTkVOVF9SRUYp CisJYnJlYWs7CisgICAgICByaHMgPSBUUkVFX09QRVJBTkQgKHJocywgMCk7 CisgICAgfQorCisgIGlmIChUUkVFX0NPREUgKHJocykgIT0gQ09NUE9ORU5U X1JFRikKKyAgICByZXR1cm4gTlVMTF9UUkVFOworCisgIG9iamVjdCA9IFRS RUVfT1BFUkFORCAocmhzLCAwKTsKKyAgZmllbGQgPSBUUkVFX09QRVJBTkQg KHJocywgMSk7CisKKyAgdHJlZSBjb250ZXh0ID0gY2hlY2tfYWxpZ25tZW50 X29mX3BhY2tlZF9tZW1iZXIgKHR5cGUsIGZpZWxkKTsKKyAgaWYgKGNvbnRl eHQpCisgICAgcmV0dXJuIGNvbnRleHQ7CisKKyAgLyogQ2hlY2sgYWxpZ25t ZW50IG9mIHRoZSBvYmplY3QuICAqLworICB3aGlsZSAoaGFuZGxlZF9jb21w b25lbnRfcCAob2JqZWN0KSkKKyAgICB7CisgICAgICBpZiAoVFJFRV9DT0RF IChvYmplY3QpID09IENPTVBPTkVOVF9SRUYpCisJeworCSAgZG8KKwkgICAg eworCSAgICAgIGZpZWxkID0gVFJFRV9PUEVSQU5EIChvYmplY3QsIDEpOwor CSAgICAgIGNvbnRleHQgPSBjaGVja19hbGlnbm1lbnRfb2ZfcGFja2VkX21l bWJlciAodHlwZSwgZmllbGQpOworCSAgICAgIGlmIChjb250ZXh0KQorCQly ZXR1cm4gY29udGV4dDsKKwkgICAgICBvYmplY3QgPSBUUkVFX09QRVJBTkQg KG9iamVjdCwgMCk7CisJICAgIH0KKwkgIHdoaWxlIChUUkVFX0NPREUgKG9i amVjdCkgPT0gQ09NUE9ORU5UX1JFRik7CisJfQorICAgICAgZWxzZQorCW9i amVjdCA9IFRSRUVfT1BFUkFORCAob2JqZWN0LCAwKTsKKyAgICB9CisKKyAg cmV0dXJuIE5VTExfVFJFRTsKK30KKworLyogQ2hlY2sgYW5kIHdhcm4gaWYg dGhlIHJpZ2h0IGhhbmQgdmFsdWUsIFJIUywgdGFrZXMgdGhlIHVuYWxpZ25l ZAorICAgYWRkcmVzcyBvZiBwYWNrZWQgbWVtYmVyIG9mIHN0cnVjdCBvciB1 bmlvbiB3aGVuIGFzc2lnbmluZyB0byBUWVBFLiAgKi8KKworc3RhdGljIHZv aWQKK2NoZWNrX2FuZF93YXJuX2FkZHJlc3Nfb2ZfcGFja2VkX21lbWJlciAo dHJlZSB0eXBlLCB0cmVlIHJocykKK3sKKyAgaWYgKFRSRUVfQ09ERSAocmhz KSAhPSBDT05EX0VYUFIpCisgICAgeworICAgICAgd2hpbGUgKFRSRUVfQ09E RSAocmhzKSA9PSBDT01QT1VORF9FWFBSKQorCXJocyA9IFRSRUVfT1BFUkFO RCAocmhzLCAxKTsKKworICAgICAgdHJlZSBjb250ZXh0ID0gY2hlY2tfYWRk cmVzc19vZl9wYWNrZWRfbWVtYmVyICh0eXBlLCByaHMpOworICAgICAgaWYg KGNvbnRleHQpCisJeworCSAgbG9jYXRpb25fdCBsb2MgPSBFWFBSX0xPQ19P Ul9MT0MgKHJocywgaW5wdXRfbG9jYXRpb24pOworCSAgd2FybmluZ19hdCAo bG9jLCBPUFRfV2FkZHJlc3Nfb2ZfcGFja2VkX21lbWJlciwKKwkJICAgICAg InRha2luZyBhZGRyZXNzIG9mIHBhY2tlZCBtZW1iZXIgb2YgJXFUIG1heSBy ZXN1bHQgIgorCQkgICAgICAiaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFs dWUiLAorCQkgICAgICBjb250ZXh0KTsKKwl9CisgICAgICByZXR1cm47Cisg ICAgfQorCisgIC8qIENoZWNrIHRoZSBUSEVOIHBhdGguICAqLworICBjaGVj a19hbmRfd2Fybl9hZGRyZXNzX29mX3BhY2tlZF9tZW1iZXIgKHR5cGUsIFRS RUVfT1BFUkFORCAocmhzLCAxKSk7CisKKyAgLyogQ2hlY2sgdGhlIEVMU0Ug cGF0aC4gICovCisgIGNoZWNrX2FuZF93YXJuX2FkZHJlc3Nfb2ZfcGFja2Vk X21lbWJlciAodHlwZSwgVFJFRV9PUEVSQU5EIChyaHMsIDIpKTsKK30KKwor LyogV2FybiBpZiB0aGUgcmlnaHQgaGFuZCB2YWx1ZSwgUkhTOgorICAgMS4g Rm9yIENPTlZFUlRfUCA9PSB0cnVlLCBpcyBhIHBvaW50ZXIgdmFsdWUgd2hp Y2ggaXNuJ3QgYWxpZ25lZCB0byBhCisgICAgICBwb2ludGVyIHR5cGUgVFlQ RS4KKyAgIDIuIEZvciBDT05WRVJUX1AgPT0gZmFsc2UsIGlzIGFuIGFkZHJl c3Mgd2hpY2ggdGFrZXMgdGhlIHVuYWxpZ25lZAorICAgICAgYWRkcmVzcyBv ZiBwYWNrZWQgbWVtYmVyIG9mIHN0cnVjdCBvciB1bmlvbiB3aGVuIGFzc2ln bmluZyB0byBUWVBFLgorKi8KKwordm9pZAord2Fybl9mb3JfYWRkcmVzc19v cl9wb2ludGVyX29mX3BhY2tlZF9tZW1iZXIgKGJvb2wgY29udmVydF9wLCB0 cmVlIHR5cGUsCisJCQkJCSAgICAgIHRyZWUgcmhzKQoreworICBpZiAoIXdh cm5fYWRkcmVzc19vZl9wYWNrZWRfbWVtYmVyKQorICAgIHJldHVybjsKKwor ICAvKiBEb24ndCB3YXJuIGlmIHdlIGRvbid0IGFzc2lnbiBSSFMgdG8gYSBw b2ludGVyLiAgKi8KKyAgaWYgKCFQT0lOVEVSX1RZUEVfUCAodHlwZSkpCisg ICAgcmV0dXJuOworCisgIHdoaWxlIChUUkVFX0NPREUgKHJocykgPT0gQ09N UE9VTkRfRVhQUikKKyAgICByaHMgPSBUUkVFX09QRVJBTkQgKHJocywgMSk7 CisKKyAgaWYgKGNvbnZlcnRfcCkKKyAgICB7CisgICAgICBib29sIHJoc3Bv aW50ZXJfcDsKKyAgICAgIHRyZWUgcmhzdHlwZTsKKworICAgICAgLyogQ2hl Y2sgdGhlIG9yaWdpbmFsIHR5cGUgb2YgUkhTLiAgKi8KKyAgICAgIHN3aXRj aCAoVFJFRV9DT0RFIChyaHMpKQorCXsKKwljYXNlIFBBUk1fREVDTDoKKwlj YXNlIFZBUl9ERUNMOgorCSAgcmhzdHlwZSA9IFRSRUVfVFlQRSAocmhzKTsK KwkgIHJoc3BvaW50ZXJfcCA9IFBPSU5URVJfVFlQRV9QIChyaHN0eXBlKTsK KwkgIGJyZWFrOworCWNhc2UgTk9QX0VYUFI6CisJICByaHMgPSBUUkVFX09Q RVJBTkQgKHJocywgMCk7CisJICBpZiAoVFJFRV9DT0RFIChyaHMpID09IEFE RFJfRVhQUikKKwkgICAgcmhzID0gVFJFRV9PUEVSQU5EIChyaHMsIDApOwor CSAgcmhzdHlwZSA9IFRSRUVfVFlQRSAocmhzKTsKKwkgIHJoc3BvaW50ZXJf cCA9IFRSRUVfQ09ERSAocmhzdHlwZSkgPT0gQVJSQVlfVFlQRTsKKwkgIGJy ZWFrOworCWRlZmF1bHQ6CisJICByZXR1cm47CisJfQorCisgICAgICBpZiAo cmhzcG9pbnRlcl9wICYmIFRZUEVfUEFDS0VEIChUUkVFX1RZUEUgKHJoc3R5 cGUpKSkKKwl7CisJICB1bnNpZ25lZCBpbnQgdHlwZV9hbGlnbiA9IFRZUEVf QUxJR05fVU5JVCAoVFJFRV9UWVBFICh0eXBlKSk7CisJICB1bnNpZ25lZCBp bnQgcmhzX2FsaWduID0gVFlQRV9BTElHTl9VTklUIChUUkVFX1RZUEUgKHJo c3R5cGUpKTsKKwkgIGlmICgocmhzX2FsaWduICUgdHlwZV9hbGlnbikgIT0g MCkKKwkgICAgeworCSAgICAgIGxvY2F0aW9uX3QgbG9jYXRpb24gPSBFWFBS X0xPQ19PUl9MT0MgKHJocywgaW5wdXRfbG9jYXRpb24pOworCSAgICAgIHdh cm5pbmdfYXQgKGxvY2F0aW9uLCBPUFRfV2FkZHJlc3Nfb2ZfcGFja2VkX21l bWJlciwKKwkJCSAgImNvbnZlcnRpbmcgYSBwYWNrZWQgJXFUIHBvaW50ZXIg KGFsaWdubWVudCAlZCkgIgorCQkJICAidG8gJXFUIChhbGlnbm1lbnQgJWQp IG1heSBtYXkgcmVzdWx0IGluIGFuICIKKwkJCSAgInVuYWxpZ25lZCBwb2lu dGVyIHZhbHVlIiwKKwkJCSAgcmhzdHlwZSwgcmhzX2FsaWduLCB0eXBlLCB0 eXBlX2FsaWduKTsKKwkgICAgICB0cmVlIGRlY2wgPSBUWVBFX1NUVUJfREVD TCAoVFJFRV9UWVBFIChyaHN0eXBlKSk7CisJICAgICAgaW5mb3JtIChERUNM X1NPVVJDRV9MT0NBVElPTiAoZGVjbCksICJkZWZpbmVkIGhlcmUiKTsKKwkg ICAgICBkZWNsID0gVFlQRV9TVFVCX0RFQ0wgKFRSRUVfVFlQRSAodHlwZSkp OworCSAgICAgIGlmIChkZWNsKQorCQlpbmZvcm0gKERFQ0xfU09VUkNFX0xP Q0FUSU9OIChkZWNsKSwgImRlZmluZWQgaGVyZSIpOworCSAgICB9CisJfQor ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIEdldCB0aGUgdHlwZSBv ZiB0aGUgcG9pbnRlciBwb2ludGluZyB0by4gICovCisgICAgICB0eXBlID0g VFJFRV9UWVBFICh0eXBlKTsKKworICAgICAgaWYgKFRSRUVfQ09ERSAocmhz KSA9PSBOT1BfRVhQUikKKwlyaHMgPSBUUkVFX09QRVJBTkQgKHJocywgMCk7 CisKKyAgICAgIGNoZWNrX2FuZF93YXJuX2FkZHJlc3Nfb2ZfcGFja2VkX21l bWJlciAodHlwZSwgcmhzKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9nY2Mv Yy1mYW1pbHkvYy5vcHQgYi9nY2MvYy1mYW1pbHkvYy5vcHQKaW5kZXggMDdm ZjFjODRmOTYuLjIyY2NmOTEwYTg1IDEwMDY0NAotLS0gYS9nY2MvYy1mYW1p bHkvYy5vcHQKKysrIGIvZ2NjL2MtZmFtaWx5L2Mub3B0CkBAIC02MjUsNiAr NjI1LDEwIEBAIFdpbmNvbXBhdGlibGUtcG9pbnRlci10eXBlcwogQyBPYmpD IFZhcih3YXJuX2luY29tcGF0aWJsZV9wb2ludGVyX3R5cGVzKSBJbml0KDEp IFdhcm5pbmcKIFdhcm4gd2hlbiB0aGVyZSBpcyBhIGNvbnZlcnNpb24gYmV0 d2VlbiBwb2ludGVycyB0aGF0IGhhdmUgaW5jb21wYXRpYmxlIHR5cGVzLgog CitXYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyCitDIE9iakMgQysrIE9iakMr KyBWYXIod2Fybl9hZGRyZXNzX29mX3BhY2tlZF9tZW1iZXIpIEluaXQoMSkg V2FybmluZworV2FybiB3aGVuIHRoZSBhZGRyZXNzIG9mIHBhY2tlZCBtZW1i ZXIgb2Ygc3RydWN0IG9yIHVuaW9uIGlzIHRha2VuLgorCiBXaW5pdC1zZWxm CiBDIE9iakMgQysrIE9iakMrKyBWYXIod2Fybl9pbml0X3NlbGYpIFdhcm5p bmcgTGFuZ0VuYWJsZWRCeShDKysgT2JqQysrLFdhbGwpCiBXYXJuIGFib3V0 IHZhcmlhYmxlcyB3aGljaCBhcmUgaW5pdGlhbGl6ZWQgdG8gdGhlbXNlbHZl cy4KZGlmZiAtLWdpdCBhL2djYy9jL2MtdHlwZWNrLmMgYi9nY2MvYy9jLXR5 cGVjay5jCmluZGV4IDFhODk3MjczMDg4Li5kYTRhODE2OWQ1NiAxMDA2NDQK LS0tIGEvZ2NjL2MvYy10eXBlY2suYworKysgYi9nY2MvYy9jLXR5cGVjay5j CkBAIC02NzI0LDcgKzY3MjQsMTEgQEAgY29udmVydF9mb3JfYXNzaWdubWVu dCAobG9jYXRpb25fdCBsb2NhdGlvbiwgbG9jYXRpb25fdCBleHByX2xvYywg dHJlZSB0eXBlLAogICAgIH0KIAogICBpZiAoVFlQRV9NQUlOX1ZBUklBTlQg KHR5cGUpID09IFRZUEVfTUFJTl9WQVJJQU5UIChyaHN0eXBlKSkKLSAgICBy ZXR1cm4gcmhzOworICAgIHsKKyAgICAgIHdhcm5fZm9yX2FkZHJlc3Nfb3Jf cG9pbnRlcl9vZl9wYWNrZWRfbWVtYmVyIChmYWxzZSwgdHlwZSwKKwkJCQkJ CSAgICBvcmlnX3Jocyk7CisgICAgICByZXR1cm4gcmhzOworICAgIH0KIAog ICBpZiAoY29kZXIgPT0gVk9JRF9UWVBFKQogICAgIHsKQEAgLTcyNzksNiAr NzI4MywxMSBAQCBjb252ZXJ0X2Zvcl9hc3NpZ25tZW50IChsb2NhdGlvbl90 IGxvY2F0aW9uLCBsb2NhdGlvbl90IGV4cHJfbG9jLCB0cmVlIHR5cGUsCiAJ ICAgIH0KIAl9CiAKKyAgICAgIC8qIElmIFJIUyBpcyd0IGFuIGFkZHJlc3Ms IGNoZWNrIHBvaW50ZXIgb3IgYXJyYXkgb2YgcGFja2VkCisJIHN0cnVjdCBv ciB1bmlvbi4gICovCisgICAgICB3YXJuX2Zvcl9hZGRyZXNzX29yX3BvaW50 ZXJfb2ZfcGFja2VkX21lbWJlcgorCShUUkVFX0NPREUgKG9yaWdfcmhzKSAh PSBBRERSX0VYUFIsIHR5cGUsIG9yaWdfcmhzKTsKKwogICAgICAgcmV0dXJu IGNvbnZlcnQgKHR5cGUsIHJocyk7CiAgICAgfQogICBlbHNlIGlmIChjb2Rl bCA9PSBQT0lOVEVSX1RZUEUgJiYgY29kZXIgPT0gQVJSQVlfVFlQRSkKZGlm ZiAtLWdpdCBhL2djYy9jcC9jYWxsLmMgYi9nY2MvY3AvY2FsbC5jCmluZGV4 IDYzMjhhMzZiNjA0Li40MGZmYzg2MzA5MSAxMDA2NDQKLS0tIGEvZ2NjL2Nw L2NhbGwuYworKysgYi9nY2MvY3AvY2FsbC5jCkBAIC03NjE4LDYgKzc2MTgs OSBAQCBjb252ZXJ0X2Zvcl9hcmdfcGFzc2luZyAodHJlZSB0eXBlLCB0cmVl IHZhbCwgdHN1YnN0X2ZsYWdzX3QgY29tcGxhaW4pCiAJfQogICAgICAgbWF5 YmVfd2Fybl9wYXJtX2FiaSAodHlwZSwgY3BfZXhwcl9sb2Nfb3JfbG9jICh2 YWwsIGlucHV0X2xvY2F0aW9uKSk7CiAgICAgfQorCisgIHdhcm5fZm9yX2Fk ZHJlc3Nfb3JfcG9pbnRlcl9vZl9wYWNrZWRfbWVtYmVyIChmYWxzZSwgdHlw ZSwgdmFsKTsKKwogICByZXR1cm4gdmFsOwogfQogCmRpZmYgLS1naXQgYS9n Y2MvY3AvdHlwZWNrLmMgYi9nY2MvY3AvdHlwZWNrLmMKaW5kZXggNDdkZGFk MTZmYzEuLjcwYjYwYTkyOGY0IDEwMDY0NAotLS0gYS9nY2MvY3AvdHlwZWNr LmMKKysrIGIvZ2NjL2NwL3R5cGVjay5jCkBAIC05MDM2LDYgKzkwMzYsOCBA QCBjb252ZXJ0X2Zvcl9hc3NpZ25tZW50ICh0cmVlIHR5cGUsIHRyZWUgcmhz LAogICAgICAgVFJFRV9OT19XQVJOSU5HIChyaHMpID0gMTsKICAgICB9CiAK KyAgd2Fybl9mb3JfYWRkcmVzc19vcl9wb2ludGVyX29mX3BhY2tlZF9tZW1i ZXIgKGZhbHNlLCB0eXBlLCByaHMpOworCiAgIHJldHVybiBwZXJmb3JtX2lt cGxpY2l0X2NvbnZlcnNpb25fZmxhZ3MgKHN0cmlwX3RvcF9xdWFscyAodHlw ZSksIHJocywKIAkJCQkJICAgIGNvbXBsYWluLCBmbGFncyk7CiB9CmRpZmYg LS1naXQgYS9nY2MvZG9jL2ludm9rZS50ZXhpIGIvZ2NjL2RvYy9pbnZva2Uu dGV4aQppbmRleCBhYzJlZTU5ZDkyYy4uMTQzNjVmYmE1MDEgMTAwNjQ0Ci0t LSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrIGIvZ2NjL2RvYy9pbnZva2Uu dGV4aQpAQCAtMjgxLDcgKzI4MSw4IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmpl Y3RpdmUtQysrIERpYWxlY3RzfS4KIEB4cmVme1dhcm5pbmcgT3B0aW9ucyws T3B0aW9ucyB0byBSZXF1ZXN0IG9yIFN1cHByZXNzIFdhcm5pbmdzfS4KIEBn Y2NvcHRsaXN0ey1mc3ludGF4LW9ubHkgIC1mbWF4LWVycm9ycz1AdmFye259 ICAtV3BlZGFudGljIEBnb2wKIC1wZWRhbnRpYy1lcnJvcnMgQGdvbAotLXcg IC1XZXh0cmEgIC1XYWxsICAtV2FkZHJlc3MgIC1XYWdncmVnYXRlLXJldHVy biAgLVdhbGlnbmVkLW5ldyBAZ29sCistdyAgLVdleHRyYSAgLVdhbGwgIC1X YWRkcmVzcyAgLVdhZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIgQGdvbAorLVdh Z2dyZWdhdGUtcmV0dXJuICAtV2FsaWduZWQtbmV3IEBnb2wKIC1XYWxsb2Mt emVybyAgLVdhbGxvYy1zaXplLWxhcmdlci10aGFuPUB2YXJ7Ynl0ZS1zaXpl fSBAZ29sCiAtV2FsbG9jYSAgLVdhbGxvY2EtbGFyZ2VyLXRoYW49QHZhcnti eXRlLXNpemV9IEBnb2wKIC1Xbm8tYWdncmVzc2l2ZS1sb29wLW9wdGltaXph dGlvbnMgIC1XYXJyYXktYm91bmRzICAtV2FycmF5LWJvdW5kcz1AdmFye259 IEBnb2wKQEAgLTMxMCw3ICszMTEsNyBAQCBPYmplY3RpdmUtQyBhbmQgT2Jq ZWN0aXZlLUMrKyBEaWFsZWN0c30uCiAtV2Zvcm1hdC15MmsgIC1XZnJhbWUt YWRkcmVzcyBAZ29sCiAtV2ZyYW1lLWxhcmdlci10aGFuPUB2YXJ7Ynl0ZS1z aXplfSAgLVduby1mcmVlLW5vbmhlYXAtb2JqZWN0IEBnb2wKIC1XanVtcC1t aXNzZXMtaW5pdCBAZ29sCi0tV2lmLW5vdC1hbGlnbmVkIEBnb2wKKy1XaHNh ICAtV2lmLW5vdC1hbGlnbmVkIEBnb2wKIC1XaWdub3JlZC1xdWFsaWZpZXJz ICAtV2lnbm9yZWQtYXR0cmlidXRlcyAgLVdpbmNvbXBhdGlibGUtcG9pbnRl ci10eXBlcyBAZ29sCiAtV2ltcGxpY2l0ICAtV2ltcGxpY2l0LWZhbGx0aHJv dWdoICAtV2ltcGxpY2l0LWZhbGx0aHJvdWdoPUB2YXJ7bn0gQGdvbAogLVdp bXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbiAgLVdpbXBsaWNpdC1pbnQg QGdvbApAQCAtMzU4LDcgKzM1OSw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmpl Y3RpdmUtQysrIERpYWxlY3RzfS4KIC1XdXNlbGVzcy1jYXN0ICAtV3Zhcmlh ZGljLW1hY3JvcyAgLVd2ZWN0b3Itb3BlcmF0aW9uLXBlcmZvcm1hbmNlIEBn b2wKIC1XdmxhICAtV3ZsYS1sYXJnZXItdGhhbj1AdmFye2J5dGUtc2l6ZX0g IC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyIEBnb2wKIC1Xd3JpdGUtc3RyaW5n cyBAZ29sCi0tV3plcm8tYXMtbnVsbC1wb2ludGVyLWNvbnN0YW50ICAtV2hz YX0KKy1XemVyby1hcy1udWxsLXBvaW50ZXItY29uc3RhbnR9CiAKIEBpdGVt IEMgYW5kIE9iamVjdGl2ZS1DLW9ubHkgV2FybmluZyBPcHRpb25zCiBAZ2Nj b3B0bGlzdHstV2JhZC1mdW5jdGlvbi1jYXN0ICAtV21pc3NpbmctZGVjbGFy YXRpb25zIEBnb2wKQEAgLTY5ODEsNiArNjk4MiwxMyBAQCBiZWhhdmlvciBh bmQgYXJlIG5vdCBwb3J0YWJsZSBpbiBDLCBzbyB0aGV5IHVzdWFsbHkgaW5k aWNhdGUgdGhhdCB0aGUKIHByb2dyYW1tZXIgaW50ZW5kZWQgdG8gdXNlIEBj b2Rle3N0cmNtcH0uICBUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieQogQG9w dGlvbnstV2FsbH0uCiAKK0BpdGVtIC1XYWRkcmVzcy1vZi1wYWNrZWQtbWVt YmVyCitAb3BpbmRleCBXYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyCitAb3Bp bmRleCBXbm8tYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyCitXYXJuIHdoZW4g dGhlIGFkZHJlc3Mgb2YgcGFja2VkIG1lbWJlciBvZiBzdHJ1Y3Qgb3IgdW5p b24gaXMgdGFrZW4sCit3aGljaCB1c3VhbGx5IHJlc3VsdHMgaW4gYW4gdW5h bGlnbmVkIHBvaW50ZXIgdmFsdWUuICBUaGlzIGlzCitlbmFibGVkIGJ5IGRl ZmF1bHQuCisKIEBpdGVtIC1XbG9naWNhbC1vcAogQG9waW5kZXggV2xvZ2lj YWwtb3AKIEBvcGluZGV4IFduby1sb2dpY2FsLW9wCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL21pc2FsaWduLTEuYyBi L2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4vbWlzYWxpZ24tMS5j CmluZGV4IDVjZDYwNWFjMDQ1Li5lYmViMDMwNjcwNiAxMDA2NDQKLS0tIGEv Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9taXNhbGlnbi0xLmMK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9taXNhbGln bi0xLmMKQEAgLTEsNSArMSw1IEBACiAvKiB7IGRnLWRvIHJ1biB7IHRhcmdl dCB7IGlscDMyIHx8IGxwNjQgfSB9IH0gKi8KLS8qIHsgZGctc2tpcC1pZiAi IiB7ICotKi0qIH0gIHsgIioiIH0geyAiLU8yIiB9IH0gKi8KKy8qIHsgZGct c2tpcC1pZiAiIiB7ICotKi0qIH0gIHsgIioiIH0geyAiLU8yIC1Xbm8tYWRk cmVzcy1vZi1wYWNrZWQtbWVtYmVyIiB9IH0gKi8KIC8qIHsgZGctYWRkaXRp b25hbC1vcHRpb25zICItZm5vLW9taXQtZnJhbWUtcG9pbnRlciIgeyB0YXJn ZXQgKi0qLWRhcndpbiogfSB9ICovCiAvKiB7IGRnLXNob3VsZGZhaWwgImFz YW4iIH0gKi8KIApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vYXNhbi9taXNhbGlnbi0yLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9hc2FuL21pc2FsaWduLTIuYwppbmRleCBhNmVkNDliYWMwNS4u YjI3ZTIyZDM1YTggMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL2FzYW4vbWlzYWxpZ24tMi5jCisrKyBiL2djYy90ZXN0c3VpdGUv Yy1jKystY29tbW9uL2FzYW4vbWlzYWxpZ24tMi5jCkBAIC0xLDUgKzEsNSBA QAogLyogeyBkZy1kbyBydW4geyB0YXJnZXQgeyBpbHAzMiB8fCBscDY0IH0g fSB9ICovCi0vKiB7IGRnLXNraXAtaWYgIiIgeyAqLSotKiB9ICB7ICIqIiB9 IHsgIi1PMiIgfSB9ICovCisvKiB7IGRnLXNraXAtaWYgIiIgeyAqLSotKiB9 ICB7ICIqIiB9IHsgIi1PMiAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJl ciIgfSB9ICovCiAvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZuby1v bWl0LWZyYW1lLXBvaW50ZXIiIHsgdGFyZ2V0ICotKi1kYXJ3aW4qIH0gfSAq LwogLyogeyBkZy1zaG91bGRmYWlsICJhc2FuIiB9ICovCiAKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtMS5jIGIv Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0xLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjUzMjRmOWNjOTY0 Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21t b24vcHI1MTYyOC0xLmMKQEAgLTAsMCArMSwyOSBAQAorLyogUFIgYy81MTYy OC4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRp b25zICItTyIgfSAqLworCitzdHJ1Y3QgcGFpcl90Cit7CisgIGludCB4Owor ICBpbnQgaTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkICg0 KSkpOworCitleHRlcm4gc3RydWN0IHBhaXJfdCBwOworZXh0ZXJuIGludCAq eDsKK2V4dGVybiB2b2lkIGJhciAoaW50ICopOworCitpbnQgKmFkZHIgPSAm cC5pOworCitpbnQgKgorZm9vICh2b2lkKQoreworICBzdHJ1Y3QgcGFpcl90 IGFyclsyXSA9IHsgeyAxLCAxMCB9LCB7IDIsIDIwIH0gfTsKKyAgaW50ICpw MCwgKnAxOworICBwMCA9ICZhcnJbMF0uaTsKKyAgYmFyIChwMCk7CisgIHAx ID0gJmFyclsxXS5pOworICBiYXIgKHAxKTsKKyAgYmFyICgmcC5pKTsKKyAg eCA9ICZwLmk7CisgIHJldHVybiAmcC5pOworfQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0xMC5jIGIvZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0xMC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wODVmZTE2MDhjNAotLS0g L2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3By NTE2MjgtMTAuYwpAQCAtMCwwICsxLDI0IEBACisvKiBQUiBjLzUxNjI4LiAg Ki8KKy8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGludDEyOCB9IH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLU8yIiB9ICovCisKK3N0cnVjdCBwYWlyX3QKK3sK KyAgY2hhciBjOworICBfX2ludDEyOF90IGk7Cit9IF9fYXR0cmlidXRlX18g KChwYWNrZWQpKTsKKwordHlwZWRlZiBzdHJ1Y3QgdW5hbGlnbmVkX2ludDEy OF90XworeworICBfX2ludDEyOF90IHZhbHVlOworfSBfX2F0dHJpYnV0ZV9f KChwYWNrZWQpKSB1bmFsaWduZWRfaW50MTI4X3Q7CisKK3N0cnVjdCBwYWly X3QgcCA9IHswLCAxfTsKK3VuYWxpZ25lZF9pbnQxMjhfdCAqYWRkciA9ICh1 bmFsaWduZWRfaW50MTI4X3QgKikgJnAuaTsKKworaW50IAorbWFpbigpIAor eworICBhZGRyLT52YWx1ZSA9IH4oX19pbnQxMjhfdCkwOworICByZXR1cm4g KHAuaSAhPSAxKSA/IDAgOiAxOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0xMS5jIGIvZ2NjL3Rlc3RzdWl0 ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0xMS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43NjYxMjMyYWM4OAotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2Mjgt MTEuYwpAQCAtMCwwICsxLDE3IEBACisvKiBQUiBjLzUxNjI4LiAgKi8KKy8q IHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBpbnQxMjggfSB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1PIiB9ICovCisKK3N0cnVjdCB0dXBsZV90Cit7Cisg IGNoYXIgY1sxMl07CisgIF9faW50MTI4X3QgaTsKK30gX19hdHRyaWJ1dGVf XygocGFja2VkLCBhbGlnbmVkICg4KSkpOworCit0eXBlZGVmIHN0cnVjdCB1 bmFsaWduZWRfaW50MTI4X3RfCit7CisgIF9faW50MTI4X3QgdmFsdWU7Cit9 IF9fYXR0cmlidXRlX18gKChwYWNrZWQsIGFsaWduZWQoNCkpKSB1bmFsaWdu ZWRfaW50MTI4X3Q7CisKK3N0cnVjdCB0dXBsZV90IHAgPSB7ezB9LCAxfTsK K3VuYWxpZ25lZF9pbnQxMjhfdCAqYWRkciA9ICh1bmFsaWduZWRfaW50MTI4 X3QgKikoJnAuaSk7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9wcjUxNjI4LTEyLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi9wcjUxNjI4LTEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmJjMjIxZmE4N2VmCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0xMi5jCkBAIC0w LDAgKzEsMTggQEAKKy8qIFBSIGMvNTE2MjguICAqLworLyogeyBkZy1kbyBj b21waWxlIHsgdGFyZ2V0IGludDEyOCB9IH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLU8iIH0gKi8KKworc3RydWN0IHR1cGxlX3QKK3sKKyAgY2hhciBjWzEw XTsKKyAgX19pbnQxMjhfdCBpOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQs IGFsaWduZWQgKDgpKSk7CisKK3R5cGVkZWYgc3RydWN0IHVuYWxpZ25lZF9p bnQxMjhfdF8KK3sKKyAgX19pbnQxMjhfdCB2YWx1ZTsKK30gX19hdHRyaWJ1 dGVfXyAoKHBhY2tlZCwgYWxpZ25lZCg0KSkpIHVuYWxpZ25lZF9pbnQxMjhf dDsKKworc3RydWN0IHR1cGxlX3QgcCA9IHt7MH0sIDF9OwordW5hbGlnbmVk X2ludDEyOF90ICphZGRyID0gKHVuYWxpZ25lZF9pbnQxMjhfdCAqKSgmcC5p KTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWdu ZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1 MTYyOC0xMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYy OC0xMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li4wZWRkNWU3Zjg0ZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL3ByNTE2MjgtMTMuYwpAQCAtMCwwICsxLDkgQEAK Ky8qIFBSIGMvNTE2MjguICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLU8iIH0gKi8KKworc3RydWN0IEIgeyBpbnQg aTsgfTsKK3N0cnVjdCBDIHsgc3RydWN0IEIgYjsgfSBfX2F0dHJpYnV0ZV9f ICgocGFja2VkKSk7CisKK2ludCogaDQgKHN0cnVjdCBDICpwKSB7IHJldHVy biAmcC0+Yi5pOyB9CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4g YW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0q IH0gLi0xIH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL3ByNTE2MjgtMTQuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29t bW9uL3ByNTE2MjgtMTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZjUwMzc4Yjg2NTEKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTE0LmMKQEAgLTAs MCArMSw5IEBACisvKiBQUiBjLzUxNjI4LiAgKi8KKy8qIHsgZGctZG8gY29t cGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIiB9ICovCisKK3N0cnVj dCBBIHsKKyAgaW50IGk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsK Kwordm9pZCogZjAgKHN0cnVjdCBBICpwKSB7IHJldHVybiAmcC0+aTsgfQpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYy OC0xNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0x NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5i Y2FjNmQ3MGFkNQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv Yy1jKystY29tbW9uL3ByNTE2MjgtMTUuYwpAQCAtMCwwICsxLDE0IEBACisv KiBQUiBjLzUxNjI4LiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisv KiB7IGRnLW9wdGlvbnMgIi1PIiB9ICovCisKK3N0cnVjdCBBIHsKKyAgaW50 IGk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworaW50KgorZiAo c3RydWN0IEEgKnAsIGludCAqcSkKK3sKKyAgcmV0dXJuIHEgPyBxIDogJnAt Pmk7CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGln bmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0g Ki8KK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L3ByNTE2MjgtMTYuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3By NTE2MjgtMTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uY2Q1MDJmZTc2YjgKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTE2LmMKQEAgLTAsMCArMSwx MyBAQAorLyogUFIgYy81MTYyOC4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLworLyogeyBkZy1vcHRpb25zICItTyIgfSAqLworCitzdHJ1Y3QgX19h dHRyaWJ1dGVfXyAoKHBhY2tlZCkpIEEgeyBpbnQgaTsgfTsKK3N0cnVjdCBC IHsKKyAgc3RydWN0IEEgYTsKK30gYjsKKworaW50ICpwID0gKGludCopJmIu YS5pOworLyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxp Z25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9 ICovCitpbnQgKnEgPSAoaW50KikmYi5hOworLyogeyBkZy13YXJuaW5nICJt YXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7 IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTIuYyBiL2djYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL3ByNTE2MjgtMi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYmZiODRkZGQwNQotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2Mjgt Mi5jCkBAIC0wLDAgKzEsMjkgQEAKKy8qIFBSIGMvNTE2MjguICAqLworLyog eyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8iIH0g Ki8KKworc3RydWN0IHBhaXJfdAoreworICBpbnQgeDsKKyAgaW50IGk7Cit9 IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCAoOCkpKTsKKworZXh0 ZXJuIHN0cnVjdCBwYWlyX3QgcDsKK2V4dGVybiBpbnQgKng7CitleHRlcm4g dm9pZCBiYXIgKGludCAqKTsKKworaW50ICphZGRyID0gJnAuaTsKKworaW50 ICoKK2ZvbyAodm9pZCkKK3sKKyAgc3RydWN0IHBhaXJfdCBhcnJbMl0gPSB7 IHsgMSwgMTAgfSwgeyAyLCAyMCB9IH07CisgIGludCAqcDAsICpwMTsKKyAg cDAgPSAmYXJyWzBdLmk7CisgIGJhciAocDApOworICBwMSA9ICZhcnJbMV0u aTsKKyAgYmFyIChwMSk7CisgIGJhciAoJnAuaSk7CisgIHggPSAmcC5pOwor ICByZXR1cm4gJnAuaTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Yy1jKystY29tbW9uL3ByNTE2MjgtMjYuYyBiL2djYy90ZXN0c3VpdGUvYy1j KystY29tbW9uL3ByNTE2MjgtMjYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uMjA0MjM3OTg2MGEKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTI2LmMK QEAgLTAsMCArMSwzMyBAQAorLyogUFIgYy81MTYyOC4gICovCisvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTyIgfSAqLwor CitzdHJ1Y3QgQSB7CisgIGludCBpOworfSBfX2F0dHJpYnV0ZV9fICgocGFj a2VkKSk7CisKK3N0cnVjdCBBIHAgPSB7MX07CitpbnQgKmFkZHI7CisKK2lu dCBpLCBqOworCit2b2lkCitmb28xICh2b2lkKQoreworICBhZGRyID0gKGkg PSAtMSwgJnAuaSk7CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4g YW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0q IH0gLi0xIH0gKi8KK30KKwordm9pZAorZm9vMiAodm9pZCkKK3sKKyAgYWRk ciA9IChpID0gLTEsIGogPSAtMiwgJnAuaSk7CisvKiB7IGRnLXdhcm5pbmcg Im1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIi IHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KK30KKwordm9pZAorZm9vMyAo dm9pZCkKK3sKKyAgYWRkciA9IChpID0gLTEsIChqID0gLTIsICZwLmkpKTsK Ky8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQg cG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLwor fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1 MTYyOC0yNy5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYy OC0yNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li45YWUxZWZkN2FmYgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL3ByNTE2MjgtMjcuYwpAQCAtMCwwICsxLDEyIEBA CisvKiBQUiBjLzUxNjI4LiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1PIiB9ICovCisKK3N0cnVjdCBBIHsgaW50 IGk7IH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworc3RydWN0IEIgeyBz dHJ1Y3QgQSBhOyB9Oworc3RydWN0IEMgeyBzdHJ1Y3QgQiBiOyB9OworCitl eHRlcm4gc3RydWN0IEMgKnA7CisKK2ludCogZzggKHZvaWQpIHsgcmV0dXJu ICZwLT5iLmEuaTsgfQorLyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGlu IGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSot KiB9IC4tMSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9wcjUxNjI4LTI4LmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi9wcjUxNjI4LTI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjNjYzFmZWMxZjcxCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0yOC5jCkBAIC0w LDAgKzEsMzEgQEAKKy8qIFBSIGMvNTE2MjguICAqLworLyogeyBkZy1kbyBj b21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8iIH0gKi8KKworc3Ry dWN0IEEgeyAKKyAgaW50IGk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQp KTsKKworaW50ICoKK2ZvbzMgKHN0cnVjdCBBICpwMSwgaW50ICpxMSwgaW50 ICpxMiwgc3RydWN0IEEgKnAyKSAKK3sKKyAgcmV0dXJuIChxMSAKKwkgID8g JnAxLT5pCisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5h bGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0x IH0gKi8KKwkgIDogKHEyID8gJnAyLT5pIDogcTIpKTsKKy8qIHsgZGctd2Fy bmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1 ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworfQorCitpbnQqCitm b280IChzdHJ1Y3QgQSAqcDEsIGludCAqKnExLCBpbnQgKnEyLCBpbnQgKnEz LCBzdHJ1Y3QgQSAqcDIpCit7CisgIHJldHVybiAocTEKKwkgID8gKCpxMSA9 IHEyLCAmcDEtPmkpCisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4g YW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0q IH0gLi0xIH0gKi8KKwkgIDogKHEyCisJICAgICA/ICgqcTEgPSAmcDEtPmks CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVk IHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8K KwkJKnEyID0gMiwgJnAyLT5pKQorLyogeyBkZy13YXJuaW5nICJtYXkgcmVz dWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdl dCAqLSotKiB9IC4tMSB9ICovCisJICAgICA6IHEyKSk7Cit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTI5LmMg Yi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTI5LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk0YjM3MjJk MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vcHI1MTYyOC0yOS5jCkBAIC0wLDAgKzEsMTYgQEAKKy8qIFBSIGMv NTE2MjguICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGct b3B0aW9ucyAiLU8iIH0gKi8KKworc3RydWN0IEEgeyBpbnQgaTsgfTsKK3N0 cnVjdCBCIHsgc3RydWN0IEEgYTsgfTsKK3N0cnVjdCBDIHsgc3RydWN0IEIg YiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7IH07CisKK2V4dGVybiBzdHJ1 Y3QgQyAqcDsKKworaW50KgorZzggKHZvaWQpCit7CisgIHJldHVybiAmcC0+ Yi5hLmk7CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5h bGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0x IH0gKi8KK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29t bW9uL3ByNTE2MjgtMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24v cHI1MTYyOC0zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjBlYTk0Yzg0NWEwCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0zLmMKQEAgLTAsMCArMSwz NSBAQAorLyogUFIgYy81MTYyOC4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLworLyogeyBkZy1vcHRpb25zICItTyIgfSAqLworCitzdHJ1Y3QgcGFp cl90Cit7CisgIGludCB4OworICBpbnQgaTsKK30gX19hdHRyaWJ1dGVfXygo cGFja2VkLCBhbGlnbmVkICgyKSkpOworCitleHRlcm4gc3RydWN0IHBhaXJf dCBwOworZXh0ZXJuIGludCAqeDsKK2V4dGVybiB2b2lkIGJhciAoaW50ICop OworCitpbnQgKmFkZHIgPSAmcC5pOworLyogeyBkZy13YXJuaW5nICJtYXkg cmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRh cmdldCAqLSotKiB9IC4tMSB9ICovCisKK2ludCAqCitmb28gKHZvaWQpCit7 CisgIHN0cnVjdCBwYWlyX3QgYXJyWzJdID0geyB7IDEsIDEwIH0sIHsgMiwg MjAgfSB9OworICBpbnQgKnAwLCAqcDE7CisgIHAwID0gJmFyclswXS5pOwor LyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBw b2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCisg IGJhciAocDApOworICBwMSA9ICZhcnJbMV0uaTsKKy8qIHsgZGctd2Fybmlu ZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIg IiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworICBiYXIgKHAxKTsKKyAg YmFyICgmcC5pKTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBh biB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSog fSAuLTEgfSAqLworICB4ID0gJnAuaTsKKy8qIHsgZGctd2FybmluZyAibWF5 IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0 YXJnZXQgKi0qLSogfSAuLTEgfSAqLworICByZXR1cm4gJnAuaTsKKy8qIHsg ZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRl ciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworfQpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0z MC5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC0zMC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41Nzhl ZGY0ZThmOQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1j KystY29tbW9uL3ByNTE2MjgtMzAuYwpAQCAtMCwwICsxLDIzIEBACisvKiBQ UiBjLzUxNjI4LiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1PIiB9ICovCisKK3N0cnVjdCBBIHsgX19jb21wbGV4 IGludCBpOyB9Oworc3RydWN0IEIgeyBzdHJ1Y3QgQSBhOyB9Oworc3RydWN0 IEMgeyBzdHJ1Y3QgQiBiIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsgfTsK KworZXh0ZXJuIHN0cnVjdCBDICpwOworCitpbnQqCitmb28xICh2b2lkKQor eworICByZXR1cm4gJl9fcmVhbChwLT5iLmEuaSk7CisvKiB7IGRnLXdhcm5p bmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUi ICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KK30KKworaW50KgorZm9v MiAodm9pZCkKK3sKKyAgcmV0dXJuICZfX2ltYWcocC0+Yi5hLmkpOworLyog eyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2lu dGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCit9CmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4 LTMxLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTMx LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk3 MzBmNTNmNTgyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vcHI1MTYyOC0zMS5jCkBAIC0wLDAgKzEsMTYgQEAKKy8q IFBSIGMvNTE2MjguICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLU8iIH0gKi8KKwordHlwZWRlZiBpbnQgdjRzaSBf X2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgxNikpKTsKK3N0cnVjdCBYCit7 CisgIHY0c2kgeDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgeDsKKwor aW50ICoKK2ZvbygpCit7CisgIHJldHVybiAmeC54WzFdOworLyogeyBkZy13 YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZh bHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTMyLmMg Yi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTMyLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE2MmU1N2Q1 YjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vcHI1MTYyOC0zMi5jCkBAIC0wLDAgKzEsMTkgQEAKKy8qIFBSIGMv NTE2MjguICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGct b3B0aW9ucyAiLU8iIH0gKi8KKworc3RydWN0IEEKK3sKKyAgIGludCBpOwor fTsKKworc3RydWN0IEIKK3sKKyAgIGNoYXIgYzsKKyAgIF9fYXR0cmlidXRl ICgocGFja2VkKSkgc3RydWN0IEEgYXJbNF07Cit9OworCitzdHJ1Y3QgQiBi OworCitpbnQgKnAgPSAmYi5hclsxXS5pOworLyogeyBkZy13YXJuaW5nICJt YXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7 IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTQuYyBiL2djYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL3ByNTE2MjgtNC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNGMxZmI3MmQ2ZAotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2Mjgt NC5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qIFBSIGMvNTE2MjguICAqLworLyog eyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8iIH0g Ki8KKworc3RydWN0IHBhaXJfdAoreworICBpbnQgeDsKKyAgaW50IGk7Cit9 IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitleHRlcm4gc3RydWN0IHBh aXJfdCBwOworZXh0ZXJuIGludCAqeDsKK2V4dGVybiB2b2lkIGJhciAoaW50 ICopOworCitpbnQgKmFkZHIgPSAmcC5pOworLyogeyBkZy13YXJuaW5nICJt YXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7 IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCisKK2ludCAqCitmb28gKHZvaWQp Cit7CisgIHN0cnVjdCBwYWlyX3QgYXJyWzJdID0geyB7IDEsIDEwIH0sIHsg MiwgMjAgfSB9OworICBpbnQgKnAwLCAqcDE7CisgIHAwID0gJmFyclswXS5p OworLyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25l ZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICov CisgIGJhciAocDApOworICBwMSA9ICZhcnJbMV0uaTsKKy8qIHsgZGctd2Fy bmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1 ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworICBiYXIgKHAxKTsK KyAgYmFyICgmcC5pKTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBp biBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0q LSogfSAuLTEgfSAqLworICB4ID0gJnAuaTsKKy8qIHsgZGctd2FybmluZyAi bWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIg eyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworICByZXR1cm4gJnAuaTsKKy8q IHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9p bnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworfQpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYy OC01LmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjUxNjI4LTUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWQ3 YzMwOWEwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2Mt YysrLWNvbW1vbi9wcjUxNjI4LTUuYwpAQCAtMCwwICsxLDM1IEBACisvKiBQ UiBjLzUxNjI4LiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1PIiB9ICovCisKK3N0cnVjdCBwYWlyX3QKK3sKKyAg Y2hhciB4OworICBpbnQgaTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7 CisKK2V4dGVybiBzdHJ1Y3QgcGFpcl90IHA7CitleHRlcm4gaW50ICp4Owor ZXh0ZXJuIHZvaWQgYmFyIChpbnQgKik7CisKK2ludCAqYWRkciA9ICZwLmk7 CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVk IHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8K KworaW50ICoKK2ZvbyAodm9pZCkKK3sKKyAgc3RydWN0IHBhaXJfdCBhcnJb Ml0gPSB7IHsgMSwgMTAgfSwgeyAyLCAyMCB9IH07CisgIGludCAqcDAsICpw MTsKKyAgcDAgPSAmYXJyWzBdLmk7CisvKiB7IGRnLXdhcm5pbmcgIm1heSBy ZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFy Z2V0ICotKi0qIH0gLi0xIH0gKi8KKyAgYmFyIChwMCk7CisgIHAxID0gJmFy clsxXS5pOworLyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVu YWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4t MSB9ICovCisgIGJhciAocDEpOworICBiYXIgKCZwLmkpOworLyogeyBkZy13 YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZh bHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCisgIHggPSAmcC5p OworLyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25l ZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICov CisgIHJldHVybiAmcC5pOworLyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0 IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAq LSotKiB9IC4tMSB9ICovCit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2MtYysrLWNvbW1vbi9wcjUxNjI4LTYuYyBiL2djYy90ZXN0c3VpdGUvYy1j KystY29tbW9uL3ByNTE2MjgtNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi41MmFhMDdhNGNmMwotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtNi5jCkBA IC0wLDAgKzEsMzUgQEAKKy8qIFBSIGMvNTE2MjguICAqLworLyogeyBkZy1k byBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8iIH0gKi8KKwor c3RydWN0IHBhaXJfdAoreworICBjaGFyIHg7CisgIGludCBpOworfSBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQgKDQpKSk7CisKK2V4dGVybiBz dHJ1Y3QgcGFpcl90IHA7CitleHRlcm4gaW50ICp4OworZXh0ZXJuIHZvaWQg YmFyIChpbnQgKik7CisKK2ludCAqYWRkciA9ICZwLmk7CisvKiB7IGRnLXdh cm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFs dWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KKworaW50ICoKK2Zv byAodm9pZCkKK3sKKyAgc3RydWN0IHBhaXJfdCBhcnJbMl0gPSB7IHsgMSwg MTAgfSwgeyAyLCAyMCB9IH07CisgIGludCAqcDAsICpwMTsKKyAgcDAgPSAm YXJyWzBdLmk7CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4g dW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0g Li0xIH0gKi8KKyAgYmFyIChwMCk7CisgIHAxID0gJmFyclsxXS5pOworLyog eyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2lu dGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCisgIGJh ciAocDEpOworICBiYXIgKCZwLmkpOworLyogeyBkZy13YXJuaW5nICJtYXkg cmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRh cmdldCAqLSotKiB9IC4tMSB9ICovCisgIHggPSAmcC5pOworLyogeyBkZy13 YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZh bHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCisgIHJldHVybiAm cC5pOworLyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxp Z25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9 ICovCit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi9wcjUxNjI4LTcuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3By NTE2MjgtNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5hZTRhNjgxZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtNy5jCkBAIC0wLDAgKzEsMjkg QEAKKy8qIFBSIGMvNTE2MjguICAqLworLyogeyBkZy1kbyBjb21waWxlIH0g Ki8KKy8qIHsgZGctb3B0aW9ucyAiLU8iIH0gKi8KKworc3RydWN0IHBhaXJf dAoreworICBpbnQgeDsKKyAgaW50IGlbNF07Cit9IF9fYXR0cmlidXRlX18o KHBhY2tlZCwgYWxpZ25lZCAoNCkpKTsKKworZXh0ZXJuIHN0cnVjdCBwYWly X3QgcDsKK2V4dGVybiBpbnQgKng7CitleHRlcm4gdm9pZCBiYXIgKGludCAq KTsKKworaW50ICphZGRyID0gcC5pOworCitpbnQgKgorZm9vIChzdHJ1Y3Qg cGFpcl90ICpwKQoreworICBpbnQgKnAwLCAqcDE7CisgIHAwID0gcC0+aTsK KyAgYmFyIChwMCk7CisgIHAxID0gJnAtPmlbMV07CisgIGJhciAocDEpOwor ICBiYXIgKHAtPmkpOworICBiYXIgKCZwLT5pWzJdKTsKKyAgeCA9IHAtPmk7 CisgIHJldHVybiAmcC0+aVszXTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtOC5jIGIvZ2NjL3Rlc3RzdWl0 ZS9jLWMrKy1jb21tb24vcHI1MTYyOC04LmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNjMmRhZTA5NmFlCi0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC04 LmMKQEAgLTAsMCArMSwzNiBAQAorLyogUFIgYy81MTYyOC4gICovCisvKiB7 IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTyIgfSAq LworCitzdHJ1Y3QgcGFpcl90Cit7CisgIGNoYXIgeDsKKyAgaW50IGlbNF07 Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQsIGFsaWduZWQgKDQpKSk7CisK K2V4dGVybiBzdHJ1Y3QgcGFpcl90IHA7CitleHRlcm4gaW50ICp4OworZXh0 ZXJuIHZvaWQgYmFyIChpbnQgKik7CisKK2ludCAqYWRkciA9IHAuaTsKKy8q IHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9p bnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworCitp bnQgKgorZm9vIChzdHJ1Y3QgcGFpcl90ICpwKQoreworICBpbnQgKnAwLCAq cDE7CisgIHAwID0gcC0+aTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3Vs dCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQg Ki0qLSogfSAuLTEgfSAqLworICBiYXIgKHAwKTsKKyAgcDEgPSAmcC0+aVsx XTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWdu ZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAq LworICBiYXIgKHAxKTsKKyAgYmFyIChwLT5pKTsKKy8qIHsgZGctd2Fybmlu ZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIg IiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworICBiYXIgKCZwLT5pWzJd KTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBpbiBhbiB1bmFsaWdu ZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAq LworICB4ID0gcC0+aTsKKy8qIHsgZGctd2FybmluZyAibWF5IHJlc3VsdCBp biBhbiB1bmFsaWduZWQgcG9pbnRlciB2YWx1ZSIgIiIgeyB0YXJnZXQgKi0q LSogfSAuLTEgfSAqLworICByZXR1cm4gJnAtPmlbM107CisvKiB7IGRnLXdh cm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFs dWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KK30KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTE2MjgtOS5jIGIv Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1MTYyOC05LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA0NzBhYTNiOTNk Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21t b24vcHI1MTYyOC05LmMKQEAgLTAsMCArMSwzNiBAQAorLyogUFIgYy81MTYy OC4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRp b25zICItTyIgfSAqLworCitzdHJ1Y3QgcGFpcl90Cit7CisgIGludCB4Owor ICBpbnQgaVs0XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitl eHRlcm4gc3RydWN0IHBhaXJfdCBwOworZXh0ZXJuIGludCAqeDsKK2V4dGVy biB2b2lkIGJhciAoaW50ICopOworCitpbnQgKmFkZHIgPSBwLmk7CisvKiB7 IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50 ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KKworaW50 ICoKK2ZvbyAoc3RydWN0IHBhaXJfdCAqcCkKK3sKKyAgaW50ICpwMCwgKnAx OworICBwMCA9IHAtPmk7CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQg aW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICot Ki0qIH0gLi0xIH0gKi8KKyAgYmFyIChwMCk7CisgIHAxID0gJnAtPmlbMV07 CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVk IHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8K KyAgYmFyIChwMSk7CisgIGJhciAocC0+aSk7CisvKiB7IGRnLXdhcm5pbmcg Im1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIi IHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KKyAgYmFyICgmcC0+aVsyXSk7 CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVk IHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8K KyAgeCA9IHAtPmk7CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4g YW4gdW5hbGlnbmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0q IH0gLi0xIH0gKi8KKyAgcmV0dXJuICZwLT5pWzNdOworLyogeyBkZy13YXJu aW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVl IiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCit9CmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi91YnNhbi9hbGlnbi0xMC5j IGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vdWJzYW4vYWxpZ24tMTAu YwppbmRleCA1NmFlOWViZmUzMC4uNjIxMDUzMzE3M2MgMTAwNjQ0Ci0tLSBh L2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vic2FuL2FsaWduLTEwLmMK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vdWJzYW4vYWxpZ24t MTAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIExpbWl0IHRoaXMgdG8ga25vd24g bm9uLXN0cmljdCBhbGlnbm1lbnQgdGFyZ2V0cy4gICovCiAvKiB7IGRnLWRv IHJ1biB7IHRhcmdldCB7IGk/ODYtKi1saW51eCogeDg2XzY0LSotbGludXgq IH0gfSB9ICovCi0vKiB7IGRnLW9wdGlvbnMgIi1PIC1mc2FuaXRpemU9YWxp Z25tZW50IC1mc2FuaXRpemUtcmVjb3Zlcj1hbGlnbm1lbnQiIH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLU8gLWZzYW5pdGl6ZT1hbGlnbm1lbnQgLWZzYW5p dGl6ZS1yZWNvdmVyPWFsaWdubWVudCAtV25vLWFkZHJlc3Mtb2YtcGFja2Vk LW1lbWJlciIgfSAqLwogCiBzdHJ1Y3QgUiB7IGludCBhOyB9IHI7CiBzdHJ1 Y3QgUyB7IHN0cnVjdCBSIGE7IGNoYXIgYjsgbG9uZyBsb25nIGM7IHNob3J0 IGRbMTBdOyB9OwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vdWJzYW4vYWxpZ24tMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vdWJzYW4vYWxpZ24tMi5jCmluZGV4IDA3MWRlOGMyMDJhLi4zMzZi MWMzYzkwNyAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21t b24vdWJzYW4vYWxpZ24tMi5jCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL3Vic2FuL2FsaWduLTIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIExp bWl0IHRoaXMgdG8ga25vd24gbm9uLXN0cmljdCBhbGlnbm1lbnQgdGFyZ2V0 cy4gICovCiAvKiB7IGRnLWRvIHJ1biB7IHRhcmdldCB7IGk/ODYtKi1saW51 eCogeDg2XzY0LSotbGludXgqIH0gfSB9ICovCi0vKiB7IGRnLW9wdGlvbnMg Ii1mc2FuaXRpemU9YWxpZ25tZW50IiB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1mc2FuaXRpemU9YWxpZ25tZW50IC1Xbm8tYWRkcmVzcy1vZi1wYWNrZWQt bWVtYmVyIiB9ICovCiAKIHN0cnVjdCBTIHsgaW50IGE7IGNoYXIgYjsgbG9u ZyBsb25nIGM7IHNob3J0IGRbMTBdOyB9Owogc3RydWN0IFQgeyBjaGFyIGE7 IGxvbmcgbG9uZyBiOyB9OwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vdWJzYW4vYWxpZ24tNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vdWJzYW4vYWxpZ24tNC5jCmluZGV4IDMyNTI1OTVkMzMw Li5kNWZlZWVlMjljNiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vdWJzYW4vYWxpZ24tNC5jCisrKyBiL2djYy90ZXN0c3VpdGUv Yy1jKystY29tbW9uL3Vic2FuL2FsaWduLTQuYwpAQCAtMSw2ICsxLDYgQEAK IC8qIExpbWl0IHRoaXMgdG8ga25vd24gbm9uLXN0cmljdCBhbGlnbm1lbnQg dGFyZ2V0cy4gICovCiAvKiB7IGRnLWRvIHJ1biB7IHRhcmdldCB7IGk/ODYt Ki1saW51eCogeDg2XzY0LSotbGludXgqIH0gfSB9ICovCi0vKiB7IGRnLW9w dGlvbnMgIi1mc2FuaXRpemU9bnVsbCxhbGlnbm1lbnQiIH0gKi8KKy8qIHsg ZGctb3B0aW9ucyAiLWZzYW5pdGl6ZT1udWxsLGFsaWdubWVudCAtV25vLWFk ZHJlc3Mtb2YtcGFja2VkLW1lbWJlciIgfSAqLwogCiAjaW5jbHVkZSAiYWxp Z24tMi5jIgogCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi91YnNhbi9hbGlnbi02LmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi91YnNhbi9hbGlnbi02LmMKaW5kZXggMzM2NDc0NmZiMjcuLjAzMDJi N2I4ODk0IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi91YnNhbi9hbGlnbi02LmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vdWJzYW4vYWxpZ24tNi5jCkBAIC0xLDYgKzEsNiBAQAogLyogTGlt aXQgdGhpcyB0byBrbm93biBub24tc3RyaWN0IGFsaWdubWVudCB0YXJnZXRz LiAgKi8KIC8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IHsgaT84Ni0qLWxpbnV4 KiB4ODZfNjQtKi1saW51eCogfSB9IH0gKi8KLS8qIHsgZGctb3B0aW9ucyAi LU8gLWZzYW5pdGl6ZT1hbGlnbm1lbnQgLWZzYW5pdGl6ZS1yZWNvdmVyPWFs aWdubWVudCIgfSAqLworLyogeyBkZy1vcHRpb25zICItTyAtZnNhbml0aXpl PWFsaWdubWVudCAtZnNhbml0aXplLXJlY292ZXI9YWxpZ25tZW50IC1Xbm8t YWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyIiB9ICovCiAKIHN0cnVjdCBTIHsg aW50IGE7IGNoYXIgYjsgbG9uZyBsb25nIGM7IHNob3J0IGRbMTBdOyB9Owog c3RydWN0IFQgeyBjaGFyIGE7IGxvbmcgbG9uZyBiOyB9OwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vdWJzYW4vYWxpZ24tNy5j IGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vdWJzYW4vYWxpZ24tNy5j CmluZGV4IGVjNGU4N2Y1NmQ1Li5kZDFlOGM5MWNlZiAxMDA2NDQKLS0tIGEv Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vdWJzYW4vYWxpZ24tNy5jCisr KyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vic2FuL2FsaWduLTcu YwpAQCAtMSw2ICsxLDYgQEAKIC8qIExpbWl0IHRoaXMgdG8ga25vd24gbm9u LXN0cmljdCBhbGlnbm1lbnQgdGFyZ2V0cy4gICovCiAvKiB7IGRnLWRvIHJ1 biB7IHRhcmdldCB7IGk/ODYtKi1saW51eCogeDg2XzY0LSotbGludXgqIH0g fSB9ICovCi0vKiB7IGRnLW9wdGlvbnMgIi1PIC1mc2FuaXRpemU9YWxpZ25t ZW50IC1mbm8tc2FuaXRpemUtcmVjb3Zlcj1hbGlnbm1lbnQgLWZkdW1wLXRy ZWUtc2Fub3B0LWRldGFpbHMiIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8g LWZzYW5pdGl6ZT1hbGlnbm1lbnQgLWZuby1zYW5pdGl6ZS1yZWNvdmVyPWFs aWdubWVudCAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciAtZmR1bXAt dHJlZS1zYW5vcHQtZGV0YWlscyIgfSAqLwogLyogeyBkZy1za2lwLWlmICIi IHsgKi0qLSogfSB7ICItZmx0byAtZm5vLWZhdC1sdG8tb2JqZWN0cyIgfSB9 ICovCiAvKiB7IGRnLXNob3VsZGZhaWwgInVic2FuIiB9ICovCiAKZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vic2FuL2FsaWdu LTguYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vic2FuL2FsaWdu LTguYwppbmRleCA2MWMxY2ViNjY4Mi4uNWZlMGUwZmU5MzEgMTAwNjQ0Ci0t LSBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Vic2FuL2FsaWduLTgu YworKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi91YnNhbi9hbGln bi04LmMKQEAgLTEsNiArMSw2IEBACiAvKiBMaW1pdCB0aGlzIHRvIGtub3du IG5vbi1zdHJpY3QgYWxpZ25tZW50IHRhcmdldHMuICAqLwogLyogeyBkZy1k byBydW4geyB0YXJnZXQgeyBpPzg2LSotbGludXgqIHg4Nl82NC0qLWxpbnV4 KiB9IH0gfSAqLwotLyogeyBkZy1vcHRpb25zICItTyAtZnNhbml0aXplPWFs aWdubWVudCAtZnNhbml0aXplLXVuZGVmaW5lZC10cmFwLW9uLWVycm9yIC1m ZHVtcC10cmVlLXNhbm9wdC1kZXRhaWxzIiB9ICovCisvKiB7IGRnLW9wdGlv bnMgIi1PIC1mc2FuaXRpemU9YWxpZ25tZW50IC1mc2FuaXRpemUtdW5kZWZp bmVkLXRyYXAtb24tZXJyb3IgLVduby1hZGRyZXNzLW9mLXBhY2tlZC1tZW1i ZXIgLWZkdW1wLXRyZWUtc2Fub3B0LWRldGFpbHMiIH0gKi8KIC8qIHsgZGct c2tpcC1pZiAiIiB7ICotKi0qIH0geyAiLWZsdG8gLWZuby1mYXQtbHRvLW9i amVjdHMiIH0gfSAqLwogLyogeyBkZy1zaG91bGRmYWlsICJ1YnNhbiIgfSAq LwogCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy91YnNhbi9h bGlnbi0yLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy91YnNhbi9hbGlnbi0y LkMKaW5kZXggM2U0ZjU0ODVkMDIuLmM5N2VkZTg4MzkyIDEwMDY0NAotLS0g YS9nY2MvdGVzdHN1aXRlL2crKy5kZy91YnNhbi9hbGlnbi0yLkMKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvdWJzYW4vYWxpZ24tMi5DCkBAIC0xLDYg KzEsNiBAQAogLy8gTGltaXQgdGhpcyB0byBrbm93biBub24tc3RyaWN0IGFs aWdubWVudCB0YXJnZXRzLgogLy8geyBkZy1kbyBydW4geyB0YXJnZXQgeyBp Pzg2LSotbGludXgqIHg4Nl82NC0qLWxpbnV4KiB9IH0gfQotLy8geyBkZy1v cHRpb25zICItZnNhbml0aXplPWFsaWdubWVudCAtV2FsbCAtV25vLXVudXNl ZC12YXJpYWJsZSAtc3RkPWMrKzExIiB9CisvLyB7IGRnLW9wdGlvbnMgIi1m c2FuaXRpemU9YWxpZ25tZW50IC1XYWxsIC1Xbm8tdW51c2VkLXZhcmlhYmxl IC1Xbm8tYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyIC1zdGQ9YysrMTEiIH0K IAogdHlwZWRlZiBjb25zdCBsb25nIGludCBMOwogc3RydWN0IFMgeyBsb25n IGludCBsOyBjaGFyIGJ1ZlsxICsgc2l6ZW9mIChpbnQpICsgc2l6ZW9mIChM KV07IH0gczsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3By NTE2MjgtMTcuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMTcu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGJl OTViMjI5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy9wcjUxNjI4LTE3LmMKQEAgLTAsMCArMSwxMCBAQAorLyogUFIgYy81 MTYyOC4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1v cHRpb25zICItTyAtV25vLWluY29tcGF0aWJsZS1wb2ludGVyLXR5cGVzIiB9 ICovCisKK3N0cnVjdCBBIHsKKyAgaW50IGk7Cit9IF9fYXR0cmlidXRlX18g KChwYWNrZWQpKTsKKworbG9uZyogZjggKHN0cnVjdCBBICpwKSB7IHJldHVy biAmcC0+aTsgfQorLyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0IGluIGFu IHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9 IC4tMSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9w cjUxNjI4LTE4LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjUxNjI4LTE4 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjAz YTA0ZWZmNzVjCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvcHI1MTYyOC0xOC5jCkBAIC0wLDAgKzEsMjMgQEAKKy8qIFBSIGMv NTE2MjguICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGct b3B0aW9ucyAiLU8iIH0gKi8KKwordm9pZCBmb28gKGludCAqKTsKKworaW50 ICoKK2JhciAoaW50IG4sIGludCBrLCB2b2lkICpwdHIpCit7CisgIHN0cnVj dCBBCisgIHsKKyAgICBpbnQgY1trXTsKKyAgICBpbnQgeFtuXTsKKyAgfSBf X2F0dHJpYnV0ZV9fICgocGFja2VkLCBhbGlnbmVkICg0KSkpOworICBzdHJ1 Y3QgQSAqcCA9IChzdHJ1Y3QgQSAqKSBwdHI7CisKKyAgaW50ICpwMCwgKnAx OworICBwMCA9IHAtPng7CisgIGZvbyAocDApOworICBwMSA9ICZwLT54WzFd OworICBmb28gKHAxKTsKKyAgcmV0dXJuICZwLT54WzFdOworfQpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0xOS5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0xOS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ZmYwM2U4NWNlYQotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMTku YwpAQCAtMCwwICsxLDI2IEBACisvKiBQUiBjLzUxNjI4LiAgKi8KKy8qIHsg ZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIiB9ICov CisKK3ZvaWQgZm9vIChpbnQgKik7CisKK2ludCAqCitiYXIgKGludCBuLCBp bnQgaywgdm9pZCAqcHRyKQoreworICBzdHJ1Y3QgQQorICB7CisgICAgY2hh ciBjW2tdOworICAgIGludCB4W25dOworICB9IF9fYXR0cmlidXRlX18gKChw YWNrZWQpKTsKKyAgc3RydWN0IEEgKnAgPSAoc3RydWN0IEEgKikgcHRyOwor CisgIGludCAqcDAsICpwMTsKKyAgcDAgPSBwLT54OworLyogeyBkZy13YXJu aW5nICJtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVl IiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCisgIGZvbyAocDApOwor ICBwMSA9ICZwLT54WzFdOworLyogeyBkZy13YXJuaW5nICJtYXkgcmVzdWx0 IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAq LSotKiB9IC4tMSB9ICovCisgIGZvbyAocDEpOworICByZXR1cm4gJnAtPnhb MV07CisvKiB7IGRnLXdhcm5pbmcgIm1heSByZXN1bHQgaW4gYW4gdW5hbGln bmVkIHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0g Ki8KK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2 MjgtMjAuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMjAuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODA4ODgy ODNiNzMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy9wcjUxNjI4LTIwLmMKQEAgLTAsMCArMSwxMSBAQAorLyogUFIgYy81MTYy OC4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRp b25zICItTyAtV25vLWluY29tcGF0aWJsZS1wb2ludGVyLXR5cGVzIiB9ICov CisKK3N0cnVjdCBCIHsgaW50IGk7IH07CitzdHJ1Y3QgQyB7IHN0cnVjdCBC IGI7IH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitleHRlcm4gc3Ry dWN0IEMgKnA7CisKK2xvbmcqIGc4ICh2b2lkKSB7IHJldHVybiBwOyB9Cisv KiB7IGRnLXdhcm5pbmcgIm1heSBtYXkgcmVzdWx0IGluIGFuIHVuYWxpZ25l ZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICov CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjUxNjI4LTIx LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjUxNjI4LTIxLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMwNzdlNzJjOGQ1 Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1 MTYyOC0yMS5jCkBAIC0wLDAgKzEsMTEgQEAKKy8qIFBSIGMvNTE2MjguICAq LworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LU8gLVduby1pbmNvbXBhdGlibGUtcG9pbnRlci10eXBlcyIgfSAqLworCitz dHJ1Y3QgQiB7IGludCBpOyB9Oworc3RydWN0IEMgeyBzdHJ1Y3QgQiBiOyB9 IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZXh0ZXJuIHN0cnVjdCBD IHBbXTsKKworbG9uZyogZzggKHZvaWQpIHsgcmV0dXJuIHA7IH0KKy8qIHsg ZGctd2FybmluZyAibWF5IG1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVkIHBv aW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMjIuYyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMjIuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMWJkNWQ3OTE2MzkKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjUxNjI4 LTIyLmMKQEAgLTAsMCArMSw5IEBACisvKiBQUiBjLzUxNjI4LiAgKi8KKy8q IHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1X bm8taW5jb21wYXRpYmxlLXBvaW50ZXItdHlwZXMiIH0gKi8KKworc3RydWN0 IEIgeyBpbnQgaTsgfTsKK3N0cnVjdCBDIHsgc3RydWN0IEIgYjsgfSBfX2F0 dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2ludCogZzQgKHN0cnVjdCBDICpw KSB7IHJldHVybiAmcC0+YjsgfQorLyogeyBkZy13YXJuaW5nICJtYXkgcmVz dWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRhcmdl dCAqLSotKiB9IC4tMSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy5kZy9wcjUxNjI4LTIzLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9w cjUxNjI4LTIzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjU3MDliZTYwYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0yMy5jCkBAIC0wLDAgKzEsOSBAQAor LyogUFIgYy81MTYyOC4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwor LyogeyBkZy1vcHRpb25zICItTyAtV25vLWluY29tcGF0aWJsZS1wb2ludGVy LXR5cGVzIiB9ICovCisKK3N0cnVjdCBBIHsKKyAgaW50IGk7Cit9IF9fYXR0 cmlidXRlX18gKChwYWNrZWQpKTsKKworY2hhciogZjAgKHN0cnVjdCBBICpw KSB7IHJldHVybiAmcC0+aTsgfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvcHI1MTYyOC0yNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv cHI1MTYyOC0yNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi4zYWQ5OWNkMmYxNgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ByNTE2MjgtMjQuYwpAQCAtMCwwICsxLDEwIEBA CisvKiBQUiBjLzUxNjI4LiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1PIC1Xbm8taW5jb21wYXRpYmxlLXBvaW50 ZXItdHlwZXMiIH0gKi8KKworc3RydWN0IEEgeworICBpbnQgaTsKK30gX19h dHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzaG9ydCogZjIgKHN0cnVjdCBB ICpwKSB7IHJldHVybiAmcC0+aTsgfQorLyogeyBkZy13YXJuaW5nICJtYXkg cmVzdWx0IGluIGFuIHVuYWxpZ25lZCBwb2ludGVyIHZhbHVlIiAiIiB7IHRh cmdldCAqLSotKiB9IC4tMSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy5kZy9wcjUxNjI4LTI1LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy9wcjUxNjI4LTI1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjJmYzVjMDI4NzExCi0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvcHI1MTYyOC0yNS5jCkBAIC0wLDAgKzEsOSBA QAorLyogUFIgYy81MTYyOC4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAq LworLyogeyBkZy1vcHRpb25zICItTyAtV25vLWluY29tcGF0aWJsZS1wb2lu dGVyLXR5cGVzIiB9ICovCisKK3N0cnVjdCBCIHsgaW50IGk7IH07CitzdHJ1 Y3QgQyB7IHN0cnVjdCBCIGI7IH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkp OworCitsb25nKiBnOCAoc3RydWN0IEMgKnApIHsgcmV0dXJuIHA7IH0KKy8q IHsgZGctd2FybmluZyAibWF5IG1heSByZXN1bHQgaW4gYW4gdW5hbGlnbmVk IHBvaW50ZXIgdmFsdWUiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8K ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2 eDUxMmJ3LXZtb3ZkcXUxNi0yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9hdng1MTJidy12bW92ZHF1MTYtMi5jCmluZGV4IGE2MTYwOWM0 MGQyLi5jNmUzZWJkYzUwNyAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvYXZ4NTEyYnctdm1vdmRxdTE2LTIuYworKysgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJidy12bW92ZHF1 MTYtMi5jCkBAIC0xLDUgKzEsNSBAQAogLyogeyBkZy1kbyBydW4gfSAqLwot LyogeyBkZy1vcHRpb25zICItTzIgLW1hdng1MTJidyIgfSAqLworLyogeyBk Zy1vcHRpb25zICItTzIgLW1hdng1MTJidyAtV25vLWFkZHJlc3Mtb2YtcGFj a2VkLW1lbWJlciIgfSAqLwogLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10 YXJnZXQgYXZ4NTEyYncgfSAqLwogCiAjZGVmaW5lIEFWWDUxMkJXCmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJm LXZtb3ZkcXUzMi0yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9hdng1MTJmLXZtb3ZkcXUzMi0yLmMKaW5kZXggZjJlZGMzZGZmN2IuLjk1 YTY1N2ZjNWZmIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9hdng1MTJmLXZtb3ZkcXUzMi0yLmMKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEyZi12bW92ZHF1MzItMi5jCkBA IC0xLDUgKzEsNSBAQAogLyogeyBkZy1kbyBydW4gfSAqLwotLyogeyBkZy1v cHRpb25zICItTzIgLW1hdng1MTJmIiB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1PMiAtbWF2eDUxMmYgLVduby1hZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIi IH0gKi8KIC8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGF2eDUx MmYgfSAqLwogCiAjZGVmaW5lIEFWWDUxMkYKZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtdm1vdmRxdTY0LTIu YyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtdm1v dmRxdTY0LTIuYwppbmRleCAxNDE3Njk2NWFjZS4uOTU0YjA5MWQ5NzYgMTAw NjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUx MmYtdm1vdmRxdTY0LTIuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9hdng1MTJmLXZtb3ZkcXU2NC0yLmMKQEAgLTEsNSArMSw1IEBA CiAvKiB7IGRnLWRvIHJ1biB9ICovCi0vKiB7IGRnLW9wdGlvbnMgIi1PMiAt bWF2eDUxMmYiIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXZ4NTEy ZiAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciIgfSAqLwogLyogeyBk Zy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXZ4NTEyZiB9ICovCiAKICNk ZWZpbmUgQVZYNTEyRgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvYXZ4NTEydmwtdm1vdmRxdTE2LTIuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMnZsLXZtb3ZkcXUxNi0yLmMK aW5kZXggNDVhZTgzZDQ1NTIuLjgxNDY1ZjhkOWEwIDEwMDY0NAotLS0gYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC12bW92ZHF1 MTYtMi5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2 eDUxMnZsLXZtb3ZkcXUxNi0yLmMKQEAgLTEsNSArMSw1IEBACiAvKiB7IGRn LWRvIHJ1biB9ICovCi0vKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWF2eDUxMmJ3 IC1tYXZ4NTEydmwiIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXZ4 NTEyYncgLW1hdng1MTJ2bCAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJl ciIgfSAqLwogLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXZ4 NTEydmwgfSAqLwogLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQg YXZ4NTEyYncgfSAqLwogCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9hdng1MTJ2bC12bW92ZHF1MzItMi5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEydmwtdm1vdmRxdTMyLTIu YwppbmRleCA0YjkyOGQwY2Q0Mi4uMTkzOTA2NjRiZDAgMTAwNjQ0Ci0tLSBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMnZsLXZtb3Zk cXUzMi0yLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv YXZ4NTEydmwtdm1vdmRxdTMyLTIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIHsg ZGctZG8gcnVuIH0gKi8KLS8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXZ4NTEy dmwiIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXZ4NTEydmwgLVdu by1hZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIiIH0gKi8KIC8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGF2eDUxMnZsIH0gKi8KIAogI2RlZmlu ZSBBVlg1MTJWTApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvYXZ4NTEydmwtdm1vdmRxdTY0LTIuYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMnZsLXZtb3ZkcXU2NC0yLmMKaW5k ZXggMTg2M2VkMzYxNmYuLmFlYTBjMTJhNWZmIDEwMDY0NAotLS0gYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC12bW92ZHF1NjQt Mi5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUx MnZsLXZtb3ZkcXU2NC0yLmMKQEAgLTEsNSArMSw1IEBACiAvKiB7IGRnLWRv IHJ1biB9ICovCi0vKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWF2eDUxMnZsIiB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWF2eDUxMnZsIC1Xbm8tYWRk cmVzcy1vZi1wYWNrZWQtbWVtYmVyIiB9ICovCiAvKiB7IGRnLXJlcXVpcmUt ZWZmZWN0aXZlLXRhcmdldCBhdng1MTJ2bCB9ICovCiAKICNkZWZpbmUgQVZY NTEyVkwKZGlmZiAtLWdpdCBhL2xpYmdjYy91bndpbmQtcGUuaCBiL2xpYmdj Yy91bndpbmQtcGUuaAppbmRleCBkZDVhZTk1ZmMyYy4uMDVjMmZiNGRkNTAg MTAwNjQ0Ci0tLSBhL2xpYmdjYy91bndpbmQtcGUuaAorKysgYi9saWJnY2Mv dW53aW5kLXBlLmgKQEAgLTE3Nyw2ICsxNzcsOSBAQCByZWFkX3NsZWIxMjgg KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAsIF9zbGViMTI4X3QgKnZhbCkKICAg IFRoZSBmdW5jdGlvbiByZXR1cm5zIFAgaW5jcmVtZW50ZWQgcGFzdCB0aGUg dmFsdWUuICBCQVNFIGlzIGFzIGdpdmVuCiAgICBieSBiYXNlX29mX2VuY29k ZWRfdmFsdWUgZm9yIHRoaXMgZW5jb2RpbmcgaW4gdGhlIGFwcHJvcHJpYXRl IGNvbnRleHQuICAqLwogCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gK KyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdhZGRyZXNzLW9m LXBhY2tlZC1tZW1iZXIiCisKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy ICoKIHJlYWRfZW5jb2RlZF92YWx1ZV93aXRoX2Jhc2UgKHVuc2lnbmVkIGNo YXIgZW5jb2RpbmcsIF9VbndpbmRfUHRyIGJhc2UsCiAJCQkgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICpwLCBfVW53aW5kX1B0ciAqdmFsKQpAQCAtMjcw LDYgKzI3Myw4IEBAIHJlYWRfZW5jb2RlZF92YWx1ZV93aXRoX2Jhc2UgKHVu c2lnbmVkIGNoYXIgZW5jb2RpbmcsIF9VbndpbmRfUHRyIGJhc2UsCiAgIHJl dHVybiBwOwogfQogCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorCiAj aWZuZGVmIE5PX0JBU0VfT0ZfRU5DT0RFRF9WQUxVRQogCiAvKiBMaWtlIHJl YWRfZW5jb2RlZF92YWx1ZV93aXRoX2Jhc2UsIGJ1dCBnZXQgdGhlIGJhc2Ug ZnJvbSB0aGUgY29udGV4dAotLSAKMi4xOS4yCgo= --000000000000939e90057d6373cd--