From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 96C3C3858298 for ; Thu, 10 Nov 2022 10:39:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 96C3C3858298 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=ibm.com Received: from pps.filterd (m0098416.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 2AA8IiKb010785; Thu, 10 Nov 2022 10:39:10 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : mime-version; s=pp1; bh=h9YEcasrK6z+hezwwxvbTDMSegsw1BJcircRbUlT6h0=; b=W/7BpeSrvIK9pbxPfRt951lBv2bf58o+qbkQl1t5INcvie1GQWNe4/r4s3AxRzGay9tP 80T1nnge+yks9bAmIr0fBJec36qylbGNhi1SS3HnvvXFxPt9LnYq9HoUgv/VSYGegr8V u8alClmUNcNMtNSja+gFofXgzsxZL5PR2Mmec+D+PH25SpeEtQ8EgKIA7kXP/Lwd+k8m gJrwrbbvLIhc4vsxvVYLkfA1olwbGBJ8FLGtj152jJ1hJM+LiUnAFjOVPyphYF4Pd4ad zNsRJtgd7VctvOJ8KWGIbQ9UlfHPeIirZf05jtphasPp1tEkCbrssZKVp9jtKbgMfv/+ PA== Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2177.outbound.protection.outlook.com [104.47.56.177]) by mx0b-001b2d01.pphosted.com (PPS) with ESMTPS id 3krwp23rn2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 10 Nov 2022 10:39:09 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bzUwL7NGqgjSxZLtHMPNIekP2SQraPq0vR2paH5vQvdMtkW1XHhCPP3NZHVRm8qjEyn4MP79TKV6gnMODO4KvEqB7dfs6gtg3vyURd+OQog/j9jAT4ClTwlShjHFo1PSNxwtXp2CgAze89vMbK+c6SsGZnd8YFw8dBpT5lrbB/b4JZoeFQrzjxMDWi9jgJ2ukiSlK1xj/3S1hY0IN6+zmgF0DTdpl3n/vGf5COBERMznDS6WfASO7EvrpLu9CNAc8Ze8EjeyF6NjS1zJxUz5+pQpK+fLg0iYFv2PiuK+2T8zIJ97PH29i+w+qAsp7T4kcTEogtHPefi4Y+EKTkYQpA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=h9YEcasrK6z+hezwwxvbTDMSegsw1BJcircRbUlT6h0=; b=D4UzO+ETN3QI3Kpe9m0B/26cf7uoJ36pwoFV32uQux4FYD0Hhnx9FH89Y/jOzUFkPDFbydQA/oVOkfid8T8JxTBROdxPH6Td3aolZx/T6GFNIH900oyIBlB6Zf7+2uO8xJ9acaMLKWKgMWztmeoSUYfH7t8/ut0A8h2jAHBvzyBYKsRVQOD2TLxTfaIvXIAmzn/UONv6jlvHoEnUwvL0JFLb/K4A3+eWxOMCVCYgEXMqTIgm0GXntR/nOUW4ZpW+rWHPqO7DzuosWW8ZNL6OPVoWZs+7maUIPEVS7ImeG+a+Or6uxA6I3XABT4BgNOogcnXpCT9ww8JRr+y8qKFh/Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ibm.com; dmarc=pass action=none header.from=ibm.com; dkim=pass header.d=ibm.com; arc=none Received: from CH2PR15MB3544.namprd15.prod.outlook.com (2603:10b6:610:5::26) by PH0PR15MB4213.namprd15.prod.outlook.com (2603:10b6:510:29::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.13; Thu, 10 Nov 2022 10:39:06 +0000 Received: from CH2PR15MB3544.namprd15.prod.outlook.com ([fe80::4b0:172e:c48:151d]) by CH2PR15MB3544.namprd15.prod.outlook.com ([fe80::4b0:172e:c48:151d%7]) with mapi id 15.20.5791.026; Thu, 10 Nov 2022 10:39:06 +0000 From: Aditya Kamath1 To: Ulrich Weigand , "simark@simark.ca" , "gdb-patches@sourceware.org" CC: Sangamesh Mallayya Subject: Re: [PATCH] Enable multi process debugging for AIX Thread-Topic: [PATCH] Enable multi process debugging for AIX Thread-Index: AQHYtiqs7fBWvNWu7U6EFq8QRxtmC64V4wdUgA4pNoCABnmrI4ABP6GAgAymlik= Date: Thu, 10 Nov 2022 10:39:06 +0000 Message-ID: References: <44ad453e-6196-d334-312f-d5d0414f4476@simark.ca> <709f1a28ed9d4b0d4aac5cb6d6946e2de452a3ec.camel@de.ibm.com> In-Reply-To: Accept-Language: en-IN, en-US Content-Language: en-IN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH2PR15MB3544:EE_|PH0PR15MB4213:EE_ x-ms-office365-filtering-correlation-id: 4e5b3555-d2af-45b4-b2a0-08dac307cac8 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Mbuk9oq4NrqG8xzy4UOnAcffzXVdka4mDiDcP6EUXpb6XFtqxZ4b2YrTppBYmtTiwAs84hjV1OUWTgcFKfdNL4a+CJDIazhHuDmvfYl24pIf2o27LWmWrBo4p3p+kHoTEBcg+zdb2MVk+fxQtO0X4WTFrET2+4EBGY4IT4y7Ts2Vg6DxvDHTrqR4pKtlKVbtvbZ/mDjeoO4gY8SlfaYLJYGO8GC7LhVpc4Mfk2INIaWMxJSYPUqs11JjLF4KIN351WPvA5mnSI1i7IS7FVP9zuvMD9XlW/Z0GSBOr12K5TdB+9K7bUkGeYhEKJHgLItbtyA5bmIqebmyAj0upW7n8bGOHc1PTs12IHnJXdzVcXB5Kl4U8z4aRi3rlQWzEqMa794LHC3d9LE2/yXSbq5jGwmSjBxsonSu2LaZxltwZtpSZCzvbh7GHp6ETf53k5DA0zthc03SnauCxtRRNkIJcFVRlRCIgA4Qg/M4xTNv50h+1B4lovr/y1ZBgvuxkWCf3jAhNOhAIl4yGpbGqwNCCKUza2/Gip5spgA4ht3EW2jQUoeMoJQ7DNpSS7iRdqML/OKxyx9Oy9wTQDkqLPQZsvNoVLASfD/yIQAF8jrMq5HstDsQGfz8alerw8oWREAxRD7VqyBlClAe15FsRzZORc61+hxvQZUUis5fuIMq5Rktila6yKl7mYBhfERTPzvzU/ics7AyP5tOve/4Fd4lmwxCTnY+GXpnTH2vEPCaQttisQzMwFaNfxYsFYLwTsRdqkC2vPi7RKqJEQDuvkxK/w8BFxftV5Xj13ju8rjsy422HVslUwwENVmJI8c/QrW+Ysxu2NxVukydota88IA1Fg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR15MB3544.namprd15.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(136003)(366004)(39860400002)(396003)(346002)(376002)(451199015)(38070700005)(71200400001)(99936003)(83380400001)(8936002)(52536014)(15974865002)(122000001)(166002)(38100700002)(19627405001)(966005)(316002)(53546011)(7696005)(6506007)(8676002)(91956017)(66946007)(76116006)(4326008)(26005)(66556008)(66476007)(9686003)(66446008)(64756008)(478600001)(33656002)(41300700001)(86362001)(110136005)(2906002)(186003)(5660300002)(55016003)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?HF6APrGhuTF1yBj2lY5Y18avnxxpa650lQuccl6D73jKcu3VNzA3Bc4Rjchz?= =?us-ascii?Q?wbbbN3eAaG2+AiLEou13NE9CD6ZD1wWvLbMVJvdJu5PvKJUMEe/UJH9kq/aG?= =?us-ascii?Q?/VnU5fVgfqXWzC4ALLvImcVSkFo7m6EpGHxk3xOektm7NckYrMS790lnLNBv?= =?us-ascii?Q?Sb1OMF1TTo2Cb/yEEFTS7hibZqYymo7/ZLvvb7PZkjxBGax5mBLg0ZiYPSB3?= =?us-ascii?Q?txn+EPVujS5ajlZyc/X+TVtIAZmtq78vEYG2atz/+xHvdYxsRpSpgWqdB6RX?= =?us-ascii?Q?tb4+09U0hiSvKX6lduaZ9HwRHXT6gOl9fBRL5Ji1Mi69pEd47ml0njopRNVz?= =?us-ascii?Q?kzgH7mhsi7P8tEliAo0AQvlNCOTRUsklgmZ1SVaEvC8023pkGwwJuiaPF0nn?= =?us-ascii?Q?DYR/fhFSmQsKQMIT2hLw0c5XmrI8N1GaSo2N7oP6pHxW/Cmkanf/sY88fZTE?= =?us-ascii?Q?I5ofchw0ewPZ3oHp4kaYnYy7GpCknTf3kb7iLawKxOf9MEuKf0P+lfUhVqTr?= =?us-ascii?Q?NvCfxrHNj0FDbr5Rq7a22cVZj9yQCBYUIyBgOfLa5ShrVrcnhWEbZLK6RReX?= =?us-ascii?Q?/kH78PWj7bOALWumv3/0URiNkcRzG9PKA5r7X96wWkB4MI9VJj3aiTKh97pC?= =?us-ascii?Q?UbX1hSQx0mt458zkSDUwQgG7G8NgLt/jThUAbvRzIU45cTsx4Mm8/ZN/iwAz?= =?us-ascii?Q?f4WAMUl6kEdpFeCSaWH+66L/ul+pSE+n4PczXLS/ljrax/VSBGZk/d8Ly6aO?= =?us-ascii?Q?bHzTdMNYV4aNNS5yjmXb543RO+jWlqaB9pMt7pfBLt+jMGvza0kkfVKWKe63?= =?us-ascii?Q?jY5Y9km5xrAZzAAkQfnSUxQWkFLIHtaTmbfM9ke0CriKZJyvqDqkmvvCoij3?= =?us-ascii?Q?1sj9gHxtHEQQeDQ38OYJ8EB1wznkTNcIiTUILg5EnxrBz0R1jZSzpdgZnpUG?= =?us-ascii?Q?oBDguioGxY7dYyRBaz8J3K8EvOMtQxLh/+1+M+Ei13jYj0oIP2DfJcASjvsT?= =?us-ascii?Q?4pzT5ZKcuHpA3KNa8yGP2Gb8GBivAdPznHjHQaus36PqXxEflJ880G6UVfM3?= =?us-ascii?Q?BRWwgf6q388nHZS7vYw1hiqgY9RuNwt+22EpkArKgFgRwk178MdWJ4lfQ0aG?= =?us-ascii?Q?hXziZGih/vrBZafx8Vp/CN9Q6PMkbIx5LN/QAqd77g0itlweXf1dws80p+zc?= =?us-ascii?Q?AJDsw5YNfbbcEtfClGyIb8+oXIVUS+ABAlVyuVniRhY8xxA6zzZ1oQ6uOCa2?= =?us-ascii?Q?D1dDv+HQDgi38ivUxjFx0oqLZBnR3/UytZqWRSZMZu4RM3d9DIZQocu9mbQ0?= =?us-ascii?Q?zTJdTkWv8CwwcjGyeYmil67P05YgTzufs7WoknRDgopd7XvUBi3VevkTrfC7?= =?us-ascii?Q?ko8H9ZfajqzSOPjmetW/cXFsOUZuTdxcyJHJ6VI1RwNXm4FzQAvuFkStg59F?= =?us-ascii?Q?FSYE9sucLBokovoeuBxv9WNEzOJoLeEAZm1hBPUG9Cu19uhSdKKHS7GJhj4h?= =?us-ascii?Q?WuwdjEqEI9O4dldjYGEDLT6etoMOv9fkrrLgMTv5qXCUXMJ/Lh4/f/L2VYRc?= =?us-ascii?Q?TsTlaN4CzrsrxgmTMR3pIxJfc2l3wSjF+TF7xF51?= Content-Type: multipart/mixed; boundary="_004_CH2PR15MB35441E85211E00CE4305FE0CD6019CH2PR15MB3544namp_" X-OriginatorOrg: ibm.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR15MB3544.namprd15.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4e5b3555-d2af-45b4-b2a0-08dac307cac8 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2022 10:39:06.0528 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: fcf67057-50c9-4ad4-98f3-ffca64add9e9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: S06vnIdX5mNsgZ+baD8nrpLhERwAI8ZlTzw5ERm7aFT54Gt6iB0tsVCk5SSGVRlp6JCJ+z1TMqah+fC3zNaIeA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR15MB4213 X-Proofpoint-GUID: xJwtKS99j8kcDjFpJAnmL4Cu9HJVKgKT X-Proofpoint-ORIG-GUID: xJwtKS99j8kcDjFpJAnmL4Cu9HJVKgKT X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-11-10_07,2022-11-09_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 mlxscore=0 adultscore=0 priorityscore=1501 malwarescore=0 impostorscore=0 suspectscore=0 lowpriorityscore=0 mlxlogscore=999 phishscore=0 bulkscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2210170000 definitions=main-2211100078 X-Spam-Status: No, score=-3.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,HTML_MESSAGE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP,T_KAM_HTML_FONT_INVALID autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --_004_CH2PR15MB35441E85211E00CE4305FE0CD6019CH2PR15MB3544namp_ Content-Type: multipart/alternative; boundary="_000_CH2PR15MB35441E85211E00CE4305FE0CD6019CH2PR15MB3544namp_" --_000_CH2PR15MB35441E85211E00CE4305FE0CD6019CH2PR15MB3544namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Ulrich and Simon, Please find attached the patch [See: 0001-Enable-multi-process-debugging-fo= r-AIX.patch] I have taken care of parent child relationship. See find_my_aix_parent () f= unction. You can refer the link https://www.ibm.com/docs/en/aix/7.2?topic= =3Dg-getprocs-subroutine for the documentation of the same. I have also taken care of what if break points hit in other threads while o= nly a child or a parent event is reported in another thread as you mentione= d Ulrich or any other event. [You can refer the output I have pasted below]= . The while loop will take care. getprocs Subroutine - IBM Note: The ProcessBuffer parameter of getprocs subroutine contains two struc= t rusage fields named pi_ru and pi_cru.Each of these fields contains two st= ruct timeval fields named ru_utime and ru_stime.The tv_usec field in both o= f the struct timeval contain nanoseconds instead of microseconds. These val= ues cone from the struct user fields named U_ru and U_cru. www.ibm.com >I understand W_SFWTED is not a bit mask, but simply a value. >So shouldn't you just test for "status =3D=3D W_SFWTED"? Also, >I'm not sure where the "& 0xff" comes into play. What are >the contents of the high bits? The AIX documentation doesn't >seem to say ... So, if there is a fork event then my W_SFWTED =3D 0x7e =3D 0x01111110 bits = is set in my status flag. The other bits represent other things in the stat= us flag. Therefore, I eliminate other bits with AND operation with 0xff and= see only if my first 8 bits are set.. You were right with this "status =3D= =3D W_SFWTED". I corrected it. Let me know what you think.. Hope this patch works.. Have a nice day ahead. Thanks and regards, Aditya. -------------------------------------------------------------- Consider the program #include #include #include #include #include pthread_barrier_t barrier; #define NUM_THREADS 2 void * thread_function (void *arg) { /* This ensures that the breakpoint is only hit after both threads are created, so the test can always switch to the non-event thread when the breakpoint triggers. */ pthread_barrier_wait (&barrier); pid_t child; child =3D fork (); if (child > 0) printf ("I am parent \n"); else{ printf (" Iam child \n"); child =3D fork (); if (child > 0) printf ("From child I became a parent \n"); else printf ("I am grandchild \n"); } while (1); /* break here */ } int main (void) { int i; alarm (300); pthread_barrier_init (&barrier, NULL, NUM_THREADS); for (i =3D 0; i < NUM_THREADS; i++) { pthread_t thread; int res; res =3D pthread_create (&thread, NULL, thread_function, NULL); assert (res =3D=3D 0); } while (1) sleep (1); return 0; } Output:- Reading symbols from /home/XYZ/gdb_tests/ultimate-multi-thread-fork... (gdb) b thread_function Breakpoint 1 at 0x100006f8: file /home/XYZ/gdb_tests/ultimate-multi-thread-= fork.c, line 18. (gdb) set detach-on-fork off (gdb) r Starting program: /home/XYZ/gdb_tests/ultimate-multi-thread-fork [New Thread 1] [New Thread 258] [Switching to Thread 258] Thread 3 hit Breakpoint 1, thread_function (arg=3D0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:18 18 pthread_barrier_wait (&barrier); (gdb) c Continuing. [New Thread 515] [Switching to Thread 515] Thread 4 hit Breakpoint 1, thread_function (arg=3Dwarning: (Internal error:= pc 0x0 in read in psymtab, but not in symtab.) 0x0) at /home/XYZ/gdb_tests/ultimate-multi-thread-fork.c:18 18 pthread_barrier_wait (&barrier); (gdb) c Continuing. [New inferior 2 (process 18612656)] warning: "/usr/lib/libpthreads.a": member "shr_comm.o" missing. warning: "/usr/lib/libcrypt.a": member "shr.o" missing. warning: "/usr/lib/libpthread.a": member "shr_xpg5.o" missing. warning: "/usr/lib/libc.a": member "shr.o" missing. warning: Could not load shared library symbols for 4 libraries, e.g. /usr/l= ib/libpthreads.a(shr_comm.o). Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? I am parent [New inferior 3 (process 8454632)] warning: "/usr/lib/libpthreads.a": member "shr_comm.o" missing. warning: "/usr/lib/libcrypt.a": member "shr.o" missing. warning: "/usr/lib/libpthread.a": member "shr_xpg5.o" missing. warning: "/usr/lib/libc.a": member "shr.o" missing. warning: Could not load shared library symbols for 4 libraries, e.g. /usr/l= ib/libpthreads.a(shr_comm.o). Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. [Switching to process 23462236] 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) ________________________________ From: Ulrich Weigand Sent: 02 November 2022 14:26 To: simark@simark.ca ; Aditya Kamath1 ; gdb-patches@sourceware.org Cc: Sangamesh Mallayya Subject: Re: [PATCH] Enable multi process debugging for AIX Aditya Kamath1 wrote: >>Is there any other way of figuring out what the parent process of >>the new child is? Maybe you should just do that when you get the >>child event. > >I fully did not get the above suggestion " Maybe you should just do that w= hen you get the >child event ". Kindly let me know what you are trying to tell me in this c= ontext. The last iteration of you patch simply has a list of "pending parent" and "pending child" PIDs. If you get a fork event for the child, and there is *any* parent PID in the "pending" list, you automatically assume that this is the parent of *this* child. I'm concerned that this may not always be true. For example, if you are already debugging multiple processes, and *two* of those fork at the same time, you'll be getting four ptrace events in GDB - two events for the two parent processes, and two events for the two new child processes. If this happens, you'll need to verify which child is actually associated with *which* parent. As you note, on other platforms this relationship is reported as part of the ptrace event directly, and this is apparently not the case on AIX. However, the OS of course still knows what the parent process of each of the child processes is - so I guess there should be *some* way to find this out from within GDB. (E.g. in Linux you could get at that information by reading some /proc files.) Bye, Ulrich --_000_CH2PR15MB35441E85211E00CE4305FE0CD6019CH2PR15MB3544namp_-- --_004_CH2PR15MB35441E85211E00CE4305FE0CD6019CH2PR15MB3544namp_ Content-Type: application/octet-stream; name="0001-Enable-multi-process-debugging-for-AIX.patch" Content-Description: 0001-Enable-multi-process-debugging-for-AIX.patch Content-Disposition: attachment; filename="0001-Enable-multi-process-debugging-for-AIX.patch"; size=9396; creation-date="Thu, 10 Nov 2022 10:38:52 GMT"; modification-date="Thu, 10 Nov 2022 10:39:05 GMT" Content-Transfer-Encoding: base64 RnJvbSA4YjdhMGVlNzUzZjhiYzg0Zjg3MjA2MmM4MDEyNmU2YjA0ZjU3Mzg0 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBZGl0eWEgVmlkeWFk aGFyIEthbWF0aCA8QWRpdHlhLkthbWF0aDFAaWJtLmNvbT4KRGF0ZTogVGh1 LCAxMCBOb3YgMjAyMiAwMzo1NTo1NiAtMDYwMApTdWJqZWN0OiBbUEFUQ0hd IEVuYWJsZSBNdWx0aSBwcm9jZXNzIGRlYnVnZ2luZyBmb3IgQUlYLgoKLS0t CiBnZGIvcnM2MDAwLWFpeC1uYXQuYyB8IDI0NyArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tCiAxIGZpbGUgY2hhbmdlZCwg MjI3IGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL2dkYi9yczYwMDAtYWl4LW5hdC5jIGIvZ2RiL3JzNjAwMC1haXgtbmF0 LmMKaW5kZXggY2IxNDE0Mjc2OTYuLjM2YWJmMTg2YmEwIDEwMDY0NAotLS0g YS9nZGIvcnM2MDAwLWFpeC1uYXQuYworKysgYi9nZGIvcnM2MDAwLWFpeC1u YXQuYwpAQCAtNTQsNiArNTQsMTAgQEAKICNpbmNsdWRlIDxzeXMvbGRyLmg+ CiAjaW5jbHVkZSA8c3lzL3N5c3RlbWNmZy5oPgogCisvKiBIZWFkZXIgZmls ZXMgZm9yIGdldHRpbmcgcHBpZCBpbiBBSVggb2YgYSBjaGlsZCBwcm9jZXNz LiAgKi8KKyNpbmNsdWRlIDxwcm9jaW5mby5oPgorI2luY2x1ZGUgPHN5cy90 eXBlcy5oPgorIAogLyogT24gQUlYNC4zKywgc3lzL2xkci5oIHByb3ZpZGVz IGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBzdHJ1Y3QgbGRfaW5mbyBmb3IKICAg IGRlYnVnZ2luZyAzMi1iaXQgYW5kIDY0LWJpdCBwcm9jZXNzZXMuICBEZWZp bmUgYSB0eXBlZGVmIGFuZCBtYWNyb3MgZm9yCiAgICBhY2Nlc3NpbmcgZmll bGRzIGluIHRoZSBhcHByb3ByaWF0ZSBzdHJ1Y3R1cmVzLiAgKi8KQEAgLTkx LDEwICs5NSwxMyBAQCBjbGFzcyByczYwMDBfbmF0X3RhcmdldCBmaW5hbCA6 IHB1YmxpYyBpbmZfcHRyYWNlX3RhcmdldAogCiAgIHB0aWRfdCB3YWl0IChw dGlkX3QsIHN0cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyAqLCB0YXJnZXRfd2Fp dF9mbGFncykgb3ZlcnJpZGU7CiAKKyAgLyogRm9yayBkZXRlY3Rpb24gcmVs YXRlZCBmdW5jdGlvbnMsIEZvciBhZGRpbmcgbXVsdGkgcHJvY2VzcyBkZWJ1 Z2dpbmcKKyAgICAgc3VwcG9ydC4gICovCisgIHZvaWQgZm9sbG93X2Zvcmsg KGluZmVyaW9yICosIHB0aWRfdCwgdGFyZ2V0X3dhaXRraW5kLCBib29sLCBi b29sKSBvdmVycmlkZTsKKwogcHJvdGVjdGVkOgogCi0gIHZvaWQgcG9zdF9z dGFydHVwX2luZmVyaW9yIChwdGlkX3QgcHRpZCkgb3ZlcnJpZGUKLSAgeyAv KiBOb3RoaW5nLiAgKi8gfQorICB2b2lkIHBvc3Rfc3RhcnR1cF9pbmZlcmlv ciAocHRpZF90IHB0aWQpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICBlbnVt IHRhcmdldF94ZmVyX3N0YXR1cwpAQCAtMTA3LDYgKzExNCwxMjAgQEAgY2xh c3MgcnM2MDAwX25hdF90YXJnZXQgZmluYWwgOiBwdWJsaWMgaW5mX3B0cmFj ZV90YXJnZXQKIAogc3RhdGljIHJzNjAwMF9uYXRfdGFyZ2V0IHRoZV9yczYw MDBfbmF0X3RhcmdldDsKIAorLyogVGhlIGJlbG93IGRlY2xhcmF0aW9uIGlz IHRvIHRyYWNrIG51bWJlciBvZiB0aW1lcywgcGFyZW50IGhhcworICAgcmVw b3J0ZWQgZm9yayBldmVudCBiZWZvcmUgaXRzIGNoaWxkcmVuLiAgKi8KKwor c3RhdGljIHN0ZDo6bGlzdDxwaWRfdD4gYWl4X3BlbmRpbmdfcGFyZW50Owor CisvKiBUaGUgYmVsb3cgZGVjbGFyYXRpb24gaXMgZm9yIGEgY2hpbGQgcHJv Y2VzcyBldmVudCB0aGF0CisgICBpcyByZXBvcnRlZCBiZWZvcmUgaXRzIGNv cnJlc3BvbmRpbmcgcGFyZW50IHByb2Nlc3MgaW4KKyAgIHRoZSBldmVudCBv ZiBhIGZvcmsgKCkuICAqLworCitzdGF0aWMgc3RkOjpsaXN0PHBpZF90PiBh aXhfcGVuZGluZ19jaGlsZHJlbjsKKworc3RhdGljIHZvaWQKK2FpeF9yZW1l bWJlcl9jaGlsZCAocGlkX3QgcGlkKQoreworICBhaXhfcGVuZGluZ19jaGls ZHJlbi5wdXNoX2Zyb250IChwaWQpOworfQorCitzdGF0aWMgdm9pZAorYWl4 X3JlbWVtYmVyX3BhcmVudCAocGlkX3QgcGlkKQoreworICBhaXhfcGVuZGlu Z19wYXJlbnQucHVzaF9mcm9udCAocGlkKTsKK30KKworLyogVGhpcyBmdW5j dGlvbiByZXR1cm5zIGEgcGFyZW50IG9mIGEgY2hpbGQgcHJvY2Vzcy4gICov CisKK3N0YXRpYyBwaWRfdAorZmluZF9teV9haXhfcGFyZW50IChwaWRfdCBj aGlsZF9waWQpCit7CisgIHN0cnVjdCBwcm9jc2luZm8gUHJvY2Vzc0J1ZmZl cjE7CisgIGludCBQcm9jZXNzU2l6ZTE7CisgIHN0cnVjdCBmZHNpbmZvIEZp bGVCdWZmZXIxOworICBpbnQgRmlsZVNpemUxOworICBwaWRfdCBJbmRleFBv aW50ZXIxID0gMDsKKyAgaW50IENvdW50ID0gMTsKKyAgd2hpbGUgKDEpCisg IHsKKyAgICBpZiAoZ2V0cHJvY3MgKCZQcm9jZXNzQnVmZmVyMSwgc2l6ZW9m IChQcm9jZXNzQnVmZmVyMSksCisgICAgICAgICZGaWxlQnVmZmVyMSwgc2l6 ZW9mIChGaWxlQnVmZmVyMSksICAmSW5kZXhQb2ludGVyMSwKKyAgICAgICAg Q291bnQpICE9IDEpCisgICAgICBicmVhazsgCisgICAgIAorICAgIGlmIChj aGlsZF9waWQgPT0gUHJvY2Vzc0J1ZmZlcjEucGlfcGlkKQorICAgICAgcmV0 dXJuIFByb2Nlc3NCdWZmZXIxLnBpX3BwaWQ7CisgIH0KKyAgcmV0dXJuIDA7 Cit9CisKKy8qIEluIHRoZSBiZWxvdyBmdW5jdGlvbiB3ZSBjaGVjayBpZiB0 aGVyZSB3YXMgYW55IGNoaWxkCisgICBwcm9jZXNzIHBlbmRpbmcuICBJZiBp dCBleGlzdHMgd2UgcmV0dXJuIGl0IGZyb20gdGhlCisgICBsaXN0LCBvdGhl cndpc2Ugd2UgcmV0dXJuIGEgbnVsbC4gICovCisKK3N0YXRpYyBwaWRfdAor aGFzX215X2FpeF9jaGlsZF9yZXBvcnRlZCAocGlkX3QgcGFyZW50X3BpZCkK K3sKKyAgYXV0byBpdCA9IGFpeF9wZW5kaW5nX2NoaWxkcmVuLmJlZ2luICgp OworICBwaWRfdCBjaGlsZDsKKyAgcGlkX3QgbXlfcGFyZW50OworICB3aGls ZSAoaXQgIT0gYWl4X3BlbmRpbmdfY2hpbGRyZW4uZW5kICgpKQorICB7Cisg ICAgY2hpbGQgPSAqaXQ7CisgICAgbXlfcGFyZW50ID0gZmluZF9teV9haXhf cGFyZW50IChjaGlsZCk7CisgICAgaWYgKG15X3BhcmVudCA9PSBwYXJlbnRf cGlkKQorICAgIHsKKyAgICAgIGFpeF9wZW5kaW5nX2NoaWxkcmVuLmVyYXNl IChpdCk7CisgICAgICByZXR1cm4gY2hpbGQ7CisgICAgfQorICAgIGl0Kys7 CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIEluIHRoZSBiZWxvdyBmdW5j dGlvbiB3ZSBjaGVjayBpZiB0aGVyZSB3YXMgYW55IHBhcmVudCAKKyAgIHBy b2Nlc3MgcGVuZGluZy4gIElmIGl0IGV4aXN0cyB3ZSByZXR1cm4gaXQgZnJv bSB0aGUKKyAgIGxpc3QsIG90aGVyd2lzZSB3ZSByZXR1cm4gYSBudWxsLiAg Ki8KKworc3RhdGljIHBpZF90CitoYXNfbXlfYWl4X3BhcmVudF9yZXBvcnRl ZCAocGlkX3QgY2hpbGRfcGlkKQoreworICBhdXRvIGl0ID0gYWl4X3BlbmRp bmdfcGFyZW50LmJlZ2luICgpOworICBwaWRfdCBwYXJlbnQ7CisgIHBpZF90 IG15X3BhcmVudCA9IGZpbmRfbXlfYWl4X3BhcmVudCAoY2hpbGRfcGlkKTsK KyAgd2hpbGUgKGl0ICE9IGFpeF9wZW5kaW5nX3BhcmVudC5lbmQgKCkpCisg IHsKKyAgICBwYXJlbnQgPSAqaXQ7CisgICAgaWYgKG15X3BhcmVudCA9PSBw YXJlbnQpCisgICAgeworICAgICAgYWl4X3BlbmRpbmdfcGFyZW50LmVyYXNl IChpdCk7CisgICAgICByZXR1cm4gcGFyZW50OworICAgIH0KKyAgICBpdCsr OworICB9CisgIHJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGNo ZWNrcyBpZiB0aGVyZSB3YXMgYSBmb3JrICgpIGV2ZW50LiAgKi8KKworc3Rh dGljIGJvb2wKK2RpZF9haXhfaW5mZXJpb3JfZm9yayAoaW50IHN0YXR1cykK K3sKKyAgLyogSWYgbXVsdGktcHJvY2VzcyBkZWJ1ZyBtb2RlIGlzIGVuYWJs ZWQsIHRoZSBzdGF0dXMKKyAgICAgbG9jYXRpb24gaXMgc2V0IHRvIFdfU0ZX VEVELiAgKi8KKworICBzdGF0dXMgPSBzdGF0dXMgJiAweGZmOworCisgIC8q IEVsaW1pbmF0ZSB0aGUgbGFzdCBmZXcgYml0cy4gSWYgdGhlIFdfU0ZXVEVE IGlzIHNldAorICAgICB3aGljaCBpcyBlcXVhbCB0byAweDdlLCBpdCBpcyBh IGZvcmsgZXZlbnQgb3RoZXJ3aXNlCisgICAgIGl0IGlzIG5vdC4gICovCisK KyAgaWYgKHN0YXR1cyAhPSBXX1NGV1RFRCkKKyAgICByZXR1cm4gZmFsc2U7 CisgIGVsc2UKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLyogR2l2ZW4gUkVH Tk8sIGEgZ2RiIHJlZ2lzdGVyIG51bWJlciwgcmV0dXJuIHRoZSBjb3JyZXNw b25kaW5nCiAgICBudW1iZXIgc3VpdGFibGUgZm9yIHVzZSBhcyBhIHB0cmFj ZSgpIHBhcmFtZXRlci4gIFJldHVybiAtMSBpZgogICAgdGhlcmUncyBubyBz dWl0YWJsZSBtYXBwaW5nLiAgQWxzbywgc2V0IHRoZSBpbnQgcG9pbnRlZCB0 byBieQpAQCAtMTg3LDYgKzMwOCw0NyBAQCByczYwMDBfcHRyYWNlNjQgKGlu dCByZXEsIGludCBpZCwgbG9uZyBsb25nIGFkZHIsIGludCBkYXRhLCB2b2lk ICpidWYpCiAgIHJldHVybiByZXQ7CiB9CiAKK3ZvaWQgcnM2MDAwX25hdF90 YXJnZXQ6OnBvc3Rfc3RhcnR1cF9pbmZlcmlvciAocHRpZF90IHB0aWQpCit7 CisKKyAgLyogSW4gQUlYIHRvIHR1cm4gb24gbXVsdGkgcHJvY2VzcyBkZWJ1 Z2dpbmcgaW4gcHRyYWNlCisgICAgIFBUX01VTFRJIGlzIHRoZSBvcHRpb24g dG8gYmUgcGFzc2VkLAorICAgICB3aXRoIHRoZSBwcm9jZXNzIElEIHdoaWNo IGNhbiBmb3JrICgpIGFuZAorICAgICB0aGUgZGF0YSBwYXJhbWV0ZXIgW2Zv dXJ0aCBwYXJhbWV0ZXJdIG11c3QgYmUgMS4gICovCisKKyAgaWYgKCFBUkNI NjQgKCkpCisgICAgcnM2MDAwX3B0cmFjZTMyIChQVF9NVUxUSSwgcHRpZC5w aWQoKSwgMCwgMSwgMCk7CisgIGVsc2UKKyAgICByczYwMDBfcHRyYWNlNjQg KFBUX01VTFRJLCBwdGlkLnBpZCgpLCAwLCAxLCAwKTsKK30KKwordm9pZAor cnM2MDAwX25hdF90YXJnZXQ6OmZvbGxvd19mb3JrIChpbmZlcmlvciAqY2hp bGRfaW5mLCBwdGlkX3QgY2hpbGRfcHRpZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgdGFyZ2V0X3dhaXRraW5kIGZvcmtfa2luZCwgYm9vbCBmb2xs b3dfY2hpbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBib29sIGRldGFjaF9mb3JrKQoreworCisg IC8qIE9uY2UgdGhlIGZvcmsgZXZlbnQgaXMgZGV0ZWN0ZWQgdGhlIGluZnJ1 bi5jIGNvZGUKKyAgICAgY2FsbHMgdGhlIHRhcmdldF9mb2xsb3dfZm9yayB0 byB0YWtlIGNhcmUgb2YKKyAgICAgZm9sbG93IGNoaWxkIGFuZCBkZXRhY2gg dGhlIGNoaWxkIGFjdGl2aXR5IHdoaWNoIGlzCisgICAgIGRvbmUgdXNpbmcg dGhlIGZ1bmN0aW9uIGJlbG93LiAgKi8KKworICBpbmZfcHRyYWNlX3Rhcmdl dDo6Zm9sbG93X2ZvcmsgKGNoaWxkX2luZiwgY2hpbGRfcHRpZCwgZm9ya19r aW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZvbGxvd19jaGlsZCwgZGV0YWNoX2ZvcmspOworCisgIC8qIElmIHdlIGRl dGFjaCBmb3JrIGFuZCBmb2xsb3cgY2hpbGQgd2UgZG8gbm90IHdhbnQgdGhl IGNoaWxkCisgICAgIHByb2Nlc3MgdG8gZ2VuZWF0ZSBldmVudHMgdGhhdCBw dHJhY2UgY2FuIHRyYWNlLiAgSGVuY2Ugd2UKKyAgICAgZGV0YWNoIGl0LiAg Ki8KKworICBpZiAoZGV0YWNoX2ZvcmsgJiYgIWZvbGxvd19jaGlsZCkKKyAg eworICAgIGlmIChBUkNINjQgKCkpCisgICAgICByczYwMDBfcHRyYWNlNjQg KFBUX0RFVEFDSCwgY2hpbGRfcHRpZC5waWQgKCksIDAsIDAsIDApOworICAg IGVsc2UKKyAgICAgIHJzNjAwMF9wdHJhY2UzMiAoUFRfREVUQUNILCBjaGls ZF9wdGlkLnBpZCAoKSwgMCwgMCwgMCk7CisgIH0KK30KKwogLyogRmV0Y2gg cmVnaXN0ZXIgUkVHTk8gZnJvbSB0aGUgaW5mZXJpb3IuICAqLwogCiBzdGF0 aWMgdm9pZApAQCAtNTAxLDEwICs2NjMsMTAgQEAgcHRpZF90CiByczYwMDBf bmF0X3RhcmdldDo6d2FpdCAocHRpZF90IHB0aWQsIHN0cnVjdCB0YXJnZXRf d2FpdHN0YXR1cyAqb3Vyc3RhdHVzLAogCQkJIHRhcmdldF93YWl0X2ZsYWdz IG9wdGlvbnMpCiB7Ci0gIHBpZF90IHBpZDsKKyAgcGlkX3QgcGlkID0gLTE7 CiAgIGludCBzdGF0dXMsIHNhdmVfZXJybm87CiAKLSAgZG8KKyAgd2hpbGUg KDEpIAogICAgIHsKICAgICAgIHNldF9zaWdpbnRfdHJhcCAoKTsKIApAQCAt NTE0LDcgKzY3Niw3IEBAIHJzNjAwMF9uYXRfdGFyZ2V0Ojp3YWl0IChwdGlk X3QgcHRpZCwgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICpvdXJzdGF0dXMs CiAJICBzYXZlX2Vycm5vID0gZXJybm87CiAJfQogICAgICAgd2hpbGUgKHBp ZCA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7Ci0KKyAgICAgIAogICAgICAg Y2xlYXJfc2lnaW50X3RyYXAgKCk7CiAKICAgICAgIGlmIChwaWQgPT0gLTEp CkBAIC01MzAsMjIgKzY5Miw2NyBAQCByczYwMDBfbmF0X3RhcmdldDo6d2Fp dCAocHRpZF90IHB0aWQsIHN0cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyAqb3Vy c3RhdHVzLAogICAgICAgLyogSWdub3JlIHRlcm1pbmF0ZWQgZGV0YWNoZWQg Y2hpbGQgcHJvY2Vzc2VzLiAgKi8KICAgICAgIGlmICghV0lGU1RPUFBFRCAo c3RhdHVzKSAmJiBmaW5kX2luZmVyaW9yX3BpZCAodGhpcywgcGlkKSA9PSBu dWxscHRyKQogCXBpZCA9IC0xOworICAgICAgCisgICAgICBpZiAocGlkICE9 IC0xKQorICAgICAgeworICAgICAgICAvKiBBSVggaGFzIGEgY291cGxlIG9m IHN0cmFuZ2UgcmV0dXJucyBmcm9tIHdhaXQoKS4gICovCisKKyAgICAgICAg Lyogc3RvcCBhZnRlciBsb2FkIiBzdGF0dXMuICAqLworICAgICAgICBpZiAo c3RhdHVzID09IDB4NTdjKQorICAgICAgICAgIG91cnN0YXR1cy0+c2V0X2xv YWRlZCAoKTsKKyAgICAgICAgLyogMHg3ZiBpcyBzaWduYWwgMC4gICovCisg ICAgICAgIC8qIDB4MTdmIGFuZCAweDEzN2YgaW4gaGV4YWRlY2ltYWwgYXJl IHN0YXR1cyByZXR1cm5lZCBpZgorICAgICAgICAgICBpZiB3ZSBmb2xsb3cg cGFyZW50LAorICAgICAgICAgICBhIHN3aXRjaCBpcyBtYWRlIHRvIGEgY2hp bGQgcG9zdCBwYXJlbnQgZXhlY3V0aW9uCisgICAgICAgICAgIGFuZCBjaGls ZCBjb250aW51ZXMgaXRzIGV4ZWN1dGlvbiBbdXNlciBzd2l0Y2hlcyB0byBj aGlsZCBhbmQKKyAgICAgICAgICAgcHJlc3NlcyBjb250aW51ZV0uICAqLwor ICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gMHg3ZiB8fCBzdGF0dXMgPT0g MHgxN2YgfHwgc3RhdHVzID09IDB4MTM3ZikKKyAgICAgICAgICBvdXJzdGF0 dXMtPnNldF9zcHVyaW91cyAoKTsKKyAgICAgICAgLyogQ2hlY2sgZm9yIGEg Zm9yayAoKSBldmVudC4gICovCisgICAgICAgIGVsc2UgaWYgKGRpZF9haXhf aW5mZXJpb3JfZm9yayAoc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAg IC8qIENoZWNraW5nIHdoZXRoZXIgaXQgaXMgYSBwYXJlbnQgb3IgYSBjaGls ZCBldmVudC4gICovCisKKyAgICAgICAgICAvKiBJZiB0aGUgZXZlbnQgaXMg YSBjaGlsZCB3ZSBjaGVjayBpZiB0aGVyZSB3YXMgYSBwYXJlbnQKKyAgICAg ICAgICAgICBldmVudCByZWNvcmRlZCBiZWZvcmUuICBJZiB5ZXMgd2UgZ290 IHRoZSBwYXJlbnQgY2hpbGQKKyAgICAgICAgICAgICByZWxhdGlvbnNoaXAu ICBJZiBub3Qgd2UgcHVzaCB0aGlzIGNoaWxkIGFuZCB3YWl0IGZvcgorICAg ICAgICAgICAgIHRoZSBuZXh0IGZvcmsgKCkgZXZlbnQuICAqLworCisgICAg ICAgICAgaWYgKGZpbmRfaW5mZXJpb3JfcGlkICh0aGlzLCBwaWQpID09IG51 bGxwdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHBpZF90IHBh cmVudF9waWQgPSBoYXNfbXlfYWl4X3BhcmVudF9yZXBvcnRlZCAocGlkKTsK KyAgICAgICAgICAgICAgaWYgKHBhcmVudF9waWQgPiAwKQorICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgb3Vyc3RhdHVzLT5zZXRfZm9ya2Vk IChwdGlkX3QgKHBpZCkpOworICAgICAgICAgICAgICAgIHJldHVybiBwdGlk X3QgKHBhcmVudF9waWQpOworICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgIGFpeF9yZW1lbWJlcl9jaGlsZCAocGlkKTsKKyAgICAgICAgICAgIH0K KworICAgICAgICAgICAgLyogSWYgdGhlIGV2ZW50IGlzIGEgcGFyZW50IHdl IGNoZWNrIGlmIHRoZXJlIHdhcyBhIGNoaWxkCisgICAgICAgICAgICAgICBl dmVudCByZWNvcmRlZCBiZWZvcmUuICBJZiB5ZXMgd2UgZ290IHRoZSBwYXJl bnQgY2hpbGQKKyAgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcC4gIElmIG5v dCB3ZSBwdXNoIHRoaXMgcGFyZW50IGFuZCB3YWl0IGZvcgorICAgICAgICAg ICAgICAgdGhlIG5leHQgZm9yayAoKSBldmVudC4gICovCisKKyAgICAgICAg ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHBpZF90IGNo aWxkX3BpZCA9IGhhc19teV9haXhfY2hpbGRfcmVwb3J0ZWQgKHBpZCk7Cisg ICAgICAgICAgICAgIGlmIChjaGlsZF9waWQgPiAwKQorICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgb3Vyc3RhdHVzLT5zZXRfZm9ya2VkIChw dGlkX3QgKGNoaWxkX3BpZCkpOworICAgICAgICAgICAgICAgIHJldHVybiBw dGlkX3QgKHBpZCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg YWl4X3JlbWVtYmVyX3BhcmVudCAocGlkKTsKKyAgICAgICAgICAgIH0gICAK KyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgLyogQSBu b3JtYWwgd2FpdHN0YXR1cy4gIExldCB0aGUgdXN1YWwgbWFjcm9zIGRlYWwg d2l0aCBpdC4gICovCisgICAgICBlbHNlCisgICAgICAgICpvdXJzdGF0dXMg PSBob3N0X3N0YXR1c190b193YWl0c3RhdHVzIChzdGF0dXMpOworICAgICAg CisgICAgICByZXR1cm4gcHRpZF90IChwaWQpOwogICAgIH0KLSAgd2hpbGUg KHBpZCA9PSAtMSk7Ci0KLSAgLyogQUlYIGhhcyBhIGNvdXBsZSBvZiBzdHJh bmdlIHJldHVybnMgZnJvbSB3YWl0KCkuICAqLwotCi0gIC8qIHN0b3AgYWZ0 ZXIgbG9hZCIgc3RhdHVzLiAgKi8KLSAgaWYgKHN0YXR1cyA9PSAweDU3YykK LSAgICBvdXJzdGF0dXMtPnNldF9sb2FkZWQgKCk7Ci0gIC8qIHNpZ25hbCAw LiAgSSBoYXZlIG5vIGlkZWEgd2h5IHdhaXQoMikgcmV0dXJucyB3aXRoIHRo aXMgc3RhdHVzIHdvcmQuICAqLwotICBlbHNlIGlmIChzdGF0dXMgPT0gMHg3 ZikKLSAgICBvdXJzdGF0dXMtPnNldF9zcHVyaW91cyAoKTsKLSAgLyogQSBu b3JtYWwgd2FpdHN0YXR1cy4gIExldCB0aGUgdXN1YWwgbWFjcm9zIGRlYWwg d2l0aCBpdC4gICovCi0gIGVsc2UKLSAgICAqb3Vyc3RhdHVzID0gaG9zdF9z dGF0dXNfdG9fd2FpdHN0YXR1cyAoc3RhdHVzKTsKLQotICByZXR1cm4gcHRp ZF90IChwaWQpOworICB9CiB9CiAMCiAKLS0gCjIuMzEuMQoK --_004_CH2PR15MB35441E85211E00CE4305FE0CD6019CH2PR15MB3544namp_--