From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3978 invoked by alias); 28 Jul 2009 01:41:48 -0000 Received: (qmail 3918 invoked by uid 22791); 28 Jul 2009 01:41:19 -0000 X-SWARE-Spam-Status: No, hits=-0.2 required=5.0 tests=AWL,BAYES_40,J_CHICKENPOX_46,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-pz0-f203.google.com (HELO mail-pz0-f203.google.com) (209.85.222.203) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 28 Jul 2009 01:40:57 +0000 Received: by pzk41 with SMTP id 41so2523192pzk.12 for ; Mon, 27 Jul 2009 18:40:55 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.107.5 with SMTP id f5mr1246197wfc.250.1248745255253; Mon, 27 Jul 2009 18:40:55 -0700 (PDT) In-Reply-To: <4A6B83A8.8030505@vmware.com> References: <4A5A82F9.5050503@vmware.com> <4A611BB8.2050808@vmware.com> <4A6B83A8.8030505@vmware.com> From: Hui Zhu Date: Tue, 28 Jul 2009 01:44:00 -0000 Message-ID: Subject: Re: [RFA/RFC Prec] Add Linux AMD64 process record support second version, (64 bits system call support) 2/3 To: Michael Snyder , Mark Kettenis Cc: gdb-patches ml Content-Type: multipart/mixed; boundary=001636e90a905aba08046fba291e X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-07/txt/msg00668.txt.bz2 --001636e90a905aba08046fba291e Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 128092 On Sun, Jul 26, 2009 at 06:14, Michael Snyder wrote: > Hui, I have just a few more small issues with this patch: > > >> =A0linux-record.c =A0 =A0| 2570 >> ++++++++++++++++++++++++++++++------------------------ > > [...] >> >> + =A0 =A0 =A0 =A0case RECORD_SYS_ACCEPT: >> + =A0 =A0 =A0 =A0case RECORD_SYS_GETSOCKNAME: >> + =A0 =A0 =A0 =A0case RECORD_SYS_GETPEERNAME: >> + =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg= 2, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0&tmpulongest); >> + =A0 =A0 =A0 =A0 =A0 =A0if (tmpulongest) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0gdb_byte *a =3D alloca (tdep->size_ulon= g * 2); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0int addrlen; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0gdb_byte *addrlenp; > >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tmpulongest +=3D tdep->size_ulong; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (target_read_memory ((CORE_ADDR) tmp= ulongest, a, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0tdep->size_ulong * 2)) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_std= log, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0"Process record: error reading >> " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0"memory at addr =3D 0x%s len =3D >> %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0OUTPUT_REG (tmpulongest, >> tdep->arg2), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0tdep->size_ulong * 2); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_linux_sockaddr (regcache, td= ep, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 extract_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 (a, tdep->size_ulong, >> byte_order), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 extract_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 (a + tdep->size_ulong, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0tdep->size_ulong, >> byte_order))) > > Could you use a couple of temporary variables for > extract_unsigned_integer here? > > >> + =A0 =A0 =A0 =A0case RECORD_SYS_RECVFROM: >> + =A0 =A0 =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg2, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0&tmpulongest); >> + =A0 =A0 =A0 =A0 =A0if (tmpulongest) >> + =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0gdb_byte *a =3D alloca (tdep->size_ulong * = 2); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0int addrlen; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0gdb_byte *addrlenp; >> > >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0tmpulongest +=3D tdep->size_ulong * 4; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (target_read_memory ((CORE_ADDR) tmpulon= gest, a, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0tdep->size_ulong * 2)) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_stdlog, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0"Process record: error reading " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0"memory at addr =3D 0x%s len =3D >> %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0OUTPUT_REG (tmpulongest, >> tdep->arg2), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0tdep->size_ulong * 2); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_linux_sockaddr (regcache, tdep, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 extract_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 (a, tdep->size_ulong, >> byte_order), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 extract_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 (a + tdep->size_ulong, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0tdep->size_ulong, >> byte_order))) > > And here? > > >> + =A0 =A0 =A0 =A0case RECORD_SYS_RECVMSG: >> + =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0gdb_byte *a =3D alloca (tdep->size_ulong); >> + >> + =A0 =A0 =A0 =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg= 2, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0&tmpulongest); >> + =A0 =A0 =A0 =A0 =A0 =A0if (tmpulongest) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tmpulongest +=3D tdep->size_ulong; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (target_read_memory ((CORE_ADDR) tmp= ulongest, a, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0tdep->size_ulong)) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_std= log, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0"Process record: error reading >> " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0"memory at addr =3D 0x%s len =3D >> %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0OUTPUT_REG (tmpulongest, >> tdep->arg2), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0tdep->size_ulong); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tmpulongest =3D extract_unsigned_intege= r (a, >> tdep->size_ulong, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0byte_order); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_linux_msghdr (regcache, tdep, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 extract_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 (a, tdep->size_ulong, >> byte_order))) > > And here? > > >> + =A0 =A0case 528: >> + =A0 =A0 =A0/* sys_shmdt */ >> + =A0 =A0 =A0/* XXX maybe need do some record works wiht sys_shmdt. =A0*/ > > "with". > >> + =A0 =A0 =A0 =A0case RECORD_SEMOP: >> + =A0 =A0 =A0 =A0case RECORD_SEMGET: >> + =A0 =A0 =A0 =A0case RECORD_SEMTIMEDOP: >> + =A0 =A0 =A0 =A0case RECORD_MSGSND: >> + =A0 =A0 =A0 =A0case RECORD_MSGGET: >> + =A0 =A0 =A0 =A0 =A0/* XXX maybe need do some record works wiht RECORD_= SHMDT. =A0*/ > > "with". > Thanks Michael. I fixed all of them. Hi Mark, Could you please help me review it? Thanks, Hui --- i386-linux-tdep.c | 26 linux-record.c | 2569 ++++++++++++++++++++++++++++++-------------------= ----- linux-record.h | 5 3 files changed, 1488 insertions(+), 1112 deletions(-) --- a/i386-linux-tdep.c +++ b/i386-linux-tdep.c @@ -369,7 +369,14 @@ i386_linux_intx80_sysenter_record (struc int ret; uint32_t tmpu32; - regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32); + regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *) &tmpu32); + + if (tmpu32 > 499) + { + printf_unfiltered (_("Process record and replay target doesn't " + "support syscall number %u\n"), tmpu32); + return -1; + } ret =3D record_linux_system_call (tmpu32, regcache, &i386_linux_record_tdep); @@ -481,6 +488,8 @@ i386_linux_init_abi (struct gdbarch_info /* Initialize the i386_linux_record_tdep. */ /* These values are the size of the type that will be used in a system call. They are obtained from Linux Kernel source. */ + i386_linux_record_tdep.size_pointer + =3D gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT; i386_linux_record_tdep.size__old_kernel_stat =3D 32; i386_linux_record_tdep.size_tms =3D 16; i386_linux_record_tdep.size_loff_t =3D 8; @@ -501,9 +510,12 @@ i386_linux_init_abi (struct gdbarch_info i386_linux_record_tdep.size_statfs =3D 64; i386_linux_record_tdep.size_statfs64 =3D 84; i386_linux_record_tdep.size_sockaddr =3D 16; - i386_linux_record_tdep.size_int =3D 4; - i386_linux_record_tdep.size_long =3D 4; - i386_linux_record_tdep.size_ulong =3D 4; + i386_linux_record_tdep.size_int + =3D gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT; + i386_linux_record_tdep.size_long + =3D gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT; + i386_linux_record_tdep.size_ulong + =3D gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT; i386_linux_record_tdep.size_msghdr =3D 28; i386_linux_record_tdep.size_itimerval =3D 16; i386_linux_record_tdep.size_stat =3D 88; @@ -536,7 +548,8 @@ i386_linux_init_abi (struct gdbarch_info i386_linux_record_tdep.size_io_event =3D 32; i386_linux_record_tdep.size_iocb =3D 64; i386_linux_record_tdep.size_epoll_event =3D 12; - i386_linux_record_tdep.size_itimerspec =3D i386_linux_record_tdep.size_timespec * 2; + i386_linux_record_tdep.size_itimerspec + =3D i386_linux_record_tdep.size_timespec * 2; i386_linux_record_tdep.size_mq_attr =3D 32; i386_linux_record_tdep.size_siginfo =3D 128; i386_linux_record_tdep.size_termios =3D 36; @@ -546,6 +559,8 @@ i386_linux_init_abi (struct gdbarch_info i386_linux_record_tdep.size_serial_struct =3D 60; i386_linux_record_tdep.size_serial_icounter_struct =3D 80; i386_linux_record_tdep.size_hayes_esp_config =3D 12; + i386_linux_record_tdep.size_size_t =3D 4; + i386_linux_record_tdep.size_iovec =3D 8; /* These values are the second argument of system call "sys_ioctl". They are obtained from Linux Kernel source. */ @@ -627,6 +642,7 @@ i386_linux_init_abi (struct gdbarch_info i386_linux_record_tdep.arg3 =3D I386_EDX_REGNUM; i386_linux_record_tdep.arg4 =3D I386_ESI_REGNUM; i386_linux_record_tdep.arg5 =3D I386_EDI_REGNUM; + i386_linux_record_tdep.arg6 =3D I386_EBP_REGNUM; tdep->i386_intx80_record =3D i386_linux_intx80_sysenter_record; tdep->i386_sysenter_record =3D i386_linux_intx80_sysenter_record; --- a/linux-record.c +++ b/linux-record.c @@ -19,6 +19,7 @@ #include "defs.h" #include "target.h" +#include "gdbtypes.h" #include "regcache.h" #include "record.h" #include "linux-record.h" @@ -80,6 +81,134 @@ #define RECORD_Q_XGETQSTAT (('5' << 8) + 5) #define RECORD_Q_XGETQUOTA (('3' << 8) + 3) +#define OUTPUT_REG(val, num) phex_nz ((val), \ + TYPE_LENGTH (gdbarch_register_type (get_regcache_arch (regcache), (num= )))) + +static int +record_linux_sockaddr (struct regcache *regcache, + struct linux_record_tdep *tdep, ULONGEST addr, + ULONGEST len) +{ + gdb_byte *a; + int addrlen; + struct gdbarch *gdbarch =3D get_regcache_arch (regcache); + enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); + + if (!addr) + return 0; + + a =3D alloca (tdep->size_int); + + if (record_arch_list_add_mem ((CORE_ADDR) len, tdep->size_int)) + return -1; + + /* Get the addrlen. */ + if (target_read_memory ((CORE_ADDR) len, a, tdep->size_int)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D %d.\n", + phex_nz (len, tdep->size_pointer), + tdep->size_int); + return -1; + } + addrlen =3D (int) extract_unsigned_integer (a, tdep->size_int, byte_orde= r); + if (addrlen <=3D 0 || addrlen > tdep->size_sockaddr) + addrlen =3D tdep->size_sockaddr; + + if (record_arch_list_add_mem ((CORE_ADDR) addr, addrlen)) + return -1; + + return 0; +} + +static int +record_linux_msghdr (struct regcache *regcache, + struct linux_record_tdep *tdep, ULONGEST addr) +{ + gdb_byte *a; + struct gdbarch *gdbarch =3D get_regcache_arch (regcache); + enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); + CORE_ADDR tmpaddr; + int tmpint; + + if (!addr) + return 0; + + if (record_arch_list_add_mem ((CORE_ADDR) addr, tdep->size_msghdr)) + return -1; + + a =3D alloca (tdep->size_msghdr); + if (target_read_memory ((CORE_ADDR) addr, a, tdep->size_msghdr)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s " + "len =3D %d.\n", + phex_nz (addr, tdep->size_pointer), + tdep->size_msghdr); + return -1; + } + + /* msg_name msg_namelen */ + addr =3D extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a +=3D tdep->size_pointer; + if (record_arch_list_add_mem ((CORE_ADDR) addr, + (int) extract_unsigned_integer (a, + tdep->size_int, + byte_order))) + return -1; + a +=3D tdep->size_int; + + /* msg_iov msg_iovlen */ + addr =3D extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a +=3D tdep->size_pointer; + if (addr) + { + ULONGEST i; + ULONGEST len =3D extract_unsigned_integer (a, tdep->size_size_t, + byte_order); + gdb_byte *iov =3D alloca (tdep->size_iovec); + + for (i =3D 0; i < len; i++) + { + if (target_read_memory ((CORE_ADDR) addr, iov, tdep->size_iovec)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error " + "reading memory at " + "addr =3D 0x%s " + "len =3D %d.\n", + phex_nz (addr,tdep->size_pointer), + tdep->size_iovec); + return -1; + } + tmpaddr =3D (CORE_ADDR) extract_unsigned_integer (iov, + tdep->size_point= er, + byte_order); + tmpint =3D (int) extract_unsigned_integer (iov + tdep->size_poin= ter, + tdep->size_size_t, + byte_order); + if (record_arch_list_add_mem (tmpaddr, tmpint)); + return -1; + addr +=3D tdep->size_iovec; + } + } + a +=3D tdep->size_size_t; + + /* msg_control msg_controllen */ + addr =3D extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a +=3D tdep->size_pointer; + tmpint =3D (int) extract_unsigned_integer (a, tdep->size_size_t, byte_or= der); + if (record_arch_list_add_mem ((CORE_ADDR) addr, tmpint)); + return -1; + + return 0; +} + /* When the architecture process record get a Linux syscall instruction, it will get a Linux syscall number of this architecture and convert it to the Linux syscall number "num" which @@ -94,10 +223,13 @@ int record_linux_system_call (int num, struct regcache *regcache, - struct linux_record_tdep *tdep) + struct linux_record_tdep *tdep) { struct gdbarch *gdbarch =3D get_regcache_arch (regcache); - uint32_t tmpu32; + enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); + ULONGEST tmpulongest; + CORE_ADDR tmpaddr; + int tmpint; switch (num) { @@ -108,15 +240,14 @@ record_linux_system_call (int num, struc /* sys_exit */ case 1: { - int q; - target_terminal_ours (); - q =3D - yquery (_ ("The next instruction is syscall exit. " - "It will make the program exit. " - "Do you want to stop the program?")); - target_terminal_inferior (); - if (q) - return 1; + int q; + target_terminal_ours (); + q =3D yquery (_("The next instruction is syscall exit. " + "It will make the program exit. " + "Do you want to stop the program?")); + target_terminal_inferior (); + if (q) + return 1; } break; @@ -127,11 +258,11 @@ record_linux_system_call (int num, struc /* sys_read */ case 3: { - uint32_t addr, count; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); - if (record_arch_list_add_mem (addr, count)) - return -1; + ULONGEST addr, count; + regcache_raw_read_unsigned (regcache, tdep->arg2, &addr); + regcache_raw_read_unsigned (regcache, tdep->arg3, &count); + if (record_arch_list_add_mem ((CORE_ADDR) addr, (int) count)) + return -1; } break; @@ -171,9 +302,10 @@ record_linux_system_call (int num, struc case 28: /* sys_lstat */ case 84: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size__old_kernel_stat)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size__old_kernel_stat)) + return -1; break; /* sys_lseek */ @@ -194,16 +326,16 @@ record_linux_system_call (int num, struc /* sys_ptrace */ case 26: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D RECORD_PTRACE_PEEKTEXT - || tmpu32 =3D=3D RECORD_PTRACE_PEEKDATA - || tmpu32 =3D=3D RECORD_PTRACE_PEEKUSR) - { - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, 4)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D RECORD_PTRACE_PEEKTEXT + || tmpulongest =3D=3D RECORD_PTRACE_PEEKDATA + || tmpulongest =3D=3D RECORD_PTRACE_PEEKUSR) + { + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 4)) + return -1; + } break; /* sys_alarm */ @@ -240,9 +372,9 @@ record_linux_system_call (int num, struc /* sys_times */ case 43: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_tms)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_tm= s)) + return -1; break; /* sys_ni_syscall */ @@ -270,149 +402,172 @@ record_linux_system_call (int num, struc /* sys_ioctl */ case 54: /* XXX Need to add a lot of support of other ioctl requests. */ - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D tdep->ioctl_FIOCLEX || tmpu32 =3D=3D tdep->ioctl_F= IONCLEX - || tmpu32 =3D=3D tdep->ioctl_FIONBIO || tmpu32 =3D=3D tdep->ioctl_FIOAS= YNC - || tmpu32 =3D=3D tdep->ioctl_TCSETS || tmpu32 =3D=3D tdep->ioctl_TCSETSW - || tmpu32 =3D=3D tdep->ioctl_TCSETSF || tmpu32 =3D=3D tdep->ioctl_TCSETA - || tmpu32 =3D=3D tdep->ioctl_TCSETAW || tmpu32 =3D=3D tdep->ioctl_TCSET= AF - || tmpu32 =3D=3D tdep->ioctl_TCSBRK || tmpu32 =3D=3D tdep->ioctl_TCXONC - || tmpu32 =3D=3D tdep->ioctl_TCFLSH || tmpu32 =3D=3D tdep->ioctl_TIOCEX= CL - || tmpu32 =3D=3D tdep->ioctl_TIOCNXCL - || tmpu32 =3D=3D tdep->ioctl_TIOCSCTTY - || tmpu32 =3D=3D tdep->ioctl_TIOCSPGRP || tmpu32 =3D=3D tdep->ioctl_TIO= CSTI - || tmpu32 =3D=3D tdep->ioctl_TIOCSWINSZ - || tmpu32 =3D=3D tdep->ioctl_TIOCMBIS || tmpu32 =3D=3D tdep->ioctl_TIOC= MBIC - || tmpu32 =3D=3D tdep->ioctl_TIOCMSET - || tmpu32 =3D=3D tdep->ioctl_TIOCSSOFTCAR - || tmpu32 =3D=3D tdep->ioctl_TIOCCONS - || tmpu32 =3D=3D tdep->ioctl_TIOCSSERIAL - || tmpu32 =3D=3D tdep->ioctl_TIOCPKT || tmpu32 =3D=3D tdep->ioctl_TIOCN= OTTY - || tmpu32 =3D=3D tdep->ioctl_TIOCSETD || tmpu32 =3D=3D tdep->ioctl_TCSB= RKP - || tmpu32 =3D=3D tdep->ioctl_TIOCTTYGSTRUCT - || tmpu32 =3D=3D tdep->ioctl_TIOCSBRK || tmpu32 =3D=3D tdep->ioctl_TIOC= CBRK - || tmpu32 =3D=3D tdep->ioctl_TCSETS2 || tmpu32 =3D=3D tdep->ioctl_TCSET= SW2 - || tmpu32 =3D=3D tdep->ioctl_TCSETSF2 - || tmpu32 =3D=3D tdep->ioctl_TIOCSPTLCK - || tmpu32 =3D=3D tdep->ioctl_TIOCSERCONFIG - || tmpu32 =3D=3D tdep->ioctl_TIOCSERGWILD - || tmpu32 =3D=3D tdep->ioctl_TIOCSERSWILD - || tmpu32 =3D=3D tdep->ioctl_TIOCSLCKTRMIOS - || tmpu32 =3D=3D tdep->ioctl_TIOCSERGETMULTI - || tmpu32 =3D=3D tdep->ioctl_TIOCSERSETMULTI - || tmpu32 =3D=3D tdep->ioctl_TIOCMIWAIT - || tmpu32 =3D=3D tdep->ioctl_TIOCSHAYESESP) - { - /* Nothing to do. */ - } - else if (tmpu32 =3D=3D tdep->ioctl_TCGETS || tmpu32 =3D=3D tdep->ioc= tl_TCGETA - || tmpu32 =3D=3D tdep->ioctl_TIOCGLCKTRMIOS) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_termios)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGPGRP - || tmpu32 =3D=3D tdep->ioctl_TIOCGSID) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCOUTQ - || tmpu32 =3D=3D tdep->ioctl_TIOCMGET - || tmpu32 =3D=3D tdep->ioctl_TIOCGSOFTCAR - || tmpu32 =3D=3D tdep->ioctl_FIONREAD - || tmpu32 =3D=3D tdep->ioctl_TIOCINQ - || tmpu32 =3D=3D tdep->ioctl_TIOCGETD - || tmpu32 =3D=3D tdep->ioctl_TIOCGPTN - || tmpu32 =3D=3D tdep->ioctl_TIOCSERGETLSR) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGWINSZ) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_winsize)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCLINUX) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest =3D=3D tdep->ioctl_FIOCLEX + || tmpulongest =3D=3D tdep->ioctl_FIONCLEX + || tmpulongest =3D=3D tdep->ioctl_FIONBIO + || tmpulongest =3D=3D tdep->ioctl_FIOASYNC + || tmpulongest =3D=3D tdep->ioctl_TCSETS + || tmpulongest =3D=3D tdep->ioctl_TCSETSW + || tmpulongest =3D=3D tdep->ioctl_TCSETSF + || tmpulongest =3D=3D tdep->ioctl_TCSETA + || tmpulongest =3D=3D tdep->ioctl_TCSETAW + || tmpulongest =3D=3D tdep->ioctl_TCSETAF + || tmpulongest =3D=3D tdep->ioctl_TCSBRK + || tmpulongest =3D=3D tdep->ioctl_TCXONC + || tmpulongest =3D=3D tdep->ioctl_TCFLSH + || tmpulongest =3D=3D tdep->ioctl_TIOCEXCL + || tmpulongest =3D=3D tdep->ioctl_TIOCNXCL + || tmpulongest =3D=3D tdep->ioctl_TIOCSCTTY + || tmpulongest =3D=3D tdep->ioctl_TIOCSPGRP + || tmpulongest =3D=3D tdep->ioctl_TIOCSTI + || tmpulongest =3D=3D tdep->ioctl_TIOCSWINSZ + || tmpulongest =3D=3D tdep->ioctl_TIOCMBIS + || tmpulongest =3D=3D tdep->ioctl_TIOCMBIC + || tmpulongest =3D=3D tdep->ioctl_TIOCMSET + || tmpulongest =3D=3D tdep->ioctl_TIOCSSOFTCAR + || tmpulongest =3D=3D tdep->ioctl_TIOCCONS + || tmpulongest =3D=3D tdep->ioctl_TIOCSSERIAL + || tmpulongest =3D=3D tdep->ioctl_TIOCPKT + || tmpulongest =3D=3D tdep->ioctl_TIOCNOTTY + || tmpulongest =3D=3D tdep->ioctl_TIOCSETD + || tmpulongest =3D=3D tdep->ioctl_TCSBRKP + || tmpulongest =3D=3D tdep->ioctl_TIOCTTYGSTRUCT + || tmpulongest =3D=3D tdep->ioctl_TIOCSBRK + || tmpulongest =3D=3D tdep->ioctl_TIOCCBRK + || tmpulongest =3D=3D tdep->ioctl_TCSETS2 + || tmpulongest =3D=3D tdep->ioctl_TCSETSW2 + || tmpulongest =3D=3D tdep->ioctl_TCSETSF2 + || tmpulongest =3D=3D tdep->ioctl_TIOCSPTLCK + || tmpulongest =3D=3D tdep->ioctl_TIOCSERCONFIG + || tmpulongest =3D=3D tdep->ioctl_TIOCSERGWILD + || tmpulongest =3D=3D tdep->ioctl_TIOCSERSWILD + || tmpulongest =3D=3D tdep->ioctl_TIOCSLCKTRMIOS + || tmpulongest =3D=3D tdep->ioctl_TIOCSERGETMULTI + || tmpulongest =3D=3D tdep->ioctl_TIOCSERSETMULTI + || tmpulongest =3D=3D tdep->ioctl_TIOCMIWAIT + || tmpulongest =3D=3D tdep->ioctl_TIOCSHAYESESP) + { + /* Nothing to do. */ + } + else if (tmpulongest =3D=3D tdep->ioctl_TCGETS + || tmpulongest =3D=3D tdep->ioctl_TCGETA + || tmpulongest =3D=3D tdep->ioctl_TIOCGLCKTRMIOS) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_termios)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGPGRP + || tmpulongest =3D=3D tdep->ioctl_TIOCGSID) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_pid_t)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCOUTQ + || tmpulongest =3D=3D tdep->ioctl_TIOCMGET + || tmpulongest =3D=3D tdep->ioctl_TIOCGSOFTCAR + || tmpulongest =3D=3D tdep->ioctl_FIONREAD + || tmpulongest =3D=3D tdep->ioctl_TIOCINQ + || tmpulongest =3D=3D tdep->ioctl_TIOCGETD + || tmpulongest =3D=3D tdep->ioctl_TIOCGPTN + || tmpulongest =3D=3D tdep->ioctl_TIOCSERGETLSR) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_int)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGWINSZ) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_winsize)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCLINUX) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); /* This syscall affect a char size memory. */ - if (record_arch_list_add_mem (tmpu32, 1)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGSERIAL) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TCGETS2) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_termios2)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_FIOQSIZE) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGICOUNT) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem - (tmpu32, tdep->size_serial_icounter_struct)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGHAYESESP) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCSERGSTRUCT) - { - printf_unfiltered (_("Process record and replay target doesn't " - "support ioctl request TIOCSERGSTRUCT\n")); - return 1; - } + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 1)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGSERIAL) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_serial_struct)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TCGETS2) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_termios2)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_FIOQSIZE) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGICOUNT) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_serial_icounter_struct)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGHAYESESP) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_hayes_esp_config)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCSERGSTRUCT) + { + printf_unfiltered (_("Process record and replay target doesn't " + "support ioctl request TIOCSERGSTRUCT\n")); + return 1; + } else - { - printf_unfiltered (_("Process record and replay target doesn't " - "support ioctl request 0x%s.\n"), - phex_nz (tmpu32, 4)); - return 1; - } + { + printf_unfiltered (_("Process record and replay target doesn't " + "support ioctl request 0x%s.\n"), + OUTPUT_REG (tmpulongest, tdep->arg2)); + return 1; + } break; /* sys_fcntl */ case 55: /* XXX */ - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); sys_fcntl: - if (tmpu32 =3D=3D tdep->fcntl_F_GETLK) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_flock)) - return -1; - } + if (tmpulongest =3D=3D tdep->fcntl_F_GETLK) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_flock)) + return -1; + } break; /* sys_ni_syscall */ @@ -425,9 +580,10 @@ record_linux_system_call (int num, struc /* sys_olduname */ case 59: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_oldold_utsname)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_oldold_utsname)) + return -1; break; /* sys_umask */ @@ -438,9 +594,10 @@ record_linux_system_call (int num, struc /* sys_ustat */ case 62: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_ustat)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_ustat)) + return -1; break; /* sys_dup2 */ @@ -455,9 +612,10 @@ record_linux_system_call (int num, struc /* sys_sigaction */ case 67: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigaction)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_sigaction)) + return -1; break; /* sys_sgetmask */ @@ -474,9 +632,10 @@ record_linux_system_call (int num, struc /* sys_sigpending */ case 73: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigset_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_sigset_t)) + return -1; break; /* sys_sethostname */ @@ -487,26 +646,30 @@ record_linux_system_call (int num, struc /* sys_old_getrlimit */ case 76: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rlimit)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rlimit)) + return -1; break; /* sys_getrusage */ case 77: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rusage)) + return -1; break; /* sys_gettimeofday */ case 78: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timeval)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timezone)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timeval)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timezone)) + return -1; break; /* sys_settimeofday */ @@ -515,53 +678,56 @@ record_linux_system_call (int num, struc /* sys_getgroups16 */ case 80: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; break; /* sys_setgroups16 */ case 81: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; break; /* old_select */ case 82: { - struct sel_arg_struct - { - CORE_ADDR n; - CORE_ADDR inp; - CORE_ADDR outp; - CORE_ADDR exp; - CORE_ADDR tvp; - } sel; + struct sel_arg_struct + { + CORE_ADDR n; + CORE_ADDR inp; + CORE_ADDR outp; + CORE_ADDR exp; + CORE_ADDR tvp; + } sel; - regcache_raw_read (regcache, tdep->arg1, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading memory " - "at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (sel)); - return -1; - } - if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set)) - return -1; - if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set)) - return -1; - if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set)) - return -1; - if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, + &tmpulongest); + if (tmpulongest) + { + if (target_read_memory (tmpulongest, (gdb_byte *) &sel, + sizeof(sel))) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading memor= y " + "at addr =3D 0x%s len =3D %lu.\n", + OUTPUT_REG (tmpulongest, tdep->arg1), + (unsigned long) sizeof (sel)); + return -1; + } + if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set)) + return -1; + if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set)) + return -1; + if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set)) + return -1; + if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval)) + return -1; + } } break; @@ -572,12 +738,12 @@ record_linux_system_call (int num, struc /* sys_readlink */ case 85: { - uint32_t len; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len); - if (record_arch_list_add_mem (tmpu32, len)) - return -1; + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &len); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len)) + return -1; } break; @@ -590,23 +756,24 @@ record_linux_system_call (int num, struc /* sys_reboot */ case 88: { - int q; - target_terminal_ours (); - q =3D - yquery (_("The next instruction is syscall reboot. " - "It will restart the computer. " - "Do you want to stop the program?")); - target_terminal_inferior (); - if (q) - return 1; + int q; + target_terminal_ours (); + q =3D + yquery (_("The next instruction is syscall reboot. " + "It will restart the computer. " + "Do you want to stop the program?")); + target_terminal_inferior (); + if (q) + return 1; } break; /* old_readdir */ case 89: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_dirent)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_dirent)) + return -1; break; /* old_mmap */ @@ -616,22 +783,21 @@ record_linux_system_call (int num, struc /* sys_munmap */ case 91: { - int q; - uint32_t len; + int q; + ULONGEST len; - regcache_raw_read (regcache, tdep->arg1, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len); - target_terminal_ours (); - q =3D - yquery (_("The next instruction is syscall munmap. " - "It will free the memory addr =3D %s len =3D %u. " - "It will make record target get error. " - "Do you want to stop the program?"), - paddress (gdbarch, tmpu32), (int)len); - target_terminal_inferior (); - if (q) - return 1; + regcache_raw_read_unsigned (regcache, tdep->arg1, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg2, &len); + target_terminal_ours (); + q =3D yquery (_("The next instruction is syscall munmap. " + "It will free the memory addr =3D 0x%s len =3D %u. " + "It will make record target get error. " + "Do you want to stop the program?"), + OUTPUT_REG (tmpulongest, tdep->arg1), (int) len); + target_terminal_inferior (); + if (q) + return 1; } break; @@ -655,292 +821,348 @@ record_linux_system_call (int num, struc case 99: /* sys_fstatfs */ case 100: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_statfs)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_statfs)) + return -1; break; /* sys_ioperm */ case 101: break; + /* sys_socket */ + case 500: + /* sys_sendto */ + case 503: + /* sys_sendmsg */ + case 505: + /* sys_shutdown */ + case 507: + /* sys_bind */ + case 508: + /* sys_connect */ + case 501: + /* sys_listen */ + case 509: + /* sys_setsockopt */ + case 513: + break; + + /* sys_accept */ + case 502: + /* sys_getsockname */ + case 510: + /* sys_getpeername */ + case 511: + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &len); + if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) + return -1; + } + break; + + /* sys_recvfrom */ + case 504: + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg5, &len); + if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) + return -1; + } + /* sys_recv */ + case 515: + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &size); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) size)) + return -1; + } + break; + + /* sys_recvmsg */ + case 506: + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_linux_msghdr (regcache, tdep, tmpulongest)) + return -1; + break; + + /* sys_socketpair */ + case 512: + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + break; + + /* sys_getsockopt */ + case 514: + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (tmpulongest) + { + ULONGEST optvalp; + gdb_byte *optlenp =3D alloca (tdep->size_int); + if (target_read_memory ((CORE_ADDR) tmpulongest, optlenp, + tdep->size_int)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s " + "len =3D %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg5), + tdep->size_int); + return -1; + } + regcache_raw_read_unsigned (regcache, tdep->arg4, &optvalp); + tmpint =3D (int) extract_signed_integer (optlenp, tdep->size_int, + byte_order); + if (record_arch_list_add_mem ((CORE_ADDR) optvalp, tmpint)) + return -1; + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_int)) + return -1; + } + break; + /* sys_socketcall */ case 102: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case RECORD_SYS_SOCKET: - case RECORD_SYS_BIND: - case RECORD_SYS_CONNECT: - case RECORD_SYS_LISTEN: - break; - case RECORD_SYS_ACCEPT: - case RECORD_SYS_GETSOCKNAME: - case RECORD_SYS_GETPEERNAME: - { - uint32_t a[3]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (record_arch_list_add_mem (a[1], tdep->size_sockaddr)) - return -1; - if (record_arch_list_add_mem (a[2], tdep->size_int)) - return -1; - } - } - break; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + switch (tmpulongest) + { + case RECORD_SYS_SOCKET: + case RECORD_SYS_BIND: + case RECORD_SYS_CONNECT: + case RECORD_SYS_LISTEN: + break; + case RECORD_SYS_ACCEPT: + case RECORD_SYS_GETSOCKNAME: + case RECORD_SYS_GETPEERNAME: + { + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a =3D alloca (tdep->size_ulong * 2); + int addrlen; + gdb_byte *addrlenp; + ULONGEST len; - case RECORD_SYS_SOCKETPAIR: - { - uint32_t a[4]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (record_arch_list_add_mem (a[3], tdep->size_int)) - return -1; - } - } - break; - case RECORD_SYS_SEND: - case RECORD_SYS_SENDTO: - break; - case RECORD_SYS_RECV: - { - uint32_t a[3]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (a[2]) - { - if (target_read_memory - (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, a[2]), - (unsigned long)sizeof (a[2])); - return -1; - } - if (record_arch_list_add_mem (a[1], a[2])) - return -1; - } - } - } - break; - case RECORD_SYS_RECVFROM: - { - uint32_t a[6]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (a[2]) - { - if (target_read_memory - (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, a[2]), - (unsigned long)sizeof (a[2])); - return -1; - } - if (record_arch_list_add_mem (a[1], a[2])) - return -1; - if (record_arch_list_add_mem (a[4], tdep->size_sockaddr)) - return -1; - if (record_arch_list_add_mem (a[5], tdep->size_int)) - return -1; - } - } - } - break; - case RECORD_SYS_SHUTDOWN: - case RECORD_SYS_SETSOCKOPT: - break; - case RECORD_SYS_GETSOCKOPT: - { - uint32_t a[5]; - uint32_t av; + tmpulongest +=3D tdep->size_ulong; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (tmpulongest, tdep->a= rg2), + tdep->size_ulong * 2); + return -1; + } + tmpulongest =3D extract_unsigned_integer (a, + tdep->size_ulong, + byte_order); + len =3D extract_unsigned_integer (a + tdep->size_ulong, + tdep->size_ulong, byte_ord= er); + if (record_linux_sockaddr (regcache, tdep, tmpulongest, le= n)) + return -1; + } + } + break; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (a[4]) - { - if (target_read_memory - (a[4], (gdb_byte *) & av, sizeof (av))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, a[4]), - (unsigned long)sizeof (av)); - return -1; - } - if (record_arch_list_add_mem (a[3], av)) - return -1; - if (record_arch_list_add_mem (a[4], tdep->size_int)) - return -1; - } - } - } - break; - case RECORD_SYS_SENDMSG: - break; - case RECORD_SYS_RECVMSG: - { - uint32_t a[2], i; - struct record_msghdr - { - uint32_t msg_name; - uint32_t msg_namelen; - uint32_t msg_iov; - uint32_t msg_iovlen; - uint32_t msg_control; - uint32_t msg_controllen; - uint32_t msg_flags; - } rec; - struct record_iovec - { - uint32_t iov_base; - uint32_t iov_len; - } iov; + case RECORD_SYS_SOCKETPAIR: + { + gdb_byte *a =3D alloca (tdep->size_ulong); + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest +=3D tdep->size_ulong * 3; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (tmpulongest, tdep->a= rg2), + tdep->size_ulong); + return -1; + } + tmpaddr + =3D (CORE_ADDR) extract_unsigned_integer (a, tdep->size_= ulong, + byte_order); + if (record_arch_list_add_mem (tmpaddr, tdep->size_int)) + return -1; + } + } + break; + case RECORD_SYS_SEND: + case RECORD_SYS_SENDTO: + break; + case RECORD_SYS_RECVFROM: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a =3D alloca (tdep->size_ulong * 2); + int addrlen; + gdb_byte *addrlenp; + ULONGEST len; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (record_arch_list_add_mem (a[1], tdep->size_msghdr)) - return -1; - if (a[1]) - { - if (target_read_memory - (a[1], (gdb_byte *) & rec, sizeof (rec))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, a[1]), - (unsigned long)sizeof (rec)); - return -1; - } - if (record_arch_list_add_mem - (rec.msg_name, rec.msg_namelen)) - return -1; - if (record_arch_list_add_mem - (rec.msg_control, rec.msg_controllen)) - return -1; - if (rec.msg_iov) - { - for (i =3D 0; i < rec.msg_iovlen; i++) - { - if (target_read_memory - (rec.msg_iov, (gdb_byte *) & iov, - sizeof (iov))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error " - "reading memory at " - "addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, - rec.msg_iov), - (unsigned long)sizeof (iov)); - return -1; - } - if (record_arch_list_add_mem - (iov.iov_base, iov.iov_len)) - return -1; - rec.msg_iov +=3D sizeof (struct record_iovec); - } - } - } - } - } - break; - default: - printf_unfiltered (_("Process record and replay target " - "doesn't support socketcall call 0x%s\n"), - phex_nz (tmpu32, 4)); - return -1; - break; - } + tmpulongest +=3D tdep->size_ulong * 4; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D %= d.\n", + OUTPUT_REG (tmpulongest, tdep->arg= 2), + tdep->size_ulong * 2); + return -1; + } + tmpulongest =3D extract_unsigned_integer (a, tdep->size_ulon= g, + byte_order); + len =3D extract_unsigned_integer (a + tdep->size_ulong, + tdep->size_ulong, byte_order= ); + if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) + return -1; + } + case RECORD_SYS_RECV: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a =3D alloca (tdep->size_ulong * 2); + + tmpulongest +=3D tdep->size_ulong; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D %= d.\n", + OUTPUT_REG (tmpulongest, tdep->arg= 2), + tdep->size_ulong); + return -1; + } + tmpulongest =3D extract_unsigned_integer (a, tdep->size_ulon= g, + byte_order); + if (tmpulongest) + { + a +=3D tdep->size_ulong; + tmpint =3D (int) extract_unsigned_integer (a, tdep->size= _ulong, + byte_order); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tmpint)) + return -1; + } + } + break; + case RECORD_SYS_SHUTDOWN: + case RECORD_SYS_SETSOCKOPT: + break; + case RECORD_SYS_GETSOCKOPT: + { + gdb_byte *a =3D alloca (tdep->size_ulong * 2); + gdb_byte *av =3D alloca (tdep->size_int); + + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest +=3D tdep->size_ulong * 3; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (tmpulongest, tdep->a= rg2), + tdep->size_ulong * 2); + return -1; + } + tmpulongest =3D extract_unsigned_integer (a + tdep->size_u= long, + tdep->size_ulong, + byte_order); + if (tmpulongest) + { + if (target_read_memory ((CORE_ADDR) tmpulongest, av, + tdep->size_int)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error readi= ng " + "memory at addr =3D 0x%s " + "len =3D %d.\n", + phex_nz (tmpulongest, + tdep->size_ulong), + tdep->size_int); + return -1; + } + tmpaddr + =3D (CORE_ADDR) extract_unsigned_integer (a, + tdep->size_u= long, + byte_order); + tmpint =3D (int) extract_unsigned_integer (av, + tdep->size_in= t, + byte_order); + if (record_arch_list_add_mem (tmpaddr, tmpint)) + return -1; + a +=3D tdep->size_ulong; + tmpaddr + =3D (CORE_ADDR) extract_unsigned_integer (a, + tdep->size_u= long, + byte_order); + if (record_arch_list_add_mem (tmpaddr, tdep->size_int)) + return -1; + } + } + } + break; + case RECORD_SYS_SENDMSG: + break; + case RECORD_SYS_RECVMSG: + { + gdb_byte *a =3D alloca (tdep->size_ulong); + + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest +=3D tdep->size_ulong; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (tmpulongest, tdep->a= rg2), + tdep->size_ulong); + return -1; + } + tmpulongest =3D extract_unsigned_integer (a, tdep->size_ul= ong, + byte_order); + if (record_linux_msghdr (regcache, tdep, tmpulongest)) + return -1; + } + } + break; + default: + printf_unfiltered (_("Process record and replay target " + "doesn't support socketcall call 0x%s\n"), + OUTPUT_REG (tmpulongest, tdep->arg1)); + return -1; + break; + } break; /* sys_syslog */ @@ -949,16 +1171,18 @@ record_linux_system_call (int num, struc /* sys_setitimer */ case 104: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerval)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_itimerval)) + return -1; break; /* sys_getitimer */ case 105: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerval)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_itimerval)) + return -1; break; /* sys_newstat */ @@ -967,16 +1191,19 @@ record_linux_system_call (int num, struc case 107: /* sys_newfstat */ case 108: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stat)) - return -1; + /* sys_newfstatat */ + case 540: + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_st= at)) + return -1; break; /* sys_uname */ case 109: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_utsname)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_utsname)) + return -1; break; /* sys_iopl */ @@ -991,12 +1218,14 @@ record_linux_system_call (int num, struc /* sys_wait4 */ case 114: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_int)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rusage)) + return -1; break; /* sys_swapoff */ @@ -1005,47 +1234,121 @@ record_linux_system_call (int num, struc /* sys_sysinfo */ case 116: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_sysinfo)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_sysinfo)) + return -1; + break; + + /* sys_shmget */ + case 520: + /* sys_semget */ + case 523: + /* sys_semop */ + case 524: + /* sys_msgget */ + case 528: + /* sys_shmdt */ + /* XXX maybe need do some record works with sys_shmdt. */ + case 527: + /* sys_msgsnd */ + case 529: + /* sys_semtimedop */ + case 532: + break; + + /* sys_shmat */ + case 521: + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_ulong)) + return -1; + break; + + /* sys_shmctl */ + case 522: + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_shmid_ds)) + return -1; + break; + + /* sys_semctl */ + /* XXX sys_semctl 525 still not support. */ + + /* sys_msgrcv */ + case 530: + { + ULONGEST msgp; + regcache_raw_read_signed (regcache, tdep->arg3, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg2, &msgp); + tmpint =3D (int) tmpulongest + tdep->size_long; + if (record_arch_list_add_mem ((CORE_ADDR) msgp, tmpint)) + return -1; + } + break; + + /* sys_msgctl */ + case 531: + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_msqid_ds)) + return -1; break; /* sys_ipc */ case 117: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case RECORD_MSGRCV: - { - int32_t second; - uint32_t ptr; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & second); - regcache_raw_read (regcache, tdep->arg5, - (gdb_byte *) & ptr); - if (record_arch_list_add_mem (ptr, second + tdep->size_long)) - return -1; - } - break; - case RECORD_MSGCTL: - regcache_raw_read (regcache, tdep->arg5, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_msqid_ds)) - return -1; - break; - case RECORD_SHMAT: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_ulong)) - return -1; - break; - case RECORD_SHMCTL: - regcache_raw_read (regcache, tdep->arg5, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_shmid_ds)) - return -1; - break; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + tmpulongest &=3D 0xffff; + switch (tmpulongest) + { + case RECORD_SEMOP: + case RECORD_SEMGET: + case RECORD_SEMTIMEDOP: + case RECORD_MSGSND: + case RECORD_MSGGET: + /* XXX maybe need do some record works with RECORD_SHMDT. */ + case RECORD_SHMDT: + case RECORD_SHMGET: + break; + case RECORD_MSGRCV: + { + ULONGEST second; + ULONGEST ptr; + regcache_raw_read_signed (regcache, tdep->arg3, &second); + regcache_raw_read_unsigned (regcache, tdep->arg5, &ptr); + tmpint =3D (int) second + tdep->size_long; + if (record_arch_list_add_mem ((CORE_ADDR) ptr, tmpint)) + return -1; + } + break; + case RECORD_MSGCTL: + regcache_raw_read_unsigned (regcache, tdep->arg5, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_msqid_ds)) + return -1; + break; + case RECORD_SHMAT: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_ulong)) + return -1; + break; + case RECORD_SHMCTL: + regcache_raw_read_unsigned (regcache, tdep->arg5, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_shmid_ds)) + return -1; + break; + default: + /* XXX RECORD_SEMCTL still not support. */ + printf_unfiltered (_("Process record and replay target doesn't " + "support ipc number %d\n"), (int) tmpulonge= st); + break; + } break; /* sys_fsync */ @@ -1060,30 +1363,30 @@ record_linux_system_call (int num, struc /* sys_newuname */ case 122: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_new_utsname)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_new_utsname)) + return -1; break; /* sys_modify_ldt */ case 123: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D 0 || tmpu32 =3D=3D 2) - { - uint32_t ptr, bytecount; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & ptr); - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & bytecount); - if (record_arch_list_add_mem (ptr, bytecount)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D 0 || tmpulongest =3D=3D 2) + { + ULONGEST ptr, bytecount; + regcache_raw_read_unsigned (regcache, tdep->arg2, &ptr); + regcache_raw_read_unsigned (regcache, tdep->arg3, &bytecount); + if (record_arch_list_add_mem ((CORE_ADDR) ptr, (int) bytecount)) + return -1; + } break; /* sys_adjtimex */ case 124: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timex)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_ti= mex)) + return -1; break; /* sys_mprotect */ @@ -1092,9 +1395,10 @@ record_linux_system_call (int num, struc /* sys_sigprocmask */ case 126: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigset_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_sigset_t)) + return -1; break; /* sys_ni_syscall */ @@ -1109,35 +1413,39 @@ record_linux_system_call (int num, struc /* sys_quotactl */ case 131: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case RECORD_Q_GETFMT: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, 4)) - return -1; - break; - case RECORD_Q_GETINFO: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_mem_dqinfo)) - return -1; - break; - case RECORD_Q_GETQUOTA: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_if_dqblk)) - return -1; - break; - case RECORD_Q_XGETQSTAT: - case RECORD_Q_XGETQUOTA: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fs_quota_stat)) - return -1; - break; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + switch (tmpulongest) + { + case RECORD_Q_GETFMT: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + /* __u32 */ + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 4)) + return -1; + break; + case RECORD_Q_GETINFO: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_mem_dqinfo)) + return -1; + break; + case RECORD_Q_GETQUOTA: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_if_dqblk)) + return -1; + break; + case RECORD_Q_XGETQSTAT: + case RECORD_Q_XGETQUOTA: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fs_quota_stat)) + return -1; + break; + } break; /* sys_getpgid */ @@ -1150,15 +1458,15 @@ record_linux_system_call (int num, struc /* sys_sysfs */ case 135: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D 2) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - /*XXX the size of memory is not very clear. */ - if (record_arch_list_add_mem (tmpu32, 10)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D 2) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + /*XXX the size of memory is not very clear. */ + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 10)) + return -1; + } break; /* sys_personality */ @@ -1173,37 +1481,43 @@ record_linux_system_call (int num, struc /* sys_llseek */ case 140: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; break; /* sys_getdents */ case 141: { - uint32_t count; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); - if (record_arch_list_add_mem (tmpu32, tdep->size_dirent * count)) - return -1; + ULONGEST count; + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &count); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_dirent * count)) + return -1; } break; /* sys_select */ case 142: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timeval)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timeval)) + return -1; break; /* sys_flock */ @@ -1215,36 +1529,40 @@ record_linux_system_call (int num, struc /* sys_readv */ case 145: { - uint32_t vec; - uint32_t vlen; - struct record_iovec - { - uint32_t iov_base; - uint32_t iov_len; - } iov; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec); - if (vec) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & vlen); - for (tmpu32 =3D 0; tmpu32 < vlen; tmpu32++) - { - if (target_read_memory - (vec, (gdb_byte *) & iov, sizeof (struct record_iovec))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, vec), - (unsigned long)sizeof (struct record_iovec)); - return -1; - } - if (record_arch_list_add_mem (iov.iov_base, iov.iov_len)) - return -1; - vec +=3D sizeof (struct record_iovec); - } - } + ULONGEST vec, vlen; + + regcache_raw_read_unsigned (regcache, tdep->arg2, &vec); + if (vec) + { + gdb_byte *iov =3D alloca (tdep->size_iovec); + + regcache_raw_read_unsigned (regcache, tdep->arg3, &vlen); + for (tmpulongest =3D 0; tmpulongest < vlen; tmpulongest++) + { + if (target_read_memory ((CORE_ADDR) vec, iov, + tdep->size_iovec)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (vec, tdep->arg2), + tdep->size_iovec); + return -1; + } + tmpaddr + =3D (CORE_ADDR) extract_unsigned_integer (iov, + tdep->size_point= er, + byte_order); + tmpint + =3D (int) extract_unsigned_integer (iov + tdep->size_poi= nter, + tdep->size_size_t, + byte_order); + if (record_arch_list_add_mem (tmpaddr, tmpint)) + return -1; + vec +=3D tdep->size_iovec; + } + } } break; @@ -1270,9 +1588,9 @@ record_linux_system_call (int num, struc /* sys_sched_getparam */ case 155: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_sched_setscheduler */ @@ -1291,9 +1609,10 @@ record_linux_system_call (int num, struc case 161: /* sys_nanosleep */ case 162: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_mremap */ @@ -1304,15 +1623,18 @@ record_linux_system_call (int num, struc /* sys_getresuid16 */ case 165: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_uid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_uid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_uid_t)) + return -1; break; /* sys_vm86 */ @@ -1323,32 +1645,32 @@ record_linux_system_call (int num, struc /* sys_poll */ case 168: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t nfds; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & nfds); - if (record_arch_list_add_mem (tmpu32, tdep->size_pollfd * nfds)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST nfds; + regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_pollfd * nfds)) + return -1; + } break; /* sys_nfsservctl */ case 169: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D 7 || tmpu32 =3D=3D 8) - { - uint32_t rsize; - if (tmpu32 =3D=3D 7) - rsize =3D tdep->size_NFS_FHSIZE; - else - rsize =3D tdep->size_knfsd_fh; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, rsize)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D 7 || tmpulongest =3D=3D 8) + { + int rsize; + if (tmpulongest =3D=3D 7) + rsize =3D tdep->size_NFS_FHSIZE; + else + rsize =3D tdep->size_knfsd_fh; + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, rsize)) + return -1; + } break; /* sys_setresgid16 */ @@ -1357,35 +1679,40 @@ record_linux_system_call (int num, struc /* sys_getresgid16 */ case 171: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; break; /* sys_prctl */ case 172: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case 2: - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - break; - case 16: - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_TASK_COMM_LEN)) - return -1; - break; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + switch (tmpulongest) + { + case 2: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_int)) + return -1; + break; + case 16: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_TASK_COMM_LEN)) + return -1; + break; + } break; /* sys_rt_sigreturn */ @@ -1394,36 +1721,39 @@ record_linux_system_call (int num, struc /* sys_rt_sigaction */ case 174: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_sigaction)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_sigaction)) + return -1; break; /* sys_rt_sigprocmask */ case 175: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_sigset_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_sigset_t)) + return -1; break; /* sys_rt_sigpending */ case 176: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t sigsetsize; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & sigsetsize); - if (record_arch_list_add_mem (tmpu32, sigsetsize)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST sigsetsize; + regcache_raw_read_unsigned (regcache, tdep->arg2,&sigsetsize); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + (int) sigsetsize)) + return -1; + } break; /* sys_rt_sigtimedwait */ case 177: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_siginfo_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_siginfo_t)) + return -1; break; /* sys_rt_sigqueueinfo */ @@ -1434,15 +1764,14 @@ record_linux_system_call (int num, struc /* sys_pread64 */ case 180: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t count; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & count); - if (record_arch_list_add_mem (tmpu32, count)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST count; + regcache_raw_read_unsigned (regcache, tdep->arg3,&count); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) cou= nt)) + return -1; + } break; /* sys_pwrite64 */ @@ -1453,22 +1782,22 @@ record_linux_system_call (int num, struc /* sys_getcwd */ case 183: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t size; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & size); - if (record_arch_list_add_mem (tmpu32, size)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg2, &size); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) siz= e)) + return -1; + } break; /* sys_capget */ case 184: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_cap_user_data_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_cap_user_data_t)) + return -1; break; /* sys_capset */ @@ -1477,16 +1806,18 @@ record_linux_system_call (int num, struc /* sys_sigaltstack */ case 186: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stack_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_stack_t)) + return -1; break; /* sys_sendfile */ case 187: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_off_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_off_t)) + return -1; break; /* sys_ni_syscall */ @@ -1499,9 +1830,10 @@ record_linux_system_call (int num, struc /* sys_getrlimit */ case 191: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rlimit)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rlimit)) + return -1; break; /* sys_mmap2 */ @@ -1520,9 +1852,10 @@ record_linux_system_call (int num, struc case 196: /* sys_fstat64 */ case 197: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stat64)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_stat64)) + return -1; break; /* sys_lchown */ @@ -1543,16 +1876,16 @@ record_linux_system_call (int num, struc /* sys_getgroups */ case 205: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int gidsetsize; - regcache_raw_read (regcache, tdep->arg1, - (gdb_byte *) & gidsetsize); - if (record_arch_list_add_mem - (tmpu32, tdep->size_gid_t * gidsetsize)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST gidsetsize; + regcache_raw_read_unsigned (regcache, tdep->arg1, + &gidsetsize); + tmpint =3D tdep->size_gid_t * (int) gidsetsize; + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint)) + return -1; + } break; /* sys_setgroups */ @@ -1565,15 +1898,15 @@ record_linux_system_call (int num, struc /* sys_getresuid */ case 209: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_ui= d_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_ui= d_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_ui= d_t)) + return -1; break; /* sys_setresgid */ @@ -1582,15 +1915,15 @@ record_linux_system_call (int num, struc /* sys_getresgid */ case 211: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gi= d_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gi= d_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gi= d_t)) + return -1; break; /* sys_chown */ @@ -1609,9 +1942,10 @@ record_linux_system_call (int num, struc /* sys_mincore */ case 218: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_PAGE_SIZE)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_PAGE_SIZE)) + return -1; break; /* sys_madvise */ @@ -1621,30 +1955,32 @@ record_linux_system_call (int num, struc /* sys_getdents64 */ case 220: { - uint32_t count; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); - if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count)) - return -1; + ULONGEST count; + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &count); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_dirent64 * count)) + return -1; } break; /* sys_fcntl64 */ case 221: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D tdep->fcntl_F_GETLK64) + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest =3D=3D tdep->fcntl_F_GETLK64) { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_flock64)) - return -1; - } - else if (tmpu32 !=3D tdep->fcntl_F_SETLK64 - && tmpu32 !=3D tdep->fcntl_F_SETLKW64) + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_flock64)) + return -1; + } + else if (tmpulongest !=3D tdep->fcntl_F_SETLK64 + && tmpulongest !=3D tdep->fcntl_F_SETLKW64) { - goto sys_fcntl; - } + goto sys_fcntl; + } break; /* sys_ni_syscall */ @@ -1669,15 +2005,14 @@ record_linux_system_call (int num, struc case 230: /* sys_fgetxattr */ case 231: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t size; - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & size); - if (record_arch_list_add_mem (tmpu32, size)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg4, &size); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) siz= e)) + return -1; + } break; /* sys_listxattr */ @@ -1686,15 +2021,14 @@ record_linux_system_call (int num, struc case 233: /* sys_flistxattr */ case 234: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t size; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & size); - if (record_arch_list_add_mem (tmpu32, size)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg3, &size); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) siz= e)) + return -1; + } break; /* sys_removexattr */ @@ -1709,9 +2043,10 @@ record_linux_system_call (int num, struc /* sys_sendfile64 */ case 239: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; break; /* sys_futex */ @@ -1722,35 +2057,36 @@ record_linux_system_call (int num, struc /* sys_sched_getaffinity */ case 242: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t len; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len); - if (record_arch_list_add_mem (tmpu32, len)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg2, &len); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len= )) + return -1; + } break; /* sys_set_thread_area */ case 243: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_get_thread_area */ case 244: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_user_desc)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_user_desc)) + return -1; break; /* sys_io_setup */ case 245: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_long)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_lo= ng)) + return -1; break; /* sys_io_destroy */ @@ -1759,49 +2095,57 @@ record_linux_system_call (int num, struc /* sys_io_getevents */ case 247: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t nr; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & nr); - if (record_arch_list_add_mem (tmpu32, nr * tdep->size_io_event)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (tmpulongest) + { + ULONGEST nr; + regcache_raw_read_unsigned (regcache, tdep->arg3, &nr); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + nr * tdep->size_io_event)) + return -1; + } break; /* sys_io_submit */ case 248: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t i, nr; - uint32_t *iocbp; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr); - iocbp =3D (uint32_t *) alloca (nr * tdep->size_int); - if (target_read_memory - (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading memory " - "at addr =3D %s len =3D %u.\n", - paddress (gdbarch, tmpu32), - (int)(nr * tdep->size_int)); - return -1; - } - for (i =3D 0; i < nr; i++) - { - if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb)) - return -1; - } - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST nr, i; + gdb_byte *iocbp; + + regcache_raw_read_unsigned (regcache, tdep->arg2, &nr); + iocbp =3D alloca (nr * tdep->size_pointer); + if (target_read_memory ((CORE_ADDR) tmpulongest, iocbp, + nr * tdep->size_pointer)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading memory " + "at addr =3D 0x%s len =3D %u.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + (int) (nr * tdep->size_pointer)); + return -1; + } + for (i =3D 0; i < nr; i++) + { + tmpaddr + =3D (CORE_ADDR) extract_unsigned_integer (iocbp, + tdep->size_pointer, + byte_order); + if (record_arch_list_add_mem (tmpaddr, tdep->size_iocb)) + return -1; + iocbp +=3D tdep->size_pointer; + } + } break; /* sys_io_cancel */ case 249: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_io_event)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_io_event)) + return -1; break; /* sys_fadvise64 */ @@ -1813,28 +2157,27 @@ record_linux_system_call (int num, struc /* sys_exit_group */ case 252: { - int q; - target_terminal_ours (); - q =3D - yquery (_("The next instruction is syscall exit_group. " - "It will make the program exit. " - "Do you want to stop the program?")); - target_terminal_inferior (); - if (q) - return 1; + int q; + target_terminal_ours (); + q =3D yquery (_("The next instruction is syscall exit_group. " + "It will make the program exit. " + "Do you want to stop the program?")); + target_terminal_inferior (); + if (q) + return 1; } break; /* sys_lookup_dcookie */ case 253: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t len; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len); - if (record_arch_list_add_mem (tmpu32, len)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg3, &len); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len= )) + return -1; + } break; /* sys_epoll_create */ @@ -1845,16 +2188,15 @@ record_linux_system_call (int num, struc /* sys_epoll_wait */ case 256: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t maxevents; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & maxevents); - if (record_arch_list_add_mem - (tmpu32, maxevents * tdep->size_epoll_event)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST maxevents; + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + maxevents * tdep->size_epoll_event= )) + return -1; + } break; /* sys_remap_file_pages */ @@ -1865,23 +2207,25 @@ record_linux_system_call (int num, struc /* sys_timer_create */ case 259: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_timer_settime */ case 260: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerspec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_itimerspec)) + return -1; break; /* sys_timer_gettime */ case 261: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerspec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_itimerspec)) + return -1; break; /* sys_timer_getoverrun */ @@ -1894,32 +2238,36 @@ record_linux_system_call (int num, struc /* sys_clock_gettime */ case 265: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_clock_getres */ case 266: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_clock_nanosleep */ case 267: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_statfs64 */ case 268: /* sys_fstatfs64 */ case 269: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_statfs64)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_statfs64)) + return -1; break; /* sys_tgkill */ @@ -1936,18 +2284,18 @@ record_linux_system_call (int num, struc /* sys_get_mempolicy */ case 275: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t maxnode; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & maxnode); - if (record_arch_list_add_mem (tmpu32, maxnode * tdep->size_long)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST maxnode; + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxnode); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + maxnode * tdep->size_long)) + return -1; + } break; /* sys_set_mempolicy */ @@ -1962,18 +2310,18 @@ record_linux_system_call (int num, struc /* sys_mq_timedreceive */ case 280: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t msg_len; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & msg_len); - if (record_arch_list_add_mem (tmpu32, msg_len)) - return -1; - } - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST msg_len; + regcache_raw_read_unsigned (regcache, tdep->arg3, &msg_len); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + (int) msg_len)) + return -1; + } + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_mq_notify */ @@ -1982,9 +2330,10 @@ record_linux_system_call (int num, struc /* sys_mq_getsetattr */ case 282: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_mq_attr)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_mq_attr)) + return -1; break; /* sys_kexec_load */ @@ -1993,12 +2342,14 @@ record_linux_system_call (int num, struc /* sys_waitid */ case 284: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_siginfo)) - return -1; - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_siginfo)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rusage)) + return -1; break; /* sys_ni_syscall */ @@ -2011,20 +2362,20 @@ record_linux_system_call (int num, struc /* sys_keyctl */ case 288: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D 6 || tmpu32 =3D=3D 11) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t buflen; - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & buflen); - if (record_arch_list_add_mem (tmpu32, buflen)) - return -1; - } - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D 6 || tmpulongest =3D=3D 11) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (tmpulongest) + { + ULONGEST buflen; + regcache_raw_read_unsigned (regcache, tdep->arg4, &buflen); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + (int) buflen)) + return -1; + } + } break; /* sys_ioprio_set */ @@ -2053,9 +2404,10 @@ record_linux_system_call (int num, struc /* sys_fstatat64 */ case 300: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stat64)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_stat64)) + return -1; break; /* sys_unlinkat */ @@ -2070,15 +2422,14 @@ record_linux_system_call (int num, struc /* sys_readlinkat */ case 305: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t bufsiz; - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & bufsiz); - if (record_arch_list_add_mem (tmpu32, bufsiz)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST bufsiz; + regcache_raw_read_unsigned (regcache, tdep->arg4, &bufsiz); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) buf= siz)) + return -1; + } break; /* sys_fchmodat */ @@ -2089,34 +2440,39 @@ record_linux_system_call (int num, struc /* sys_pselect6 */ case 308: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_ppoll */ case 309: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t nfds; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & nfds); - if (record_arch_list_add_mem (tmpu32, tdep->size_pollfd * nfds)) - return -1; - } - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST nfds; + regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_pollfd * nfds)) + return -1; + } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_unshare */ @@ -2127,22 +2483,24 @@ record_linux_system_call (int num, struc /* sys_get_robust_list */ case 312: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_splice */ case 313: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; break; /* sys_sync_file_range */ @@ -2155,48 +2513,47 @@ record_linux_system_call (int num, struc /* sys_move_pages */ case 317: - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t nr_pages; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & nr_pages); - if (record_arch_list_add_mem (tmpu32, nr_pages * tdep->size_int)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (tmpulongest) + { + ULONGEST nr_pages; + regcache_raw_read_unsigned (regcache, tdep->arg2, &nr_pages); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + nr_pages * tdep->size_int)) + return -1; + } break; /* sys_getcpu */ case 318: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_ulong * 2)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_ulong * 2)) + return -1; break; /* sys_epoll_pwait */ case 319: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t maxevents; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & maxevents); - if (record_arch_list_add_mem - (tmpu32, maxevents * tdep->size_epoll_event)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST maxevents; + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents); + tmpint =3D (int) maxevents * tdep->size_epoll_event; + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint)) + return -1; + } break; default: printf_unfiltered (_("Process record and replay target doesn't " - "support syscall number %u\n"), - (int)tmpu32); + "support syscall number %u\n"), num); return -1; break; } --- a/linux-record.h +++ b/linux-record.h @@ -23,6 +23,7 @@ struct linux_record_tdep { /* The size of the type that will be used in a system call. */ + int size_pointer; int size__old_kernel_stat; int size_tms; int size_loff_t; @@ -81,7 +82,6 @@ struct linux_record_tdep int size_itimerspec; int size_mq_attr; int size_siginfo; - int size_termios; int size_termios2; int size_pid_t; @@ -89,6 +89,8 @@ struct linux_record_tdep int size_serial_struct; int size_serial_icounter_struct; int size_hayes_esp_config; + int size_size_t; + int size_iovec; /* The values of the second argument of system call "sys_ioctl". */ int ioctl_TCGETS; @@ -171,6 +173,7 @@ struct linux_record_tdep int arg3; int arg4; int arg5; + int arg6; }; extern int record_linux_system_call (int num, struct regcache *regcache, --001636e90a905aba08046fba291e Content-Type: text/plain; charset=US-ASCII; name="prec_syscall_64bits.txt" Content-Disposition: attachment; filename="prec_syscall_64bits.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fxnym5q30 Content-length: 162195 LS0tCiBpMzg2LWxpbnV4LXRkZXAuYyB8ICAgMjYgCiBsaW51eC1yZWNvcmQu YyAgICB8IDI1NjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBsaW51eC1yZWNvcmQuaCAgICB8ICAg IDUgCiAzIGZpbGVzIGNoYW5nZWQsIDE0ODggaW5zZXJ0aW9ucygrKSwgMTEx MiBkZWxldGlvbnMoLSkKCi0tLSBhL2kzODYtbGludXgtdGRlcC5jCisrKyBi L2kzODYtbGludXgtdGRlcC5jCkBAIC0zNjksNyArMzY5LDE0IEBAIGkzODZf bGludXhfaW50eDgwX3N5c2VudGVyX3JlY29yZCAoc3RydWMKICAgaW50IHJl dDsKICAgdWludDMyX3QgdG1wdTMyOwogCi0gIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgSTM4Nl9FQVhfUkVHTlVNLCAoZ2RiX2J5dGUgKikmdG1w dTMyKTsKKyAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCBJMzg2X0VB WF9SRUdOVU0sIChnZGJfYnl0ZSAqKSAmdG1wdTMyKTsKKworICBpZiAodG1w dTMyID4gNDk5KQorICAgIHsKKyAgICAgIHByaW50Zl91bmZpbHRlcmVkIChf KCJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vzbid0ICIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0IHN5c2NhbGwg bnVtYmVyICV1XG4iKSwgdG1wdTMyKTsKKyAgICAgIHJldHVybiAtMTsKKyAg ICB9CiAKICAgcmV0ID0gcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsICh0bXB1 MzIsIHJlZ2NhY2hlLAogCQkJCSAgJmkzODZfbGludXhfcmVjb3JkX3RkZXAp OwpAQCAtNDgxLDYgKzQ4OCw4IEBAIGkzODZfbGludXhfaW5pdF9hYmkgKHN0 cnVjdCBnZGJhcmNoX2luZm8KICAgLyogSW5pdGlhbGl6ZSB0aGUgaTM4Nl9s aW51eF9yZWNvcmRfdGRlcC4gICovCiAgIC8qIFRoZXNlIHZhbHVlcyBhcmUg dGhlIHNpemUgb2YgdGhlIHR5cGUgdGhhdCB3aWxsIGJlIHVzZWQgaW4gYSBz eXN0ZW0KICAgICAgY2FsbC4gIFRoZXkgYXJlIG9idGFpbmVkIGZyb20gTGlu dXggS2VybmVsIHNvdXJjZS4gICovCisgIGkzODZfbGludXhfcmVjb3JkX3Rk ZXAuc2l6ZV9wb2ludGVyCisgICAgPSBnZGJhcmNoX3B0cl9iaXQgKGdkYmFy Y2gpIC8gVEFSR0VUX0NIQVJfQklUOwogICBpMzg2X2xpbnV4X3JlY29yZF90 ZGVwLnNpemVfX29sZF9rZXJuZWxfc3RhdCA9IDMyOwogICBpMzg2X2xpbnV4 X3JlY29yZF90ZGVwLnNpemVfdG1zID0gMTY7CiAgIGkzODZfbGludXhfcmVj b3JkX3RkZXAuc2l6ZV9sb2ZmX3QgPSA4OwpAQCAtNTAxLDkgKzUxMCwxMiBA QCBpMzg2X2xpbnV4X2luaXRfYWJpIChzdHJ1Y3QgZ2RiYXJjaF9pbmZvCiAg IGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9zdGF0ZnMgPSA2NDsKICAg aTM4Nl9saW51eF9yZWNvcmRfdGRlcC5zaXplX3N0YXRmczY0ID0gODQ7CiAg IGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9zb2NrYWRkciA9IDE2Owot ICBpMzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfaW50ID0gNDsKLSAgaTM4 Nl9saW51eF9yZWNvcmRfdGRlcC5zaXplX2xvbmcgPSA0OwotICBpMzg2X2xp bnV4X3JlY29yZF90ZGVwLnNpemVfdWxvbmcgPSA0OworICBpMzg2X2xpbnV4 X3JlY29yZF90ZGVwLnNpemVfaW50CisgICAgPSBnZGJhcmNoX2ludF9iaXQg KGdkYmFyY2gpIC8gVEFSR0VUX0NIQVJfQklUOworICBpMzg2X2xpbnV4X3Jl Y29yZF90ZGVwLnNpemVfbG9uZworICAgID0gZ2RiYXJjaF9sb25nX2JpdCAo Z2RiYXJjaCkgLyBUQVJHRVRfQ0hBUl9CSVQ7CisgIGkzODZfbGludXhfcmVj b3JkX3RkZXAuc2l6ZV91bG9uZworICAgID0gZ2RiYXJjaF9sb25nX2JpdCAo Z2RiYXJjaCkgLyBUQVJHRVRfQ0hBUl9CSVQ7CiAgIGkzODZfbGludXhfcmVj b3JkX3RkZXAuc2l6ZV9tc2doZHIgPSAyODsKICAgaTM4Nl9saW51eF9yZWNv cmRfdGRlcC5zaXplX2l0aW1lcnZhbCA9IDE2OwogICBpMzg2X2xpbnV4X3Jl Y29yZF90ZGVwLnNpemVfc3RhdCA9IDg4OwpAQCAtNTM2LDcgKzU0OCw4IEBA IGkzODZfbGludXhfaW5pdF9hYmkgKHN0cnVjdCBnZGJhcmNoX2luZm8KICAg aTM4Nl9saW51eF9yZWNvcmRfdGRlcC5zaXplX2lvX2V2ZW50ID0gMzI7CiAg IGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9pb2NiID0gNjQ7CiAgIGkz ODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9lcG9sbF9ldmVudCA9IDEyOwot ICBpMzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfaXRpbWVyc3BlYyA9IGkz ODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV90aW1lc3BlYyAqIDI7CisgIGkz ODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9pdGltZXJzcGVjCisgICAgPSBp Mzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfdGltZXNwZWMgKiAyOwogICBp Mzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfbXFfYXR0ciA9IDMyOwogICBp Mzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfc2lnaW5mbyA9IDEyODsKICAg aTM4Nl9saW51eF9yZWNvcmRfdGRlcC5zaXplX3Rlcm1pb3MgPSAzNjsKQEAg LTU0Niw2ICs1NTksOCBAQCBpMzg2X2xpbnV4X2luaXRfYWJpIChzdHJ1Y3Qg Z2RiYXJjaF9pbmZvCiAgIGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9z ZXJpYWxfc3RydWN0ID0gNjA7CiAgIGkzODZfbGludXhfcmVjb3JkX3RkZXAu c2l6ZV9zZXJpYWxfaWNvdW50ZXJfc3RydWN0ID0gODA7CiAgIGkzODZfbGlu dXhfcmVjb3JkX3RkZXAuc2l6ZV9oYXllc19lc3BfY29uZmlnID0gMTI7Cisg IGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9zaXplX3QgPSA0OworICBp Mzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfaW92ZWMgPSA4OwogCiAgIC8q IFRoZXNlIHZhbHVlcyBhcmUgdGhlIHNlY29uZCBhcmd1bWVudCBvZiBzeXN0 ZW0gY2FsbCAic3lzX2lvY3RsIi4KICAgICAgVGhleSBhcmUgb2J0YWluZWQg ZnJvbSBMaW51eCBLZXJuZWwgc291cmNlLiAgKi8KQEAgLTYyNyw2ICs2NDIs NyBAQCBpMzg2X2xpbnV4X2luaXRfYWJpIChzdHJ1Y3QgZ2RiYXJjaF9pbmZv CiAgIGkzODZfbGludXhfcmVjb3JkX3RkZXAuYXJnMyA9IEkzODZfRURYX1JF R05VTTsKICAgaTM4Nl9saW51eF9yZWNvcmRfdGRlcC5hcmc0ID0gSTM4Nl9F U0lfUkVHTlVNOwogICBpMzg2X2xpbnV4X3JlY29yZF90ZGVwLmFyZzUgPSBJ Mzg2X0VESV9SRUdOVU07CisgIGkzODZfbGludXhfcmVjb3JkX3RkZXAuYXJn NiA9IEkzODZfRUJQX1JFR05VTTsKIAogICB0ZGVwLT5pMzg2X2ludHg4MF9y ZWNvcmQgPSBpMzg2X2xpbnV4X2ludHg4MF9zeXNlbnRlcl9yZWNvcmQ7CiAg IHRkZXAtPmkzODZfc3lzZW50ZXJfcmVjb3JkID0gaTM4Nl9saW51eF9pbnR4 ODBfc3lzZW50ZXJfcmVjb3JkOwotLS0gYS9saW51eC1yZWNvcmQuYworKysg Yi9saW51eC1yZWNvcmQuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVk ZSAiZGVmcy5oIgogI2luY2x1ZGUgInRhcmdldC5oIgorI2luY2x1ZGUgImdk YnR5cGVzLmgiCiAjaW5jbHVkZSAicmVnY2FjaGUuaCIKICNpbmNsdWRlICJy ZWNvcmQuaCIKICNpbmNsdWRlICJsaW51eC1yZWNvcmQuaCIKQEAgLTgwLDYg KzgxLDEzNCBAQAogI2RlZmluZSBSRUNPUkRfUV9YR0VUUVNUQVQJKCgnNScg PDwgOCkgKyA1KQogI2RlZmluZSBSRUNPUkRfUV9YR0VUUVVPVEEJKCgnMycg PDwgOCkgKyAzKQogCisjZGVmaW5lIE9VVFBVVF9SRUcodmFsLCBudW0pICAg ICAgcGhleF9ueiAoKHZhbCksIFwKKyAgICBUWVBFX0xFTkdUSCAoZ2RiYXJj aF9yZWdpc3Rlcl90eXBlIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUp LCAobnVtKSkpKQorCitzdGF0aWMgaW50CityZWNvcmRfbGludXhfc29ja2Fk ZHIgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBsaW51eF9yZWNvcmRfdGRlcCAqdGRlcCwgVUxP TkdFU1QgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgVUxPTkdFU1Qg bGVuKQoreworICBnZGJfYnl0ZSAqYTsKKyAgaW50IGFkZHJsZW47CisgIHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X3JlZ2NhY2hlX2FyY2ggKHJl Z2NhY2hlKTsKKyAgZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJh cmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpOworCisgIGlmICghYWRkcikKKyAg ICByZXR1cm4gMDsKKworICBhID0gYWxsb2NhICh0ZGVwLT5zaXplX2ludCk7 CisKKyAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQURE UikgbGVuLCB0ZGVwLT5zaXplX2ludCkpCisgICAgcmV0dXJuIC0xOworCisg IC8qIEdldCB0aGUgYWRkcmxlbi4gICovCisgIGlmICh0YXJnZXRfcmVhZF9t ZW1vcnkgKChDT1JFX0FERFIpIGxlbiwgYSwgdGRlcC0+c2l6ZV9pbnQpKQor ICAgIHsKKyAgICAgIGlmIChyZWNvcmRfZGVidWcpCisgICAgICAgIGZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1vcnkgYXQgYWRkciA9 IDB4JXMgbGVuID0gJWQuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBoZXhfbnogKGxlbiwgdGRlcC0+c2l6ZV9wb2ludGVyKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2ludCk7CisgICAg ICAgIHJldHVybiAtMTsKKyAgICB9CisgIGFkZHJsZW4gPSAoaW50KSBleHRy YWN0X3Vuc2lnbmVkX2ludGVnZXIgKGEsIHRkZXAtPnNpemVfaW50LCBieXRl X29yZGVyKTsKKyAgaWYgKGFkZHJsZW4gPD0gMCB8fCBhZGRybGVuID4gdGRl cC0+c2l6ZV9zb2NrYWRkcikKKyAgICBhZGRybGVuID0gdGRlcC0+c2l6ZV9z b2NrYWRkcjsKKworICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSBhZGRyLCBhZGRybGVuKSkKKyAgICByZXR1cm4gLTE7CisK KyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JlY29yZF9saW51eF9t c2doZHIgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgbGludXhfcmVjb3JkX3RkZXAgKnRkZXAsIFVM T05HRVNUIGFkZHIpCit7CisgIGdkYl9ieXRlICphOworICBzdHJ1Y3QgZ2Ri YXJjaCAqZ2RiYXJjaCA9IGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSk7 CisgIGVudW0gYmZkX2VuZGlhbiBieXRlX29yZGVyID0gZ2RiYXJjaF9ieXRl X29yZGVyIChnZGJhcmNoKTsKKyAgQ09SRV9BRERSIHRtcGFkZHI7CisgIGlu dCB0bXBpbnQ7CisKKyAgaWYgKCFhZGRyKQorICAgIHJldHVybiAwOworCisg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIGFk ZHIsIHRkZXAtPnNpemVfbXNnaGRyKSkKKyAgICByZXR1cm4gLTE7CisKKyAg YSA9IGFsbG9jYSAodGRlcC0+c2l6ZV9tc2doZHIpOworICBpZiAodGFyZ2V0 X3JlYWRfbWVtb3J5ICgoQ09SRV9BRERSKSBhZGRyLCBhLCB0ZGVwLT5zaXpl X21zZ2hkcikpCisgICAgeworICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKKyAg ICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3Ig cmVhZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW9y eSBhdCBhZGRyID0gMHglcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImxlbiA9ICVkLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwaGV4X256IChhZGRyLCB0ZGVwLT5zaXplX3BvaW50ZXIpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfbXNnaGRyKTsKKyAg ICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAvKiBtc2dfbmFtZSBtc2df bmFtZWxlbiAqLworICBhZGRyID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2Vy IChhLCB0ZGVwLT5zaXplX3BvaW50ZXIsIGJ5dGVfb3JkZXIpOworICBhICs9 IHRkZXAtPnNpemVfcG9pbnRlcjsKKyAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUikgYWRkciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGludCkgZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2Vy IChhLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV9pbnQsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBieXRlX29yZGVyKSkpCisgICAgcmV0dXJuIC0xOworICBhICs9IHRk ZXAtPnNpemVfaW50OworCisgIC8qIG1zZ19pb3YgbXNnX2lvdmxlbiAqLwor ICBhZGRyID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyIChhLCB0ZGVwLT5z aXplX3BvaW50ZXIsIGJ5dGVfb3JkZXIpOworICBhICs9IHRkZXAtPnNpemVf cG9pbnRlcjsKKyAgaWYgKGFkZHIpCisgICAgeworICAgICAgVUxPTkdFU1Qg aTsKKyAgICAgIFVMT05HRVNUIGxlbiA9IGV4dHJhY3RfdW5zaWduZWRfaW50 ZWdlciAoYSwgdGRlcC0+c2l6ZV9zaXplX3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfb3JkZXIpOwor ICAgICAgZ2RiX2J5dGUgKmlvdiA9IGFsbG9jYSAodGRlcC0+c2l6ZV9pb3Zl Yyk7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICAg ICAgeworICAgICAgICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKChDT1JF X0FERFIpIGFkZHIsIGlvdiwgdGRlcC0+c2l6ZV9pb3ZlYykpCisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgIGlmIChyZWNvcmRfZGVidWcpCisgICAg ICAgICAgICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3Mg cmVjb3JkOiBlcnJvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAicmVhZGluZyBtZW1vcnkgYXQgIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImFkZHIgPSAweCVzICIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZW4gPSAlZC5cbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGV4X256IChh ZGRyLHRkZXAtPnNpemVfcG9pbnRlciksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2lvdmVjKTsKKyAgICAgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAg dG1wYWRkciA9IChDT1JFX0FERFIpIGV4dHJhY3RfdW5zaWduZWRfaW50ZWdl ciAoaW92LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfcG9pbnRlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBieXRlX29yZGVyKTsKKyAgICAgICAgICB0bXBpbnQgPSAo aW50KSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGlvdiArIHRkZXAtPnNp emVfcG9pbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfc2l6ZV90LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ynl0ZV9vcmRlcik7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAodG1wYWRkciwgdG1waW50KSk7CisgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgICAgYWRkciArPSB0ZGVwLT5zaXplX2lvdmVjOwor ICAgICAgICB9CisgICAgfQorICBhICs9IHRkZXAtPnNpemVfc2l6ZV90Owor CisgIC8qIG1zZ19jb250cm9sIG1zZ19jb250cm9sbGVuICovCisgIGFkZHIg PSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGEsIHRkZXAtPnNpemVfcG9p bnRlciwgYnl0ZV9vcmRlcik7CisgIGEgKz0gdGRlcC0+c2l6ZV9wb2ludGVy OworICB0bXBpbnQgPSAoaW50KSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIg KGEsIHRkZXAtPnNpemVfc2l6ZV90LCBieXRlX29yZGVyKTsKKyAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgYWRkciwgdG1w aW50KSk7CisgICAgcmV0dXJuIC0xOworCisgIHJldHVybiAwOworfQorCiAv KiBXaGVuIHRoZSBhcmNoaXRlY3R1cmUgcHJvY2VzcyByZWNvcmQgZ2V0IGEg TGludXggc3lzY2FsbAogICAgaW5zdHJ1Y3Rpb24sIGl0IHdpbGwgZ2V0IGEg TGludXggc3lzY2FsbCBudW1iZXIgb2YgdGhpcwogICAgYXJjaGl0ZWN0dXJl IGFuZCBjb252ZXJ0IGl0IHRvIHRoZSBMaW51eCBzeXNjYWxsIG51bWJlciAi bnVtIiB3aGljaApAQCAtOTQsMTAgKzIyMywxMyBAQAogCiBpbnQKIHJlY29y ZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWN0IHJlZ2NhY2hl ICpyZWdjYWNoZSwKLQkJCSAgc3RydWN0IGxpbnV4X3JlY29yZF90ZGVwICp0 ZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbGludXhf cmVjb3JkX3RkZXAgKnRkZXApCiB7CiAgIHN0cnVjdCBnZGJhcmNoICpnZGJh cmNoID0gZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKTsKLSAgdWludDMy X3QgdG1wdTMyOworICBlbnVtIGJmZF9lbmRpYW4gYnl0ZV9vcmRlciA9IGdk YmFyY2hfYnl0ZV9vcmRlciAoZ2RiYXJjaCk7CisgIFVMT05HRVNUIHRtcHVs b25nZXN0OworICBDT1JFX0FERFIgdG1wYWRkcjsKKyAgaW50IHRtcGludDsK IAogICBzd2l0Y2ggKG51bSkKICAgICB7CkBAIC0xMDgsMTUgKzI0MCwxNCBA QCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAg ICAgICAvKiBzeXNfZXhpdCAqLwogICAgIGNhc2UgMToKICAgICAgIHsKLQlp bnQgcTsKLQl0YXJnZXRfdGVybWluYWxfb3VycyAoKTsKLQlxID0KLQkgIHlx dWVyeSAoXyAoIlRoZSBuZXh0IGluc3RydWN0aW9uIGlzIHN5c2NhbGwgZXhp dC4gICIKLQkJICAgICAiSXQgd2lsbCBtYWtlIHRoZSBwcm9ncmFtIGV4aXQu ICAiCi0JCSAgICAgIkRvIHlvdSB3YW50IHRvIHN0b3AgdGhlIHByb2dyYW0/ IikpOwotCXRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKLQlpZiAocSkK LQkgIHJldHVybiAxOworICAgICAgICBpbnQgcTsKKyAgICAgICAgdGFyZ2V0 X3Rlcm1pbmFsX291cnMgKCk7CisgICAgICAgIHEgPSB5cXVlcnkgKF8oIlRo ZSBuZXh0IGluc3RydWN0aW9uIGlzIHN5c2NhbGwgZXhpdC4gICIKKyAgICAg ICAgICAgICAgICAgICAgICAiSXQgd2lsbCBtYWtlIHRoZSBwcm9ncmFtIGV4 aXQuICAiCisgICAgICAgICAgICAgICAgICAgICAgIkRvIHlvdSB3YW50IHRv IHN0b3AgdGhlIHByb2dyYW0/IikpOworICAgICAgICB0YXJnZXRfdGVybWlu YWxfaW5mZXJpb3IgKCk7CisgICAgICAgIGlmIChxKQorICAgICAgICAgIHJl dHVybiAxOwogICAgICAgfQogICAgICAgYnJlYWs7CiAKQEAgLTEyNywxMSAr MjU4LDExIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwg c3RydWMKICAgICAgIC8qIHN5c19yZWFkICovCiAgICAgY2FzZSAzOgogICAg ICAgewotCXVpbnQzMl90IGFkZHIsIGNvdW50OwotCXJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgYWRk cik7Ci0JcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcz LCAoZ2RiX2J5dGUgKikgJiBjb3VudCk7Ci0JaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoYWRkciwgY291bnQpKQotCSAgcmV0dXJuIC0xOworICAg ICAgICBVTE9OR0VTVCBhZGRyLCBjb3VudDsKKyAgICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmYWRk cik7CisgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywgJmNvdW50KTsKKyAgICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgYWRkciwgKGludCkg Y291bnQpKQorICAgICAgICAgIHJldHVybiAtMTsKICAgICAgIH0KICAgICAg IGJyZWFrOwogCkBAIC0xNzEsOSArMzAyLDEwIEBAIHJlY29yZF9saW51eF9z eXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKICAgICBjYXNlIDI4OgogICAg ICAgLyogc3lzX2xzdGF0ICovCiAgICAgY2FzZSA4NDoKLSAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9fb2xkX2tlcm5lbF9zdGF0KSkK LQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0 bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkZXAtPnNpemVfX29sZF9rZXJuZWxfc3RhdCkpCisgICAgICAgIHJl dHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfbHNlZWsg Ki8KQEAgLTE5NCwxNiArMzI2LDE2IEBAIHJlY29yZF9saW51eF9zeXN0ZW1f Y2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX3B0cmFjZSAq LwogICAgIGNhc2UgMjY6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0g ICAgICBpZiAodG1wdTMyID09IFJFQ09SRF9QVFJBQ0VfUEVFS1RFWFQKLQkg IHx8IHRtcHUzMiA9PSBSRUNPUkRfUFRSQUNFX1BFRUtEQVRBCi0JICB8fCB0 bXB1MzIgPT0gUkVDT1JEX1BUUkFDRV9QRUVLVVNSKQotCXsKLQkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKLQkJCSAgICAg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgNCkpCi0JICAgIHJldHVybiAtMTsKLQl9 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxv bmdlc3QgPT0gUkVDT1JEX1BUUkFDRV9QRUVLVEVYVAorICAgICAgICAgIHx8 IHRtcHVsb25nZXN0ID09IFJFQ09SRF9QVFJBQ0VfUEVFS0RBVEEKKyAgICAg ICAgICB8fCB0bXB1bG9uZ2VzdCA9PSBSRUNPUkRfUFRSQUNFX1BFRUtVU1Ip CisgICAgICAgIHsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsIDQpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2FsYXJtICov CkBAIC0yNDAsOSArMzcyLDkgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxs IChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfdGltZXMgKi8KICAg ICBjYXNlIDQzOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX3RtcykpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdl c3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUikgdG1wdWxvbmdlc3QsIHRkZXAtPnNpemVfdG1zKSkKKyAgICAg ICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19u aV9zeXNjYWxsICovCkBAIC0yNzAsMTQ5ICs0MDIsMTcyIEBAIHJlY29yZF9s aW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKICAgICAgIC8qIHN5 c19pb2N0bCAqLwogICAgIGNhc2UgNTQ6CiAgICAgICAvKiBYWFggTmVlZCB0 byBhZGQgYSBsb3Qgb2Ygc3VwcG9ydCBvZiBvdGhlciBpb2N0bCByZXF1ZXN0 cy4gICovCi0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAo dG1wdTMyID09IHRkZXAtPmlvY3RsX0ZJT0NMRVggfHwgdG1wdTMyID09IHRk ZXAtPmlvY3RsX0ZJT05DTEVYCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9j dGxfRklPTkJJTyB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfRklPQVNZTkMK LQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NFVFMgfHwgdG1wdTMy ID09IHRkZXAtPmlvY3RsX1RDU0VUU1cKLQkgIHx8IHRtcHUzMiA9PSB0ZGVw LT5pb2N0bF9UQ1NFVFNGIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NF VEEKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NFVEFXIHx8IHRt cHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NFVEFGCi0JICB8fCB0bXB1MzIgPT0g dGRlcC0+aW9jdGxfVENTQlJLIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9U Q1hPTkMKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ0ZMU0ggfHwg dG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NFWENMCi0JICB8fCB0bXB1MzIg PT0gdGRlcC0+aW9jdGxfVElPQ05YQ0wKLQkgIHx8IHRtcHUzMiA9PSB0ZGVw LT5pb2N0bF9USU9DU0NUVFkKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0 bF9USU9DU1BHUlAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTVEkK LQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU1dJTlNaCi0JICB8 fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ01CSVMgfHwgdG1wdTMyID09 IHRkZXAtPmlvY3RsX1RJT0NNQklDCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+ aW9jdGxfVElPQ01TRVQKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9U SU9DU1NPRlRDQVIKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9D Q09OUwotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTU0VSSUFM Ci0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1BLVCB8fCB0bXB1 MzIgPT0gdGRlcC0+aW9jdGxfVElPQ05PVFRZCi0JICB8fCB0bXB1MzIgPT0g dGRlcC0+aW9jdGxfVElPQ1NFVEQgfHwgdG1wdTMyID09IHRkZXAtPmlvY3Rs X1RDU0JSS1AKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DVFRZ R1NUUlVDVAotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTQlJL IHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DQ0JSSwotCSAgfHwgdG1w dTMyID09IHRkZXAtPmlvY3RsX1RDU0VUUzIgfHwgdG1wdTMyID09IHRkZXAt PmlvY3RsX1RDU0VUU1cyCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxf VENTRVRTRjIKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU1BU TENLCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUkNPTkZJ RwotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTRVJHV0lMRAot CSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTRVJTV0lMRAotCSAg fHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTTENLVFJNSU9TCi0JICB8 fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUkdFVE1VTFRJCi0JICB8 fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUlNFVE1VTFRJCi0JICB8 fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ01JV0FJVAotCSAgfHwgdG1w dTMyID09IHRkZXAtPmlvY3RsX1RJT0NTSEFZRVNFU1ApCi0JewotCSAgLyog Tm90aGluZyB0byBkby4gICovCi0JfQotICAgICAgZWxzZSBpZiAodG1wdTMy ID09IHRkZXAtPmlvY3RsX1RDR0VUUyB8fCB0bXB1MzIgPT0gdGRlcC0+aW9j dGxfVENHRVRBCi0JICAgICAgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9U SU9DR0xDS1RSTUlPUykKLQl7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfdGVybWlvcykpCi0JICAgIHJldHVybiAtMTsKLQl9 Ci0gICAgICBlbHNlIGlmICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0dQ R1JQCi0JICAgICAgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DR1NJ RCkKLQl7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfcGlkX3QpKQotCSAgICByZXR1cm4gLTE7Ci0JfQotICAgICAgZWxzZSBp ZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NPVVRRCi0JICAgICAgIHx8 IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DTUdFVAotCSAgICAgICB8fCB0 bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0dTT0ZUQ0FSCi0JICAgICAgIHx8 IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9GSU9OUkVBRAotCSAgICAgICB8fCB0 bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0lOUQotCSAgICAgICB8fCB0bXB1 MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0dFVEQKLQkgICAgICAgfHwgdG1wdTMy ID09IHRkZXAtPmlvY3RsX1RJT0NHUFROCi0JICAgICAgIHx8IHRtcHUzMiA9 PSB0ZGVwLT5pb2N0bF9USU9DU0VSR0VUTFNSKQotCXsKLQkgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pbnQpKQotCSAgICByZXR1 cm4gLTE7Ci0JfQotICAgICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlv Y3RsX1RJT0NHV0lOU1opCi0JewotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX3dpbnNpemUpKQotCSAgICByZXR1cm4gLTE7Ci0J fQotICAgICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NM SU5VWCkKLQl7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdl c3QgPT0gdGRlcC0+aW9jdGxfRklPQ0xFWAorICAgICAgICAgIHx8IHRtcHVs b25nZXN0ID09IHRkZXAtPmlvY3RsX0ZJT05DTEVYCisgICAgICAgICAgfHwg dG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfRklPTkJJTworICAgICAgICAg IHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX0ZJT0FTWU5DCisgICAg ICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVENTRVRTCisg ICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVENTRVRT VworICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RD U0VUU0YKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0 bF9UQ1NFVEEKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5p b2N0bF9UQ1NFVEFXCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRl cC0+aW9jdGxfVENTRVRBRgorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09 IHRkZXAtPmlvY3RsX1RDU0JSSworICAgICAgICAgIHx8IHRtcHVsb25nZXN0 ID09IHRkZXAtPmlvY3RsX1RDWE9OQworICAgICAgICAgIHx8IHRtcHVsb25n ZXN0ID09IHRkZXAtPmlvY3RsX1RDRkxTSAorICAgICAgICAgIHx8IHRtcHVs b25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NFWENMCisgICAgICAgICAgfHwg dG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ05YQ0wKKyAgICAgICAg ICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DU0NUVFkKKyAg ICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DU1BH UlAKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9U SU9DU1RJCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9j dGxfVElPQ1NXSU5TWgorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRk ZXAtPmlvY3RsX1RJT0NNQklTCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3Qg PT0gdGRlcC0+aW9jdGxfVElPQ01CSUMKKyAgICAgICAgICB8fCB0bXB1bG9u Z2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DTVNFVAorICAgICAgICAgIHx8IHRt cHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NTU09GVENBUgorICAgICAg ICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NDT05TCisg ICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ1NT RVJJQUwKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0 bF9USU9DUEtUCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+ aW9jdGxfVElPQ05PVFRZCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0g dGRlcC0+aW9jdGxfVElPQ1NFVEQKKyAgICAgICAgICB8fCB0bXB1bG9uZ2Vz dCA9PSB0ZGVwLT5pb2N0bF9UQ1NCUktQCisgICAgICAgICAgfHwgdG1wdWxv bmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ1RUWUdTVFJVQ1QKKyAgICAgICAg ICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DU0JSSworICAg ICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NDQlJL CisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVENT RVRTMgorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3Rs X1RDU0VUU1cyCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+ aW9jdGxfVENTRVRTRjIKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0 ZGVwLT5pb2N0bF9USU9DU1BUTENLCisgICAgICAgICAgfHwgdG1wdWxvbmdl c3QgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUkNPTkZJRworICAgICAgICAgIHx8 IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NTRVJHV0lMRAorICAg ICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NTRVJT V0lMRAorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3Rs X1RJT0NTTENLVFJNSU9TCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0g dGRlcC0+aW9jdGxfVElPQ1NFUkdFVE1VTFRJCisgICAgICAgICAgfHwgdG1w dWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUlNFVE1VTFRJCisgICAg ICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ01JV0FJ VAorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJ T0NTSEFZRVNFU1ApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBOb3RoaW5n IHRvIGRvLiAgKi8KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAodG1wdWxv bmdlc3QgPT0gdGRlcC0+aW9jdGxfVENHRVRTCisgICAgICAgICAgICAgICB8 fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9UQ0dFVEEKKyAgICAgICAg ICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NHTENL VFJNSU9TKQorICAgICAgICB7CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOwor ICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdGVybWlvcykpCisgICAgICAg ICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHRt cHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NHUEdSUAorICAgICAgICAg ICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ0dTSUQp CisgICAgICAgIHsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGRlcC0+c2l6ZV9waWRfdCkpCisgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHRtcHVsb25nZXN0 ID09IHRkZXAtPmlvY3RsX1RJT0NPVVRRCisgICAgICAgICAgICAgICB8fCB0 bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DTUdFVAorICAgICAgICAg ICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ0dTT0ZU Q0FSCisgICAgICAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5p b2N0bF9GSU9OUkVBRAorICAgICAgICAgICAgICAgfHwgdG1wdWxvbmdlc3Qg PT0gdGRlcC0+aW9jdGxfVElPQ0lOUQorICAgICAgICAgICAgICAgfHwgdG1w dWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ0dFVEQKKyAgICAgICAgICAg ICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NHUFROCisg ICAgICAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9U SU9DU0VSR0VUTFNSKQorICAgICAgICB7CisgICAgICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdl c3QpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfaW50KSkKKyAgICAg ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAo dG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ0dXSU5TWikKKyAgICAg ICAgeworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9u Z2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0ZGVwLT5zaXplX3dpbnNpemUpKQorICAgICAgICAgICAgcmV0dXJuIC0x OworICAgICAgICB9CisgICAgICBlbHNlIGlmICh0bXB1bG9uZ2VzdCA9PSB0 ZGVwLT5pb2N0bF9USU9DTElOVVgpCisgICAgICAgIHsKKyAgICAgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0 bXB1bG9uZ2VzdCk7CiAgICAgICAgICAgLyogVGhpcyBzeXNjYWxsIGFmZmVj dCBhIGNoYXIgc2l6ZSBtZW1vcnkuICAqLwotCSAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCAxKSkKLQkgICAgcmV0dXJuIC0xOwot CX0KLSAgICAgIGVsc2UgaWYgKHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9D R1NFUklBTCkKLQl7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfc2VyaWFsX3N0cnVjdCkpCi0JICAgIHJldHVybiAtMTsKLQl9 Ci0gICAgICBlbHNlIGlmICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVENHRVRT MikKLQl7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfdGVybWlvczIpKQotCSAgICByZXR1cm4gLTE7Ci0JfQotICAgICAgZWxz ZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX0ZJT1FTSVpFKQotCXsKLQkg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJ CSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9sb2ZmX3Qp KQotCSAgICByZXR1cm4gLTE7Ci0JfQotICAgICAgZWxzZSBpZiAodG1wdTMy ID09IHRkZXAtPmlvY3RsX1RJT0NHSUNPVU5UKQotCXsKLQkgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0KLQkgICAgICAodG1wdTMyLCB0ZGVwLT5zaXplX3NlcmlhbF9p Y291bnRlcl9zdHJ1Y3QpKQotCSAgICByZXR1cm4gLTE7Ci0JfQotICAgICAg ZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NHSEFZRVNFU1Ap Ci0JewotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X2hheWVzX2VzcF9jb25maWcpKQotCSAgICByZXR1cm4gLTE7Ci0JfQotICAg ICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTRVJHU1RS VUNUKQotCXsKLQkgIHByaW50Zl91bmZpbHRlcmVkIChfKCJQcm9jZXNzIHJl Y29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vzbid0ICIKLQkJCSAgICAgICAi c3VwcG9ydCBpb2N0bCByZXF1ZXN0IFRJT0NTRVJHU1RSVUNUXG4iKSk7Ci0J ICByZXR1cm4gMTsKLQl9CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsIDEpKQorICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICBlbHNlIGlm ICh0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DR1NFUklBTCkKKyAg ICAgICAgeworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVk IChyZWdjYWNoZSwgdGRlcC0+YXJnMywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1 bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZGVwLT5zaXplX3NlcmlhbF9zdHJ1Y3QpKQorICAgICAgICAgICAg cmV0dXJuIC0xOworICAgICAgICB9CisgICAgICBlbHNlIGlmICh0bXB1bG9u Z2VzdCA9PSB0ZGVwLT5pb2N0bF9UQ0dFVFMyKQorICAgICAgICB7CisgICAg ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmczLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmdG1wdWxvbmdlc3QpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNp emVfdGVybWlvczIpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg ICB9CisgICAgICBlbHNlIGlmICh0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0 bF9GSU9RU0laRSkKKyAgICAgICAgeworICAgICAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0 KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2xvZmZfdCkpCisgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYg KHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NHSUNPVU5UKQorICAg ICAgICB7CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAgICAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVs b25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkZXAtPnNpemVfc2VyaWFsX2ljb3VudGVyX3N0cnVjdCkpCisgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYg KHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NHSEFZRVNFU1ApCisg ICAgICAgIHsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1w dWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGRlcC0+c2l6ZV9oYXllc19lc3BfY29uZmlnKSkKKyAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAodG1w dWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUkdTVFJVQ1QpCisgICAg ICAgIHsKKyAgICAgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXygiUHJvY2Vz cyByZWNvcmQgYW5kIHJlcGxheSB0YXJnZXQgZG9lc24ndCAiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnQgaW9jdGwgcmVxdWVz dCBUSU9DU0VSR1NUUlVDVFxuIikpOworICAgICAgICAgIHJldHVybiAxOwor ICAgICAgICB9CiAgICAgICBlbHNlCi0JewotCSAgcHJpbnRmX3VuZmlsdGVy ZWQgKF8oIlByb2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IGRvZXNu J3QgIgotCQkJICAgICAgICJzdXBwb3J0IGlvY3RsIHJlcXVlc3QgMHglcy5c biIpLAotCQkJICAgICBwaGV4X256ICh0bXB1MzIsIDQpKTsKLQkgIHJldHVy biAxOwotCX0KKyAgICAgICAgeworICAgICAgICAgIHByaW50Zl91bmZpbHRl cmVkIChfKCJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vz bid0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9y dCBpb2N0bCByZXF1ZXN0IDB4JXMuXG4iKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT1VUUFVUX1JFRyAodG1wdWxvbmdlc3QsIHRkZXAtPmFy ZzIpKTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQogICAgICAg YnJlYWs7CiAKICAgICAgIC8qIHN5c19mY250bCAqLwogICAgIGNhc2UgNTU6 CiAgICAgICAvKiBYWFggKi8KLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKICAgICBzeXNfZmNudGw6Ci0g ICAgICBpZiAodG1wdTMyID09IHRkZXAtPmZjbnRsX0ZfR0VUTEspCi0Jewot CSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAot CQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2Zsb2Nr KSkKLQkgICAgcmV0dXJuIC0xOwotCX0KKyAgICAgIGlmICh0bXB1bG9uZ2Vz dCA9PSB0ZGVwLT5mY250bF9GX0dFVExLKQorICAgICAgICB7CisgICAgICAg ICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmczLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmdG1wdWxvbmdlc3QpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVf ZmxvY2spKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAg ICAgICBicmVhazsKIAogICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8KQEAg LTQyNSw5ICs1ODAsMTAgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChp bnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfb2xkdW5hbWUgKi8KICAg ICBjYXNlIDU5OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX29sZG9sZF91dHNuYW1lKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEs ICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfb2xkb2xkX3V0 c25hbWUpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAog ICAgICAgLyogc3lzX3VtYXNrICovCkBAIC00MzgsOSArNTk0LDEwIEBAIHJl Y29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAg ICAgLyogc3lzX3VzdGF0ICovCiAgICAgY2FzZSA2MjoKLSAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV91c3RhdCkpCi0JcmV0dXJuIC0x OworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5z aXplX3VzdGF0KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7 CiAKICAgICAgIC8qIHN5c19kdXAyICovCkBAIC00NTUsOSArNjEyLDEwIEBA IHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAog ICAgICAgLyogc3lzX3NpZ2FjdGlvbiAqLwogICAgIGNhc2UgNjc6Ci0gICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX3NpZ2FjdGlv bikpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5z aWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQURE UikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0ZGVwLT5zaXplX29sZF9zaWdhY3Rpb24pKQorICAgICAgICBy ZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3NnZXRt YXNrICovCkBAIC00NzQsOSArNjMyLDEwIEBAIHJlY29yZF9saW51eF9zeXN0 ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX3NpZ3Bl bmRpbmcgKi8KICAgICBjYXNlIDczOgotICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX29sZF9zaWdzZXRfdCkpCi0JcmV0dXJuIC0xOwor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXpl X29sZF9zaWdzZXRfdCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJy ZWFrOwogCiAgICAgICAvKiBzeXNfc2V0aG9zdG5hbWUgKi8KQEAgLTQ4Nywy NiArNjQ2LDMwIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51 bSwgc3RydWMKIAogICAgICAgLyogc3lzX29sZF9nZXRybGltaXQgKi8KICAg ICBjYXNlIDc2OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX3JsaW1pdCkpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxv bmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo KENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3JsaW1pdCkpCisgICAgICAg IHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfZ2V0 cnVzYWdlICovCiAgICAgY2FzZSA3NzoKLSAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9ydXNhZ2UpKQotCXJldHVybiAtMTsKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9ydXNh Z2UpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAg ICAgLyogc3lzX2dldHRpbWVvZmRheSAqLwogICAgIGNhc2UgNzg6Ci0gICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdGltZXZhbCkpCi0J cmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX3RpbWV6b25lKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1 bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdGltZXZhbCkpCisgICAg ICAgIHJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2ln bmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIp IHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGRlcC0+c2l6ZV90aW1lem9uZSkpCisgICAgICAgIHJldHVybiAt MTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfc2V0dGltZW9mZGF5 ICovCkBAIC01MTUsNTMgKzY3OCw1NiBAQCByZWNvcmRfbGludXhfc3lzdGVt X2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19nZXRncm91 cHMxNiAqLwogICAgIGNhc2UgODA6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfb2xkX2dpZF90KSkKLQlyZXR1cm4gLTE7CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfb2xk X2dpZF90KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAK ICAgICAgIC8qIHN5c19zZXRncm91cHMxNiAqLwogICAgIGNhc2UgODE6Ci0g ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIs IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX2dpZF90 KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERS KSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkZXAtPnNpemVfb2xkX2dpZF90KSkKKyAgICAgICAgcmV0dXJu IC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIG9sZF9zZWxlY3QgKi8K ICAgICBjYXNlIDgyOgogICAgICAgewotCXN0cnVjdCBzZWxfYXJnX3N0cnVj dAotCXsKLQkgIENPUkVfQUREUiBuOwotCSAgQ09SRV9BRERSIGlucDsKLQkg IENPUkVfQUREUiBvdXRwOwotCSAgQ09SRV9BRERSIGV4cDsKLQkgIENPUkVf QUREUiB0dnA7Ci0JfSBzZWw7CisgICAgICAgIHN0cnVjdCBzZWxfYXJnX3N0 cnVjdAorICAgICAgICB7CisgICAgICAgICAgQ09SRV9BRERSIG47CisgICAg ICAgICAgQ09SRV9BRERSIGlucDsKKyAgICAgICAgICBDT1JFX0FERFIgb3V0 cDsKKyAgICAgICAgICBDT1JFX0FERFIgZXhwOworICAgICAgICAgIENPUkVf QUREUiB0dnA7CisgICAgICAgIH0gc2VsOwogCi0JcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLAotCQkJICAgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKLQlpZiAodG1wdTMyKQotCSAgewotCSAgICBpZiAodGFy Z2V0X3JlYWRfbWVtb3J5ICh0bXB1MzIsIChnZGJfYnl0ZSAqKSAmIHNlbCwg c2l6ZW9mIChzZWwpKSkKLQkgICAgICB7Ci0JCWlmIChyZWNvcmRfZGVidWcp Ci0JCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotCQkJCSAg ICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkgIgot CQkJCSAgICAgICJhdCBhZGRyID0gJXMgbGVuID0gJWx1LlxuIiwKLQkJCQkg ICAgICBwYWRkcmVzcyAoZ2RiYXJjaCwgdG1wdTMyKSwKLQkJCQkgICAgICAo dW5zaWduZWQgbG9uZylzaXplb2YgKHNlbCkpOwotCQlyZXR1cm4gLTE7Ci0J ICAgICAgfQotCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChz ZWwuaW5wLCB0ZGVwLT5zaXplX2ZkX3NldCkpCi0JICAgICAgcmV0dXJuIC0x OwotCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChzZWwub3V0 cCwgdGRlcC0+c2l6ZV9mZF9zZXQpKQotCSAgICAgIHJldHVybiAtMTsKLQkg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoc2VsLmV4cCwgdGRl cC0+c2l6ZV9mZF9zZXQpKQotCSAgICAgIHJldHVybiAtMTsKLQkgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoc2VsLnR2cCwgdGRlcC0+c2l6 ZV90aW1ldmFsKSkKLQkgICAgICByZXR1cm4gLTE7Ci0JICB9CisgICAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0 bXB1bG9uZ2VzdCk7CisgICAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAgICAg ICAgICB7CisgICAgICAgICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICh0 bXB1bG9uZ2VzdCwgKGdkYl9ieXRlICopICZzZWwsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2VsKSkpCisgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnKQor ICAgICAgICAgICAgICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk bG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5ICIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0IGFkZHIgPSAw eCVzIGxlbiA9ICVsdS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVsb25nZXN0LCB0ZGVwLT5h cmcxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHVuc2lnbmVkIGxvbmcpIHNpemVvZiAoc2VsKSk7CisgICAgICAgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChzZWwuaW5wLCB0ZGVwLT5z aXplX2ZkX3NldCkpCisgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg ICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHNlbC5vdXRw LCB0ZGVwLT5zaXplX2ZkX3NldCkpCisgICAgICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHNlbC5leHAsIHRkZXAtPnNpemVfZmRfc2V0KSkKKyAgICAgICAgICAgICAg cmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoc2VsLnR2cCwgdGRlcC0+c2l6ZV90aW1ldmFsKSkKKyAgICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIH0KICAgICAgIH0KICAg ICAgIGJyZWFrOwogCkBAIC01NzIsMTIgKzczOCwxMiBAQCByZWNvcmRfbGlu dXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAgICAgICAvKiBzeXNf cmVhZGxpbmsgKi8KICAgICBjYXNlIDg1OgogICAgICAgewotCXVpbnQzMl90 IGxlbjsKLQlyZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsCi0JCQkgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCXJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICop ICYgbGVuKTsKLQlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIGxlbikpCi0JICByZXR1cm4gLTE7CisgICAgICAgIFVMT05HRVNUIGxl bjsKKyAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmbGVuKTsK KyAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVf QUREUikgdG1wdWxvbmdlc3QsIChpbnQpIGxlbikpCisgICAgICAgICAgcmV0 dXJuIC0xOwogICAgICAgfQogICAgICAgYnJlYWs7CiAKQEAgLTU5MCwyMyAr NzU2LDI0IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwg c3RydWMKICAgICAgIC8qIHN5c19yZWJvb3QgKi8KICAgICBjYXNlIDg4Ogog ICAgICAgewotCWludCBxOwotCXRhcmdldF90ZXJtaW5hbF9vdXJzICgpOwot CXEgPQotCSAgeXF1ZXJ5IChfKCJUaGUgbmV4dCBpbnN0cnVjdGlvbiBpcyBz eXNjYWxsIHJlYm9vdC4gICIKLQkJICAgICJJdCB3aWxsIHJlc3RhcnQgdGhl IGNvbXB1dGVyLiAgIgotCQkgICAgIkRvIHlvdSB3YW50IHRvIHN0b3AgdGhl IHByb2dyYW0/IikpOwotCXRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsK LQlpZiAocSkKLQkgIHJldHVybiAxOworICAgICAgICBpbnQgcTsKKyAgICAg ICAgdGFyZ2V0X3Rlcm1pbmFsX291cnMgKCk7CisgICAgICAgIHEgPQorICAg ICAgICAgIHlxdWVyeSAoXygiVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgc3lz Y2FsbCByZWJvb3QuICAiCisgICAgICAgICAgICAgICAgICAgICJJdCB3aWxs IHJlc3RhcnQgdGhlIGNvbXB1dGVyLiAgIgorICAgICAgICAgICAgICAgICAg ICAiRG8geW91IHdhbnQgdG8gc3RvcCB0aGUgcHJvZ3JhbT8iKSk7CisgICAg ICAgIHRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKKyAgICAgICAgaWYg KHEpCisgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAgICBicmVh azsKIAogICAgICAgLyogb2xkX3JlYWRkaXIgKi8KICAgICBjYXNlIDg5Ogot ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2RpcmVudCkp Ci0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZGVwLT5zaXplX2RpcmVudCkpCisgICAgICAgIHJldHVybiAtMTsK ICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBvbGRfbW1hcCAqLwpAQCAtNjE2 LDIyICs3ODMsMjEgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQg bnVtLCBzdHJ1YwogICAgICAgLyogc3lzX211bm1hcCAqLwogICAgIGNhc2Ug OTE6CiAgICAgICB7Ci0JaW50IHE7Ci0JdWludDMyX3QgbGVuOworICAgICAg ICBpbnQgcTsKKyAgICAgICAgVUxPTkdFU1QgbGVuOwogCi0JcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLAotCQkJICAgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLQlyZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIGxlbik7Ci0JdGFyZ2V0 X3Rlcm1pbmFsX291cnMgKCk7Ci0JcSA9Ci0JICB5cXVlcnkgKF8oIlRoZSBu ZXh0IGluc3RydWN0aW9uIGlzIHN5c2NhbGwgbXVubWFwLiAgIgotCQkgICAg Ikl0IHdpbGwgZnJlZSB0aGUgbWVtb3J5IGFkZHIgPSAlcyBsZW4gPSAldS4g ICIKLQkJICAgICJJdCB3aWxsIG1ha2UgcmVjb3JkIHRhcmdldCBnZXQgZXJy b3IuICAiCi0JCSAgICAiRG8geW91IHdhbnQgdG8gc3RvcCB0aGUgcHJvZ3Jh bT8iKSwKLQkJICBwYWRkcmVzcyAoZ2RiYXJjaCwgdG1wdTMyKSwgKGludCls ZW4pOwotCXRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKLQlpZiAocSkK LQkgIHJldHVybiAxOworICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsICZsZW4pOworICAgICAgICB0YXJnZXRfdGVybWluYWxfb3VycyAoKTsK KyAgICAgICAgcSA9IHlxdWVyeSAoXygiVGhlIG5leHQgaW5zdHJ1Y3Rpb24g aXMgc3lzY2FsbCBtdW5tYXAuICAiCisgICAgICAgICAgICAgICAgICAgICAg Ikl0IHdpbGwgZnJlZSB0aGUgbWVtb3J5IGFkZHIgPSAweCVzIGxlbiA9ICV1 LiAgIgorICAgICAgICAgICAgICAgICAgICAgICJJdCB3aWxsIG1ha2UgcmVj b3JkIHRhcmdldCBnZXQgZXJyb3IuICAiCisgICAgICAgICAgICAgICAgICAg ICAgIkRvIHlvdSB3YW50IHRvIHN0b3AgdGhlIHByb2dyYW0/IiksCisgICAg ICAgICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVsb25nZXN0LCB0ZGVw LT5hcmcxKSwgKGludCkgbGVuKTsKKyAgICAgICAgdGFyZ2V0X3Rlcm1pbmFs X2luZmVyaW9yICgpOworICAgICAgICBpZiAocSkKKyAgICAgICAgICByZXR1 cm4gMTsKICAgICAgIH0KICAgICAgIGJyZWFrOwogCkBAIC02NTUsMjkyICs4 MjEsMzQ4IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwg c3RydWMKICAgICBjYXNlIDk5OgogICAgICAgLyogc3lzX2ZzdGF0ZnMgKi8K ICAgICBjYXNlIDEwMDoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRl cC0+c2l6ZV9zdGF0ZnMpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRt cHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9zdGF0ZnMpKQorICAg ICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lz X2lvcGVybSAqLwogICAgIGNhc2UgMTAxOgogICAgICAgYnJlYWs7CiAKKyAg ICAgIC8qIHN5c19zb2NrZXQgKi8KKyAgICBjYXNlIDUwMDoKKyAgICAgIC8q IHN5c19zZW5kdG8gKi8KKyAgICBjYXNlIDUwMzoKKyAgICAgIC8qIHN5c19z ZW5kbXNnICovCisgICAgY2FzZSA1MDU6CisgICAgICAvKiBzeXNfc2h1dGRv d24gKi8KKyAgICBjYXNlIDUwNzoKKyAgICAgIC8qIHN5c19iaW5kICovCisg ICAgY2FzZSA1MDg6CisgICAgICAvKiBzeXNfY29ubmVjdCAqLworICAgIGNh c2UgNTAxOgorICAgICAgLyogc3lzX2xpc3RlbiAqLworICAgIGNhc2UgNTA5 OgorICAgICAgLyogc3lzX3NldHNvY2tvcHQgKi8KKyAgICBjYXNlIDUxMzoK KyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfYWNjZXB0ICovCisgICAg Y2FzZSA1MDI6CisgICAgICAvKiBzeXNfZ2V0c29ja25hbWUgKi8KKyAgICBj YXNlIDUxMDoKKyAgICAgIC8qIHN5c19nZXRwZWVybmFtZSAqLworICAgIGNh c2UgNTExOgorICAgICAgeworICAgICAgICBVTE9OR0VTVCBsZW47CisgICAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmbGVuKTsK KyAgICAgICAgaWYgKHJlY29yZF9saW51eF9zb2NrYWRkciAocmVnY2FjaGUs IHRkZXAsIHRtcHVsb25nZXN0LCBsZW4pKQorICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfcmVj dmZyb20gKi8KKyAgICBjYXNlIDUwNDoKKyAgICAgIHsKKyAgICAgICAgVUxP TkdFU1QgbGVuOworICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsICZ0bXB1bG9uZ2VzdCk7CisgICAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnNSwgJmxlbik7CisgICAgICAgIGlmIChyZWNvcmRfbGludXhfc29j a2FkZHIgKHJlZ2NhY2hlLCB0ZGVwLCB0bXB1bG9uZ2VzdCwgbGVuKSkKKyAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisgICAgICAvKiBzeXNfcmVj diAqLworICAgIGNhc2UgNTE1OgorICAgICAgeworICAgICAgICBVTE9OR0VT VCBzaXplOworICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMywgJnNpemUpOworICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgKGludCkgc2l6ZSkp CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgfQorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c19yZWN2bXNnICovCisgICAgY2FzZSA1MDY6Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2xp bnV4X21zZ2hkciAocmVnY2FjaGUsIHRkZXAsIHRtcHVsb25nZXN0KSkKKyAg ICAgICAgcmV0dXJuIC0xOworICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5 c19zb2NrZXRwYWlyICovCisgICAgY2FzZSA1MTI6CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsICZ0 bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9pbnQp KQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBicmVhazsKKworICAgICAg Lyogc3lzX2dldHNvY2tvcHQgKi8KKyAgICBjYXNlIDUxNDoKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn NSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAg ICAgICAgeworICAgICAgICAgIFVMT05HRVNUIG9wdHZhbHA7CisgICAgICAg ICAgZ2RiX2J5dGUgKm9wdGxlbnAgPSBhbGxvY2EgKHRkZXAtPnNpemVfaW50 KTsKKyAgICAgICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICgoQ09SRV9B RERSKSB0bXB1bG9uZ2VzdCwgb3B0bGVucCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2ludCkpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgIGlmIChyZWNvcmRfZGVidWcpCisgICAgICAg ICAgICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3MgcmVj b3JkOiBlcnJvciByZWFkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJtZW1vcnkgYXQgYWRkciA9IDB4JXMgIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxlbiA9ICVkLlxuIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9S RUcgKHRtcHVsb25nZXN0LCB0ZGVwLT5hcmc1KSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfaW50KTsKKyAgICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+ YXJnNCwgJm9wdHZhbHApOworICAgICAgICAgIHRtcGludCA9IChpbnQpIGV4 dHJhY3Rfc2lnbmVkX2ludGVnZXIgKG9wdGxlbnAsIHRkZXAtPnNpemVfaW50 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJ5dGVfb3JkZXIpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIG9wdHZhbHAsIHRtcGludCkp CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg ICB9CisgICAgICBicmVhazsKKwogICAgICAgLyogc3lzX3NvY2tldGNhbGwg Ki8KICAgICBjYXNlIDEwMjoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK LSAgICAgIHN3aXRjaCAodG1wdTMyKQotCXsKLQljYXNlIFJFQ09SRF9TWVNf U09DS0VUOgotCWNhc2UgUkVDT1JEX1NZU19CSU5EOgotCWNhc2UgUkVDT1JE X1NZU19DT05ORUNUOgotCWNhc2UgUkVDT1JEX1NZU19MSVNURU46Ci0JICBi cmVhazsKLQljYXNlIFJFQ09SRF9TWVNfQUNDRVBUOgotCWNhc2UgUkVDT1JE X1NZU19HRVRTT0NLTkFNRToKLQljYXNlIFJFQ09SRF9TWVNfR0VUUEVFUk5B TUU6Ci0JICB7Ci0JICAgIHVpbnQzMl90IGFbM107Ci0JICAgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKLQkJCSAgICAgICAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgICBpZiAodG1wdTMyKQotCSAg ICAgIHsKLQkJaWYgKHRhcmdldF9yZWFkX21lbW9yeSAodG1wdTMyLCAoZ2Ri X2J5dGUgKikgYSwgc2l6ZW9mIChhKSkpCi0JCSAgewotCQkgICAgaWYgKHJl Y29yZF9kZWJ1ZykKLQkJICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJf c3RkbG9nLAotCQkJCQkgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGlu ZyAiCi0JCQkJCSAgIm1lbW9yeSBhdCBhZGRyID0gJXMgbGVuID0gJWx1Llxu IiwKLQkJCQkJICBwYWRkcmVzcyAoZ2RiYXJjaCwgdG1wdTMyKSwKLQkJCQkJ ICAodW5zaWduZWQgbG9uZylzaXplb2YgKGEpKTsKLQkJICAgIHJldHVybiAt MTsKLQkJICB9Ci0JCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFb MV0sIHRkZXAtPnNpemVfc29ja2FkZHIpKQotCQkgIHJldHVybiAtMTsKLQkJ aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYVsyXSwgdGRlcC0+c2l6 ZV9pbnQpKQotCQkgIHJldHVybiAtMTsKLQkgICAgICB9Ci0JICB9Ci0JICBi cmVhazsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIHN3aXRj aCAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBSRUNP UkRfU1lTX1NPQ0tFVDoKKyAgICAgICAgY2FzZSBSRUNPUkRfU1lTX0JJTkQ6 CisgICAgICAgIGNhc2UgUkVDT1JEX1NZU19DT05ORUNUOgorICAgICAgICBj YXNlIFJFQ09SRF9TWVNfTElTVEVOOgorICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlIFJFQ09SRF9TWVNfQUNDRVBUOgorICAgICAgICBjYXNlIFJF Q09SRF9TWVNfR0VUU09DS05BTUU6CisgICAgICAgIGNhc2UgUkVDT1JEX1NZ U19HRVRQRUVSTkFNRToKKyAgICAgICAgICB7CisgICAgICAgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRt cHVsb25nZXN0KTsKKyAgICAgICAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdkYl9ieXRlICphID0g YWxsb2NhICh0ZGVwLT5zaXplX3Vsb25nICogMik7CisgICAgICAgICAgICAg ICAgaW50IGFkZHJsZW47CisgICAgICAgICAgICAgICAgZ2RiX2J5dGUgKmFk ZHJsZW5wOworICAgICAgICAgICAgICAgIFVMT05HRVNUIGxlbjsKIAotCWNh c2UgUkVDT1JEX1NZU19TT0NLRVRQQUlSOgotCSAgewotCSAgICB1aW50MzJf dCBhWzRdOwotCSAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsCi0JCQkgICAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK LQkgICAgaWYgKHRtcHUzMikKLQkgICAgICB7Ci0JCWlmICh0YXJnZXRfcmVh ZF9tZW1vcnkgKHRtcHUzMiwgKGdkYl9ieXRlICopIGEsIHNpemVvZiAoYSkp KQotCQkgIHsKLQkJICAgIGlmIChyZWNvcmRfZGVidWcpCi0JCSAgICAgIGZw cmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkJICAiUHJvY2Vz cyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgotCQkJCQkgICJtZW1vcnkgYXQg YWRkciA9ICVzIGxlbiA9ICVsdS5cbiIsCi0JCQkJCSAgcGFkZHJlc3MgKGdk YmFyY2gsIHRtcHUzMiksCi0JCQkJICAgICAgICAgICh1bnNpZ25lZCBsb25n KXNpemVvZiAoYSkpOwotCQkgICAgcmV0dXJuIC0xOwotCQkgIH0KLQkJaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYVszXSwgdGRlcC0+c2l6ZV9p bnQpKQotCQkgIHJldHVybiAtMTsKLQkgICAgICB9Ci0JICB9Ci0JICBicmVh azsKLQljYXNlIFJFQ09SRF9TWVNfU0VORDoKLQljYXNlIFJFQ09SRF9TWVNf U0VORFRPOgotCSAgYnJlYWs7Ci0JY2FzZSBSRUNPUkRfU1lTX1JFQ1Y6Ci0J ICB7Ci0JICAgIHVpbnQzMl90IGFbM107Ci0JICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKLQkJCSAgICAgICAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOwotCSAgICBpZiAodG1wdTMyKQotCSAgICAgIHsK LQkJaWYgKHRhcmdldF9yZWFkX21lbW9yeSAodG1wdTMyLCAoZ2RiX2J5dGUg KikgYSwgc2l6ZW9mIChhKSkpCi0JCSAgewotCQkgICAgaWYgKHJlY29yZF9k ZWJ1ZykKLQkJICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LAotCQkJCQkgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCi0J CQkJCSAgIm1lbW9yeSBhdCBhZGRyID0gJXMgbGVuID0gJWx1LlxuIiwKLQkJ CQkJICBwYWRkcmVzcyAoZ2RiYXJjaCwgdG1wdTMyKSwKLQkJCQkJICAodW5z aWduZWQgbG9uZylzaXplb2YgKGEpKTsKLQkJICAgIHJldHVybiAtMTsKLQkJ ICB9Ci0JCWlmIChhWzJdKQotCQkgIHsKLQkJICAgIGlmICh0YXJnZXRfcmVh ZF9tZW1vcnkKLQkJCShhWzJdLCAoZ2RiX2J5dGUgKikgJiAoYVsyXSksIHNp emVvZiAoYVsyXSkpKQotCQkgICAgICB7Ci0JCQlpZiAocmVjb3JkX2RlYnVn KQotCQkJICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0JCQkJ CSAgICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCi0JCQkJ CSAgICAgICJtZW1vcnkgYXQgYWRkciA9ICVzICIKLQkJCQkJICAgICAgImxl biA9ICVsdS5cbiIsCi0JCQkJCSAgICAgIHBhZGRyZXNzIChnZGJhcmNoLCBh WzJdKSwKLQkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mIChhWzJd KSk7Ci0JCQlyZXR1cm4gLTE7Ci0JCSAgICAgIH0KLQkJICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKGFbMV0sIGFbMl0pKQotCQkgICAgICBy ZXR1cm4gLTE7Ci0JCSAgfQotCSAgICAgIH0KLQkgIH0KLQkgIGJyZWFrOwot CWNhc2UgUkVDT1JEX1NZU19SRUNWRlJPTToKLQkgIHsKLQkgICAgdWludDMy X3QgYVs2XTsKLQkgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcyLAotCQkJICAgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0JICAgIGlmICh0bXB1MzIpCi0JICAgICAgewotCQlpZiAodGFyZ2V0X3Jl YWRfbWVtb3J5ICh0bXB1MzIsIChnZGJfYnl0ZSAqKSBhLCBzaXplb2YgKGEp KSkKLQkJICB7Ci0JCSAgICBpZiAocmVjb3JkX2RlYnVnKQotCQkgICAgICBm cHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0JCQkJCSAgIlByb2Nl c3MgcmVjb3JkOiBlcnJvciByZWFkaW5nICIKLQkJCQkJICAibWVtb3J5IGF0 IGFkZHIgPSAlcyBsZW4gPSAlbHUuXG4iLAotCQkJCQkgIHBhZGRyZXNzIChn ZGJhcmNoLCB0bXB1MzIpLAotCQkJCQkgICh1bnNpZ25lZCBsb25nKXNpemVv ZiAoYSkpOwotCQkgICAgcmV0dXJuIC0xOwotCQkgIH0KLQkJaWYgKGFbMl0p Ci0JCSAgewotCQkgICAgaWYgKHRhcmdldF9yZWFkX21lbW9yeQotCQkJKGFb Ml0sIChnZGJfYnl0ZSAqKSAmIChhWzJdKSwgc2l6ZW9mIChhWzJdKSkpCi0J CSAgICAgIHsKLQkJCWlmIChyZWNvcmRfZGVidWcpCi0JCQkgIGZwcmludGZf dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkJICAgICAgIlByb2Nlc3Mg cmVjb3JkOiBlcnJvciByZWFkaW5nICIKLQkJCQkJICAgICAgIm1lbW9yeSBh dCBhZGRyID0gJXMgIgotCQkJCQkgICAgICAibGVuID0gJWx1LlxuIiwKLQkJ CQkJICAgICAgcGFkZHJlc3MgKGdkYmFyY2gsIGFbMl0pLAotCQkJCQkgICAg ICAodW5zaWduZWQgbG9uZylzaXplb2YgKGFbMl0pKTsKLQkJCXJldHVybiAt MTsKLQkJICAgICAgfQotCQkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAoYVsxXSwgYVsyXSkpCi0JCSAgICAgIHJldHVybiAtMTsKLQkJICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFbNF0sIHRkZXAtPnNp emVfc29ja2FkZHIpKQotCQkgICAgICByZXR1cm4gLTE7Ci0JCSAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzVdLCB0ZGVwLT5zaXplX2lu dCkpCi0JCSAgICAgIHJldHVybiAtMTsKLQkJICB9Ci0JICAgICAgfQotCSAg fQotCSAgYnJlYWs7Ci0JY2FzZSBSRUNPUkRfU1lTX1NIVVRET1dOOgotCWNh c2UgUkVDT1JEX1NZU19TRVRTT0NLT1BUOgotCSAgYnJlYWs7Ci0JY2FzZSBS RUNPUkRfU1lTX0dFVFNPQ0tPUFQ6Ci0JICB7Ci0JICAgIHVpbnQzMl90IGFb NV07Ci0JICAgIHVpbnQzMl90IGF2OworICAgICAgICAgICAgICAgIHRtcHVs b25nZXN0ICs9IHRkZXAtPnNpemVfdWxvbmc7CisgICAgICAgICAgICAgICAg aWYgKHRhcmdldF9yZWFkX21lbW9yeSAoKENPUkVfQUREUikgdG1wdWxvbmdl c3QsIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGRlcC0+c2l6ZV91bG9uZyAqIDIpKQorICAgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnKQorICAg ICAgICAgICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0 ZGxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGF0 IGFkZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVsb25n ZXN0LCB0ZGVwLT5hcmcyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcgKiAyKTsKKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIHRtcHVsb25nZXN0ID0gZXh0cmFjdF91bnNp Z25lZF9pbnRlZ2VyIChhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Vsb25n LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBieXRlX29yZGVyKTsKKyAgICAgICAgICAgICAgICBs ZW4gPSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGEgKyB0ZGVwLT5zaXpl X3Vsb25nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZywgYnl0ZV9vcmRlcik7Cisg ICAgICAgICAgICAgICAgaWYgKHJlY29yZF9saW51eF9zb2NrYWRkciAocmVn Y2FjaGUsIHRkZXAsIHRtcHVsb25nZXN0LCBsZW4pKQorICAgICAgICAgICAg ICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICB9CisgICAgICAgICAg fQorICAgICAgICAgIGJyZWFrOwogCi0JICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKLQkJCSAgICAgICAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotCSAgICBpZiAodG1wdTMyKQotCSAgICAgIHsKLQkJ aWYgKHRhcmdldF9yZWFkX21lbW9yeSAodG1wdTMyLCAoZ2RiX2J5dGUgKikg YSwgc2l6ZW9mIChhKSkpCi0JCSAgewotCQkgICAgaWYgKHJlY29yZF9kZWJ1 ZykKLQkJICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAot CQkJCQkgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCi0JCQkJ CSAgIm1lbW9yeSBhdCBhZGRyID0gJXMgbGVuID0gJWx1LlxuIiwKLQkJCQkJ ICBwYWRkcmVzcyAoZ2RiYXJjaCwgdG1wdTMyKSwKLQkJCQkJICAodW5zaWdu ZWQgbG9uZylzaXplb2YgKGEpKTsKLQkJICAgIHJldHVybiAtMTsKLQkJICB9 Ci0JCWlmIChhWzRdKQotCQkgIHsKLQkJICAgIGlmICh0YXJnZXRfcmVhZF9t ZW1vcnkKLQkJCShhWzRdLCAoZ2RiX2J5dGUgKikgJiBhdiwgc2l6ZW9mIChh dikpKQotCQkgICAgICB7Ci0JCQlpZiAocmVjb3JkX2RlYnVnKQotCQkJICBm cHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0JCQkJCSAgICAgICJQ cm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCi0JCQkJCSAgICAgICJt ZW1vcnkgYXQgYWRkciA9ICVzICIKLQkJCQkJICAgICAgImxlbiA9ICVsdS5c biIsCi0JCQkJCSAgICAgIHBhZGRyZXNzIChnZGJhcmNoLCBhWzRdKSwKLQkJ CQkJICAgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mIChhdikpOwotCQkJcmV0 dXJuIC0xOwotCQkgICAgICB9Ci0JCSAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtIChhWzNdLCBhdikpCi0JCSAgICAgIHJldHVybiAtMTsKLQkJ ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFbNF0sIHRkZXAt PnNpemVfaW50KSkKLQkJICAgICAgcmV0dXJuIC0xOwotCQkgIH0KLQkgICAg ICB9Ci0JICB9Ci0JICBicmVhazsKLQljYXNlIFJFQ09SRF9TWVNfU0VORE1T RzoKLQkgIGJyZWFrOwotCWNhc2UgUkVDT1JEX1NZU19SRUNWTVNHOgotCSAg ewotCSAgICB1aW50MzJfdCBhWzJdLCBpOwotCSAgICBzdHJ1Y3QgcmVjb3Jk X21zZ2hkcgotCSAgICB7Ci0JICAgICAgdWludDMyX3QgbXNnX25hbWU7Ci0J ICAgICAgdWludDMyX3QgbXNnX25hbWVsZW47Ci0JICAgICAgdWludDMyX3Qg bXNnX2lvdjsKLQkgICAgICB1aW50MzJfdCBtc2dfaW92bGVuOwotCSAgICAg IHVpbnQzMl90IG1zZ19jb250cm9sOwotCSAgICAgIHVpbnQzMl90IG1zZ19j b250cm9sbGVuOwotCSAgICAgIHVpbnQzMl90IG1zZ19mbGFnczsKLQkgICAg fSByZWM7Ci0JICAgIHN0cnVjdCByZWNvcmRfaW92ZWMKLQkgICAgewotCSAg ICAgIHVpbnQzMl90IGlvdl9iYXNlOwotCSAgICAgIHVpbnQzMl90IGlvdl9s ZW47Ci0JICAgIH0gaW92OworICAgICAgICBjYXNlIFJFQ09SRF9TWVNfU09D S0VUUEFJUjoKKyAgICAgICAgICB7CisgICAgICAgICAgICBnZGJfYnl0ZSAq YSA9IGFsbG9jYSAodGRlcC0+c2l6ZV91bG9uZyk7CisgICAgICAgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnRtcHVsb25nZXN0KTsKKyAgICAgICAgICAgIGlmICh0bXB1bG9uZ2VzdCkK KyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRtcHVsb25nZXN0 ICs9IHRkZXAtPnNpemVfdWxvbmcgKiAzOworICAgICAgICAgICAgICAgIGlm ICh0YXJnZXRfcmVhZF9tZW1vcnkgKChDT1JFX0FERFIpIHRtcHVsb25nZXN0 LCBhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRkZXAtPnNpemVfdWxvbmcpKQorICAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnKQorICAgICAgICAg ICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ cm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGF0IGFkZHIg PSAweCVzIGxlbiA9ICVkLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVsb25nZXN0LCB0 ZGVwLT5hcmcyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcpOworICAgICAgICAgICAgICAg ICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgdG1wYWRkcgorICAgICAgICAgICAgICAgICAgPSAoQ09SRV9B RERSKSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGEsIHRkZXAtPnNpemVf dWxvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnl0ZV9vcmRlcik7CisgICAgICAgICAg ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wYWRkciwg dGRlcC0+c2l6ZV9pbnQpKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x OworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGJy ZWFrOworICAgICAgICBjYXNlIFJFQ09SRF9TWVNfU0VORDoKKyAgICAgICAg Y2FzZSBSRUNPUkRfU1lTX1NFTkRUTzoKKyAgICAgICAgICBicmVhazsKKyAg ICAgICAgY2FzZSBSRUNPUkRfU1lTX1JFQ1ZGUk9NOgorICAgICAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRt cHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAg ICAgICAgICB7CisgICAgICAgICAgICAgIGdkYl9ieXRlICphID0gYWxsb2Nh ICh0ZGVwLT5zaXplX3Vsb25nICogMik7CisgICAgICAgICAgICAgIGludCBh ZGRybGVuOworICAgICAgICAgICAgICBnZGJfYnl0ZSAqYWRkcmxlbnA7Cisg ICAgICAgICAgICAgIFVMT05HRVNUIGxlbjsKIAotCSAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCi0JCQkgICAgICAgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLQkgICAgaWYgKHRtcHUzMikKLQkgICAg ICB7Ci0JCWlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKHRtcHUzMiwgKGdkYl9i eXRlICopIGEsIHNpemVvZiAoYSkpKQotCQkgIHsKLQkJICAgIGlmIChyZWNv cmRfZGVidWcpCi0JCSAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0 ZGxvZywKLQkJCQkJICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcg IgotCQkJCQkgICJtZW1vcnkgYXQgYWRkciA9ICVzIGxlbiA9ICVsdS5cbiIs Ci0JCQkJCSAgcGFkZHJlc3MgKGdkYmFyY2gsIHRtcHUzMiksCi0JCQkJCSAg KHVuc2lnbmVkIGxvbmcpc2l6ZW9mIChhKSk7Ci0JCSAgICByZXR1cm4gLTE7 Ci0JCSAgfQotCQlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzFd LCB0ZGVwLT5zaXplX21zZ2hkcikpCi0JCSAgcmV0dXJuIC0xOwotCQlpZiAo YVsxXSkKLQkJICB7Ci0JCSAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5Ci0J CQkoYVsxXSwgKGdkYl9ieXRlICopICYgcmVjLCBzaXplb2YgKHJlYykpKQot CQkgICAgICB7Ci0JCQlpZiAocmVjb3JkX2RlYnVnKQotCQkJICBmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0JCQkJCSAgICAgICJQcm9jZXNz IHJlY29yZDogZXJyb3IgcmVhZGluZyAiCi0JCQkJCSAgICAgICJtZW1vcnkg YXQgYWRkciA9ICVzICIKLQkJCQkJICAgICAgImxlbiA9ICVsdS5cbiIsCi0J CQkJCSAgICAgIHBhZGRyZXNzIChnZGJhcmNoLCBhWzFdKSwKLQkJCQkJICAg ICAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mIChyZWMpKTsKLQkJCXJldHVybiAt MTsKLQkJICAgICAgfQotCQkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbQotCQkJKHJlYy5tc2dfbmFtZSwgcmVjLm1zZ19uYW1lbGVuKSkKLQkJ ICAgICAgcmV0dXJuIC0xOwotCQkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbQotCQkJKHJlYy5tc2dfY29udHJvbCwgcmVjLm1zZ19jb250cm9s bGVuKSkKLQkJICAgICAgcmV0dXJuIC0xOwotCQkgICAgaWYgKHJlYy5tc2df aW92KQotCQkgICAgICB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgcmVjLm1zZ19p b3ZsZW47IGkrKykKLQkJCSAgewotCQkJICAgIGlmICh0YXJnZXRfcmVhZF9t ZW1vcnkKLQkJCQkocmVjLm1zZ19pb3YsIChnZGJfYnl0ZSAqKSAmIGlvdiwK LQkJCQkgc2l6ZW9mIChpb3YpKSkKLQkJCSAgICAgIHsKLQkJCQlpZiAocmVj b3JkX2RlYnVnKQotCQkJCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk bG9nLAotCQkJCQkJICAgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciAiCi0J CQkJCQkgICAgICAicmVhZGluZyBtZW1vcnkgYXQgIgotCQkJCQkJICAgICAg ImFkZHIgPSAlcyAiCi0JCQkJCQkgICAgICAibGVuID0gJWx1LlxuIiwKLQkJ CQkJCSAgICAgIHBhZGRyZXNzIChnZGJhcmNoLAotCQkJCQkJCQlyZWMubXNn X2lvdiksCi0JCQkJCQkgICAgICAodW5zaWduZWQgbG9uZylzaXplb2YgKGlv dikpOwotCQkJCXJldHVybiAtMTsKLQkJCSAgICAgIH0KLQkJCSAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtCi0JCQkJKGlvdi5pb3ZfYmFzZSwg aW92Lmlvdl9sZW4pKQotCQkJICAgICAgcmV0dXJuIC0xOwotCQkJICAgIHJl Yy5tc2dfaW92ICs9IHNpemVvZiAoc3RydWN0IHJlY29yZF9pb3ZlYyk7Ci0J CQkgIH0KLQkJICAgICAgfQotCQkgIH0KLQkgICAgICB9Ci0JICB9Ci0JICBi cmVhazsKLQlkZWZhdWx0OgotCSAgcHJpbnRmX3VuZmlsdGVyZWQgKF8oIlBy b2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0ICIKLQkJCSAgICAgICAi ZG9lc24ndCBzdXBwb3J0IHNvY2tldGNhbGwgY2FsbCAweCVzXG4iKSwKLQkJ CSAgICAgcGhleF9ueiAodG1wdTMyLCA0KSk7Ci0JICByZXR1cm4gLTE7Ci0J ICBicmVhazsKLQl9CisgICAgICAgICAgICAgIHRtcHVsb25nZXN0ICs9IHRk ZXAtPnNpemVfdWxvbmcgKiA0OworICAgICAgICAgICAgICBpZiAodGFyZ2V0 X3JlYWRfbWVtb3J5ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgYSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6 ZV91bG9uZyAqIDIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgIGlmIChyZWNvcmRfZGVidWcpCisgICAgICAgICAgICAgICAgICAg IGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvY2VzcyByZWNvcmQ6 IGVycm9yIHJlYWRpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJtZW1vcnkgYXQgYWRkciA9IDB4JXMgbGVuID0gJWQu XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE9VVFBVVF9SRUcgKHRtcHVsb25nZXN0LCB0ZGVwLT5hcmcyKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXpl X3Vsb25nICogMik7CisgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB0bXB1bG9uZ2VzdCA9 IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYSwgdGRlcC0+c2l6ZV91bG9u ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJ5dGVfb3JkZXIpOworICAgICAgICAgICAgICBsZW4g PSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGEgKyB0ZGVwLT5zaXplX3Vs b25nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkZXAtPnNpemVfdWxvbmcsIGJ5dGVfb3JkZXIpOworICAgICAg ICAgICAgICBpZiAocmVjb3JkX2xpbnV4X3NvY2thZGRyIChyZWdjYWNoZSwg dGRlcCwgdG1wdWxvbmdlc3QsIGxlbikpCisgICAgICAgICAgICAgICAgcmV0 dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFJFQ09SRF9T WVNfUkVDVjoKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAg aWYgKHRtcHVsb25nZXN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICBnZGJfYnl0ZSAqYSA9IGFsbG9jYSAodGRlcC0+c2l6ZV91bG9uZyAqIDIp OworCisgICAgICAgICAgICAgIHRtcHVsb25nZXN0ICs9IHRkZXAtPnNpemVf dWxvbmc7CisgICAgICAgICAgICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkg KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCBhLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Vsb25nKSkKKyAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAocmVjb3Jk X2RlYnVnKQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmX3VuZmlsdGVy ZWQgKGdkYl9zdGRsb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5nICIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVt b3J5IGF0IGFkZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfUkVHICh0bXB1 bG9uZ2VzdCwgdGRlcC0+YXJnMiksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZyk7CisgICAgICAg ICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgIHRtcHVsb25nZXN0ID0gZXh0cmFjdF91bnNpZ25lZF9p bnRlZ2VyIChhLCB0ZGVwLT5zaXplX3Vsb25nLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9v cmRlcik7CisgICAgICAgICAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBhICs9IHRkZXAtPnNp emVfdWxvbmc7CisgICAgICAgICAgICAgICAgICB0bXBpbnQgPSAoaW50KSBl eHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGEsIHRkZXAtPnNpemVfdWxvbmcs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJ5dGVfb3JkZXIpOworICAgICAgICAgICAgICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0bXBpbnQpKQorICAgICAgICAgICAgICAgICAg ICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJFQ09SRF9TWVNf U0hVVERPV046CisgICAgICAgIGNhc2UgUkVDT1JEX1NZU19TRVRTT0NLT1BU OgorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJFQ09SRF9TWVNf R0VUU09DS09QVDoKKyAgICAgICAgICB7CisgICAgICAgICAgICBnZGJfYnl0 ZSAqYSA9IGFsbG9jYSAodGRlcC0+c2l6ZV91bG9uZyAqIDIpOworICAgICAg ICAgICAgZ2RiX2J5dGUgKmF2ID0gYWxsb2NhICh0ZGVwLT5zaXplX2ludCk7 CisKKyAgICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAgICAgICAgICAg aWYgKHRtcHVsb25nZXN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgdG1wdWxvbmdlc3QgKz0gdGRlcC0+c2l6ZV91bG9uZyAqIDM7Cisg ICAgICAgICAgICAgICAgaWYgKHRhcmdldF9yZWFkX21lbW9yeSAoKENPUkVf QUREUikgdG1wdWxvbmdlc3QsIGEsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZyAqIDIpKQorICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVj b3JkX2RlYnVnKQorICAgICAgICAgICAgICAgICAgICAgIGZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVh ZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAibWVtb3J5IGF0IGFkZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBV VF9SRUcgKHRtcHVsb25nZXN0LCB0ZGVwLT5hcmcyKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxv bmcgKiAyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRtcHVsb25nZXN0 ID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyIChhICsgdGRlcC0+c2l6ZV91 bG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnl0ZV9vcmRlcik7CisgICAgICAgICAgICAgICAgaWYgKHRtcHVsb25n ZXN0KQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg ICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICgoQ09SRV9BRERSKSB0bXB1bG9u Z2VzdCwgYXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRkZXAtPnNpemVfaW50KSkKKyAgICAgICAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2Rl YnVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmX3VuZmls dGVyZWQgKGdkYl9zdGRsb2csCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciBy ZWFkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAibWVtb3J5IGF0IGFkZHIgPSAweCVzICIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGVuID0g JWQuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBoZXhfbnogKHRtcHVsb25nZXN0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRk ZXAtPnNpemVfdWxvbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfaW50KTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRtcGFkZHIKKyAgICAgICAg ICAgICAgICAgICAgICA9IChDT1JFX0FERFIpIGV4dHJhY3RfdW5zaWduZWRf aW50ZWdlciAoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9u ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnl0ZV9vcmRlcik7CisgICAgICAgICAg ICAgICAgICAgIHRtcGludCA9IChpbnQpIGV4dHJhY3RfdW5zaWduZWRfaW50 ZWdlciAoYXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9pbnQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnl0ZV9vcmRlcik7CisgICAgICAgICAgICAgICAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcGFkZHIsIHRt cGludCkpCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICAgICAgICAgICAgICBhICs9IHRkZXAtPnNpemVfdWxvbmc7CisgICAg ICAgICAgICAgICAgICAgIHRtcGFkZHIKKyAgICAgICAgICAgICAgICAgICAg ICA9IChDT1JFX0FERFIpIGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnl0ZV9vcmRlcik7CisgICAgICAgICAgICAgICAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcGFkZHIsIHRkZXAtPnNp emVfaW50KSkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkVDT1JEX1NZ U19TRU5ETVNHOgorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJF Q09SRF9TWVNfUkVDVk1TRzoKKyAgICAgICAgICB7CisgICAgICAgICAgICBn ZGJfYnl0ZSAqYSA9IGFsbG9jYSAodGRlcC0+c2l6ZV91bG9uZyk7CisKKyAg ICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAgICAgICAgICAgaWYgKHRt cHVsb25nZXN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg dG1wdWxvbmdlc3QgKz0gdGRlcC0+c2l6ZV91bG9uZzsKKyAgICAgICAgICAg ICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICgoQ09SRV9BRERSKSB0bXB1 bG9uZ2VzdCwgYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0ZGVwLT5zaXplX3Vsb25nKSkKKyAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKKyAg ICAgICAgICAgICAgICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9z dGRsb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW9yeSBh dCBhZGRyID0gMHglcyBsZW4gPSAlZC5cbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfUkVHICh0bXB1bG9u Z2VzdCwgdGRlcC0+YXJnMiksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Vsb25nKTsKKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIHRtcHVsb25nZXN0ID0gZXh0cmFjdF91bnNpZ25l ZF9pbnRlZ2VyIChhLCB0ZGVwLT5zaXplX3Vsb25nLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi eXRlX29yZGVyKTsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2xpbnV4 X21zZ2hkciAocmVnY2FjaGUsIHRkZXAsIHRtcHVsb25nZXN0KSkKKyAgICAg ICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgfQorICAg ICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK KyAgICAgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXygiUHJvY2VzcyByZWNv cmQgYW5kIHJlcGxheSB0YXJnZXQgIgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJkb2Vzbid0IHN1cHBvcnQgc29ja2V0Y2FsbCBjYWxsIDB4 JXNcbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRf UkVHICh0bXB1bG9uZ2VzdCwgdGRlcC0+YXJnMSkpOworICAgICAgICAgIHJl dHVybiAtMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg YnJlYWs7CiAKICAgICAgIC8qIHN5c19zeXNsb2cgKi8KQEAgLTk0OSwxNiAr MTE3MSwxOCBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0s IHN0cnVjCiAKICAgICAgIC8qIHN5c19zZXRpdGltZXIgKi8KICAgICBjYXNl IDEwNDoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9p dGltZXJ2YWwpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25n ZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChD T1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9pdGltZXJ2YWwpKQorICAgICAg ICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2dl dGl0aW1lciAqLwogICAgIGNhc2UgMTA1OgotICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX2l0aW1lcnZhbCkpCi0JcmV0dXJuIC0xOwor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXpl X2l0aW1lcnZhbCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFr OwogCiAgICAgICAvKiBzeXNfbmV3c3RhdCAqLwpAQCAtOTY3LDE2ICsxMTkx LDE5IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3Ry dWMKICAgICBjYXNlIDEwNzoKICAgICAgIC8qIHN5c19uZXdmc3RhdCAqLwog ICAgIGNhc2UgMTA4OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVw LT5zaXplX3N0YXQpKQotCXJldHVybiAtMTsKKyAgICAgIC8qIHN5c19uZXdm c3RhdGF0ICovCisgICAgY2FzZSA1NDA6CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9zdGF0KSkKKyAg ICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5 c191bmFtZSAqLwogICAgIGNhc2UgMTA5OgotICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX29sZF91dHNuYW1lKSkKLQlyZXR1cm4gLTE7 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNp emVfb2xkX3V0c25hbWUpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBi cmVhazsKIAogICAgICAgLyogc3lzX2lvcGwgKi8KQEAgLTk5MSwxMiArMTIx OCwxNCBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0 cnVjCiAKICAgICAgIC8qIHN5c193YWl0NCAqLwogICAgIGNhc2UgMTE0Ogot ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2ludCkpCi0J cmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmc0LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX3J1c2FnZSkpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxv bmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo KENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2ludCkpCisgICAgICAgIHJl dHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChy ZWdjYWNoZSwgdGRlcC0+YXJnNCwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVs b25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGRlcC0+c2l6ZV9ydXNhZ2UpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAg ICBicmVhazsKIAogICAgICAgLyogc3lzX3N3YXBvZmYgKi8KQEAgLTEwMDUs NDcgKzEyMzQsMTIxIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50 IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX3N5c2luZm8gKi8KICAgICBj YXNlIDExNjoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwg dGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6 ZV9zeXNpbmZvKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfc3lzaW5mbykpCisgICAgICAg IHJldHVybiAtMTsKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfc2ht Z2V0ICovCisgICAgY2FzZSA1MjA6CisgICAgICAvKiBzeXNfc2VtZ2V0ICov CisgICAgY2FzZSA1MjM6CisgICAgICAvKiBzeXNfc2Vtb3AgKi8KKyAgICBj YXNlIDUyNDoKKyAgICAgIC8qIHN5c19tc2dnZXQgKi8KKyAgICBjYXNlIDUy ODoKKyAgICAgIC8qIHN5c19zaG1kdCAqLworICAgICAgLyogWFhYIG1heWJl IG5lZWQgZG8gc29tZSByZWNvcmQgd29ya3Mgd2l0aCBzeXNfc2htZHQuICAq LworICAgIGNhc2UgNTI3OgorICAgICAgLyogc3lzX21zZ3NuZCAqLworICAg IGNhc2UgNTI5OgorICAgICAgLyogc3lzX3NlbXRpbWVkb3AgKi8KKyAgICBj YXNlIDUzMjoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfc2htYXQg Ki8KKyAgICBjYXNlIDUyMToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vu c2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FE RFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZykpCisgICAgICAgIHJldHVybiAt MTsKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfc2htY3RsICovCisg ICAgY2FzZSA1MjI6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0 bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkZXAtPnNpemVfc2htaWRfZHMpKQorICAgICAgICByZXR1cm4gLTE7 CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3NlbWN0bCAqLworICAg ICAgLyogWFhYIHN5c19zZW1jdGwgNTI1IHN0aWxsIG5vdCBzdXBwb3J0LiAg Ki8KKworICAgICAgLyogc3lzX21zZ3JjdiAqLworICAgIGNhc2UgNTMwOgor ICAgICAgeworICAgICAgICBVTE9OR0VTVCBtc2dwOworICAgICAgICByZWdj YWNoZV9yYXdfcmVhZF9zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAm dG1wdWxvbmdlc3QpOworICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZtc2dwKTsKKyAgICAgICAg dG1waW50ID0gKGludCkgdG1wdWxvbmdlc3QgKyB0ZGVwLT5zaXplX2xvbmc7 CisgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpIG1zZ3AsIHRtcGludCkpCisgICAgICAgICAgcmV0dXJuIC0xOwor ICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19tc2djdGwg Ki8KKyAgICBjYXNlIDUzMToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vu c2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FE RFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGRlcC0+c2l6ZV9tc3FpZF9kcykpCisgICAgICAgIHJldHVy biAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfaXBjICovCiAg ICAgY2FzZSAxMTc6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAg ICBzd2l0Y2ggKHRtcHUzMikKLQl7Ci0JY2FzZSBSRUNPUkRfTVNHUkNWOgot CSAgewotCSAgICBpbnQzMl90IHNlY29uZDsKLQkgICAgdWludDMyX3QgcHRy OwotCSAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzMsCi0JCQkgICAgICAgKGdkYl9ieXRlICopICYgc2Vjb25kKTsKLQkgICAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LAotCQkJ ICAgICAgIChnZGJfYnl0ZSAqKSAmIHB0cik7Ci0JICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHB0ciwgc2Vjb25kICsgdGRlcC0+c2l6ZV9s b25nKSkKLQkgICAgICByZXR1cm4gLTE7Ci0JICB9Ci0JICBicmVhazsKLQlj YXNlIFJFQ09SRF9NU0dDVEw6Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzUsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfbXNxaWRfZHMpKQotCSAgICByZXR1cm4gLTE7Ci0J ICBicmVhazsKLQljYXNlIFJFQ09SRF9TSE1BVDoKLQkgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKLQkJCSAgICAgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV91bG9uZykpCi0JICAgIHJldHVy biAtMTsKLQkgIGJyZWFrOwotCWNhc2UgUkVDT1JEX1NITUNUTDoKLQkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNSwKLQkJCSAg ICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9zaG1pZF9kcykp Ci0JICAgIHJldHVybiAtMTsKLQkgIGJyZWFrOwotCX0KKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwg JnRtcHVsb25nZXN0KTsKKyAgICAgIHRtcHVsb25nZXN0ICY9IDB4ZmZmZjsK KyAgICAgIHN3aXRjaCAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAg ICAgY2FzZSBSRUNPUkRfU0VNT1A6CisgICAgICAgIGNhc2UgUkVDT1JEX1NF TUdFVDoKKyAgICAgICAgY2FzZSBSRUNPUkRfU0VNVElNRURPUDoKKyAgICAg ICAgY2FzZSBSRUNPUkRfTVNHU05EOgorICAgICAgICBjYXNlIFJFQ09SRF9N U0dHRVQ6CisgICAgICAgICAgLyogWFhYIG1heWJlIG5lZWQgZG8gc29tZSBy ZWNvcmQgd29ya3Mgd2l0aCBSRUNPUkRfU0hNRFQuICAqLworICAgICAgICBj YXNlIFJFQ09SRF9TSE1EVDoKKyAgICAgICAgY2FzZSBSRUNPUkRfU0hNR0VU OgorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJFQ09SRF9NU0dS Q1Y6CisgICAgICAgICAgeworICAgICAgICAgICAgVUxPTkdFU1Qgc2Vjb25k OworICAgICAgICAgICAgVUxPTkdFU1QgcHRyOworICAgICAgICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywg JnNlY29uZCk7CisgICAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzUsICZwdHIpOworICAgICAgICAg ICAgdG1waW50ID0gKGludCkgc2Vjb25kICsgdGRlcC0+c2l6ZV9sb25nOwor ICAgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUikgcHRyLCB0bXBpbnQpKQorICAgICAgICAgICAgICByZXR1cm4g LTE7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBj YXNlIFJFQ09SRF9NU0dDVEw6CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOwor ICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfbXNxaWRfZHMpKQorICAgICAg ICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIGJyZWFrOworICAgICAgICBj YXNlIFJFQ09SRF9TSE1BVDoKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVh ZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVf QUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZykpCisgICAgICAgICAg ICByZXR1cm4gLTE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug UkVDT1JEX1NITUNUTDoKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91 bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAg ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQURE UikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGRlcC0+c2l6ZV9zaG1pZF9kcykpCisgICAgICAgICAg ICByZXR1cm4gLTE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgLyogWFhYIFJFQ09SRF9TRU1DVEwgc3RpbGwgbm90 IHN1cHBvcnQuICAqLworICAgICAgICAgIHByaW50Zl91bmZpbHRlcmVkIChf KCJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vzbid0ICIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9ydCBpcGMg bnVtYmVyICVkXG4iKSwgKGludCkgdG1wdWxvbmdlc3QpOworICAgICAgICAg IGJyZWFrOworICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyog c3lzX2ZzeW5jICovCkBAIC0xMDYwLDMwICsxMzYzLDMwIEBAIHJlY29yZF9s aW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyog c3lzX25ld3VuYW1lICovCiAgICAgY2FzZSAxMjI6Ci0gICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIHRkZXAtPnNpemVfbmV3X3V0c25hbWUpKQotCXJldHVy biAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25n ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV9uZXdfdXRzbmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKICAg ICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfbW9kaWZ5X2xkdCAqLwogICAg IGNhc2UgMTIzOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHRtcHUzMiA9PSAwIHx8IHRtcHUzMiA9PSAyKQotCXsKLQkgIHVpbnQz Ml90IHB0ciwgYnl0ZWNvdW50OwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiBwdHIpOwotCSAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAotCQkJ ICAgICAoZ2RiX2J5dGUgKikgJiBieXRlY291bnQpOwotCSAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAocHRyLCBieXRlY291bnQpKQotCSAgICBy ZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHRtcHVsb25nZXN0ID09IDAgfHwgdG1wdWxvbmdlc3QgPT0gMikK KyAgICAgICAgeworICAgICAgICAgIFVMT05HRVNUIHB0ciwgYnl0ZWNvdW50 OworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgJnB0cik7CisgICAgICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmYnl0 ZWNvdW50KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKSBwdHIsIChpbnQpIGJ5dGVjb3VudCkpCisgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwog CiAgICAgICAvKiBzeXNfYWRqdGltZXggKi8KICAgICBjYXNlIDEyNDoKLSAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90aW1leCkpCi0J cmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1w dWxvbmdlc3QsIHRkZXAtPnNpemVfdGltZXgpKQorICAgICAgICByZXR1cm4g LTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX21wcm90ZWN0ICov CkBAIC0xMDkyLDkgKzEzOTUsMTAgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9j YWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfc2lncHJvY21h c2sgKi8KICAgICBjYXNlIDEyNjoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgdGRlcC0+c2l6ZV9vbGRfc2lnc2V0X3QpKQotCXJldHVybiAtMTsKKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9v bGRfc2lnc2V0X3QpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVh azsKIAogICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8KQEAgLTExMDksMzUg KzE0MTMsMzkgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVt LCBzdHJ1YwogCiAgICAgICAvKiBzeXNfcXVvdGFjdGwgKi8KICAgICBjYXNl IDEzMToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIHN3aXRj aCAodG1wdTMyKQotCXsKLQljYXNlIFJFQ09SRF9RX0dFVEZNVDoKLQkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKLQkJCSAg ICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgNCkpCi0JICAgIHJldHVybiAtMTsK LQkgIGJyZWFrOwotCWNhc2UgUkVDT1JEX1FfR0VUSU5GTzoKLQkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKLQkJCSAgICAg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9tZW1fZHFpbmZvKSkK LQkgICAgcmV0dXJuIC0xOwotCSAgYnJlYWs7Ci0JY2FzZSBSRUNPUkRfUV9H RVRRVU9UQToKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnNCwKLQkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+ c2l6ZV9pZl9kcWJsaykpCi0JICAgIHJldHVybiAtMTsKLQkgIGJyZWFrOwot CWNhc2UgUkVDT1JEX1FfWEdFVFFTVEFUOgotCWNhc2UgUkVDT1JEX1FfWEdF VFFVT1RBOgotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmc0LAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX2ZzX3F1b3RhX3N0YXQpKQotCSAgICByZXR1cm4gLTE7Ci0JICBicmVh azsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBzd2l0 Y2ggKHRtcHVsb25nZXN0KQorICAgICAgICB7CisgICAgICAgIGNhc2UgUkVD T1JEX1FfR0VURk1UOgorICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vu c2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAg ICAgICAvKiBfX3UzMiAqLworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCA0KSkKKyAg ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICBicmVhazsKKyAgICAg ICAgY2FzZSBSRUNPUkRfUV9HRVRJTkZPOgorICAgICAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25n ZXN0KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX21lbV9kcWluZm8p KQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIGJyZWFrOwor ICAgICAgICBjYXNlIFJFQ09SRF9RX0dFVFFVT1RBOgorICAgICAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRt cHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2lmX2Rx YmxrKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICBicmVh azsKKyAgICAgICAgY2FzZSBSRUNPUkRfUV9YR0VUUVNUQVQ6CisgICAgICAg IGNhc2UgUkVDT1JEX1FfWEdFVFFVT1RBOgorICAgICAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25n ZXN0KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2ZzX3F1b3RhX3N0 YXQpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIGJyZWFr OworICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2dl dHBnaWQgKi8KQEAgLTExNTAsMTUgKzE0NTgsMTUgQEAgcmVjb3JkX2xpbnV4 X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNf c3lzZnMgKi8KICAgICBjYXNlIDEzNToKLSAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLSAgICAgIGlmICh0bXB1MzIgPT0gMikKLQl7Ci0JICByZWdjYWNo ZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCi0JCQkgICAgIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICAvKlhYWCB0aGUgc2l6ZSBvZiBt ZW1vcnkgaXMgbm90IHZlcnkgY2xlYXIuICAqLwotCSAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCAxMCkpCi0JICAgIHJldHVybiAt MTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAo dG1wdWxvbmdlc3QgPT0gMikKKyAgICAgICAgeworICAgICAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVs b25nZXN0KTsKKyAgICAgICAgICAvKlhYWCB0aGUgc2l6ZSBvZiBtZW1vcnkg aXMgbm90IHZlcnkgY2xlYXIuICAqLworICAgICAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCAx MCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAg IGJyZWFrOwogCiAgICAgICAvKiBzeXNfcGVyc29uYWxpdHkgKi8KQEAgLTEx NzMsMzcgKzE0ODEsNDMgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChp bnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfbGxzZWVrICovCiAgICAg Y2FzZSAxNDA6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzQsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfbG9mZl90KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfbG9mZl90KSkKKyAgICAgICAg cmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19nZXRk ZW50cyAqLwogICAgIGNhc2UgMTQxOgogICAgICAgewotCXVpbnQzMl90IGNv dW50OwotCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJn MiwKLQkJCSAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikg JiBjb3VudCk7Ci0JaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX2RpcmVudCAqIGNvdW50KSkKLQkgIHJldHVybiAt MTsKKyAgICAgICAgVUxPTkdFU1QgY291bnQ7CisgICAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2Vz dCk7CisgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywgJmNvdW50KTsKKyAgICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAt PnNpemVfZGlyZW50ICogY291bnQpKQorICAgICAgICAgIHJldHVybiAtMTsK ICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfc2VsZWN0 ICovCiAgICAgY2FzZSAxNDI6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfZmRfc2V0KSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfZmRfc2V0KSkKLQlyZXR1cm4g LTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzQsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfZmRf c2V0KSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzUsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfdGltZXZhbCkpCi0JcmV0dXJuIC0xOworICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2ZkX3NldCkp CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0 KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGRlcC0+c2l6ZV9mZF9zZXQpKQorICAgICAgICByZXR1 cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzQsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9u Z2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRk ZXAtPnNpemVfZmRfc2V0KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmc1LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3RpbWV2 YWwpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAg ICAgLyogc3lzX2Zsb2NrICovCkBAIC0xMjE1LDM2ICsxNTI5LDQwIEBAIHJl Y29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKICAgICAg IC8qIHN5c19yZWFkdiAqLwogICAgIGNhc2UgMTQ1OgogICAgICAgewotCXVp bnQzMl90IHZlYzsKLQl1aW50MzJfdCB2bGVuOwotCXN0cnVjdCByZWNvcmRf aW92ZWMKLQl7Ci0JICB1aW50MzJfdCBpb3ZfYmFzZTsKLQkgIHVpbnQzMl90 IGlvdl9sZW47Ci0JfSBpb3Y7Ci0JcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB2ZWMpOwotCWlmICh2 ZWMpCi0JICB7Ci0JICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwg dGRlcC0+YXJnMywKLQkJCSAgICAgICAoZ2RiX2J5dGUgKikgJiB2bGVuKTsK LQkgICAgZm9yICh0bXB1MzIgPSAwOyB0bXB1MzIgPCB2bGVuOyB0bXB1MzIr KykKLQkgICAgICB7Ci0JCWlmICh0YXJnZXRfcmVhZF9tZW1vcnkKLQkJICAg ICh2ZWMsIChnZGJfYnl0ZSAqKSAmIGlvdiwgc2l6ZW9mIChzdHJ1Y3QgcmVj b3JkX2lvdmVjKSkpCi0JCSAgewotCQkgICAgaWYgKHJlY29yZF9kZWJ1ZykK LQkJICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotCQkJ CQkgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCi0JCQkJCSAg Im1lbW9yeSBhdCBhZGRyID0gJXMgbGVuID0gJWx1LlxuIiwKLQkJCQkJICBw YWRkcmVzcyAoZ2RiYXJjaCwgdmVjKSwKLQkJCQkJICAodW5zaWduZWQgbG9u ZylzaXplb2YgKHN0cnVjdCByZWNvcmRfaW92ZWMpKTsKLQkJICAgIHJldHVy biAtMTsKLQkJICB9Ci0JCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KGlvdi5pb3ZfYmFzZSwgaW92Lmlvdl9sZW4pKQotCQkgIHJldHVybiAtMTsK LQkJdmVjICs9IHNpemVvZiAoc3RydWN0IHJlY29yZF9pb3ZlYyk7Ci0JICAg ICAgfQotCSAgfQorICAgICAgICBVTE9OR0VTVCB2ZWMsIHZsZW47CisKKyAg ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcyLCAmdmVjKTsKKyAgICAgICAgaWYgKHZlYykKKyAgICAgICAg ICB7CisgICAgICAgICAgICBnZGJfYnl0ZSAqaW92ID0gYWxsb2NhICh0ZGVw LT5zaXplX2lvdmVjKTsKKworICAgICAgICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdmxlbik7Cisg ICAgICAgICAgICBmb3IgKHRtcHVsb25nZXN0ID0gMDsgdG1wdWxvbmdlc3Qg PCB2bGVuOyB0bXB1bG9uZ2VzdCsrKQorICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgaWYgKHRhcmdldF9yZWFkX21lbW9yeSAoKENPUkVfQURE UikgdmVjLCBpb3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGRlcC0+c2l6ZV9pb3ZlYykpCisgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRfZGVidWcpCisg ICAgICAgICAgICAgICAgICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJf c3RkbG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5nICIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1vcnkg YXQgYWRkciA9IDB4JXMgbGVuID0gJWQuXG4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1JFRyAodmVjLCB0 ZGVwLT5hcmcyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRkZXAtPnNpemVfaW92ZWMpOworICAgICAgICAgICAgICAg ICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgdG1wYWRkcgorICAgICAgICAgICAgICAgICAgPSAoQ09SRV9B RERSKSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGlvdiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZGVwLT5zaXplX3BvaW50ZXIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9v cmRlcik7CisgICAgICAgICAgICAgICAgdG1waW50CisgICAgICAgICAgICAg ICAgICA9IChpbnQpIGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoaW92ICsg dGRlcC0+c2l6ZV9wb2ludGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfc2l6ZV90 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJ5dGVfb3JkZXIpOworICAgICAgICAgICAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcGFkZHIsIHRtcGludCkpCisg ICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAg dmVjICs9IHRkZXAtPnNpemVfaW92ZWM7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICB9CiAgICAgICB9CiAgICAgICBicmVhazsKIApAQCAtMTI3MCw5 ICsxNTg4LDkgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVt LCBzdHJ1YwogCiAgICAgICAvKiBzeXNfc2NoZWRfZ2V0cGFyYW0gKi8KICAg ICBjYXNlIDE1NToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+ c2l6ZV9pbnQpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25n ZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChD T1JFX0FERFIpIHRtcHVsb25nZXN0LCB0ZGVwLT5zaXplX2ludCkpCisgICAg ICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNf c2NoZWRfc2V0c2NoZWR1bGVyICovCkBAIC0xMjkxLDkgKzE2MDksMTAgQEAg cmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogICAg IGNhc2UgMTYxOgogICAgICAgLyogc3lzX25hbm9zbGVlcCAqLwogICAgIGNh c2UgMTYyOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X3RpbWVzcGVjKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdGltZXNwZWMpKQorICAgICAg ICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX21y ZW1hcCAqLwpAQCAtMTMwNCwxNSArMTYyMywxOCBAQCByZWNvcmRfbGludXhf c3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19n ZXRyZXN1aWQxNiAqLwogICAgIGNhc2UgMTY1OgotICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX29sZF91aWRfdCkpCi0JcmV0dXJuIC0x OwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX29sZF91 aWRfdCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCB0ZGVwLT5zaXplX29sZF91aWRfdCkpCi0JcmV0dXJuIC0xOworICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX29sZF91 aWRfdCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVs b25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9vbGRfdWlkX3QpKQorICAg ICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERS KSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkZXAtPnNpemVfb2xkX3VpZF90KSkKKyAgICAgICAgcmV0dXJu IC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c192bTg2ICovCkBA IC0xMzIzLDMyICsxNjQ1LDMyIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2Fs bCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX3BvbGwgKi8KICAg ICBjYXNlIDE2ODoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAg IGlmICh0bXB1MzIpCi0JewotCSAgdWludDMyX3QgbmZkczsKLQkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKLQkJCSAgICAg KGdkYl9ieXRlICopICYgbmZkcyk7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfcG9sbGZkICogbmZkcykp Ci0JICAgIHJldHVybiAtMTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2Vz dCk7CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAg ICAgICBVTE9OR0VTVCBuZmRzOworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJm5mZHMpOwor ICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfcG9sbGZkICogbmZkcykpCisg ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJyZWFr OwogCiAgICAgICAvKiBzeXNfbmZzc2VydmN0bCAqLwogICAgIGNhc2UgMTY5 OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHRtcHUz MiA9PSA3IHx8IHRtcHUzMiA9PSA4KQotCXsKLQkgIHVpbnQzMl90IHJzaXpl OwotCSAgaWYgKHRtcHUzMiA9PSA3KQotCSAgICByc2l6ZSA9IHRkZXAtPnNp emVfTkZTX0ZIU0laRTsKLQkgIGVsc2UKLQkgICAgcnNpemUgPSB0ZGVwLT5z aXplX2tuZnNkX2ZoOwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBy c2l6ZSkpCi0JICAgIHJldHVybiAtMTsKLQl9CisgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1 bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3QgPT0gNyB8fCB0bXB1 bG9uZ2VzdCA9PSA4KQorICAgICAgICB7CisgICAgICAgICAgaW50IHJzaXpl OworICAgICAgICAgIGlmICh0bXB1bG9uZ2VzdCA9PSA3KQorICAgICAgICAg ICAgcnNpemUgPSB0ZGVwLT5zaXplX05GU19GSFNJWkU7CisgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgcnNpemUgPSB0ZGVwLT5zaXplX2tuZnNkX2Zo OworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2Vz dCwgcnNpemUpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9 CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3NldHJlc2dpZDE2ICov CkBAIC0xMzU3LDM1ICsxNjc5LDQwIEBAIHJlY29yZF9saW51eF9zeXN0ZW1f Y2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX2dldHJlc2dp ZDE2ICovCiAgICAgY2FzZSAxNzE6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfb2xkX2dpZF90KSkKLQlyZXR1cm4gLTE7Ci0gICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX2dpZF90KSkK LQlyZXR1cm4gLTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfb2xkX2dpZF90KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0 bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfb2xkX2dpZF90KSkK KyAgICAgICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3Qp OworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVf QUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0ZGVwLT5zaXplX29sZF9naWRfdCkpCisgICAgICAgIHJl dHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVs b25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGRlcC0+c2l6ZV9vbGRfZ2lkX3QpKQorICAgICAgICByZXR1cm4gLTE7CiAg ICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3ByY3RsICovCiAgICAgY2Fz ZSAxNzI6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBzd2l0 Y2ggKHRtcHUzMikKLQl7Ci0JY2FzZSAyOgotCSAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAotCQkJICAgICAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX2ludCkpCi0JICAgIHJldHVybiAtMTsK LQkgIGJyZWFrOwotCWNhc2UgMTY6Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzIsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0 bXB1MzIsIHRkZXAtPnNpemVfVEFTS19DT01NX0xFTikpCi0JICAgIHJldHVy biAtMTsKLQkgIGJyZWFrOwotCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0 KTsKKyAgICAgIHN3aXRjaCAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAg ICAgICAgY2FzZSAyOgorICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vu c2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERS KSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0ZGVwLT5zaXplX2ludCkpCisgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTY6Cisg ICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmdG1wdWxvbmdlc3QpOworICAgICAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAt PnNpemVfVEFTS19DT01NX0xFTikpCisgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwog CiAgICAgICAvKiBzeXNfcnRfc2lncmV0dXJuICovCkBAIC0xMzk0LDM2ICsx NzIxLDM5IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwg c3RydWMKIAogICAgICAgLyogc3lzX3J0X3NpZ2FjdGlvbiAqLwogICAgIGNh c2UgMTc0OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X3NpZ2FjdGlvbikpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxv bmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo KENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3NpZ2FjdGlvbikpCisgICAg ICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNf cnRfc2lncHJvY21hc2sgKi8KICAgICBjYXNlIDE3NToKLSAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9zaWdzZXRfdCkpCi0JcmV0dXJu IC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdl c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVw LT5zaXplX3NpZ3NldF90KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAg YnJlYWs7CiAKICAgICAgIC8qIHN5c19ydF9zaWdwZW5kaW5nICovCiAgICAg Y2FzZSAxNzY6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBp ZiAodG1wdTMyKQotCXsKLQkgIHVpbnQzMl90IHNpZ3NldHNpemU7Ci0JICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCi0JCQkg ICAgIChnZGJfYnl0ZSAqKSAmIHNpZ3NldHNpemUpOwotCSAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBzaWdzZXRzaXplKSkKLQkg ICAgcmV0dXJuIC0xOwotCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vu c2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsK KyAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAgICAgICAgeworICAgICAgICAg IFVMT05HRVNUIHNpZ3NldHNpemU7CisgICAgICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCZzaWdzZXRz aXplKTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoaW50KSBzaWdzZXRzaXplKSkKKyAg ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgYnJlYWs7 CiAKICAgICAgIC8qIHN5c19ydF9zaWd0aW1lZHdhaXQgKi8KICAgICBjYXNl IDE3NzoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9z aWdpbmZvX3QpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25n ZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChD T1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9zaWdpbmZvX3QpKQorICAgICAg ICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3J0 X3NpZ3F1ZXVlaW5mbyAqLwpAQCAtMTQzNCwxNSArMTc2NCwxNCBAQCByZWNv cmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAg IC8qIHN5c19wcmVhZDY0ICovCiAgICAgY2FzZSAxODA6Ci0gICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAodG1wdTMyKQotCXsKLQkgIHVp bnQzMl90IGNvdW50OwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiBjb3VudCk7 Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIGNv dW50KSkKLQkgICAgcmV0dXJuIC0xOwotCX0KKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVs b25nZXN0KTsKKyAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAgICAgICAgewor ICAgICAgICAgIFVMT05HRVNUIGNvdW50OworICAgICAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywmY291 bnQpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCAoaW50KSBjb3VudCkpCisgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwog CiAgICAgICAvKiBzeXNfcHdyaXRlNjQgKi8KQEAgLTE0NTMsMjIgKzE3ODIs MjIgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1 YwogCiAgICAgICAvKiBzeXNfZ2V0Y3dkICovCiAgICAgY2FzZSAxODM6Ci0g ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEs IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAodG1wdTMyKQot CXsKLQkgIHVpbnQzMl90IHNpemU7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzIsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAm IHNpemUpOwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCBzaXplKSkKLQkgICAgcmV0dXJuIC0xOwotCX0KKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwg JnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAgICAg ICAgeworICAgICAgICAgIFVMT05HRVNUIHNpemU7CisgICAgICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAmc2l6ZSk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsIChpbnQpIHNpemUpKQor ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICBicmVh azsKIAogICAgICAgLyogc3lzX2NhcGdldCAqLwogICAgIGNhc2UgMTg0Ogot ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2NhcF91c2Vy X2RhdGFfdCkpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdl c3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZGVwLT5zaXplX2NhcF91c2VyX2RhdGFfdCkpCisg ICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBz eXNfY2Fwc2V0ICovCkBAIC0xNDc3LDE2ICsxODA2LDE4IEBAIHJlY29yZF9s aW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyog c3lzX3NpZ2FsdHN0YWNrICovCiAgICAgY2FzZSAxODY6Ci0gICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfc3RhY2tfdCkpCi0JcmV0dXJu IC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdl c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVw LT5zaXplX3N0YWNrX3QpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBi cmVhazsKIAogICAgICAgLyogc3lzX3NlbmRmaWxlICovCiAgICAgY2FzZSAx ODc6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2Zm X3QpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vu c2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FE RFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGRlcC0+c2l6ZV9vZmZfdCkpCisgICAgICAgIHJldHVybiAt MTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAq LwpAQCAtMTQ5OSw5ICsxODMwLDEwIEBAIHJlY29yZF9saW51eF9zeXN0ZW1f Y2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX2dldHJsaW1p dCAqLwogICAgIGNhc2UgMTkxOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCB0ZGVwLT5zaXplX3JsaW1pdCkpCi0JcmV0dXJuIC0xOworICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3JsaW1pdCkp CisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAv KiBzeXNfbW1hcDIgKi8KQEAgLTE1MjAsOSArMTg1MiwxMCBAQCByZWNvcmRf bGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAgICAgY2FzZSAx OTY6CiAgICAgICAvKiBzeXNfZnN0YXQ2NCAqLwogICAgIGNhc2UgMTk3Ogot ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3N0YXQ2NCkp Ci0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZGVwLT5zaXplX3N0YXQ2NCkpCisgICAgICAgIHJldHVybiAtMTsK ICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfbGNob3duICovCkBAIC0x NTQzLDE2ICsxODc2LDE2IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAo aW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX2dldGdyb3VwcyAqLwog ICAgIGNhc2UgMjA1OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAg ICAgaWYgKHRtcHUzMikKLQl7Ci0JICBpbnQgZ2lkc2V0c2l6ZTsKLQkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwKLQkJCSAg ICAgKGdkYl9ieXRlICopICYgZ2lkc2V0c2l6ZSk7Ci0JICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtCi0JICAgICAgKHRtcHUzMiwgdGRlcC0+c2l6 ZV9naWRfdCAqIGdpZHNldHNpemUpKQotCSAgICByZXR1cm4gLTE7Ci0JfQor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25n ZXN0KQorICAgICAgICB7CisgICAgICAgICAgVUxPTkdFU1QgZ2lkc2V0c2l6 ZTsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZnaWRzZXRzaXplKTsKKyAgICAgICAgICB0bXBpbnQg PSB0ZGVwLT5zaXplX2dpZF90ICogKGludCkgZ2lkc2V0c2l6ZTsKKyAgICAg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERS KSB0bXB1bG9uZ2VzdCwgdG1waW50KSkKKyAgICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19z ZXRncm91cHMgKi8KQEAgLTE1NjUsMTUgKzE4OTgsMTUgQEAgcmVjb3JkX2xp bnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBz eXNfZ2V0cmVzdWlkICovCiAgICAgY2FzZSAyMDk6Ci0gICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdWlkX3QpKQotCXJldHVybiAtMTsK LSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJn MiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV91aWRfdCkp Ci0JcmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVw LT5zaXplX3VpZF90KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1 bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV91aWRfdCkp CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0 KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpIHRtcHVsb25nZXN0LCB0ZGVwLT5zaXplX3VpZF90KSkKKyAgICAg ICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsIHRkZXAtPnNpemVfdWlkX3QpKQorICAgICAgICByZXR1 cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3NldHJlc2dp ZCAqLwpAQCAtMTU4MiwxNSArMTkxNSwxNSBAQCByZWNvcmRfbGludXhfc3lz dGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19nZXRy ZXNnaWQgKi8KICAgICBjYXNlIDIxMToKLSAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9naWRfdCkpCi0JcmV0dXJuIC0xOwotICAgICAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2dpZF90KSkKLQlyZXR1 cm4gLTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf Z2lkX3QpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0 KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpIHRtcHVsb25nZXN0LCB0ZGVwLT5zaXplX2dpZF90KSkKKyAgICAg ICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsIHRkZXAtPnNpemVfZ2lkX3QpKQorICAgICAgICByZXR1 cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9u Z2VzdCwgdGRlcC0+c2l6ZV9naWRfdCkpCisgICAgICAgIHJldHVybiAtMTsK ICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfY2hvd24gKi8KQEAgLTE2 MDksOSArMTk0MiwxMCBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGlu dCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19taW5jb3JlICovCiAgICAg Y2FzZSAyMTg6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfUEFHRV9TSVpFKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1 bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfUEFHRV9TSVpFKSkKKyAg ICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5 c19tYWR2aXNlICovCkBAIC0xNjIxLDMwICsxOTU1LDMyIEBAIHJlY29yZF9s aW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKICAgICAgIC8qIHN5 c19nZXRkZW50czY0ICovCiAgICAgY2FzZSAyMjA6CiAgICAgICB7Ci0JdWlu dDMyX3QgY291bnQ7Ci0JcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcyLAotCQkJICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQly ZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJf Ynl0ZSAqKSAmIGNvdW50KTsKLQlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIHRkZXAtPnNpemVfZGlyZW50NjQgKiBjb3VudCkpCi0J ICByZXR1cm4gLTE7CisgICAgICAgIFVMT05HRVNUIGNvdW50OworICAgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm dG1wdWxvbmdlc3QpOworICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZjb3VudCk7CisgICAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRt cHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZGVwLT5zaXplX2RpcmVudDY0ICogY291bnQpKQorICAgICAgICAg IHJldHVybiAtMTsKICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgICAv KiBzeXNfZmNudGw2NCAqLwogICAgIGNhc2UgMjIxOgotICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotICAgICAgaWYgKHRtcHUzMiA9PSB0ZGVwLT5mY250 bF9GX0dFVExLNjQpCisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAg ICBpZiAodG1wdWxvbmdlc3QgPT0gdGRlcC0+ZmNudGxfRl9HRVRMSzY0KQog ICAgICAgICB7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0J ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfZmxvY2s2NCkpCi0JICAgIHJldHVybiAtMTsKLQl9Ci0gICAgICBl bHNlIGlmICh0bXB1MzIgIT0gdGRlcC0+ZmNudGxfRl9TRVRMSzY0Ci0JICAg ICAgICYmIHRtcHUzMiAhPSB0ZGVwLT5mY250bF9GX1NFVExLVzY0KQorICAg ICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5z aXplX2Zsb2NrNjQpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg ICB9CisgICAgICBlbHNlIGlmICh0bXB1bG9uZ2VzdCAhPSB0ZGVwLT5mY250 bF9GX1NFVExLNjQKKyAgICAgICAgICAgICAgICYmIHRtcHVsb25nZXN0ICE9 IHRkZXAtPmZjbnRsX0ZfU0VUTEtXNjQpCiAgICAgICAgIHsKLQkgIGdvdG8g c3lzX2ZjbnRsOwotCX0KKyAgICAgICAgICBnb3RvIHN5c19mY250bDsKKyAg ICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19uaV9zeXNj YWxsICovCkBAIC0xNjY5LDE1ICsyMDA1LDE0IEBAIHJlY29yZF9saW51eF9z eXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKICAgICBjYXNlIDIzMDoKICAg ICAgIC8qIHN5c19mZ2V0eGF0dHIgKi8KICAgICBjYXNlIDIzMToKLSAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIpCi0Jewot CSAgdWludDMyX3Qgc2l6ZTsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnNCwKLQkJCSAgICAgKGdkYl9ieXRlICopICYgc2l6 ZSk7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHNpemUpKQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1w dWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICB7 CisgICAgICAgICAgVUxPTkdFU1Qgc2l6ZTsKKyAgICAgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsICZz aXplKTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgKGludCkgc2l6ZSkpCisgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwog CiAgICAgICAvKiBzeXNfbGlzdHhhdHRyICovCkBAIC0xNjg2LDE1ICsyMDIx LDE0IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3Ry dWMKICAgICBjYXNlIDIzMzoKICAgICAgIC8qIHN5c19mbGlzdHhhdHRyICov CiAgICAgY2FzZSAyMzQ6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0g ICAgICBpZiAodG1wdTMyKQotCXsKLQkgIHVpbnQzMl90IHNpemU7Ci0JICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCi0JCQkg ICAgIChnZGJfYnl0ZSAqKSAmIHNpemUpOwotCSAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCBzaXplKSkKLQkgICAgcmV0dXJuIC0x OwotCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0 bXB1bG9uZ2VzdCkKKyAgICAgICAgeworICAgICAgICAgIFVMT05HRVNUIHNp emU7CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmczLCAmc2l6ZSk7CisgICAgICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdl c3QsIChpbnQpIHNpemUpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3JlbW92ZXhh dHRyICovCkBAIC0xNzA5LDkgKzIwNDMsMTAgQEAgcmVjb3JkX2xpbnV4X3N5 c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfc2Vu ZGZpbGU2NCAqLwogICAgIGNhc2UgMjM5OgotICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX2xvZmZfdCkpCi0JcmV0dXJuIC0xOworICAg ICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2xv ZmZfdCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAg ICAgICAvKiBzeXNfZnV0ZXggKi8KQEAgLTE3MjIsMzUgKzIwNTcsMzYgQEAg cmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAg ICAgICAvKiBzeXNfc2NoZWRfZ2V0YWZmaW5pdHkgKi8KICAgICBjYXNlIDI0 MjoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1 MzIpCi0JewotCSAgdWludDMyX3QgbGVuOwotCSAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiBsZW4p OwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBs ZW4pKQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxv bmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICB7Cisg ICAgICAgICAgVUxPTkdFU1QgbGVuOworICAgICAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJmxlbik7 CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUikgdG1wdWxvbmdlc3QsIChpbnQpIGxlbikpCisgICAgICAgICAg ICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAg ICAvKiBzeXNfc2V0X3RocmVhZF9hcmVhICovCiAgICAgY2FzZSAyNDM6Ci0g ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEs IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfaW50KSkKLQly ZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1 bG9uZ2VzdCwgdGRlcC0+c2l6ZV9pbnQpKQorICAgICAgICByZXR1cm4gLTE7 CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2dldF90aHJlYWRfYXJl YSAqLwogICAgIGNhc2UgMjQ0OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCB0ZGVwLT5zaXplX3VzZXJfZGVzYykpCi0JcmV0dXJuIC0xOworICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3VzZXJf ZGVzYykpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAg ICAgICAvKiBzeXNfaW9fc2V0dXAgKi8KICAgICBjYXNlIDI0NToKLSAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9sb25nKSkKLQlyZXR1 cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9u Z2VzdCwgdGRlcC0+c2l6ZV9sb25nKSkKKyAgICAgICAgcmV0dXJuIC0xOwog ICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19pb19kZXN0cm95ICovCkBA IC0xNzU5LDQ5ICsyMDk1LDU3IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2Fs bCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX2lvX2dldGV2ZW50 cyAqLwogICAgIGNhc2UgMjQ3OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotICAgICAgaWYgKHRtcHUzMikKLQl7Ci0JICBpbnQzMl90IG5yOwotCSAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2Ri X2J5dGUgKikgJiBucik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIG5yICogdGRlcC0+c2l6ZV9pb19ldmVudCkpCi0JICAg IHJldHVybiAtMTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAgICBV TE9OR0VTVCBucjsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZucik7CisgICAgICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1w dWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnIgKiB0ZGVwLT5zaXplX2lvX2V2ZW50KSkKKyAgICAgICAgICAg IHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICAg IC8qIHN5c19pb19zdWJtaXQgKi8KICAgICBjYXNlIDI0ODoKLSAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIpCi0JewotCSAg aW50MzJfdCBpLCBucjsKLQkgIHVpbnQzMl90ICppb2NicDsKLQkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRl ICopICYgbnIpOwotCSAgaW9jYnAgPSAodWludDMyX3QgKikgYWxsb2NhIChu ciAqIHRkZXAtPnNpemVfaW50KTsKLQkgIGlmICh0YXJnZXRfcmVhZF9tZW1v cnkKLQkgICAgICAodG1wdTMyLCAoZ2RiX2J5dGUgKikgaW9jYnAsIG5yICog dGRlcC0+c2l6ZV9pbnQpKQotCSAgICB7Ci0JICAgICAgaWYgKHJlY29yZF9k ZWJ1ZykKLQkJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotCQkJ CSAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5ICIK LQkJCQkgICAgImF0IGFkZHIgPSAlcyBsZW4gPSAldS5cbiIsCi0JCQkJICAg IHBhZGRyZXNzIChnZGJhcmNoLCB0bXB1MzIpLAotCQkJCSAgICAoaW50KShu ciAqIHRkZXAtPnNpemVfaW50KSk7Ci0JICAgICAgcmV0dXJuIC0xOwotCSAg ICB9Ci0JICBmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKLQkgICAgewotCSAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGlvY2JwW2ldLCB0 ZGVwLT5zaXplX2lvY2IpKQotCQlyZXR1cm4gLTE7Ci0JICAgIH0KLQl9Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdl c3QpCisgICAgICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBuciwgaTsKKyAg ICAgICAgICBnZGJfYnl0ZSAqaW9jYnA7CisKKyAgICAgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZu cik7CisgICAgICAgICAgaW9jYnAgPSBhbGxvY2EgKG5yICogdGRlcC0+c2l6 ZV9wb2ludGVyKTsKKyAgICAgICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5 ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgaW9jYnAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnIgKiB0ZGVwLT5zaXplX3BvaW50 ZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAocmVjb3Jk X2RlYnVnKQorICAgICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAo Z2RiX3N0ZGxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkgIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0IGFkZHIg PSAweCVzIGxlbiA9ICV1LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVsb25nZXN0LCB0ZGVwLT5h cmcyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChp bnQpIChuciAqIHRkZXAtPnNpemVfcG9pbnRlcikpOworICAgICAgICAgICAg ICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IG5yOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgIHRtcGFkZHIKKyAgICAgICAgICAgICAgICA9IChDT1JFX0FERFIpIGV4 dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoaW9jYnAsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRk ZXAtPnNpemVfcG9pbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9vcmRlcik7Cisg ICAgICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cGFkZHIsIHRkZXAtPnNpemVfaW9jYikpCisgICAgICAgICAgICAgICAgcmV0 dXJuIC0xOworICAgICAgICAgICAgICBpb2NicCArPSB0ZGVwLT5zaXplX3Bv aW50ZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgIGJyZWFr OwogCiAgICAgICAvKiBzeXNfaW9fY2FuY2VsICovCiAgICAgY2FzZSAyNDk6 Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfaW9fZXZl bnQpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vu c2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FE RFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGRlcC0+c2l6ZV9pb19ldmVudCkpCisgICAgICAgIHJldHVy biAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfZmFkdmlzZTY0 ICovCkBAIC0xODEzLDI4ICsyMTU3LDI3IEBAIHJlY29yZF9saW51eF9zeXN0 ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKICAgICAgIC8qIHN5c19leGl0X2dy b3VwICovCiAgICAgY2FzZSAyNTI6CiAgICAgICB7Ci0JaW50IHE7Ci0JdGFy Z2V0X3Rlcm1pbmFsX291cnMgKCk7Ci0JcSA9Ci0JICB5cXVlcnkgKF8oIlRo ZSBuZXh0IGluc3RydWN0aW9uIGlzIHN5c2NhbGwgZXhpdF9ncm91cC4gICIK LQkJICAgICJJdCB3aWxsIG1ha2UgdGhlIHByb2dyYW0gZXhpdC4gICIKLQkJ ICAgICJEbyB5b3Ugd2FudCB0byBzdG9wIHRoZSBwcm9ncmFtPyIpKTsKLQl0 YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7Ci0JaWYgKHEpCi0JICByZXR1 cm4gMTsKKyAgICAgICAgaW50IHE7CisgICAgICAgIHRhcmdldF90ZXJtaW5h bF9vdXJzICgpOworICAgICAgICBxID0geXF1ZXJ5IChfKCJUaGUgbmV4dCBp bnN0cnVjdGlvbiBpcyBzeXNjYWxsIGV4aXRfZ3JvdXAuICAiCisgICAgICAg ICAgICAgICAgICAgICAgIkl0IHdpbGwgbWFrZSB0aGUgcHJvZ3JhbSBleGl0 LiAgIgorICAgICAgICAgICAgICAgICAgICAgICJEbyB5b3Ugd2FudCB0byBz dG9wIHRoZSBwcm9ncmFtPyIpKTsKKyAgICAgICAgdGFyZ2V0X3Rlcm1pbmFs X2luZmVyaW9yICgpOworICAgICAgICBpZiAocSkKKyAgICAgICAgICByZXR1 cm4gMTsKICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNf bG9va3VwX2Rjb29raWUgKi8KICAgICBjYXNlIDI1MzoKLSAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIpCi0JewotCSAgdWlu dDMyX3QgbGVuOwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiBsZW4pOwotCSAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBsZW4pKQotCSAgICByZXR1 cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAg aWYgKHRtcHVsb25nZXN0KQorICAgICAgICB7CisgICAgICAgICAgVUxPTkdF U1QgbGVuOworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVk IChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJmxlbik7CisgICAgICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxv bmdlc3QsIChpbnQpIGxlbikpCisgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfZXBvbGxf Y3JlYXRlICovCkBAIC0xODQ1LDE2ICsyMTg4LDE1IEBAIHJlY29yZF9saW51 eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lz X2Vwb2xsX3dhaXQgKi8KICAgICBjYXNlIDI1NjoKLSAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIpCi0JewotCSAgaW50MzJf dCBtYXhldmVudHM7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIG1heGV2ZW50 cyk7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtCi0JICAgICAg KHRtcHUzMiwgbWF4ZXZlbnRzICogdGRlcC0+c2l6ZV9lcG9sbF9ldmVudCkp Ci0JICAgIHJldHVybiAtMTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2Vz dCk7CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAg ICAgICBVTE9OR0VTVCBtYXhldmVudHM7CisgICAgICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmbWF4 ZXZlbnRzKTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhldmVudHMgKiB0ZGVwLT5z aXplX2Vwb2xsX2V2ZW50KSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAg ICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19yZW1hcF9m aWxlX3BhZ2VzICovCkBAIC0xODY1LDIzICsyMjA3LDI1IEBAIHJlY29yZF9s aW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyog c3lzX3RpbWVyX2NyZWF0ZSAqLwogICAgIGNhc2UgMjU5OgotICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2ludCkpCi0JcmV0dXJuIC0x OworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3Qs IHRkZXAtPnNpemVfaW50KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAg YnJlYWs7CiAKICAgICAgIC8qIHN5c190aW1lcl9zZXR0aW1lICovCiAgICAg Y2FzZSAyNjA6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzQsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfaXRpbWVyc3BlYykpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAmdG1w dWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2l0aW1lcnNwZWMpKQor ICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyog c3lzX3RpbWVyX2dldHRpbWUgKi8KICAgICBjYXNlIDI2MToKLSAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pdGltZXJzcGVjKSkKLQly ZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1 bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRkZXAtPnNpemVfaXRpbWVyc3BlYykpCisgICAgICAgIHJldHVybiAtMTsK ICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfdGltZXJfZ2V0b3ZlcnJ1 biAqLwpAQCAtMTg5NCwzMiArMjIzOCwzNiBAQCByZWNvcmRfbGludXhfc3lz dGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19jbG9j a19nZXR0aW1lICovCiAgICAgY2FzZSAyNjU6Ci0gICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfdGltZXNwZWMpKQotCXJldHVybiAtMTsK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6 ZV90aW1lc3BlYykpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFr OwogCiAgICAgICAvKiBzeXNfY2xvY2tfZ2V0cmVzICovCiAgICAgY2FzZSAy NjY6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdGlt ZXNwZWMpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0 KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGRlcC0+c2l6ZV90aW1lc3BlYykpCisgICAgICAgIHJl dHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfY2xvY2tf bmFub3NsZWVwICovCiAgICAgY2FzZSAyNjc6Ci0gICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfdGltZXNwZWMpKQotCXJldHVybiAtMTsK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnNCwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6 ZV90aW1lc3BlYykpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFr OwogCiAgICAgICAvKiBzeXNfc3RhdGZzNjQgKi8KICAgICBjYXNlIDI2ODoK ICAgICAgIC8qIHN5c19mc3RhdGZzNjQgKi8KICAgICBjYXNlIDI2OToKLSAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9zdGF0ZnM2NCkp Ci0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZGVwLT5zaXplX3N0YXRmczY0KSkKKyAgICAgICAgcmV0dXJuIC0x OwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c190Z2tpbGwgKi8KQEAg LTE5MzYsMTggKzIyODQsMTggQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxs IChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfZ2V0X21lbXBvbGlj eSAqLwogICAgIGNhc2UgMjc1OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCB0ZGVwLT5zaXplX2ludCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotICAgICAgaWYgKHRtcHUzMikKLQl7Ci0JICB1aW50 MzJfdCBtYXhub2RlOwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiBtYXhub2Rl KTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg bWF4bm9kZSAqIHRkZXAtPnNpemVfbG9uZykpCi0JICAgIHJldHVybiAtMTsK LQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2Vz dCwgdGRlcC0+c2l6ZV9pbnQpKQorICAgICAgICByZXR1cm4gLTE7CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3Qp CisgICAgICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBtYXhub2RlOworICAg ICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMywgJm1heG5vZGUpOworICAgICAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heG5v ZGUgKiB0ZGVwLT5zaXplX2xvbmcpKQorICAgICAgICAgICAgcmV0dXJuIC0x OworICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3Nl dF9tZW1wb2xpY3kgKi8KQEAgLTE5NjIsMTggKzIzMTAsMTggQEAgcmVjb3Jk X2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAv KiBzeXNfbXFfdGltZWRyZWNlaXZlICovCiAgICAgY2FzZSAyODA6Ci0gICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAodG1wdTMyKQotCXsK LQkgIHVpbnQzMl90IG1zZ19sZW47Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAm IG1zZ19sZW4pOwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCBtc2dfbGVuKSkKLQkgICAgcmV0dXJuIC0xOwotCX0KLSAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pbnQpKQotCXJldHVy biAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0 bXB1bG9uZ2VzdCkKKyAgICAgICAgeworICAgICAgICAgIFVMT05HRVNUIG1z Z19sZW47CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmbXNnX2xlbik7CisgICAgICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1w dWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGludCkgbXNnX2xlbikpCisgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgIH0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVk IChyZWdjYWNoZSwgdGRlcC0+YXJnNCwgJnRtcHVsb25nZXN0KTsKKyAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRt cHVsb25nZXN0LCB0ZGVwLT5zaXplX2ludCkpCisgICAgICAgIHJldHVybiAt MTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfbXFfbm90aWZ5ICov CkBAIC0xOTgyLDkgKzIzMzAsMTAgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9j YWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfbXFfZ2V0c2V0 YXR0ciAqLwogICAgIGNhc2UgMjgyOgotICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX21xX2F0dHIpKQotCXJldHVybiAtMTsKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9tcV9h dHRyKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAg ICAgIC8qIHN5c19rZXhlY19sb2FkICovCkBAIC0xOTkzLDEyICsyMzQyLDE0 IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMK IAogICAgICAgLyogc3lzX3dhaXRpZCAqLwogICAgIGNhc2UgMjg0OgotICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3NpZ2luZm8pKQot CXJldHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNo ZSwgdGRlcC0+YXJnNSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+ c2l6ZV9ydXNhZ2UpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVs b25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9zaWdpbmZvKSkKKyAgICAg ICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZGVwLT5zaXplX3J1c2FnZSkpCisgICAgICAgIHJldHVybiAtMTsK ICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLwpA QCAtMjAxMSwyMCArMjM2MiwyMCBAQCByZWNvcmRfbGludXhfc3lzdGVtX2Nh bGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19rZXljdGwgKi8K ICAgICBjYXNlIDI4ODoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAg ICAgIGlmICh0bXB1MzIgPT0gNiB8fCB0bXB1MzIgPT0gMTEpCi0JewotCSAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAotCQkJ ICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgaWYgKHRtcHUzMikK LQkgICAgewotCSAgICAgIHVpbnQzMl90IGJ1ZmxlbjsKLQkgICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCi0JCQkJIChn ZGJfYnl0ZSAqKSAmIGJ1Zmxlbik7Ci0JICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCBidWZsZW4pKQotCQlyZXR1cm4gLTE7 Ci0JICAgIH0KLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAg ICBpZiAodG1wdWxvbmdlc3QgPT0gNiB8fCB0bXB1bG9uZ2VzdCA9PSAxMSkK KyAgICAgICAgeworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2ln bmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAg ICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgIFVMT05HRVNUIGJ1ZmxlbjsKKyAgICAgICAgICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAmYnVm bGVuKTsKKyAgICAgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIGJ1Zmxlbikp CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQor ICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2lvcHJp b19zZXQgKi8KQEAgLTIwNTMsOSArMjQwNCwxMCBAQCByZWNvcmRfbGludXhf c3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19m c3RhdGF0NjQgKi8KICAgICBjYXNlIDMwMDoKLSAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgdGRlcC0+c2l6ZV9zdGF0NjQpKQotCXJldHVybiAtMTsKKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9z dGF0NjQpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAog ICAgICAgLyogc3lzX3VubGlua2F0ICovCkBAIC0yMDcwLDE1ICsyNDIyLDE0 IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMK IAogICAgICAgLyogc3lzX3JlYWRsaW5rYXQgKi8KICAgICBjYXNlIDMwNToK LSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJn MywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIp Ci0JewotCSAgaW50MzJfdCBidWZzaXo7Ci0JICByZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCi0JCQkgICAgIChnZGJfYnl0ZSAq KSAmIGJ1ZnNpeik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIGJ1ZnNpeikpCi0JICAgIHJldHVybiAtMTsKLQl9CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3Qp CisgICAgICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBidWZzaXo7CisgICAg ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmc0LCAmYnVmc2l6KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgKGlu dCkgYnVmc2l6KSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg fQogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19mY2htb2RhdCAqLwpA QCAtMjA4OSwzNCArMjQ0MCwzOSBAQCByZWNvcmRfbGludXhfc3lzdGVtX2Nh bGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19wc2VsZWN0NiAq LwogICAgIGNhc2UgMzA4OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwot ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX2ZkX3NldCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2ZkX3NldCkpCi0JcmV0dXJuIC0x OwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmc0LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2ZkX3Nl dCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmc1LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwot ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX3RpbWVzcGVjKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIs ICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfZmRfc2V0KSkK KyAgICAgICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3Qp OworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVf QUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0ZGVwLT5zaXplX2ZkX3NldCkpCisgICAgICAgIHJldHVy biAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnNCwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25n ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV9mZF9zZXQpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzUsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdGltZXNw ZWMpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAg ICAgLyogc3lzX3Bwb2xsICovCiAgICAgY2FzZSAzMDk6Ci0gICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAodG1wdTMyKQotCXsKLQkgIHVp bnQzMl90IG5mZHM7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzIsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIG5mZHMpOwot CSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVw LT5zaXplX3BvbGxmZCAqIG5mZHMpKQotCSAgICByZXR1cm4gLTE7Ci0JfQot ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcz LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3RpbWVzcGVj KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAgICBV TE9OR0VTVCBuZmRzOworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vu c2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJm5mZHMpOworICAgICAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIp IHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRkZXAtPnNpemVfcG9sbGZkICogbmZkcykpCisgICAgICAg ICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVs b25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV90aW1lc3BlYykpCisgICAg ICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNf dW5zaGFyZSAqLwpAQCAtMjEyNywyMiArMjQ4MywyNCBAQCByZWNvcmRfbGlu dXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5 c19nZXRfcm9idXN0X2xpc3QgKi8KICAgICBjYXNlIDMxMjoKLSAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pbnQpKQotCXJldHVybiAt MTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pbnQp KQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2ln bmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIp IHRtcHVsb25nZXN0LCB0ZGVwLT5zaXplX2ludCkpCisgICAgICAgIHJldHVy biAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25n ZXN0LCB0ZGVwLT5zaXplX2ludCkpCisgICAgICAgIHJldHVybiAtMTsKICAg ICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfc3BsaWNlICovCiAgICAgY2Fz ZSAzMTM6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf bG9mZl90KSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfbG9mZl90KSkKLQlyZXR1cm4gLTE7CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfbG9mZl90 KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAmdG1wdWxvbmdl c3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZGVwLT5zaXplX2xvZmZfdCkpCisgICAgICAgIHJl dHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfc3luY19m aWxlX3JhbmdlICovCkBAIC0yMTU1LDQ4ICsyNTEzLDQ3IEBAIHJlY29yZF9s aW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyog c3lzX21vdmVfcGFnZXMgKi8KICAgICBjYXNlIDMxNzoKLSAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNSwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIpCi0JewotCSAgdWlu dDMyX3QgbnJfcGFnZXM7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzIsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIG5yX3Bh Z2VzKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgbnJfcGFnZXMgKiB0ZGVwLT5zaXplX2ludCkpCi0JICAgIHJldHVybiAt MTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzUsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAo dG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBu cl9wYWdlczsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZucl9wYWdlcyk7CisgICAgICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnJfcGFnZXMgKiB0ZGVwLT5zaXplX2ludCkpCisgICAgICAg ICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAg ICAgICAvKiBzeXNfZ2V0Y3B1ICovCiAgICAgY2FzZSAzMTg6Ci0gICAgICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJf Ynl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfaW50KSkKLQlyZXR1cm4g LTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfaW50 KSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0g ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfdWxvbmcgKiAyKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEs ICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9p bnQpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9pbnQpKQorICAg ICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERS KSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkZXAtPnNpemVfdWxvbmcgKiAyKSkKKyAgICAgICAgcmV0dXJu IC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19lcG9sbF9wd2Fp dCAqLwogICAgIGNhc2UgMzE5OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotICAgICAgaWYgKHRtcHUzMikKLQl7Ci0JICBpbnQzMl90IG1heGV2ZW50 czsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJn MywKLQkJCSAgICAgKGdkYl9ieXRlICopICYgbWF4ZXZlbnRzKTsKLQkgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0KLQkgICAgICAodG1wdTMyLCBt YXhldmVudHMgKiB0ZGVwLT5zaXplX2Vwb2xsX2V2ZW50KSkKLQkgICAgcmV0 dXJuIC0xOwotCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAg IGlmICh0bXB1bG9uZ2VzdCkKKyAgICAgICAgeworICAgICAgICAgIFVMT05H RVNUIG1heGV2ZW50czsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91 bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZtYXhldmVudHMpOwor ICAgICAgICAgIHRtcGludCA9IChpbnQpIG1heGV2ZW50cyAqIHRkZXAtPnNp emVfZXBvbGxfZXZlbnQ7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsIHRtcGludCkp CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJy ZWFrOwogCiAgICAgZGVmYXVsdDoKICAgICAgIHByaW50Zl91bmZpbHRlcmVk IChfKCJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vzbid0 ICIKLQkJCSAgICJzdXBwb3J0IHN5c2NhbGwgbnVtYmVyICV1XG4iKSwKLQkJ CSAoaW50KXRtcHUzMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAi c3VwcG9ydCBzeXNjYWxsIG51bWJlciAldVxuIiksIG51bSk7CiAgICAgICBy ZXR1cm4gLTE7CiAgICAgICBicmVhazsKICAgICB9Ci0tLSBhL2xpbnV4LXJl Y29yZC5oCisrKyBiL2xpbnV4LXJlY29yZC5oCkBAIC0yMyw2ICsyMyw3IEBA CiBzdHJ1Y3QgbGludXhfcmVjb3JkX3RkZXAKIHsKICAgLyogVGhlIHNpemUg b2YgdGhlIHR5cGUgdGhhdCB3aWxsIGJlIHVzZWQgaW4gYSBzeXN0ZW0gY2Fs bC4gICovCisgIGludCBzaXplX3BvaW50ZXI7CiAgIGludCBzaXplX19vbGRf a2VybmVsX3N0YXQ7CiAgIGludCBzaXplX3RtczsKICAgaW50IHNpemVfbG9m Zl90OwpAQCAtODEsNyArODIsNiBAQCBzdHJ1Y3QgbGludXhfcmVjb3JkX3Rk ZXAKICAgaW50IHNpemVfaXRpbWVyc3BlYzsKICAgaW50IHNpemVfbXFfYXR0 cjsKICAgaW50IHNpemVfc2lnaW5mbzsKLQogICBpbnQgc2l6ZV90ZXJtaW9z OwogICBpbnQgc2l6ZV90ZXJtaW9zMjsKICAgaW50IHNpemVfcGlkX3Q7CkBA IC04OSw2ICs4OSw4IEBAIHN0cnVjdCBsaW51eF9yZWNvcmRfdGRlcAogICBp bnQgc2l6ZV9zZXJpYWxfc3RydWN0OwogICBpbnQgc2l6ZV9zZXJpYWxfaWNv dW50ZXJfc3RydWN0OwogICBpbnQgc2l6ZV9oYXllc19lc3BfY29uZmlnOwor ICBpbnQgc2l6ZV9zaXplX3Q7CisgIGludCBzaXplX2lvdmVjOwogCiAgIC8q IFRoZSB2YWx1ZXMgb2YgdGhlIHNlY29uZCBhcmd1bWVudCBvZiBzeXN0ZW0g Y2FsbCAic3lzX2lvY3RsIi4gICovCiAgIGludCBpb2N0bF9UQ0dFVFM7CkBA IC0xNzEsNiArMTczLDcgQEAgc3RydWN0IGxpbnV4X3JlY29yZF90ZGVwCiAg IGludCBhcmczOwogICBpbnQgYXJnNDsKICAgaW50IGFyZzU7CisgIGludCBh cmc2OwogfTsKIAogZXh0ZXJuIGludCByZWNvcmRfbGludXhfc3lzdGVtX2Nh bGwgKGludCBudW0sIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCg== --001636e90a905aba08046fba291e--