public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c/10824: ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5
@ 2003-05-16 22:46 arno
  0 siblings, 0 replies; 5+ messages in thread
From: arno @ 2003-05-16 22:46 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c/10824; it has been noted by GNATS.

From: arno@heho.snv.jussieu.fr
To: giovannibajo@libero.it, arno@heho.snv.jussieu.fr, gcc-bugs@gcc.gnu.org,
   gcc-prs@gcc.gnu.org, nobody@gcc.gnu.org, gcc-gnats@gcc.gnu.org
Cc:  
Subject: Re: c/10824: ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5
Date: 17 May 2003 00:39:10 +0200

 Patch solves the problem on FreeBSD5. Thanx, Arno
 
 
 > Synopsis: ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5
 > 
 > State-Changed-From-To: feedback->closed
 > State-Changed-By: bajo
 > State-Changed-When: Fri May 16 22:23:22 2003
 > State-Changed-Why:
 >     Duplicate of middle-end/10472. There is a patch submitted
 >     for this, but it was not reviewed yet. See:
 >     http://gcc.gnu.org/ml/gcc-patches/2003-05/msg00377.html
 > 
 > http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10824


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: c/10824: ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5
@ 2003-05-16 22:23 giovannibajo
  0 siblings, 0 replies; 5+ messages in thread
From: giovannibajo @ 2003-05-16 22:23 UTC (permalink / raw)
  To: arno, gcc-bugs, gcc-prs, nobody

Synopsis: ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5

State-Changed-From-To: feedback->closed
State-Changed-By: bajo
State-Changed-When: Fri May 16 22:23:22 2003
State-Changed-Why:
    Duplicate of middle-end/10472. There is a patch submitted
    for this, but it was not reviewed yet. See:
    http://gcc.gnu.org/ml/gcc-patches/2003-05/msg00377.html

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10824


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: c/10824: ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5
@ 2003-05-16 21:06 arno
  0 siblings, 0 replies; 5+ messages in thread
From: arno @ 2003-05-16 21:06 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c/10824; it has been noted by GNATS.

From: arno@heho.snv.jussieu.fr
To: bangerth@dealii.org, arno@heho.snv.jussieu.fr, gcc-bugs@gcc.gnu.org,
   gcc-prs@gcc.gnu.org, nobody@gcc.gnu.org, gcc-gnats@gcc.gnu.org
Cc:  
Subject: Re: c/10824: ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5
Date: 16 May 2003 23:01:37 +0200

 --=-=-=
 
 bangerth@dealii.org writes:
 
 > Synopsis: ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5
 > 
 > State-Changed-From-To: open->feedback
 > State-Changed-By: bangerth
 > State-Changed-When: Fri May 16 20:38:42 2003
 > State-Changed-Why:
 >     The code doesn't ICE for me, but then you don't say anything
 >     about the platform you are on and the command line flags
 >     you use. Please review
 >       http://gcc.gnu.org/bugs.html
 >     for what we need.
 >     
 >     Thanks
 >       Wolfgang
 > 
 > http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10824
 
 sorry
 
 another try ... :
 
 I attach :
   'xgcc -v' output for the exact version of GCC and
    the options given when GCC was configured/built;
   'uname -a' output for the system type;
   error is triggered by 'make bootstrap'
   dcigettext.[is]
 
 from the mailing-lists I thought this bug was solved some weeks
 ago but it is persistent on my notebook
 (NB, configuring with --disable-nls gives very nice results for
 the same source tree)
 
 
 --=-=-=
 Content-Type: application/octet-stream
 Content-Disposition: attachment; filename=xgcc-v
 
 Using built-in specs.
 Configured with: ../../gcc/configure --host=i686-pc-freebsd5 --verbose --disable-shared --enable-libgcj --enable-threads=posix --prefix=/usr/vol/opt/freebsd5/gcc34-200304
 Thread model: posix
 gcc version 3.4 20030516 (experimental)
 
 --=-=-=
 Content-Type: application/octet-stream
 Content-Disposition: attachment; filename=uname-a
 
 FreeBSD M 5.1-BETA FreeBSD 5.1-BETA #2: Fri May  9 16:38:43 CEST 2003     toor@M:/usr/obj/usr/src/sys/Sat-current  i386
 
 --=-=-=
 Content-Type: application/octet-stream
 Content-Disposition: attachment; filename=make-bootstrap
 
 make[3]: Entering directory `/usr/home/arno/src/aeneas/obj/freebsd5/gcc/intl'
 ../stage1/xgcc -B../stage1/ -B/usr/vol/opt/freebsd5/gcc34-200304/i686-pc-freebsd5/bin/ -c -DIN_GCC -DLOCALEDIR=\"/usr/vol/opt/freebsd5/gcc34-200304/share/locale\" -DLOCALE_ALIAS_PATH=\"/usr/vol/opt/freebsd5/gcc34-200304/share/locale\" -DLIBDIR=\"/usr/vol/opt/freebsd5/gcc34-200304/lib\" -DHAVE_CONFIG_H -I.. -I. -I../../../../gcc/gcc/intl -I../../../../gcc/gcc -I../../../../gcc/gcc/config -I../../../../gcc/gcc/../include  -g -O2 -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -pedantic -Wno -long-long -Werror -fno-common   ../../../../gcc/gcc/intl/dcigettext.c -o dcigettext.o
 ../../../../gcc/gcc/intl/dcigettext.c: In function `dcigettext__':
 ../../../../gcc/gcc/intl/dcigettext.c:677: internal compiler error: in instantiate_virtual_regs_lossage, at function.c:3823
 Please submit a full bug report,
 with preprocessed source if appropriate.
 See <URL:http://gcc.gnu.org/bugs.html> for instructions.
 make[3]: *** [dcigettext.o] Erreur 1
 make[3]: Leaving directory `/usr/home/arno/src/aeneas/obj/freebsd5/gcc/intl'
 make[2]: *** [intl.all] Erreur 1
 make[2]: Leaving directory `/usr/home/arno/src/aeneas/obj/freebsd5/gcc'
 make[1]: *** [stage2_build] Erreur 2
 make[1]: Leaving directory `/usr/home/arno/src/aeneas/obj/freebsd5/gcc'
 make: *** [bootstrap] Erreur 2
 
 
 --=-=-=
 Content-Type: application/octet-stream
 Content-Disposition: attachment; filename=dcigettext.i
 
 # 1 "../../../../gcc/gcc/intl/dcigettext.c"
 # 1 "<built-in>"
 # 1 "<command line>"
 # 1 "../../../../gcc/gcc/intl/dcigettext.c"
 # 27 "../../../../gcc/gcc/intl/dcigettext.c"
 # 1 "../config.h" 1
 # 1 "../auto-host.h" 1
 # 2 "../config.h" 2
 
 # 1 "../../../../gcc/include/ansidecl.h" 1
 # 4 "../config.h" 2
 # 28 "../../../../gcc/gcc/intl/dcigettext.c" 2
 
 
 # 1 "../include/sys/types.h" 1 3 4
 # 54 "../include/sys/types.h" 3 4
 # 1 "/usr/include/sys/cdefs.h" 1 3 4
 # 55 "../include/sys/types.h" 2 3 4
 
 
 # 1 "/usr/include/machine/endian.h" 1 3 4
 # 41 "/usr/include/machine/endian.h" 3 4
 # 1 "/usr/include/sys/_types.h" 1 3 4
 # 33 "/usr/include/sys/_types.h" 3 4
 # 1 "/usr/include/machine/_types.h" 1 3 4
 # 45 "/usr/include/machine/_types.h" 3 4
 typedef signed char __int8_t;
 typedef unsigned char __uint8_t;
 typedef short __int16_t;
 typedef unsigned short __uint16_t;
 typedef int __int32_t;
 typedef unsigned int __uint32_t;
 
 
 
 
 
 
 
 typedef int __attribute__((__mode__(__DI__))) __int64_t;
 typedef unsigned int __attribute__((__mode__(__DI__))) __uint64_t;
 # 70 "/usr/include/machine/_types.h" 3 4
 typedef unsigned long __clock_t;
 typedef __int32_t __critical_t;
 typedef double __double_t;
 typedef double __float_t;
 typedef __int32_t __intfptr_t;
 typedef __int64_t __intmax_t;
 typedef __int32_t __intptr_t;
 typedef __int32_t __int_fast8_t;
 typedef __int32_t __int_fast16_t;
 typedef __int32_t __int_fast32_t;
 typedef __int64_t __int_fast64_t;
 typedef __int8_t __int_least8_t;
 typedef __int16_t __int_least16_t;
 typedef __int32_t __int_least32_t;
 typedef __int64_t __int_least64_t;
 typedef __int32_t __ptrdiff_t;
 typedef __int32_t __register_t;
 typedef __int32_t __segsz_t;
 typedef __uint32_t __size_t;
 typedef __int32_t __ssize_t;
 typedef __int32_t __time_t;
 typedef __uint32_t __uintfptr_t;
 typedef __uint64_t __uintmax_t;
 typedef __uint32_t __uintptr_t;
 typedef __uint32_t __uint_fast8_t;
 typedef __uint32_t __uint_fast16_t;
 typedef __uint32_t __uint_fast32_t;
 typedef __uint64_t __uint_fast64_t;
 typedef __uint8_t __uint_least8_t;
 typedef __uint16_t __uint_least16_t;
 typedef __uint32_t __uint_least32_t;
 typedef __uint64_t __uint_least64_t;
 typedef __uint32_t __u_register_t;
 typedef __uint32_t __vm_offset_t;
 typedef __int64_t __vm_ooffset_t;
 
 
 
 typedef __uint32_t __vm_paddr_t;
 
 typedef __uint64_t __vm_pindex_t;
 typedef __uint32_t __vm_size_t;
 
 
 
 
 
 typedef __builtin_va_list __va_list;
 
 
 
 
 
 typedef __va_list __gnuc_va_list;
 # 34 "/usr/include/sys/_types.h" 2 3 4
 
 
 
 
 typedef __int32_t __clockid_t;
 typedef __uint32_t __fflags_t;
 typedef __uint64_t __fsblkcnt_t;
 typedef __uint64_t __fsfilcnt_t;
 typedef __uint32_t __gid_t;
 typedef __int64_t __id_t;
 typedef __uint32_t __ino_t;
 typedef long __key_t;
 typedef __uint16_t __mode_t;
 typedef int __nl_item;
 typedef __uint16_t __nlink_t;
 typedef __int64_t __off_t;
 typedef __int32_t __pid_t;
 typedef __int64_t __rlim_t;
 typedef __uint8_t __sa_family_t;
 typedef __uint32_t __socklen_t;
 typedef long __suseconds_t;
 typedef __int32_t __timer_t;
 typedef __uint32_t __udev_t;
 typedef __uint32_t __uid_t;
 typedef unsigned int __useconds_t;
 # 78 "/usr/include/sys/_types.h" 3 4
 typedef int __ct_rune_t;
 typedef __ct_rune_t __rune_t;
 typedef __ct_rune_t __wchar_t;
 typedef __ct_rune_t __wint_t;
 # 90 "/usr/include/sys/_types.h" 3 4
 typedef __udev_t __dev_t;
 
 
 
 
 
 
 typedef union {
  char __mbstate8[128];
  __int64_t _mbstateL;
 } __mbstate_t;
 # 42 "/usr/include/machine/endian.h" 2 3 4
 # 97 "/usr/include/machine/endian.h" 3 4
 static __inline __uint64_t
 __bswap64(__uint64_t _x)
 {
  return ((_x >> 56) | ((_x >> 40) & 0xff00) | ((_x >> 24) & 0xff0000) |
      ((_x >> 8) & 0xff000000) | ((_x << 8) & ((__uint64_t)0xff << 32)) |
      ((_x << 24) & ((__uint64_t)0xff << 40)) |
      ((_x << 40) & ((__uint64_t)0xff << 48)) | ((_x << 56)));
 }
 
 static __inline __uint32_t
 __bswap32(__uint32_t _x)
 {
 
  return (__extension__ ({ register __uint32_t __X = (_x); __asm ("xchgb %h0, %b0\n\trorl $16, %0\n\txchgb %h0, %b0" : "+q" (__X)); __X; }));
 }
 
 static __inline __uint16_t
 __bswap16(__uint16_t _x)
 {
 
  return (__extension__ ({ register __uint16_t __X = (_x); __asm ("xchgb %h0, %b0" : "+q" (__X)); __X; }));
 }
 # 58 "../include/sys/types.h" 2 3 4
 
 
 
 typedef unsigned char u_char;
 typedef unsigned short u_short;
 typedef unsigned int u_int;
 typedef unsigned long u_long;
 typedef unsigned short ushort;
 typedef unsigned int uint;
 
 
 
 
 
 
 typedef __int8_t int8_t;
 
 
 
 
 typedef __int16_t int16_t;
 
 
 
 
 typedef __int32_t int32_t;
 
 
 
 
 typedef __int64_t int64_t;
 
 
 
 
 typedef __uint8_t uint8_t;
 
 
 
 
 typedef __uint16_t uint16_t;
 
 
 
 
 typedef __uint32_t uint32_t;
 
 
 
 
 typedef __uint64_t uint64_t;
 
 
 
 
 typedef __intptr_t intptr_t;
 typedef __uintptr_t uintptr_t;
 
 
 
 typedef __uint8_t u_int8_t;
 typedef __uint16_t u_int16_t;
 typedef __uint32_t u_int32_t;
 typedef __uint64_t u_int64_t;
 
 typedef __uint64_t u_quad_t;
 typedef __int64_t quad_t;
 typedef quad_t * qaddr_t;
 
 typedef char * caddr_t;
 typedef const char * c_caddr_t;
 typedef volatile char *v_caddr_t;
 
 
 typedef __clock_t clock_t;
 
 
 
 
 typedef __clockid_t clockid_t;
 
 
 
 typedef __critical_t critical_t;
 typedef __int64_t daddr_t;
 
 
 typedef __dev_t dev_t;
 
 
 
 
 typedef __fflags_t fflags_t;
 
 
 
 typedef __uint32_t fixpt_t;
 
 
 typedef __fsblkcnt_t fsblkcnt_t;
 typedef __fsfilcnt_t fsfilcnt_t;
 
 
 
 
 typedef __gid_t gid_t;
 
 
 
 
 typedef __uint32_t in_addr_t;
 
 
 
 
 typedef __uint16_t in_port_t;
 
 
 
 
 typedef __id_t id_t;
 
 
 
 
 typedef __ino_t ino_t;
 
 
 
 
 typedef __key_t key_t;
 
 
 
 
 typedef __mode_t mode_t;
 
 
 
 
 typedef __nlink_t nlink_t;
 
 
 
 
 typedef __off_t off_t;
 
 
 
 
 typedef __pid_t pid_t;
 
 
 
 typedef __register_t register_t;
 
 
 typedef __rlim_t rlim_t;
 
 
 
 typedef __segsz_t segsz_t;
 
 
 
 
 typedef unsigned int size_t;
 
 
 
 
 
 
 typedef __ssize_t ssize_t;
 
 
 
 
 typedef __suseconds_t suseconds_t;
 
 
 
 
 typedef __time_t time_t;
 
 
 
 
 typedef __timer_t timer_t;
 
 
 
 typedef __u_register_t u_register_t;
 typedef __udev_t udev_t;
 
 
 typedef __uid_t uid_t;
 
 
 
 
 typedef __useconds_t useconds_t;
 
 
 
 typedef __vm_offset_t vm_offset_t;
 typedef __vm_ooffset_t vm_ooffset_t;
 typedef __vm_paddr_t vm_paddr_t;
 typedef __vm_pindex_t vm_pindex_t;
 typedef __vm_size_t vm_size_t;
 # 297 "../include/sys/types.h" 3 4
 # 1 "/usr/include/sys/select.h" 1 3 4
 # 42 "/usr/include/sys/select.h" 3 4
 # 1 "/usr/include/sys/_sigset.h" 1 3 4
 # 55 "/usr/include/sys/_sigset.h" 3 4
 typedef struct __sigset {
  __uint32_t __bits[4];
 } __sigset_t;
 # 43 "/usr/include/sys/select.h" 2 3 4
 # 1 "/usr/include/sys/_timeval.h" 1 3 4
 # 47 "/usr/include/sys/_timeval.h" 3 4
 struct timeval {
  long tv_sec;
  suseconds_t tv_usec;
 };
 # 44 "/usr/include/sys/select.h" 2 3 4
 # 1 "/usr/include/sys/timespec.h" 1 3 4
 # 50 "/usr/include/sys/timespec.h" 3 4
 struct timespec {
  time_t tv_sec;
  long tv_nsec;
 };
 # 45 "/usr/include/sys/select.h" 2 3 4
 
 typedef unsigned long __fd_mask;
 
 typedef __fd_mask fd_mask;
 
 
 
 
 typedef __sigset_t sigset_t;
 # 75 "/usr/include/sys/select.h" 3 4
 typedef struct fd_set {
  __fd_mask __fds_bits[(((1024U) + (((sizeof(__fd_mask) * 8)) - 1)) / ((sizeof(__fd_mask) * 8)))];
 } fd_set;
 # 101 "/usr/include/sys/select.h" 3 4
 
 int pselect(int, fd_set *, fd_set *, fd_set *,
  const struct timespec *, const sigset_t *);
 
 
 
 int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
 
 
 # 298 "../include/sys/types.h" 2 3 4
 # 316 "../include/sys/types.h" 3 4
 
 
 
 int ftruncate(int, off_t);
 
 
 
 off_t lseek(int, off_t, int);
 
 
 
 void * mmap(void *, size_t, int, int, int, off_t);
 
 
 
 int truncate(const char *, off_t);
 
 
 # 31 "../../../../gcc/gcc/intl/dcigettext.c" 2
 # 49 "../../../../gcc/gcc/intl/dcigettext.c"
 # 1 "/usr/include/errno.h" 1 3 4
 # 47 "/usr/include/errno.h" 3 4
 
 int * __error(void);
 
 # 50 "../../../../gcc/gcc/intl/dcigettext.c" 2
 
 
 
 
 
 
 
 # 1 "../include/stddef.h" 1 3 4
 # 151 "../include/stddef.h" 3 4
 typedef int ptrdiff_t;
 # 314 "../include/stddef.h" 3 4
 typedef __rune_t rune_t;
 # 325 "../include/stddef.h" 3 4
 typedef int wchar_t;
 # 58 "../../../../gcc/gcc/intl/dcigettext.c" 2
 # 1 "../include/stdlib.h" 1 3 4
 # 81 "../include/stdlib.h" 3 4
 typedef struct {
  int quot;
  int rem;
 } div_t;
 
 typedef struct {
  long quot;
  long rem;
 } ldiv_t;
 # 100 "../include/stdlib.h" 3 4
 extern int __mb_cur_max;
 
 
 
 void abort(void) __attribute__((__noreturn__));
 int abs(int) __attribute__((__const__));
 int atexit(void (*)(void));
 double atof(const char *);
 int atoi(const char *);
 long atol(const char *);
 void *bsearch(const void *, const void *, size_t,
      size_t, int (*)(const void *, const void *));
 void *calloc(size_t, size_t);
 div_t div(int, int) __attribute__((__const__));
 void exit(int) __attribute__((__noreturn__));
 void free(void *);
 char *getenv(const char *);
 long labs(long) __attribute__((__const__));
 ldiv_t ldiv(long, long) __attribute__((__const__));
 void *malloc(size_t);
 int mblen(const char *, size_t);
 size_t mbstowcs(wchar_t * , const char * , size_t);
 int mbtowc(wchar_t * , const char * , size_t);
 void qsort(void *, size_t, size_t,
      int (*)(const void *, const void *));
 int rand(void);
 void *realloc(void *, size_t);
 void srand(unsigned);
 double strtod(const char * , char ** );
 float strtof(const char * , char ** );
 long strtol(const char * , char ** , int);
 long double
   strtold(const char * , char ** );
 unsigned long
   strtoul(const char * , char ** , int);
 int system(const char *);
 int wctomb(char *, wchar_t);
 size_t wcstombs(char * , const wchar_t * , size_t);
 # 152 "../include/stdlib.h" 3 4
 typedef struct {
  long long quot;
  long long rem;
 } lldiv_t;
 
 
 long long
   atoll(const char *);
 
 long long
   llabs(long long) __attribute__((__const__));
 
 lldiv_t lldiv(long long, long long) __attribute__((__const__));
 
 long long
   strtoll(const char * , char ** , int);
 
 unsigned long long
   strtoull(const char * , char ** , int);
 
 
 void _Exit(int) __attribute__((__noreturn__));
 # 183 "../include/stdlib.h" 3 4
 int rand_r(unsigned *);
 int setenv(const char *, const char *, int);
 void unsetenv(const char *);
 # 197 "../include/stdlib.h" 3 4
 double drand48(void);
 
 double erand48(unsigned short[3]);
 
 
 
 int getsubopt(char **, char *const *, char **);
 
 
 int grantpt(int);
 char *initstate(unsigned long , char *, long);
 long jrand48(unsigned short[3]);
 
 void lcong48(unsigned short[7]);
 long lrand48(void);
 
 int mkstemp(char *);
 
 
 
 char *mktemp(char *);
 
 
 long mrand48(void);
 long nrand48(unsigned short[3]);
 int posix_openpt(int);
 char *ptsname(int);
 int putenv(const char *);
 long random(void);
 char *realpath(const char *, char resolved_path[]);
 unsigned short
  *seed48(unsigned short[3]);
 
 int setkey(const char *);
 
 
 char *setstate( char *);
 void srand48(long);
 void srandom(unsigned long);
 int unlockpt(int);
 
 
 
 extern const char *_malloc_options;
 extern void (*_malloc_message)(const char *, const char *, const char *,
      const char *);
 
 void *__builtin_alloca(size_t);
 __uint32_t
   arc4random(void);
 void arc4random_addrandom(unsigned char *dat, int datlen);
 void arc4random_stir(void);
 char *getbsize(int *, long *);
 
 char *cgetcap(char *, const char *, int);
 int cgetclose(void);
 int cgetent(char **, char **, const char *);
 int cgetfirst(char **, char **);
 int cgetmatch(const char *, const char *);
 int cgetnext(char **, char **);
 int cgetnum(char *, const char *, long *);
 int cgetset(const char *);
 int cgetstr(char *, const char *, char **);
 int cgetustr(char *, const char *, char **);
 
 int daemon(int, int);
 char *devname(int, int);
 int getloadavg(double [], int);
 const char *
   getprogname(void);
 
 int heapsort(void *, size_t, size_t, int (*)(const void *, const void *));
 int mergesort(void *, size_t, size_t, int (*)(const void *, const void *));
 void qsort_r(void *, size_t, size_t, void *,
      int (*)(void *, const void *, const void *));
 int radixsort(const unsigned char **, int, const unsigned char *,
      unsigned);
 void *reallocf(void *, size_t);
 void setprogname(const char *);
 int sradixsort(const unsigned char **, int, const unsigned char *,
      unsigned);
 void sranddev(void);
 void srandomdev(void);
 
 
 __int64_t
   strtoq(const char *, char **, int);
 __uint64_t
   strtouq(const char *, char **, int);
 
 
 # 59 "../../../../gcc/gcc/intl/dcigettext.c" 2
 
 # 1 "/usr/include/string.h" 1 3 4
 # 48 "/usr/include/string.h" 3 4
 # 1 "/usr/include/strings.h" 1 3 4
 # 40 "/usr/include/strings.h" 3 4
 
 int bcmp(const void *, const void *, size_t);
 void bcopy(const void *, void *, size_t);
 void bzero(void *, size_t);
 int ffs(int);
 char *index(const char *, int);
 char *rindex(const char *, int);
 int strcasecmp(const char *, const char *);
 int strncasecmp(const char *, const char *, size_t);
 
 # 49 "/usr/include/string.h" 2 3 4
 # 60 "/usr/include/string.h" 3 4
 
 
 void *memccpy(void * , const void * , int, size_t);
 
 void *memchr(const void *, int, size_t);
 int memcmp(const void *, const void *, size_t);
 void *memcpy(void * , const void * , size_t);
 void *memmove(void *, const void *, size_t);
 void *memset(void *, int, size_t);
 
 char *stpcpy(char *, const char *);
 char *strcasestr(const char *, const char *);
 
 char *strcat(char * , const char * );
 char *strchr(const char *, int);
 int strcmp(const char *, const char *);
 int strcoll(const char *, const char *);
 char *strcpy(char * , const char * );
 size_t strcspn(const char *, const char *);
 
 char *strdup(const char *);
 
 char *strerror(int);
 
 int strerror_r(int, char *, size_t);
 
 
 size_t strlcat(char *, const char *, size_t);
 size_t strlcpy(char *, const char *, size_t);
 
 size_t strlen(const char *);
 
 void strmode(int, char *);
 
 char *strncat(char * , const char * , size_t);
 int strncmp(const char *, const char *, size_t);
 char *strncpy(char * , const char * , size_t);
 
 char *strnstr(const char *, const char *, size_t);
 
 char *strpbrk(const char *, const char *);
 char *strrchr(const char *, int);
 
 char *strsep(char **, const char *);
 char *strsignal(int);
 
 size_t strspn(const char *, const char *);
 char *strstr(const char *, const char *);
 char *strtok(char * , const char * );
 
 char *strtok_r(char *, const char *, char **);
 
 size_t strxfrm(char * , const char * , size_t);
 
 void swab(const void *, void *, size_t);
 
 
 # 61 "../../../../gcc/gcc/intl/dcigettext.c" 2
 
 
 
 
 
 
 
 # 1 "../include/unistd.h" 1 3 4
 # 51 "../include/unistd.h" 3 4
 # 1 "/usr/include/sys/unistd.h" 1 3 4
 # 52 "../include/unistd.h" 2 3 4
 # 334 "../include/unistd.h" 3 4
 
 
 void _exit(int) __attribute__((__noreturn__));
 int access(const char *, int);
 unsigned int alarm(unsigned int);
 int chdir(const char *);
 int chown(const char *, uid_t, gid_t);
 int close(int);
 int dup(int);
 int dup2(int, int);
 int eaccess(const char *, int);
 int execl(const char *, const char *, ...);
 int execle(const char *, const char *, ...);
 int execlp(const char *, const char *, ...);
 int execv(const char *, char * const *);
 int execve(const char *, char * const *, char * const *);
 int execvp(const char *, char * const *);
 pid_t fork(void);
 long fpathconf(int, int);
 char *getcwd(char *, size_t);
 gid_t getegid(void);
 uid_t geteuid(void);
 gid_t getgid(void);
 int getgroups(int, gid_t []);
 char *getlogin(void);
 pid_t getpgrp(void);
 pid_t getpid(void);
 pid_t getppid(void);
 uid_t getuid(void);
 int isatty(int);
 int link(const char *, const char *);
 
 
 
 
 long pathconf(const char *, int);
 int pause(void);
 int pipe(int *);
 ssize_t read(int, void *, size_t);
 int rmdir(const char *);
 int setgid(gid_t);
 int setpgid(pid_t, pid_t);
 void setproctitle(const char *_fmt, ...) ;
 pid_t setsid(void);
 int setuid(uid_t);
 unsigned int sleep(unsigned int);
 long sysconf(int);
 pid_t tcgetpgrp(int);
 int tcsetpgrp(int, pid_t);
 char *ttyname(int);
 int unlink(const char *);
 ssize_t write(int, const void *, size_t);
 
 
 
 size_t confstr(int, char *, size_t);
 int getopt(int, char * const [], const char *);
 
 extern char *optarg;
 extern int optind, opterr, optopt;
 
 
 
 
 int fsync(int);
 # 411 "../include/unistd.h" 3 4
 int getlogin_r(char *, int);
 
 
 
 
 int fchown(int, uid_t, gid_t);
 int readlink(const char *, char *, int);
 
 
 int gethostname(char *, int );
 int setegid(gid_t);
 int seteuid(uid_t);
 # 431 "../include/unistd.h" 3 4
 int symlink(const char * , const char * );
 
 
 
 
 char *crypt(const char *, const char *);
 
 int encrypt(char *, int);
 int fchdir(int);
 long gethostid(void);
 int getpgid(pid_t _pid);
 int getsid(pid_t _pid);
 char *getwd(char *);
 int lchown(const char *, uid_t, gid_t);
 int lockf(int, int, off_t);
 int nice(int);
 ssize_t pread(int, void *, size_t, off_t);
 ssize_t pwrite(int, const void *, size_t, off_t);
 int setpgrp(pid_t _pid, pid_t _pgrp);
 int setregid(gid_t, gid_t);
 int setreuid(uid_t, uid_t);
 
 void sync(void);
 useconds_t ualarm(useconds_t, useconds_t);
 int usleep(useconds_t);
 pid_t vfork(void);
 # 466 "../include/unistd.h" 3 4
 int brk(const void *);
 int chroot(const char *);
 int getdtablesize(void);
 int getpagesize(void) __attribute__((__const__));
 char *getpass(const char *);
 void *sbrk(intptr_t);
 
 
 
 struct timeval;
 int acct(const char *);
 int async_daemon(void);
 int check_utility_compat(const char *);
 const char *
   crypt_get_format(void);
 int crypt_set_format(const char *);
 int des_cipher(const char *, char *, long, int);
 int des_setkey(const char *key);
 void endusershell(void);
 int exect(const char *, char * const *, char * const *);
 char *fflagstostr(u_long);
 int getdomainname(char *, int);
 int getgrouplist(const char *, gid_t, gid_t *, int *);
 mode_t getmode(const void *, mode_t);
 int getpeereid(int, uid_t *, gid_t *);
 int getresgid(gid_t *, gid_t *, gid_t *);
 int getresuid(uid_t *, uid_t *, uid_t *);
 char *getusershell(void);
 int initgroups(const char *, gid_t);
 int iruserok(unsigned long, int, const char *, const char *);
 int iruserok_sa(const void *, int, int, const char *, const char *);
 int issetugid(void);
 char *mkdtemp(char *);
 int mknod(const char *, mode_t, dev_t);
 
 
 
 
 int mkstemps(char *, int);
 
 
 
 
 int nfsclnt(int, void *);
 int nfssvc(int, void *);
 int profil(char *, size_t, vm_offset_t, int);
 int rcmd(char **, int, const char *, const char *, const char *, int *);
 int rcmd_af(char **, int, const char *,
   const char *, const char *, int *, int);
 int rcmdsh(char **, int, const char *,
   const char *, const char *, const char *);
 char *re_comp(const char *);
 int re_exec(const char *);
 int reboot(int);
 int revoke(const char *);
 pid_t rfork(int);
 pid_t rfork_thread(int, void *, int (*)(void *), void *);
 int rresvport(int *);
 int rresvport_af(int *, int);
 int ruserok(const char *, int, const char *, const char *);
 
 
 
 
 
 
 int setdomainname(const char *, int);
 int setgroups(int, const gid_t *);
 void sethostid(long);
 int sethostname(const char *, int);
 
 
 
 
 int setlogin(const char *);
 void *setmode(const char *);
 int setresgid(gid_t, gid_t, gid_t);
 int setresuid(uid_t, uid_t, uid_t);
 int setrgid(gid_t);
 int setruid(uid_t);
 void setusershell(void);
 int strtofflags(char **, u_long *, u_long *);
 int swapon(const char *);
 int swapoff(const char *);
 int syscall(int, ...);
 off_t __syscall(quad_t, ...);
 int ttyslot(void);
 int undelete(const char *);
 int unwhiteout(const char *);
 void *valloc(size_t);
 
 extern char *suboptarg;
 
 
 
 
 extern int optreset;
 
 
 # 69 "../../../../gcc/gcc/intl/dcigettext.c" 2
 
 
 # 1 "/usr/include/locale.h" 1 3 4
 # 40 "/usr/include/locale.h" 3 4
 struct lconv {
  char *decimal_point;
  char *thousands_sep;
  char *grouping;
  char *int_curr_symbol;
  char *currency_symbol;
  char *mon_decimal_point;
  char *mon_thousands_sep;
  char *mon_grouping;
  char *positive_sign;
  char *negative_sign;
  char int_frac_digits;
  char frac_digits;
  char p_cs_precedes;
  char p_sep_by_space;
  char n_cs_precedes;
  char n_sep_by_space;
  char p_sign_posn;
  char n_sign_posn;
  char int_p_cs_precedes;
  char int_n_cs_precedes;
  char int_p_sep_by_space;
  char int_n_sep_by_space;
  char int_p_sign_posn;
  char int_n_sign_posn;
 };
 # 83 "/usr/include/locale.h" 3 4
 
 struct lconv *localeconv(void);
 char *setlocale(int, const char *);
 
 # 72 "../../../../gcc/gcc/intl/dcigettext.c" 2
 
 
 # 1 "/usr/include/sys/param.h" 1 3 4
 # 75 "/usr/include/sys/param.h" 3 4
 # 1 "/usr/include/sys/syslimits.h" 1 3 4
 # 76 "/usr/include/sys/param.h" 2 3 4
 # 101 "/usr/include/sys/param.h" 3 4
 # 1 "/usr/include/sys/signal.h" 1 3 4
 # 49 "/usr/include/sys/signal.h" 3 4
 # 1 "/usr/include/machine/signal.h" 1 3 4
 # 47 "/usr/include/machine/signal.h" 3 4
 typedef int sig_atomic_t;
 # 58 "/usr/include/machine/signal.h" 3 4
 # 1 "/usr/include/machine/trap.h" 1 3 4
 # 59 "/usr/include/machine/signal.h" 2 3 4
 # 100 "/usr/include/machine/signal.h" 3 4
 struct sigcontext {
  struct __sigset sc_mask;
  int sc_onstack;
  int sc_gs;
  int sc_fs;
  int sc_es;
  int sc_ds;
  int sc_edi;
  int sc_esi;
  int sc_ebp;
  int sc_isp;
  int sc_ebx;
  int sc_edx;
  int sc_ecx;
  int sc_eax;
  int sc_trapno;
  int sc_err;
  int sc_eip;
  int sc_cs;
  int sc_efl;
  int sc_esp;
  int sc_ss;
  int sc_len;
 
 
 
 
  int sc_fpformat;
  int sc_ownedfp;
  int sc_spare1[1];
  int sc_fpstate[128] __attribute__((__aligned__(16)));
  int sc_spare2[8];
 };
 # 50 "/usr/include/sys/signal.h" 2 3 4
 # 144 "/usr/include/sys/signal.h" 3 4
 typedef void __sighandler_t(int);
 # 154 "/usr/include/sys/signal.h" 3 4
 union sigval {
 
  int sigval_int;
  void *sigval_ptr;
 };
 
 
 
 struct sigevent {
  int sigev_notify;
  union {
   int __sigev_signo;
   int __sigev_notify_kqueue;
  } __sigev_u;
  union sigval sigev_value;
 
 
 
 };
 # 189 "/usr/include/sys/signal.h" 3 4
 typedef struct __siginfo {
  int si_signo;
  int si_errno;
 
 
 
 
 
 
  int si_code;
  __pid_t si_pid;
  __uid_t si_uid;
  int si_status;
  void *si_addr;
  union sigval si_value;
  long si_band;
  int __spare__[7];
 } siginfo_t;
 
 
 
 struct __siginfo;
 
 
 
 
 struct sigaction {
  union {
   void (*__sa_handler)(int);
   void (*__sa_sigaction)(int, struct __siginfo *, void *);
  } __sigaction_u;
  int sa_flags;
  sigset_t sa_mask;
 };
 # 267 "/usr/include/sys/signal.h" 3 4
 typedef __sighandler_t *sig_t;
 typedef void __siginfohandler_t(int, struct __siginfo *, void *);
 
 
 
 
 
 
 
 typedef struct sigaltstack {
 
 
 
  char *ss_sp;
  __size_t ss_size;
  int ss_flags;
 } stack_t;
 # 295 "/usr/include/sys/signal.h" 3 4
 struct sigvec {
  __sighandler_t *sv_handler;
  int sv_mask;
  int sv_flags;
 };
 # 322 "/usr/include/sys/signal.h" 3 4
 struct sigstack {
 
  char *ss_sp;
  int ss_onstack;
 };
 # 354 "/usr/include/sys/signal.h" 3 4
 
 __sighandler_t *signal(int, __sighandler_t *);
 
 # 102 "/usr/include/sys/param.h" 2 3 4
 
 
 
 # 1 "/usr/include/machine/param.h" 1 3 4
 # 106 "/usr/include/sys/param.h" 2 3 4
 
 # 1 "/usr/include/sys/limits.h" 1 3 4
 # 40 "/usr/include/sys/limits.h" 3 4
 # 1 "/usr/include/machine/_limits.h" 1 3 4
 # 41 "/usr/include/sys/limits.h" 2 3 4
 # 108 "/usr/include/sys/param.h" 2 3 4
 # 75 "../../../../gcc/gcc/intl/dcigettext.c" 2
 
 
 # 1 "../../../../gcc/gcc/intl/gettextP.h" 1
 # 23 "../../../../gcc/gcc/intl/gettextP.h"
 # 1 "../include/stddef.h" 1 3 4
 # 24 "../../../../gcc/gcc/intl/gettextP.h" 2
 # 33 "../../../../gcc/gcc/intl/gettextP.h"
 # 1 "../../../../gcc/gcc/intl/loadinfo.h" 1
 # 64 "../../../../gcc/gcc/intl/loadinfo.h"
 struct loaded_l10nfile
 {
   const char *filename;
   int decided;
 
   const void *data;
 
   struct loaded_l10nfile *next;
   struct loaded_l10nfile *successor[1];
 };
 
 
 
 
 
 
 extern const char *_nl_normalize_codeset (const char *codeset, size_t name_len);
 
 
 extern struct loaded_l10nfile *
 _nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list, const char *dirlist, size_t dirlist_len, int mask, const char *language, const char *territory, const char *codeset, const char *normalized_codeset, const char *modifier, const char *special, const char *sponsor, const char *revision, const char *filename, int do_allocate);
 # 94 "../../../../gcc/gcc/intl/loadinfo.h"
 extern const char *_nl_expand_alias (const char *name);
 
 
 
 extern int _nl_explode_name (char *name, const char **language, const char **modifier, const char **territory, const char **codeset, const char **normalized_codeset, const char **special, const char **sponsor, const char **revision);
 # 107 "../../../../gcc/gcc/intl/loadinfo.h"
 extern char *_nl_find_language (const char *name);
 # 34 "../../../../gcc/gcc/intl/gettextP.h" 2
 
 # 1 "../../../../gcc/gcc/intl/gettext.h" 1
 # 23 "../../../../gcc/gcc/intl/gettext.h"
 # 1 "../include/limits.h" 1 3 4
 # 11 "../include/limits.h" 3 4
 # 1 "../include/syslimits.h" 1 3 4
 
 
 
 
 
 
 # 1 "../include/limits.h" 1 3 4
 # 122 "../include/limits.h" 3 4
 # 1 "/usr/vol/opt/freebsd5/gcc34-200304/lib/gcc-lib/i686-pc-freebsd5/3.4/include/limits.h" 1 3 4
 # 122 "/usr/vol/opt/freebsd5/gcc34-200304/lib/gcc-lib/i686-pc-freebsd5/3.4/include/limits.h" 3 4
 # 1 "/usr/include/limits.h" 1 3 4
 # 123 "/usr/vol/opt/freebsd5/gcc34-200304/lib/gcc-lib/i686-pc-freebsd5/3.4/include/limits.h" 2 3 4
 # 123 "../include/limits.h" 2 3 4
 # 8 "../include/syslimits.h" 2 3 4
 # 12 "../include/limits.h" 2 3 4
 # 24 "../../../../gcc/gcc/intl/gettext.h" 2
 # 54 "../../../../gcc/gcc/intl/gettext.h"
 typedef unsigned int nls_uint32;
 # 71 "../../../../gcc/gcc/intl/gettext.h"
 struct mo_file_header
 {
 
   nls_uint32 magic;
 
   nls_uint32 revision;
 
   nls_uint32 nstrings;
 
   nls_uint32 orig_tab_offset;
 
   nls_uint32 trans_tab_offset;
 
   nls_uint32 hash_tab_size;
 
   nls_uint32 hash_tab_offset;
 };
 
 struct string_desc
 {
 
   nls_uint32 length;
 
   nls_uint32 offset;
 };
 # 36 "../../../../gcc/gcc/intl/gettextP.h" 2
 # 68 "../../../../gcc/gcc/intl/gettextP.h"
 static __inline__ nls_uint32 SWAP (unsigned int);
 static __inline__ nls_uint32
 SWAP (ii)
      unsigned int ii;
 {
   nls_uint32 i = ii;
   return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
 }
 
 
 
 
 
 struct expression
 {
   int nargs;
   enum operator
   {
 
     var,
     num,
 
     lnot,
 
     mult,
     divide,
     module,
     plus,
     minus,
     less_than,
     greater_than,
     less_or_equal,
     greater_or_equal,
     equal,
     not_equal,
     land,
     lor,
 
     qmop
   } operation;
   union
   {
     unsigned long int num;
     struct expression *args[3];
   } val;
 };
 
 
 
 struct parse_args
 {
   const char *cp;
   struct expression *res;
 };
 
 
 
 struct loaded_domain
 {
   const char *data;
   int use_mmap;
   size_t mmap_size;
   int must_swap;
   nls_uint32 nstrings;
   struct string_desc *orig_tab;
   struct string_desc *trans_tab;
   nls_uint32 hash_size;
   nls_uint32 *hash_tab;
   int codeset_cntr;
 
 
 
 
 
 
 
   char **conv_tab;
 
   struct expression *plural;
   unsigned long int nplurals;
 };
 # 161 "../../../../gcc/gcc/intl/gettextP.h"
 struct binding
 {
   struct binding *next;
   char *dirname;
   int codeset_cntr;
   char *codeset;
   char domainname[1];
 };
 
 
 
 
 extern int _nl_msg_cat_cntr;
 
 struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale, const char *__domainname, struct binding *__domainbinding)
 
 
 
      ;
 void _nl_load_domain (struct loaded_l10nfile *__domain, struct binding *__domainbinding)
 
      ;
 void _nl_unload_domain (struct loaded_domain *__domain)
      ;
 const char *_nl_init_domain_conv (struct loaded_l10nfile *__domain_file, struct loaded_domain *__domain, struct binding *__domainbinding)
 
 
      ;
 void _nl_free_domain_conv (struct loaded_domain *__domain)
      ;
 
 char *_nl_find_msg (struct loaded_l10nfile *domain_file, struct binding *domainbinding, const char *msgid, size_t *lengthp)
 
 
      ;
 
 
 
 extern const char *locale_charset (void) ;
 # 225 "../../../../gcc/gcc/intl/gettextP.h"
 extern char *gettext__ (const char *__msgid);
 extern char *dgettext__ (const char *__domainname, const char *__msgid);
 
 extern char *dcgettext__ (const char *__domainname, const char *__msgid, int __category);
 
 extern char *ngettext__ (const char *__msgid1, const char *__msgid2, unsigned long int __n);
 
 extern char *dngettext__ (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n);
 
 
 extern char *dcngettext__ (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category);
 
 
 extern char *dcigettext__ (const char *__domainname, const char *__msgid1, const char *__msgid2, int __plural, unsigned long int __n, int __category);
 
 
 
 extern char *textdomain__ (const char *__domainname);
 extern char *bindtextdomain__ (const char *__domainname, const char *__dirname);
 
 extern char *bind_textdomain_codeset__ (const char *__domainname, const char *__codeset);
 # 254 "../../../../gcc/gcc/intl/gettextP.h"
 extern void gettext_free_exp__ (struct expression *exp)
      ;
 extern int gettextparse__ (void *arg);
 # 78 "../../../../gcc/gcc/intl/dcigettext.c" 2
 
 
 
 # 1 "../../../../gcc/gcc/intl/libgnuintl.h" 1
 # 60 "../../../../gcc/gcc/intl/libgnuintl.h"
 extern char *gettext (const char *__msgid);
 
 
 
 extern char *dgettext (const char *__domainname, const char *__msgid);
 
 
 
 extern char *dcgettext (const char *__domainname, const char *__msgid, int __category);
 
 
 
 
 
 extern char *ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n);
 
 
 
 
 extern char *dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n);
 
 
 
 
 extern char *dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category);
 
 
 
 
 
 
 
 extern char *textdomain (const char *__domainname);
 
 
 
 extern char *bindtextdomain (const char *__domainname, const char *__dirname);
 
 
 
 
 extern char *bind_textdomain_codeset (const char *__domainname, const char *__codeset);
 # 82 "../../../../gcc/gcc/intl/dcigettext.c" 2
 
 # 1 "../../../../gcc/gcc/intl/hash-string.h" 1
 # 36 "../../../../gcc/gcc/intl/hash-string.h"
 static unsigned long int hash_string (const char *__str_param);
 
 static __inline__ unsigned long int
 hash_string (str_param)
      const char *str_param;
 {
   unsigned long int hval, g;
   const char *str = str_param;
 
 
   hval = 0;
   while (*str != '\0')
     {
       hval <<= 4;
       hval += (unsigned long int) *str++;
       g = hval & ((unsigned long int) 0xf << (32 - 4));
       if (g != 0)
  {
    hval ^= g >> (32 - 8);
    hval ^= g;
  }
     }
   return hval;
 }
 # 84 "../../../../gcc/gcc/intl/dcigettext.c" 2
 # 146 "../../../../gcc/gcc/intl/dcigettext.c"
 static void *mempcpy (void *dest, const void *src, size_t n);
 # 158 "../../../../gcc/gcc/intl/dcigettext.c"
 # 1 "../include/limits.h" 1 3 4
 # 159 "../../../../gcc/gcc/intl/dcigettext.c" 2
 # 216 "../../../../gcc/gcc/intl/dcigettext.c"
 struct known_translation_t
 {
 
   char *domainname;
 
 
   int category;
 
 
   int counter;
 
 
   struct loaded_l10nfile *domain;
 
 
   const char *translation;
   size_t translation_length;
 
 
   char msgid[1];
 };
 
 
 
 
 # 1 "/usr/include/search.h" 1 3 4
 # 20 "/usr/include/search.h" 3 4
 typedef struct entry {
  char *key;
  void *data;
 } ENTRY;
 
 typedef enum {
  FIND, ENTER
 } ACTION;
 
 typedef enum {
  preorder,
  postorder,
  endorder,
  leaf
 } VISIT;
 # 48 "/usr/include/search.h" 3 4
 
 int hcreate(size_t);
 void hdestroy(void);
 ENTRY *hsearch(ENTRY, ACTION);
 void insque(void *, void *);
 void *lfind(const void *, const void *, size_t *, size_t,
      int (*)(const void *, const void *));
 void *lsearch(const void *, void *, size_t *, size_t,
      int (*)(const void *, const void *));
 void remque(void *);
 void *tdelete(const void * , void ** ,
      int (*)(const void *, const void *));
 void *tfind(const void *, void * const *,
      int (*)(const void *, const void *));
 void *tsearch(const void *, void **, int (*)(const void *, const void *));
 void twalk(const void *, void (*)(const void *, VISIT, int));
 
 # 242 "../../../../gcc/gcc/intl/dcigettext.c" 2
 
 static void *root;
 
 
 
 
 
 
 static int transcmp (const void *p1, const void *p2);
 static int
 transcmp (p1, p2)
      const void *p1;
      const void *p2;
 {
   const struct known_translation_t *s1;
   const struct known_translation_t *s2;
   int result;
 
   s1 = (const struct known_translation_t *) p1;
   s2 = (const struct known_translation_t *) p2;
 
   result = strcmp (s1->msgid, s2->msgid);
   if (result == 0)
     {
       result = strcmp (s1->domainname, s2->domainname);
       if (result == 0)
 
 
 
  result = s1->category - s2->category;
     }
 
   return result;
 }
 
 
 
 
 const char _nl_default_default_domain__[] = "messages";
 
 
 const char *_nl_current_default_domain__ = _nl_default_default_domain__;
 
 
 const char _nl_default_dirname__[] = "/usr/vol/opt/freebsd5/gcc34-200304/share/locale";
 
 
 
 struct binding *_nl_domain_bindings__;
 
 
 static char *plural_lookup (struct loaded_l10nfile *domain, unsigned long int n, const char *translation, size_t translation_len)
 
 
 
      ;
 static unsigned long int plural_eval (struct expression *pexp, unsigned long int n)
 
      ;
 static const char *category_to_name (int category) ;
 static const char *guess_category_value (int category, const char *categoryname)
 
      ;
 # 352 "../../../../gcc/gcc/intl/dcigettext.c"
 typedef unsigned char transmem_block_t;
 # 389 "../../../../gcc/gcc/intl/dcigettext.c"
 static int enable_secure;
 # 404 "../../../../gcc/gcc/intl/dcigettext.c"
 char *
 dcigettext__ (domainname, msgid1, msgid2, plural, n, category)
      const char *domainname;
      const char *msgid1;
      const char *msgid2;
      int plural;
      unsigned long int n;
      int category;
 {
 
 
 
   struct loaded_l10nfile *domain;
   struct binding *binding;
   const char *categoryname;
   const char *categoryvalue;
   char *dirname, *xdomainname;
   char *single_locale;
   char *retval;
   size_t retlen;
   int saved_errno;
 
   struct known_translation_t *search;
   struct known_translation_t **foundp = ((void *)0);
   size_t msgid_len;
 
   size_t domainname_len;
 
 
   if (msgid1 == ((void *)0))
     return ((void *)0);
 
   ;
 
 
 
 
   if (domainname == ((void *)0))
     domainname = _nl_current_default_domain__;
 
 
   msgid_len = strlen (msgid1) + 1;
 
 
 
   search = (struct known_translation_t *)
     __builtin_alloca (((size_t) &((struct known_translation_t *)0)->msgid) + msgid_len);
   memcpy (search->msgid, msgid1, msgid_len);
   search->domainname = (char *) domainname;
   search->category = category;
 
   foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
   if (foundp != ((void *)0) && (*foundp)->counter == _nl_msg_cat_cntr)
     {
 
       if (plural)
  retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation,
     (*foundp)->translation_length);
       else
  retval = (char *) (*foundp)->translation;
 
       ;
       return retval;
     }
 
 
 
   saved_errno = (* __error());
 
 
   if (enable_secure == 0) { if (getuid () != geteuid () || getgid () != getegid ()) enable_secure = 1; else enable_secure = -1; };
 
 
   for (binding = _nl_domain_bindings__; binding != ((void *)0); binding = binding->next)
     {
       int compare = strcmp (domainname, binding->domainname);
       if (compare == 0)
 
  break;
       if (compare < 0)
  {
 
    binding = ((void *)0);
    break;
  }
     }
 
   if (binding == ((void *)0))
     dirname = (char *) _nl_default_dirname__;
   else if ((((binding->dirname)[0]) == '/'))
     dirname = binding->dirname;
   else
     {
 
       size_t dirname_len = strlen (binding->dirname) + 1;
       size_t path_max;
       char *ret;
 
       path_max = (unsigned int) 1024;
       path_max += 2;
 
       for (;;)
  {
    dirname = (char *) __builtin_alloca (path_max + dirname_len);
    ;
 
    (* __error()) = (0);
    ret = getcwd (dirname, path_max);
    if (ret != ((void *)0) || (* __error()) != 34)
      break;
 
    path_max += path_max / 2;
    path_max += 32;
  }
 
       if (ret == ((void *)0))
  {
 
 
    ;
    ;
    (* __error()) = (saved_errno);
    return (plural == 0
     ? (char *) msgid1
 
     : n == 1 ? (char *) msgid1 : (char *) msgid2);
  }
 
       stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
     }
 
 
   categoryname = category_to_name (category);
   categoryvalue = guess_category_value (category, categoryname);
 
   domainname_len = strlen (domainname);
   xdomainname = (char *) __builtin_alloca (strlen (categoryname)
      + domainname_len + 5);
   ;
 
   stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
     domainname, domainname_len),
    ".mo");
 
 
   single_locale = (char *) __builtin_alloca (strlen (categoryvalue) + 1);
   ;
 
 
 
 
   while (1)
     {
 
       while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
  ++categoryvalue;
       if (categoryvalue[0] == '\0')
  {
 
 
 
 
    single_locale[0] = 'C';
    single_locale[1] = '\0';
  }
       else
  {
    char *cp = single_locale;
    while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
      *cp++ = *categoryvalue++;
    *cp = '\0';
 
 
 
    if ((enable_secure == 1) && (strchr (single_locale, '/') != ((void *)0)))
 
      continue;
  }
 
 
 
       if (strcmp (single_locale, "C") == 0
    || strcmp (single_locale, "POSIX") == 0)
  {
    ;
    ;
    (* __error()) = (saved_errno);
    return (plural == 0
     ? (char *) msgid1
 
     : n == 1 ? (char *) msgid1 : (char *) msgid2);
  }
 
 
 
 
       domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
 
       if (domain != ((void *)0))
  {
    retval = _nl_find_msg (domain, binding, msgid1, &retlen);
 
    if (retval == ((void *)0))
      {
        int cnt;
 
        for (cnt = 0; domain->successor[cnt] != ((void *)0); ++cnt)
   {
     retval = _nl_find_msg (domain->successor[cnt], binding,
       msgid1, &retlen);
 
     if (retval != ((void *)0))
       {
         domain = domain->successor[cnt];
         break;
       }
   }
      }
 
    if (retval != ((void *)0))
      {
 
 
        ;
        (* __error()) = (saved_errno);
 
        if (foundp == ((void *)0))
   {
 
     struct known_translation_t *newp;
 
     newp = (struct known_translation_t *)
       malloc (((size_t) &((struct known_translation_t *)0)->msgid)
        + msgid_len + domainname_len + 1);
     if (newp != ((void *)0))
       {
         newp->domainname =
    mempcpy (newp->msgid, msgid1, msgid_len);
         memcpy (newp->domainname, domainname, domainname_len + 1);
         newp->category = category;
         newp->counter = _nl_msg_cat_cntr;
         newp->domain = domain;
         newp->translation = retval;
         newp->translation_length = retlen;
 
 
         foundp = (struct known_translation_t **)
    tsearch (newp, &root, transcmp);
         if (foundp == ((void *)0)
      || (*foundp != newp))
 
    free (newp);
       }
   }
        else
   {
 
     (*foundp)->counter = _nl_msg_cat_cntr;
     (*foundp)->domain = domain;
     (*foundp)->translation = retval;
     (*foundp)->translation_length = retlen;
   }
 
 
        if (plural)
   retval = plural_lookup (domain, n, retval, retlen);
 
        ;
        return retval;
      }
  }
     }
 
 }
 
 
 char *
 
 _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
      struct loaded_l10nfile *domain_file;
      struct binding *domainbinding;
      const char *msgid;
      size_t *lengthp;
 {
   struct loaded_domain *domain;
   size_t act;
   char *result;
   size_t resultlen;
 
   if (domain_file->decided == 0)
     _nl_load_domain (domain_file, domainbinding);
 
   if (domain_file->data == ((void *)0))
     return ((void *)0);
 
   domain = (struct loaded_domain *) domain_file->data;
 
 
   if (domain->hash_size > 2 && domain->hash_tab != ((void *)0))
     {
 
       nls_uint32 len = strlen (msgid);
       nls_uint32 hash_val = hash_string (msgid);
       nls_uint32 idx = hash_val % domain->hash_size;
       nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
 
       while (1)
  {
    nls_uint32 nstr = ((domain->must_swap) ? SWAP (domain->hash_tab[idx]) : (domain->hash_tab[idx]));
 
    if (nstr == 0)
 
      return ((void *)0);
 
 
 
 
    if (((domain->must_swap) ? SWAP (domain->orig_tab[nstr - 1].length) : (domain->orig_tab[nstr - 1].length)) >= len
        && (strcmp (msgid,
      domain->data + ((domain->must_swap) ? SWAP (domain->orig_tab[nstr - 1].offset) : (domain->orig_tab[nstr - 1].offset)))
 
     == 0))
      {
        act = nstr - 1;
        goto found;
      }
 
    if (idx >= domain->hash_size - incr)
      idx -= domain->hash_size - incr;
    else
      idx += incr;
  }
 
     }
   else
     {
 
 
       size_t top, bottom;
 
       bottom = 0;
       act = 0;
       top = domain->nstrings;
       while (bottom < top)
  {
    int cmp_val;
 
    act = (bottom + top) / 2;
    cmp_val = strcmp (msgid, (domain->data
         + ((domain->must_swap) ? SWAP (domain->orig_tab[act].offset) : (domain->orig_tab[act].offset))));
 
    if (cmp_val < 0)
      top = act;
    else if (cmp_val > 0)
      bottom = act + 1;
    else
      goto found;
  }
 
       return ((void *)0);
     }
 
  found:
 
 
   result = ((char *) domain->data
      + ((domain->must_swap) ? SWAP (domain->trans_tab[act].offset) : (domain->trans_tab[act].offset)));
   resultlen = ((domain->must_swap) ? SWAP (domain->trans_tab[act].length) : (domain->trans_tab[act].length)) + 1;
 # 966 "../../../../gcc/gcc/intl/dcigettext.c"
   *lengthp = resultlen;
   return result;
 }
 
 
 
 static char *
 
 plural_lookup (domain, n, translation, translation_len)
      struct loaded_l10nfile *domain;
      unsigned long int n;
      const char *translation;
      size_t translation_len;
 {
   struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
   unsigned long int index;
   const char *p;
 
   index = plural_eval (domaindata->plural, n);
   if (index >= domaindata->nplurals)
 
 
     index = 0;
 
 
   p = translation;
   while (index-- > 0)
     {
 
 
 
       p = strchr (p, '\0');
 
 
       p++;
 
       if (p >= translation + translation_len)
 
 
 
  return (char *) translation;
     }
   return (char *) p;
 }
 
 
 
 static unsigned long int
 
 plural_eval (pexp, n)
      struct expression *pexp;
      unsigned long int n;
 {
   switch (pexp->nargs)
     {
     case 0:
       switch (pexp->operation)
  {
  case var:
    return n;
  case num:
    return pexp->val.num;
  default:
    break;
  }
 
       break;
     case 1:
       {
 
  unsigned long int arg = plural_eval (pexp->val.args[0], n);
  return ! arg;
       }
     case 2:
       {
  unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
  if (pexp->operation == lor)
    return leftarg || plural_eval (pexp->val.args[1], n);
  else if (pexp->operation == land)
    return leftarg && plural_eval (pexp->val.args[1], n);
  else
    {
      unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
 
      switch (pexp->operation)
        {
        case mult:
   return leftarg * rightarg;
        case divide:
   return leftarg / rightarg;
        case module:
   return leftarg % rightarg;
        case plus:
   return leftarg + rightarg;
        case minus:
   return leftarg - rightarg;
        case less_than:
   return leftarg < rightarg;
        case greater_than:
   return leftarg > rightarg;
        case less_or_equal:
   return leftarg <= rightarg;
        case greater_or_equal:
   return leftarg >= rightarg;
        case equal:
   return leftarg == rightarg;
        case not_equal:
   return leftarg != rightarg;
        default:
   break;
        }
    }
 
  break;
       }
     case 3:
       {
 
  unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
  return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
       }
     }
 
   return 0;
 }
 
 
 
 static const char *
 
 category_to_name (category)
      int category;
 {
   const char *retval;
 
   switch (category)
   {
 
   case 1:
     retval = "LC_COLLATE";
     break;
 
 
   case 2:
     retval = "LC_CTYPE";
     break;
 
 
   case 3:
     retval = "LC_MONETARY";
     break;
 
 
   case 4:
     retval = "LC_NUMERIC";
     break;
 
 
   case 5:
     retval = "LC_TIME";
     break;
 
 
   case 6:
     retval = "LC_MESSAGES";
     break;
 
 
 
 
 
 
 
   case 0:
 
 
     retval = "LC_ALL";
     break;
 
   default:
 
     retval = "LC_XXX";
   }
 
   return retval;
 }
 
 
 static const char *
 
 guess_category_value (category, categoryname)
      int category;
      const char *categoryname;
 {
   const char *language;
   const char *retval;
   (void) category;
   (void) categoryname;
 
 
 
 
   language = getenv ("LANGUAGE");
   if (language != ((void *)0) && language[0] == '\0')
     language = ((void *)0);
 # 1179 "../../../../gcc/gcc/intl/dcigettext.c"
   retval = getenv ("LC_ALL");
   if (retval == ((void *)0) || retval[0] == '\0')
     {
 
       retval = getenv (categoryname);
       if (retval == ((void *)0) || retval[0] == '\0')
  {
 
    retval = getenv ("LANG");
    if (retval == ((void *)0) || retval[0] == '\0')
 
 
      return "C";
  }
     }
 
 
   return language != ((void *)0) && strcmp (retval, "C") != 0 ? language : retval;
 }
 # 1218 "../../../../gcc/gcc/intl/dcigettext.c"
 static void *
 mempcpy (dest, src, n)
      void *dest;
      const void *src;
      size_t n;
 {
   return (void *) ((char *) memcpy (dest, src, n) + n);
 }
 
 --=-=-=
 Content-Type: application/octet-stream
 Content-Disposition: attachment; filename=dcigettext.s
 
 	.file	"dcigettext.c"
 	.section	.debug_abbrev,"",@progbits
 .Ldebug_abbrev0:
 	.section	.debug_info,"",@progbits
 .Ldebug_info0:
 	.section	.debug_line,"",@progbits
 .Ldebug_line0:
 	.text
 .Ltext0:
 	.p2align 4,,15
 	.type	transcmp, @function
 transcmp:
 .LFB8:
 	.file 1 "../../../../gcc/gcc/intl/dcigettext.c"
 	.loc 1 255 0
 	pushl	%ebp
 .LCFI0:
 	movl	%esp, %ebp
 .LCFI1:
 	subl	$24, %esp
 .LCFI2:
 	movl	%ebx, -8(%ebp)
 .LCFI3:
 	movl	8(%ebp), %ebx
 	movl	%esi, -4(%ebp)
 .LCFI4:
 	movl	12(%ebp), %esi
 	.loc 1 263 0
 	leal	24(%ebx), %edx
 	movl	%edx, (%esp)
 	leal	24(%esi), %eax
 	movl	%eax, 4(%esp)
 	call	strcmp
 	.loc 1 264 0
 	testl	%eax, %eax
 	jne	.L2
 	.loc 1 266 0
 	movl	(%esi), %eax
 	movl	%eax, 4(%esp)
 	movl	(%ebx), %eax
 	movl	%eax, (%esp)
 	call	strcmp
 	.loc 1 267 0
 	testl	%eax, %eax
 	jne	.L2
 	.loc 1 271 0
 	movl	4(%ebx), %eax
 	movl	4(%esi), %edx
 	subl	%edx, %eax
 	.p2align 4,,15
 .L2:
 	.loc 1 275 0
 	movl	-8(%ebp), %ebx
 	movl	-4(%ebp), %esi
 	movl	%ebp, %esp
 	popl	%ebp
 	ret
 .LFE8:
 	.size	transcmp, .-transcmp
 .globl _nl_default_default_domain__
 	.section	.rodata
 	.type	_nl_default_default_domain__, @object
 	.size	_nl_default_default_domain__, 9
 _nl_default_default_domain__:
 	.string	"messages"
 .globl _nl_current_default_domain__
 	.data
 	.align 4
 	.type	_nl_current_default_domain__, @object
 	.size	_nl_current_default_domain__, 4
 _nl_current_default_domain__:
 	.long	_nl_default_default_domain__
 .globl _nl_default_dirname__
 	.section	.rodata
 	.align 32
 	.type	_nl_default_dirname__, @object
 	.size	_nl_default_dirname__, 48
 _nl_default_dirname__:
 	.string	"/usr/vol/opt/freebsd5/gcc34-200304/share/locale"
 
 --=-=-=
 
 
 
 Hope this helps.
 
 Thanx, Arno
 
 --=-=-=--


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: c/10824: ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5
@ 2003-05-16 20:38 bangerth
  0 siblings, 0 replies; 5+ messages in thread
From: bangerth @ 2003-05-16 20:38 UTC (permalink / raw)
  To: arno, gcc-bugs, gcc-prs, nobody

Synopsis: ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5

State-Changed-From-To: open->feedback
State-Changed-By: bangerth
State-Changed-When: Fri May 16 20:38:42 2003
State-Changed-Why:
    The code doesn't ICE for me, but then you don't say anything
    about the platform you are on and the command line flags
    you use. Please review
      http://gcc.gnu.org/bugs.html
    for what we need.
    
    Thanks
      Wolfgang

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10824


^ permalink raw reply	[flat|nested] 5+ messages in thread

* c/10824: ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5
@ 2003-05-16 17:46 arno
  0 siblings, 0 replies; 5+ messages in thread
From: arno @ 2003-05-16 17:46 UTC (permalink / raw)
  To: gcc-gnats


>Number:         10824
>Category:       c
>Synopsis:       ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri May 16 17:46:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     arno@heho.snv.jussieu.fr
>Release:        "3.4 20030516 (experimental)"
>Organization:
>Environment:

>Description:

>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="dcigettext.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="dcigettext.c"

LyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGludGVybmFsIGRjaWdldHRleHQgZnVuY3Rpb24uCiAg
IENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLgoKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAogICBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBv
cHRpb24pCiAgIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCiAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoK
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKICAgVVNBLiAgKi8KCi8q
IFRlbGwgZ2xpYmMncyA8c3RyaW5nLmg+IHRvIHByb3ZpZGUgYSBwcm90b3R5cGUgZm9yIG1lbXBj
cHkoKS4KICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmln
Lmg+IG1heSBpbmNsdWRlCiAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhh
cyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KI2lmbmRlZiBfR05VX1NPVVJDRQoj
IGRlZmluZSBfR05VX1NPVVJDRQkxCiNlbmRpZgoKI2lmZGVmIEhBVkVfQ09ORklHX0gKIyBpbmNs
dWRlIDxjb25maWcuaD4KI2VuZGlmCgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CgojaWZkZWYgX19H
TlVDX18KIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKIyBkZWZpbmUgSEFWRV9BTExP
Q0EgMQojZWxzZQojIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCiMg
IGluY2x1ZGUgPGFsbG9jYS5oPgojIGVsc2UKIyAgaWZkZWYgX0FJWAogI3ByYWdtYSBhbGxvY2EK
IyAgZWxzZQojICAgaWZuZGVmIGFsbG9jYQpjaGFyICphbGxvY2EgKCk7CiMgICBlbmRpZgojICBl
bmRpZgojIGVuZGlmCiNlbmRpZgoKI2luY2x1ZGUgPGVycm5vLmg+CiNpZm5kZWYgZXJybm8KZXh0
ZXJuIGludCBlcnJubzsKI2VuZGlmCiNpZm5kZWYgX19zZXRfZXJybm8KIyBkZWZpbmUgX19zZXRf
ZXJybm8odmFsKSBlcnJubyA9ICh2YWwpCiNlbmRpZgoKI2luY2x1ZGUgPHN0ZGRlZi5oPgojaW5j
bHVkZSA8c3RkbGliLmg+CgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpZiAhSEFWRV9TVFJDSFIgJiYg
IWRlZmluZWQgX0xJQkMKIyBpZm5kZWYgc3RyY2hyCiMgIGRlZmluZSBzdHJjaHIgaW5kZXgKIyBl
bmRpZgojZW5kaWYKCiNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQwoj
IGluY2x1ZGUgPHVuaXN0ZC5oPgojZW5kaWYKCiNpbmNsdWRlIDxsb2NhbGUuaD4KCiNpZiBkZWZp
bmVkIEhBVkVfU1lTX1BBUkFNX0ggfHwgZGVmaW5lZCBfTElCQwojIGluY2x1ZGUgPHN5cy9wYXJh
bS5oPgojZW5kaWYKCiNpbmNsdWRlICJnZXR0ZXh0UC5oIgojaWZkZWYgX0xJQkMKIyBpbmNsdWRl
IDxsaWJpbnRsLmg+CiNlbHNlCiMgaW5jbHVkZSAibGliZ251aW50bC5oIgojZW5kaWYKI2luY2x1
ZGUgImhhc2gtc3RyaW5nLmgiCgovKiBUaHJlYWQgc2FmZXR5bmVzcy4gICovCiNpZmRlZiBfTElC
QwojIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CiNlbHNlCi8qIFByb3ZpZGUgZHVtbXkgaW1w
bGVtZW50YXRpb24gaWYgdGhpcyBpcyBvdXRzaWRlIGdsaWJjLiAgKi8KIyBkZWZpbmUgX19saWJj
X2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKENMQVNTLCBOQU1FKQojIGRlZmluZSBfX2xpYmNfbG9j
a19sb2NrKE5BTUUpCiMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9jayhOQU1FKQojIGRlZmluZSBf
X2xpYmNfcndsb2NrX2RlZmluZV9pbml0aWFsaXplZChDTEFTUywgTkFNRSkKIyBkZWZpbmUgX19s
aWJjX3J3bG9ja19yZGxvY2soTkFNRSkKIyBkZWZpbmUgX19saWJjX3J3bG9ja191bmxvY2soTkFN
RSkKI2VuZGlmCgovKiBBbGlnbm1lbnQgb2YgdHlwZXMuICAqLwojaWYgZGVmaW5lZCBfX0dOVUNf
XyAmJiBfX0dOVUNfXyA+PSAyCiMgZGVmaW5lIGFsaWdub2YoVFlQRSkgX19hbGlnbm9mX18gKFRZ
UEUpCiNlbHNlCiMgZGVmaW5lIGFsaWdub2YoVFlQRSkgXAogICAgKChpbnQpICYoKHN0cnVjdCB7
IGNoYXIgZHVtbXkxOyBUWVBFIGR1bW15MjsgfSAqKSAwKS0+ZHVtbXkyKQojZW5kaWYKCi8qIFRo
ZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gdGhlIHN0YW5kYWxvbmUgbGliaW50bC5hIG11c3QgaGF2
ZSBkaWZmZXJlbnQKICAgbmFtZXMgdGhhbiB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIEdOVSBs
aWJjLCBvdGhlcndpc2UgcHJvZ3JhbXMKICAgdXNpbmcgbGliaW50bC5hIGNhbm5vdCBiZSBsaW5r
ZWQgc3RhdGljYWxseS4gICovCiNpZiAhZGVmaW5lZCBfTElCQwojIGRlZmluZSBfbmxfZGVmYXVs
dF9kZWZhdWx0X2RvbWFpbiBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbl9fCiMgZGVmaW5lIF9u
bF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluX18KIyBk
ZWZpbmUgX25sX2RlZmF1bHRfZGlybmFtZSBfbmxfZGVmYXVsdF9kaXJuYW1lX18KIyBkZWZpbmUg
X25sX2RvbWFpbl9iaW5kaW5ncyBfbmxfZG9tYWluX2JpbmRpbmdzX18KI2VuZGlmCgovKiBTb21l
IGNvbXBpbGVycywgbGlrZSBTdW5PUzQgY2MsIGRvbid0IGhhdmUgb2Zmc2V0b2YgaW4gPHN0ZGRl
Zi5oPi4gICovCiNpZm5kZWYgb2Zmc2V0b2YKIyBkZWZpbmUgb2Zmc2V0b2YodHlwZSxpZGVudCkg
KChzaXplX3QpJigoKHR5cGUqKTApLT5pZGVudCkpCiNlbmRpZgoKLyogQEAgZW5kIG9mIHByb2xv
ZyBAQCAqLwoKI2lmZGVmIF9MSUJDCi8qIFJlbmFtZSB0aGUgbm9uIEFOU0kgQyBmdW5jdGlvbnMu
ICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZAogICBiZWNhdXNlIHNvbWUgQU5TSSBD
IGZ1bmN0aW9ucyB3aWxsIHJlcXVpcmUgbGlua2luZyB3aXRoIHRoaXMgb2JqZWN0CiAgIGZpbGUg
YW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLgogICBHQ0MgTE9DQUw6IERv
bid0IHVzZSAjZWxpZi4gICovCiMgZGVmaW5lIGdldGN3ZCBfX2dldGN3ZAojIGlmbmRlZiBzdHBj
cHkKIyAgZGVmaW5lIHN0cGNweSBfX3N0cGNweQojIGVuZGlmCiMgZGVmaW5lIHRmaW5kIF9fdGZp
bmQKI2Vsc2UKIyBpZiAhZGVmaW5lZCBIQVZFX0dFVENXRApjaGFyICpnZXR3ZCAoKTsKIyAgZGVm
aW5lIGdldGN3ZChidWYsIG1heCkgZ2V0d2QgKGJ1ZikKIyBlbHNlCiMgIGlmICFkZWZpbmVkIEhB
VkVfREVDTF9HRVRDV0QKY2hhciAqZ2V0Y3dkICgpOwojICBlbmRpZgojIGVuZGlmCiMgaWZuZGVm
IEhBVkVfU1RQQ1BZCnN0YXRpYyBjaGFyICpzdHBjcHkgUEFSQU1TICgoY2hhciAqZGVzdCwgY29u
c3QgY2hhciAqc3JjKSk7CiMgZW5kaWYKIyBpZm5kZWYgSEFWRV9NRU1QQ1BZCnN0YXRpYyB2b2lk
ICptZW1wY3B5IFBBUkFNUyAoKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4p
KTsKIyBlbmRpZgojZW5kaWYKCi8qIEFtb3VudCB0byBpbmNyZWFzZSBidWZmZXIgc2l6ZSBieSBp
biBlYWNoIHRyeS4gICovCiNkZWZpbmUgUEFUSF9JTkNSIDMyCgovKiBUaGUgZm9sbG93aW5nIGlz
IGZyb20gcGF0aG1heC5oLiAgKi8KLyogTm9uLVBPU0lYIEJTRCBzeXN0ZW1zIG1pZ2h0IGhhdmUg
Z2NjJ3MgbGltaXRzLmgsIHdoaWNoIGRvZXNuJ3QgZGVmaW5lCiAgIFBBVEhfTUFYIGJ1dCBtaWdo
dCBjYXVzZSByZWRlZmluaXRpb24gd2FybmluZ3Mgd2hlbiBzeXMvcGFyYW0uaCBpcwogICBsYXRl
ciBpbmNsdWRlZCAoYXMgb24gTU9SRS9CU0QgNC4zKS4gICovCiNpZiBkZWZpbmVkIF9QT1NJWF9W
RVJTSU9OIHx8IChkZWZpbmVkIEhBVkVfTElNSVRTX0ggJiYgIWRlZmluZWQgX19HTlVDX18pCiMg
aW5jbHVkZSA8bGltaXRzLmg+CiNlbmRpZgoKI2lmbmRlZiBfUE9TSVhfUEFUSF9NQVgKIyBkZWZp
bmUgX1BPU0lYX1BBVEhfTUFYIDI1NQojZW5kaWYKCiNpZiAhZGVmaW5lZCBQQVRIX01BWCAmJiBk
ZWZpbmVkIF9QQ19QQVRIX01BWAojIGRlZmluZSBQQVRIX01BWCAocGF0aGNvbmYgKCIvIiwgX1BD
X1BBVEhfTUFYKSA8IDEgPyAxMDI0IDogcGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKSkKI2Vu
ZGlmCgovKiBEb24ndCBpbmNsdWRlIHN5cy9wYXJhbS5oIGlmIGl0IGFscmVhZHkgaGFzIGJlZW4u
ICAqLwojaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IICYmICFkZWZpbmVkIFBBVEhfTUFYICYm
ICFkZWZpbmVkIE1BWFBBVEhMRU4KIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KI2VuZGlmCgojaWYg
IWRlZmluZWQgUEFUSF9NQVggJiYgZGVmaW5lZCBNQVhQQVRITEVOCiMgZGVmaW5lIFBBVEhfTUFY
IE1BWFBBVEhMRU4KI2VuZGlmCgojaWZuZGVmIFBBVEhfTUFYCiMgZGVmaW5lIFBBVEhfTUFYIF9Q
T1NJWF9QQVRIX01BWAojZW5kaWYKCi8qIFBhdGhuYW1lIHN1cHBvcnQuCiAgIElTU0xBU0goQykg
ICAgICAgICAgIHRlc3RzIHdoZXRoZXIgQyBpcyBhIGRpcmVjdG9yeSBzZXBhcmF0b3IgY2hhcmFj
dGVyLgogICBJU19BQlNPTFVURV9QQVRIKFApICB0ZXN0cyB3aGV0aGVyIFAgaXMgYW4gYWJzb2x1
dGUgcGF0aC4gIElmIGl0IGlzIG5vdCwKICAgICAgICAgICAgICAgICAgICAgICAgaXQgbWF5IGJl
IGNvbmNhdGVuYXRlZCB0byBhIGRpcmVjdG9yeSBwYXRobmFtZS4KICAgSVNfUEFUSF9XSVRIX0RJ
UihQKSAgdGVzdHMgd2hldGhlciBQIGNvbnRhaW5zIGEgZGlyZWN0b3J5IHNwZWNpZmljYXRpb24u
CiAqLwojaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBf
X0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCiAgLyogV2luMzIsIE9TLzIsIERPUyAqLwojIGRl
ZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQojIGRlZmluZSBIQVNf
REVWSUNFKFApIFwKICAgICgoKChQKVswXSA+PSAnQScgJiYgKFApWzBdIDw9ICdaJykgfHwgKChQ
KVswXSA+PSAnYScgJiYgKFApWzBdIDw9ICd6JykpIFwKICAgICAmJiAoUClbMV0gPT0gJzonKQoj
IGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIChJU1NMQVNIICgoUClbMF0pIHx8IEhBU19ERVZJ
Q0UgKFApKQojIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIFwKICAgIChzdHJjaHIgKFAsICcv
JykgIT0gTlVMTCB8fCBzdHJjaHIgKFAsICdcXCcpICE9IE5VTEwgfHwgSEFTX0RFVklDRSAoUCkp
CiNlbHNlCiAgLyogVW5peCAqLwojIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nKQojIGRl
ZmluZSBJU19BQlNPTFVURV9QQVRIKFApIElTU0xBU0ggKChQKVswXSkKIyBkZWZpbmUgSVNfUEFU
SF9XSVRIX0RJUihQKSAoc3RyY2hyIChQLCAnLycpICE9IE5VTEwpCiNlbmRpZgoKLyogWFBHMyBk
ZWZpbmVzIHRoZSByZXN1bHQgb2YgYHNldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpJyBhczoKICAg
YGBEaXJlY3RzIGBzZXRsb2NhbGUoKScgdG8gcXVlcnkgYGNhdGVnb3J5JyBhbmQgcmV0dXJuIHRo
ZSBjdXJyZW50CiAgICAgc2V0dGluZyBvZiBgbG9jYWwnLicnCiAgIEhvd2V2ZXIgaXQgZG9lcyBu
b3Qgc3BlY2lmeSB0aGUgZXhhY3QgZm9ybWF0LiAgTmVpdGhlciBkbyBTVVNWMiBhbmQKICAgSVNP
IEMgOTkuICBTbyB3ZSBjYW4gdXNlIHRoaXMgZmVhdHVyZSBvbmx5IG9uIHNlbGVjdGVkIHN5c3Rl
bXMgKGUuZy4KICAgdGhvc2UgdXNpbmcgR05VIEMgTGlicmFyeSkuICAqLwojaWYgZGVmaW5lZCBf
TElCQyB8fCAoZGVmaW5lZCBfX0dOVV9MSUJSQVJZX18gJiYgX19HTlVfTElCUkFSWV9fID49IDIp
CiMgZGVmaW5lIEhBVkVfTE9DQUxFX05VTEwKI2VuZGlmCgovKiBUaGlzIGlzIHRoZSB0eXBlIHVz
ZWQgZm9yIHRoZSBzZWFyY2ggdHJlZSB3aGVyZSBrbm93biB0cmFuc2xhdGlvbnMKICAgYXJlIHN0
b3JlZC4gICovCnN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90CnsKICAvKiBEb21haW4gaW4gd2hp
Y2ggdG8gc2VhcmNoLiAgKi8KICBjaGFyICpkb21haW5uYW1lOwoKICAvKiBUaGUgY2F0ZWdvcnku
ICAqLwogIGludCBjYXRlZ29yeTsKCiAgLyogU3RhdGUgb2YgdGhlIGNhdGFsb2cgY291bnRlciBh
dCB0aGUgcG9pbnQgdGhlIHN0cmluZyB3YXMgZm91bmQuICAqLwogIGludCBjb3VudGVyOwoKICAv
KiBDYXRhbG9nIHdoZXJlIHRoZSBzdHJpbmcgd2FzIGZvdW5kLiAgKi8KICBzdHJ1Y3QgbG9hZGVk
X2wxMG5maWxlICpkb21haW47CgogIC8qIEFuZCBmaW5hbGx5IHRoZSB0cmFuc2xhdGlvbi4gICov
CiAgY29uc3QgY2hhciAqdHJhbnNsYXRpb247CiAgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbmd0aDsK
CiAgLyogUG9pbnRlciB0byB0aGUgc3RyaW5nIGluIHF1ZXN0aW9uLiAgKi8KICBjaGFyIG1zZ2lk
W1pFUk9dOwp9OwoKLyogUm9vdCBvZiB0aGUgc2VhcmNoIHRyZWUgd2l0aCBrbm93biB0cmFuc2xh
dGlvbnMuICBXZSBjYW4gdXNlIHRoaXMKICAgb25seSBpZiB0aGUgc3lzdGVtIHByb3ZpZGVzIHRo
ZSBgdHNlYXJjaCcgZnVuY3Rpb24gZmFtaWx5LiAgKi8KI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNI
IHx8IGRlZmluZWQgX0xJQkMKIyBpbmNsdWRlIDxzZWFyY2guaD4KCnN0YXRpYyB2b2lkICpyb290
OwoKIyBpZmRlZiBfTElCQwojICBkZWZpbmUgdHNlYXJjaCBfX3RzZWFyY2gKIyBlbmRpZgoKLyog
RnVuY3Rpb24gdG8gY29tcGFyZSB0d28gZW50cmllcyBpbiB0aGUgdGFibGUgb2Yga25vd24gdHJh
bnNsYXRpb25zLiAgKi8Kc3RhdGljIGludCB0cmFuc2NtcCBQQVJBTVMgKChjb25zdCB2b2lkICpw
MSwgY29uc3Qgdm9pZCAqcDIpKTsKc3RhdGljIGludAp0cmFuc2NtcCAocDEsIHAyKQogICAgIGNv
bnN0IHZvaWQgKnAxOwogICAgIGNvbnN0IHZvaWQgKnAyOwp7CiAgY29uc3Qgc3RydWN0IGtub3du
X3RyYW5zbGF0aW9uX3QgKnMxOwogIGNvbnN0IHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICpz
MjsKICBpbnQgcmVzdWx0OwoKICBzMSA9IChjb25zdCBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25f
dCAqKSBwMTsKICBzMiA9IChjb25zdCBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKSBwMjsK
CiAgcmVzdWx0ID0gc3RyY21wIChzMS0+bXNnaWQsIHMyLT5tc2dpZCk7CiAgaWYgKHJlc3VsdCA9
PSAwKQogICAgewogICAgICByZXN1bHQgPSBzdHJjbXAgKHMxLT5kb21haW5uYW1lLCBzMi0+ZG9t
YWlubmFtZSk7CiAgICAgIGlmIChyZXN1bHQgPT0gMCkKCS8qIFdlIGNvbXBhcmUgdGhlIGNhdGVn
b3J5IGxhc3QgKHRob3VnaCB0aGlzIGlzIHRoZSBjaGVhcGVzdAoJICAgb3BlcmF0aW9uKSBzaW5j
ZSBpdCBpcyBob3BlZnVsbHkgYWx3YXlzIHRoZSBzYW1lIChuYW1lbHkKCSAgIExDX01FU1NBR0VT
KS4gICovCglyZXN1bHQgPSBzMS0+Y2F0ZWdvcnkgLSBzMi0+Y2F0ZWdvcnk7CiAgICB9CgogIHJl
dHVybiByZXN1bHQ7Cn0KI2VuZGlmCgovKiBOYW1lIG9mIHRoZSBkZWZhdWx0IGRvbWFpbiB1c2Vk
IGZvciBnZXR0ZXh0KDMpIHByaW9yIGFueSBjYWxsIHRvCiAgIHRleHRkb21haW4oMykuICBUaGUg
ZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBpcyAibWVzc2FnZXMiLiAgKi8KY29uc3QgY2hhciBfbmxf
ZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdID0gIm1lc3NhZ2VzIjsKCi8qIFZhbHVlIHVzZWQgYXMg
dGhlIGRlZmF1bHQgZG9tYWluIGZvciBnZXR0ZXh0KDMpLiAgKi8KY29uc3QgY2hhciAqX25sX2N1
cnJlbnRfZGVmYXVsdF9kb21haW4gPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKCi8qIENv
bnRhaW5zIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBtZXNzYWdlIGNhdGFsb2dzLiAgKi8K
Y29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lW10gPSBMT0NBTEVESVI7CgovKiBMaXN0IHdp
dGggYmluZGluZ3Mgb2Ygc3BlY2lmaWMgZG9tYWlucyBjcmVhdGVkIGJ5IGJpbmR0ZXh0ZG9tYWlu
KCkKICAgY2FsbHMuICAqLwpzdHJ1Y3QgYmluZGluZyAqX25sX2RvbWFpbl9iaW5kaW5nczsKCi8q
IFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCnN0YXRpYyBjaGFyICpwbHVyYWxf
bG9va3VwIFBBUkFNUyAoKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbiwKCQkJCSAgICB1
bnNpZ25lZCBsb25nIGludCBuLAoJCQkJICAgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uLAoJCQkJ
ICAgIHNpemVfdCB0cmFuc2xhdGlvbl9sZW4pKQogICAgIGludGVybmFsX2Z1bmN0aW9uOwpzdGF0
aWMgdW5zaWduZWQgbG9uZyBpbnQgcGx1cmFsX2V2YWwgUEFSQU1TICgoc3RydWN0IGV4cHJlc3Np
b24gKnBleHAsCgkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbnQgbikpCiAgICAgaW50ZXJuYWxf
ZnVuY3Rpb247CnN0YXRpYyBjb25zdCBjaGFyICpjYXRlZ29yeV90b19uYW1lIFBBUkFNUyAoKGlu
dCBjYXRlZ29yeSkpIGludGVybmFsX2Z1bmN0aW9uOwpzdGF0aWMgY29uc3QgY2hhciAqZ3Vlc3Nf
Y2F0ZWdvcnlfdmFsdWUgUEFSQU1TICgoaW50IGNhdGVnb3J5LAoJCQkJCQkgY29uc3QgY2hhciAq
Y2F0ZWdvcnluYW1lKSkKICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKCgovKiBGb3IgdGhvc2UgbG9v
c2luZyBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgYGFsbG9jYScgd2UgaGF2ZSB0byBhZGQKICAg
c29tZSBhZGRpdGlvbmFsIGNvZGUgZW11bGF0aW5nIGl0LiAgKi8KI2lmZGVmIEhBVkVfQUxMT0NB
Ci8qIE5vdGhpbmcgaGFzIHRvIGJlIGRvbmUuICAqLwojIGRlZmluZSBBRERfQkxPQ0sobGlzdCwg
YWRkcmVzcykgLyogbm90aGluZyAqLwojIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KSAvKiBub3Ro
aW5nICovCiNlbHNlCnN0cnVjdCBibG9ja19saXN0CnsKICB2b2lkICphZGRyZXNzOwogIHN0cnVj
dCBibG9ja19saXN0ICpuZXh0Owp9OwojIGRlZmluZSBBRERfQkxPQ0sobGlzdCwgYWRkcikJCQkJ
CQkgICAgICBcCiAgZG8gewkJCQkJCQkJCSAgICAgIFwKICAgIHN0cnVjdCBibG9ja19saXN0ICpu
ZXdwID0gKHN0cnVjdCBibG9ja19saXN0ICopIG1hbGxvYyAoc2l6ZW9mICgqbmV3cCkpOyAgXAog
ICAgLyogSWYgd2UgY2Fubm90IGdldCBhIGZyZWUgYmxvY2sgd2UgY2Fubm90IGFkZCB0aGUgbmV3
IGVsZW1lbnQgdG8JICAgICAgXAogICAgICAgdGhlIGxpc3QuICAqLwkJCQkJCQkgICAgICBcCiAg
ICBpZiAobmV3cCAhPSBOVUxMKSB7CQkJCQkJCSAgICAgIFwKICAgICAgbmV3cC0+YWRkcmVzcyA9
IChhZGRyKTsJCQkJCQkgICAgICBcCiAgICAgIG5ld3AtPm5leHQgPSAobGlzdCk7CQkJCQkJICAg
ICAgXAogICAgICAobGlzdCkgPSBuZXdwOwkJCQkJCQkgICAgICBcCiAgICB9CQkJCQkJCQkJICAg
ICAgXAogIH0gd2hpbGUgKDApCiMgZGVmaW5lIEZSRUVfQkxPQ0tTKGxpc3QpCQkJCQkJICAgICAg
XAogIGRvIHsJCQkJCQkJCQkgICAgICBcCiAgICB3aGlsZSAobGlzdCAhPSBOVUxMKSB7CQkJCQkJ
ICAgICAgXAogICAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqb2xkID0gbGlzdDsJCQkJCSAgICAgIFwK
ICAgICAgbGlzdCA9IGxpc3QtPm5leHQ7CQkJCQkJICAgICAgXAogICAgICBmcmVlIChvbGQpOwkJ
CQkJCQkgICAgICBcCiAgICB9CQkJCQkJCQkJICAgICAgXAogIH0gd2hpbGUgKDApCiMgdW5kZWYg
YWxsb2NhCiMgZGVmaW5lIGFsbG9jYShzaXplKSAobWFsbG9jIChzaXplKSkKI2VuZGlmCS8qIGhh
dmUgYWxsb2NhICovCgoKI2lmZGVmIF9MSUJDCi8qIExpc3Qgb2YgYmxvY2tzIGFsbG9jYXRlZCBm
b3IgdHJhbnNsYXRpb25zLiAgKi8KdHlwZWRlZiBzdHJ1Y3QgdHJhbnNtZW1fbGlzdAp7CiAgc3Ry
dWN0IHRyYW5zbWVtX2xpc3QgKm5leHQ7CiAgY2hhciBkYXRhW1pFUk9dOwp9IHRyYW5zbWVtX2Js
b2NrX3Q7CnN0YXRpYyBzdHJ1Y3QgdHJhbnNtZW1fbGlzdCAqdHJhbnNtZW1fbGlzdDsKI2Vsc2UK
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHRyYW5zbWVtX2Jsb2NrX3Q7CiNlbmRpZgoKCi8qIE5hbWVz
IGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3Qg
Y2xhc2gKICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kg
Qy4gIEJ1dCB0aGlzIHNvdXJjZQogICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5
IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtl
IGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KI2lmZGVmIF9MSUJDCiMgZGVmaW5lIERDSUdFVFRFWFQg
X19kY2lnZXR0ZXh0CiNlbHNlCiMgZGVmaW5lIERDSUdFVFRFWFQgZGNpZ2V0dGV4dF9fCiNlbmRp
ZgoKLyogTG9jayB2YXJpYWJsZSB0byBwcm90ZWN0IHRoZSBnbG9iYWwgZGF0YSBpbiB0aGUgZ2V0
dGV4dCBpbXBsZW1lbnRhdGlvbi4gICovCiNpZmRlZiBfTElCQwpfX2xpYmNfcndsb2NrX2RlZmlu
ZV9pbml0aWFsaXplZCAoLCBfbmxfc3RhdGVfbG9jaykKI2VuZGlmCgovKiBDaGVja2luZyB3aGV0
aGVyIHRoZSBiaW5hcmllcyBydW5zIFNVSUQgbXVzdCBiZSBkb25lIGFuZCBnbGliYyBwcm92aWRl
cwogICBlYXNpZXIgbWV0aG9kcyB0aGVyZWZvcmUgd2UgbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4g
ICovCiNpZmRlZiBfTElCQwojIGRlZmluZSBFTkFCTEVfU0VDVVJFIF9fbGliY19lbmFibGVfc2Vj
dXJlCiMgZGVmaW5lIERFVEVSTUlORV9TRUNVUkUKI2Vsc2UKIyBpZm5kZWYgSEFWRV9HRVRVSUQK
IyAgZGVmaW5lIGdldHVpZCgpIDAKIyBlbmRpZgojIGlmbmRlZiBIQVZFX0dFVEdJRAojICBkZWZp
bmUgZ2V0Z2lkKCkgMAojIGVuZGlmCiMgaWZuZGVmIEhBVkVfR0VURVVJRAojICBkZWZpbmUgZ2V0
ZXVpZCgpIGdldHVpZCgpCiMgZW5kaWYKIyBpZm5kZWYgSEFWRV9HRVRFR0lECiMgIGRlZmluZSBn
ZXRlZ2lkKCkgZ2V0Z2lkKCkKIyBlbmRpZgpzdGF0aWMgaW50IGVuYWJsZV9zZWN1cmU7CiMgZGVm
aW5lIEVOQUJMRV9TRUNVUkUgKGVuYWJsZV9zZWN1cmUgPT0gMSkKIyBkZWZpbmUgREVURVJNSU5F
X1NFQ1VSRSBcCiAgaWYgKGVuYWJsZV9zZWN1cmUgPT0gMCkJCQkJCQkgICAgICBcCiAgICB7CQkJ
CQkJCQkJICAgICAgXAogICAgICBpZiAoZ2V0dWlkICgpICE9IGdldGV1aWQgKCkgfHwgZ2V0Z2lk
ICgpICE9IGdldGVnaWQgKCkpCQkgICAgICBcCgllbmFibGVfc2VjdXJlID0gMTsJCQkJCQkgICAg
ICBcCiAgICAgIGVsc2UJCQkJCQkJCSAgICAgIFwKCWVuYWJsZV9zZWN1cmUgPSAtMTsJCQkJCQkg
ICAgICBcCiAgICB9CiNlbmRpZgoKLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBt
ZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CiAgIENBVEVHT1JZIGxvY2FsZSBhbmQsIGlm
IFBMVVJBTCBpcyBub256ZXJvLCBzZWFyY2ggb3ZlciBzdHJpbmcKICAgZGVwZW5kaW5nIG9uIHRo
ZSBwbHVyYWwgZm9ybSBkZXRlcm1pbmVkIGJ5IE4uICAqLwpjaGFyICoKRENJR0VUVEVYVCAoZG9t
YWlubmFtZSwgbXNnaWQxLCBtc2dpZDIsIHBsdXJhbCwgbiwgY2F0ZWdvcnkpCiAgICAgY29uc3Qg
Y2hhciAqZG9tYWlubmFtZTsKICAgICBjb25zdCBjaGFyICptc2dpZDE7CiAgICAgY29uc3QgY2hh
ciAqbXNnaWQyOwogICAgIGludCBwbHVyYWw7CiAgICAgdW5zaWduZWQgbG9uZyBpbnQgbjsKICAg
ICBpbnQgY2F0ZWdvcnk7CnsKI2lmbmRlZiBIQVZFX0FMTE9DQQogIHN0cnVjdCBibG9ja19saXN0
ICpibG9ja19saXN0ID0gTlVMTDsKI2VuZGlmCiAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9t
YWluOwogIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOwogIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFt
ZTsKICBjb25zdCBjaGFyICpjYXRlZ29yeXZhbHVlOwogIGNoYXIgKmRpcm5hbWUsICp4ZG9tYWlu
bmFtZTsKICBjaGFyICpzaW5nbGVfbG9jYWxlOwogIGNoYXIgKnJldHZhbDsKICBzaXplX3QgcmV0
bGVuOwogIGludCBzYXZlZF9lcnJubzsKI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNIIHx8IGRlZmlu
ZWQgX0xJQkMKICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqc2VhcmNoOwogIHN0cnVjdCBr
bm93bl90cmFuc2xhdGlvbl90ICoqZm91bmRwID0gTlVMTDsKICBzaXplX3QgbXNnaWRfbGVuOwoj
ZW5kaWYKICBzaXplX3QgZG9tYWlubmFtZV9sZW47CgogIC8qIElmIG5vIHJlYWwgTVNHSUQgaXMg
Z2l2ZW4gcmV0dXJuIE5VTEwuICAqLwogIGlmIChtc2dpZDEgPT0gTlVMTCkKICAgIHJldHVybiBO
VUxMOwoKICBfX2xpYmNfcndsb2NrX3JkbG9jayAoX25sX3N0YXRlX2xvY2spOwoKICAvKiBJZiBE
T01BSU5OQU1FIGlzIE5VTEwsIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRoZSBkZWZhdWx0IGRvbWFp
bi4gIElmCiAgICAgQ0FURUdPUlkgaXMgbm90IExDX01FU1NBR0VTIHRoaXMgbWlnaHQgbm90IG1h
a2UgbXVjaCBzZW5zZSBidXQgdGhlCiAgICAgZGVmaW5pdGlvbiBsZWZ0IHRoaXMgdW5kZWZpbmVk
LiAgKi8KICBpZiAoZG9tYWlubmFtZSA9PSBOVUxMKQogICAgZG9tYWlubmFtZSA9IF9ubF9jdXJy
ZW50X2RlZmF1bHRfZG9tYWluOwoKI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNIIHx8IGRlZmluZWQg
X0xJQkMKICBtc2dpZF9sZW4gPSBzdHJsZW4gKG1zZ2lkMSkgKyAxOwoKICAvKiBUcnkgdG8gZmlu
ZCB0aGUgdHJhbnNsYXRpb24gYW1vbmcgdGhvc2Ugd2hpY2ggd2UgZm91bmQgYXQKICAgICBzb21l
IHRpbWUuICAqLwogIHNlYXJjaCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKQoJICAg
YWxsb2NhIChvZmZzZXRvZiAoc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QsIG1zZ2lkKSArIG1z
Z2lkX2xlbik7CiAgbWVtY3B5IChzZWFyY2gtPm1zZ2lkLCBtc2dpZDEsIG1zZ2lkX2xlbik7CiAg
c2VhcmNoLT5kb21haW5uYW1lID0gKGNoYXIgKikgZG9tYWlubmFtZTsKICBzZWFyY2gtPmNhdGVn
b3J5ID0gY2F0ZWdvcnk7CgogIGZvdW5kcCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAq
KikgdGZpbmQgKHNlYXJjaCwgJnJvb3QsIHRyYW5zY21wKTsKICBpZiAoZm91bmRwICE9IE5VTEwg
JiYgKCpmb3VuZHApLT5jb3VudGVyID09IF9ubF9tc2dfY2F0X2NudHIpCiAgICB7CiAgICAgIC8q
IE5vdyBkZWFsIHdpdGggcGx1cmFsLiAgKi8KICAgICAgaWYgKHBsdXJhbCkKCXJldHZhbCA9IHBs
dXJhbF9sb29rdXAgKCgqZm91bmRwKS0+ZG9tYWluLCBuLCAoKmZvdW5kcCktPnRyYW5zbGF0aW9u
LAoJCQkJKCpmb3VuZHApLT50cmFuc2xhdGlvbl9sZW5ndGgpOwogICAgICBlbHNlCglyZXR2YWwg
PSAoY2hhciAqKSAoKmZvdW5kcCktPnRyYW5zbGF0aW9uOwoKICAgICAgX19saWJjX3J3bG9ja191
bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKICAgICAgcmV0dXJuIHJldHZhbDsKICAgIH0KI2VuZGlm
CgogIC8qIFByZXNlcnZlIHRoZSBgZXJybm8nIHZhbHVlLiAgKi8KICBzYXZlZF9lcnJubyA9IGVy
cm5vOwoKICAvKiBTZWUgd2hldGhlciB0aGlzIGlzIGEgU1VJRCBiaW5hcnkgb3Igbm90LiAgKi8K
ICBERVRFUk1JTkVfU0VDVVJFOwoKICAvKiBGaXJzdCBmaW5kIG1hdGNoaW5nIGJpbmRpbmcuICAq
LwogIGZvciAoYmluZGluZyA9IF9ubF9kb21haW5fYmluZGluZ3M7IGJpbmRpbmcgIT0gTlVMTDsg
YmluZGluZyA9IGJpbmRpbmctPm5leHQpCiAgICB7CiAgICAgIGludCBjb21wYXJlID0gc3RyY21w
IChkb21haW5uYW1lLCBiaW5kaW5nLT5kb21haW5uYW1lKTsKICAgICAgaWYgKGNvbXBhcmUgPT0g
MCkKCS8qIFdlIGZvdW5kIGl0ISAgKi8KCWJyZWFrOwogICAgICBpZiAoY29tcGFyZSA8IDApCgl7
CgkgIC8qIEl0IGlzIG5vdCBpbiB0aGUgbGlzdC4gICovCgkgIGJpbmRpbmcgPSBOVUxMOwoJICBi
cmVhazsKCX0KICAgIH0KCiAgaWYgKGJpbmRpbmcgPT0gTlVMTCkKICAgIGRpcm5hbWUgPSAoY2hh
ciAqKSBfbmxfZGVmYXVsdF9kaXJuYW1lOwogIGVsc2UgaWYgKElTX0FCU09MVVRFX1BBVEggKGJp
bmRpbmctPmRpcm5hbWUpKQogICAgZGlybmFtZSA9IGJpbmRpbmctPmRpcm5hbWU7CiAgZWxzZQog
ICAgewogICAgICAvKiBXZSBoYXZlIGEgcmVsYXRpdmUgcGF0aC4gIE1ha2UgaXQgYWJzb2x1dGUg
bm93LiAgKi8KICAgICAgc2l6ZV90IGRpcm5hbWVfbGVuID0gc3RybGVuIChiaW5kaW5nLT5kaXJu
YW1lKSArIDE7CiAgICAgIHNpemVfdCBwYXRoX21heDsKICAgICAgY2hhciAqcmV0OwoKICAgICAg
cGF0aF9tYXggPSAodW5zaWduZWQgaW50KSBQQVRIX01BWDsKICAgICAgcGF0aF9tYXggKz0gMjsJ
CS8qIFRoZSBnZXRjd2QgZG9jcyBzYXkgdG8gZG8gdGhpcy4gICovCgogICAgICBmb3IgKDs7KQoJ
ewoJICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsK
CSAgQUREX0JMT0NLIChibG9ja19saXN0LCBkaXJuYW1lKTsKCgkgIF9fc2V0X2Vycm5vICgwKTsK
CSAgcmV0ID0gZ2V0Y3dkIChkaXJuYW1lLCBwYXRoX21heCk7CgkgIGlmIChyZXQgIT0gTlVMTCB8
fCBlcnJubyAhPSBFUkFOR0UpCgkgICAgYnJlYWs7CgoJICBwYXRoX21heCArPSBwYXRoX21heCAv
IDI7CgkgIHBhdGhfbWF4ICs9IFBBVEhfSU5DUjsKCX0KCiAgICAgIGlmIChyZXQgPT0gTlVMTCkK
CXsKCSAgLyogV2UgY2Fubm90IGdldCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIERv
bid0IHNpZ25hbCBhbgoJICAgICBlcnJvciBidXQgc2ltcGx5IHJldHVybiB0aGUgZGVmYXVsdCBz
dHJpbmcuICAqLwoJICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CgkgIF9fbGliY19yd2xvY2tf
dW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CgkgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7Cgkg
IHJldHVybiAocGx1cmFsID09IDAKCQkgID8gKGNoYXIgKikgbXNnaWQxCgkJICAvKiBVc2UgdGhl
IEdlcm1hbmljIHBsdXJhbCBydWxlLiAgKi8KCQkgIDogbiA9PSAxID8gKGNoYXIgKikgbXNnaWQx
IDogKGNoYXIgKikgbXNnaWQyKTsKCX0KCiAgICAgIHN0cGNweSAoc3RwY3B5IChzdHJjaHIgKGRp
cm5hbWUsICdcMCcpLCAiLyIpLCBiaW5kaW5nLT5kaXJuYW1lKTsKICAgIH0KCiAgLyogTm93IGRl
dGVybWluZSB0aGUgc3ltYm9saWMgbmFtZSBvZiBDQVRFR09SWSBhbmQgaXRzIHZhbHVlLiAgKi8K
ICBjYXRlZ29yeW5hbWUgPSBjYXRlZ29yeV90b19uYW1lIChjYXRlZ29yeSk7CiAgY2F0ZWdvcnl2
YWx1ZSA9IGd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKTsKCiAg
ZG9tYWlubmFtZV9sZW4gPSBzdHJsZW4gKGRvbWFpbm5hbWUpOwogIHhkb21haW5uYW1lID0gKGNo
YXIgKikgYWxsb2NhIChzdHJsZW4gKGNhdGVnb3J5bmFtZSkKCQkJCSArIGRvbWFpbm5hbWVfbGVu
ICsgNSk7CiAgQUREX0JMT0NLIChibG9ja19saXN0LCB4ZG9tYWlubmFtZSk7CgogIHN0cGNweSAo
bWVtcGNweSAoc3RwY3B5IChzdHBjcHkgKHhkb21haW5uYW1lLCBjYXRlZ29yeW5hbWUpLCAiLyIp
LAoJCSAgZG9tYWlubmFtZSwgZG9tYWlubmFtZV9sZW4pLAoJICAiLm1vIik7CgogIC8qIENyZWF0
aW5nIHdvcmtpbmcgYXJlYS4gICovCiAgc2luZ2xlX2xvY2FsZSA9IChjaGFyICopIGFsbG9jYSAo
c3RybGVuIChjYXRlZ29yeXZhbHVlKSArIDEpOwogIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgc2lu
Z2xlX2xvY2FsZSk7CgoKICAvKiBTZWFyY2ggZm9yIHRoZSBnaXZlbiBzdHJpbmcuICBUaGlzIGlz
IGEgbG9vcCBiZWNhdXNlIHdlIHBlcmhhcHMKICAgICBnb3QgYW4gb3JkZXJlZCBsaXN0IG9mIGxh
bmd1YWdlcyB0byBjb25zaWRlciBmb3IgdGhlIHRyYW5zbGF0aW9uLiAgKi8KICB3aGlsZSAoMSkK
ICAgIHsKICAgICAgLyogTWFrZSBDQVRFR09SWVZBTFVFIHBvaW50IHRvIHRoZSBuZXh0IGVsZW1l
bnQgb2YgdGhlIGxpc3QuICAqLwogICAgICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAn
ICYmIGNhdGVnb3J5dmFsdWVbMF0gPT0gJzonKQoJKytjYXRlZ29yeXZhbHVlOwogICAgICBpZiAo
Y2F0ZWdvcnl2YWx1ZVswXSA9PSAnXDAnKQoJewoJICAvKiBUaGUgd2hvbGUgY29udGVudHMgb2Yg
Q0FURUdPUllWQUxVRSBoYXMgYmVlbiBzZWFyY2hlZCBidXQKCSAgICAgbm8gdmFsaWQgZW50cnkg
aGFzIGJlZW4gZm91bmQuICBXZSBzb2x2ZSB0aGlzIHNpdHVhdGlvbgoJICAgICBieSBpbXBsaWNp
dGx5IGFwcGVuZGluZyBhICJDIiBlbnRyeSwgaS5lLiBubyB0cmFuc2xhdGlvbgoJICAgICB3aWxs
IHRha2UgcGxhY2UuICAqLwoJICBzaW5nbGVfbG9jYWxlWzBdID0gJ0MnOwoJICBzaW5nbGVfbG9j
YWxlWzFdID0gJ1wwJzsKCX0KICAgICAgZWxzZQoJewoJICBjaGFyICpjcCA9IHNpbmdsZV9sb2Nh
bGU7CgkgIHdoaWxlIChjYXRlZ29yeXZhbHVlWzBdICE9ICdcMCcgJiYgY2F0ZWdvcnl2YWx1ZVsw
XSAhPSAnOicpCgkgICAgKmNwKysgPSAqY2F0ZWdvcnl2YWx1ZSsrOwoJICAqY3AgPSAnXDAnOwoK
CSAgLyogV2hlbiB0aGlzIGlzIGEgU1VJRCBiaW5hcnkgd2UgbXVzdCBub3QgYWxsb3cgYWNjZXNz
aW5nIGZpbGVzCgkgICAgIG91dHNpZGUgdGhlIGRlZGljYXRlZCBkaXJlY3Rvcmllcy4gICovCgkg
IGlmIChFTkFCTEVfU0VDVVJFICYmIElTX1BBVEhfV0lUSF9ESVIgKHNpbmdsZV9sb2NhbGUpKQoJ
ICAgIC8qIEluZ29yZSB0aGlzIGVudHJ5LiAgKi8KCSAgICBjb250aW51ZTsKCX0KCiAgICAgIC8q
IElmIHRoZSBjdXJyZW50IGxvY2FsZSB2YWx1ZSBpcyBDIChvciBQT1NJWCkgd2UgZG9uJ3QgbG9h
ZCBhCgkgZG9tYWluLiAgUmV0dXJuIHRoZSBNU0dJRC4gICovCiAgICAgIGlmIChzdHJjbXAgKHNp
bmdsZV9sb2NhbGUsICJDIikgPT0gMAoJICB8fCBzdHJjbXAgKHNpbmdsZV9sb2NhbGUsICJQT1NJ
WCIpID09IDApCgl7CgkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKCSAgX19saWJjX3J3bG9j
a191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKCSAgX19zZXRfZXJybm8gKHNhdmVkX2Vycm5vKTsK
CSAgcmV0dXJuIChwbHVyYWwgPT0gMAoJCSAgPyAoY2hhciAqKSBtc2dpZDEKCQkgIC8qIFVzZSB0
aGUgR2VybWFuaWMgcGx1cmFsIHJ1bGUuICAqLwoJCSAgOiBuID09IDEgPyAoY2hhciAqKSBtc2dp
ZDEgOiAoY2hhciAqKSBtc2dpZDIpOwoJfQoKCiAgICAgIC8qIEZpbmQgc3RydWN0dXJlIGRlc2Ny
aWJpbmcgdGhlIG1lc3NhZ2UgY2F0YWxvZyBtYXRjaGluZyB0aGUKCSBET01BSU5OQU1FIGFuZCBD
QVRFR09SWS4gICovCiAgICAgIGRvbWFpbiA9IF9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgc2lu
Z2xlX2xvY2FsZSwgeGRvbWFpbm5hbWUsIGJpbmRpbmcpOwoKICAgICAgaWYgKGRvbWFpbiAhPSBO
VUxMKQoJewoJICByZXR2YWwgPSBfbmxfZmluZF9tc2cgKGRvbWFpbiwgYmluZGluZywgbXNnaWQx
LCAmcmV0bGVuKTsKCgkgIGlmIChyZXR2YWwgPT0gTlVMTCkKCSAgICB7CgkgICAgICBpbnQgY250
OwoKCSAgICAgIGZvciAoY250ID0gMDsgZG9tYWluLT5zdWNjZXNzb3JbY250XSAhPSBOVUxMOyAr
K2NudCkKCQl7CgkJICByZXR2YWwgPSBfbmxfZmluZF9tc2cgKGRvbWFpbi0+c3VjY2Vzc29yW2Nu
dF0sIGJpbmRpbmcsCgkJCQkJIG1zZ2lkMSwgJnJldGxlbik7CgoJCSAgaWYgKHJldHZhbCAhPSBO
VUxMKQoJCSAgICB7CgkJICAgICAgZG9tYWluID0gZG9tYWluLT5zdWNjZXNzb3JbY250XTsKCQkg
ICAgICBicmVhazsKCQkgICAgfQoJCX0KCSAgICB9CgoJICBpZiAocmV0dmFsICE9IE5VTEwpCgkg
ICAgewoJICAgICAgLyogRm91bmQgdGhlIHRyYW5zbGF0aW9uIG9mIE1TR0lEMSBpbiBkb21haW4g
RE9NQUlOOgoJCSBzdGFydGluZyBhdCBSRVRWQUwsIFJFVExFTiBieXRlcy4gICovCgkgICAgICBG
UkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CgkgICAgICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8p
OwojaWYgZGVmaW5lZCBIQVZFX1RTRUFSQ0ggfHwgZGVmaW5lZCBfTElCQwoJICAgICAgaWYgKGZv
dW5kcCA9PSBOVUxMKQoJCXsKCQkgIC8qIENyZWF0ZSBhIG5ldyBlbnRyeSBhbmQgYWRkIGl0IHRv
IHRoZSBzZWFyY2ggdHJlZS4gICovCgkJICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqbmV3
cDsKCgkJICBuZXdwID0gKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICopCgkJICAgIG1hbGxv
YyAob2Zmc2V0b2YgKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90LCBtc2dpZCkKCQkJICAgICsg
bXNnaWRfbGVuICsgZG9tYWlubmFtZV9sZW4gKyAxKTsKCQkgIGlmIChuZXdwICE9IE5VTEwpCgkJ
ICAgIHsKCQkgICAgICBuZXdwLT5kb21haW5uYW1lID0KCQkJbWVtcGNweSAobmV3cC0+bXNnaWQs
IG1zZ2lkMSwgbXNnaWRfbGVuKTsKCQkgICAgICBtZW1jcHkgKG5ld3AtPmRvbWFpbm5hbWUsIGRv
bWFpbm5hbWUsIGRvbWFpbm5hbWVfbGVuICsgMSk7CgkJICAgICAgbmV3cC0+Y2F0ZWdvcnkgPSBj
YXRlZ29yeTsKCQkgICAgICBuZXdwLT5jb3VudGVyID0gX25sX21zZ19jYXRfY250cjsKCQkgICAg
ICBuZXdwLT5kb21haW4gPSBkb21haW47CgkJICAgICAgbmV3cC0+dHJhbnNsYXRpb24gPSByZXR2
YWw7CgkJICAgICAgbmV3cC0+dHJhbnNsYXRpb25fbGVuZ3RoID0gcmV0bGVuOwoKCQkgICAgICAv
KiBJbnNlcnQgdGhlIGVudHJ5IGluIHRoZSBzZWFyY2ggdHJlZS4gICovCgkJICAgICAgZm91bmRw
ID0gKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICoqKQoJCQl0c2VhcmNoIChuZXdwLCAmcm9v
dCwgdHJhbnNjbXApOwoJCSAgICAgIGlmIChmb3VuZHAgPT0gTlVMTAoJCQkgIHx8IF9fYnVpbHRp
bl9leHBlY3QgKCpmb3VuZHAgIT0gbmV3cCwgMCkpCgkJCS8qIFRoZSBpbnNlcnQgZmFpbGVkLiAg
Ki8KCQkJZnJlZSAobmV3cCk7CgkJICAgIH0KCQl9CgkgICAgICBlbHNlCgkJewoJCSAgLyogV2Ug
Y2FuIHVwZGF0ZSB0aGUgZXhpc3RpbmcgZW50cnkuICAqLwoJCSAgKCpmb3VuZHApLT5jb3VudGVy
ID0gX25sX21zZ19jYXRfY250cjsKCQkgICgqZm91bmRwKS0+ZG9tYWluID0gZG9tYWluOwoJCSAg
KCpmb3VuZHApLT50cmFuc2xhdGlvbiA9IHJldHZhbDsKCQkgICgqZm91bmRwKS0+dHJhbnNsYXRp
b25fbGVuZ3RoID0gcmV0bGVuOwoJCX0KI2VuZGlmCgkgICAgICAvKiBOb3cgZGVhbCB3aXRoIHBs
dXJhbC4gICovCgkgICAgICBpZiAocGx1cmFsKQoJCXJldHZhbCA9IHBsdXJhbF9sb29rdXAgKGRv
bWFpbiwgbiwgcmV0dmFsLCByZXRsZW4pOwoKCSAgICAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChf
bmxfc3RhdGVfbG9jayk7CgkgICAgICByZXR1cm4gcmV0dmFsOwoJICAgIH0KCX0KICAgIH0KICAv
KiBOT1RSRUFDSEVEICovCn0KCgpjaGFyICoKaW50ZXJuYWxfZnVuY3Rpb24KX25sX2ZpbmRfbXNn
IChkb21haW5fZmlsZSwgZG9tYWluYmluZGluZywgbXNnaWQsIGxlbmd0aHApCiAgICAgc3RydWN0
IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluX2ZpbGU7CiAgICAgc3RydWN0IGJpbmRpbmcgKmRvbWFp
bmJpbmRpbmc7CiAgICAgY29uc3QgY2hhciAqbXNnaWQ7CiAgICAgc2l6ZV90ICpsZW5ndGhwOwp7
CiAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbjsKICBzaXplX3QgYWN0OwogIGNoYXIgKnJl
c3VsdDsKICBzaXplX3QgcmVzdWx0bGVuOwoKICBpZiAoZG9tYWluX2ZpbGUtPmRlY2lkZWQgPT0g
MCkKICAgIF9ubF9sb2FkX2RvbWFpbiAoZG9tYWluX2ZpbGUsIGRvbWFpbmJpbmRpbmcpOwoKICBp
ZiAoZG9tYWluX2ZpbGUtPmRhdGEgPT0gTlVMTCkKICAgIHJldHVybiBOVUxMOwoKICBkb21haW4g
PSAoc3RydWN0IGxvYWRlZF9kb21haW4gKikgZG9tYWluX2ZpbGUtPmRhdGE7CgogIC8qIExvY2F0
ZSB0aGUgTVNHSUQgYW5kIGl0cyB0cmFuc2xhdGlvbi4gICovCiAgaWYgKGRvbWFpbi0+aGFzaF9z
aXplID4gMiAmJiBkb21haW4tPmhhc2hfdGFiICE9IE5VTEwpCiAgICB7CiAgICAgIC8qIFVzZSB0
aGUgaGFzaGluZyB0YWJsZS4gICovCiAgICAgIG5sc191aW50MzIgbGVuID0gc3RybGVuIChtc2dp
ZCk7CiAgICAgIG5sc191aW50MzIgaGFzaF92YWwgPSBoYXNoX3N0cmluZyAobXNnaWQpOwogICAg
ICBubHNfdWludDMyIGlkeCA9IGhhc2hfdmFsICUgZG9tYWluLT5oYXNoX3NpemU7CiAgICAgIG5s
c191aW50MzIgaW5jciA9IDEgKyAoaGFzaF92YWwgJSAoZG9tYWluLT5oYXNoX3NpemUgLSAyKSk7
CgogICAgICB3aGlsZSAoMSkKCXsKCSAgbmxzX3VpbnQzMiBuc3RyID0gVyAoZG9tYWluLT5tdXN0
X3N3YXAsIGRvbWFpbi0+aGFzaF90YWJbaWR4XSk7CgoJICBpZiAobnN0ciA9PSAwKQoJICAgIC8q
IEhhc2ggdGFibGUgZW50cnkgaXMgZW1wdHkuICAqLwoJICAgIHJldHVybiBOVUxMOwoKCSAgLyog
Q29tcGFyZSBtc2dpZCB3aXRoIHRoZSBvcmlnaW5hbCBzdHJpbmcgYXQgaW5kZXggbnN0ci0xLgoJ
ICAgICBXZSBjb21wYXJlIHRoZSBsZW5ndGhzIHdpdGggPj0sIG5vdCA9PSwgYmVjYXVzZSBwbHVy
YWwgZW50cmllcwoJICAgICBhcmUgcmVwcmVzZW50ZWQgYnkgc3RyaW5ncyB3aXRoIGFuIGVtYmVk
ZGVkIE5VTC4gICovCgkgIGlmIChXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT5vcmlnX3Rh
Yltuc3RyIC0gMV0ubGVuZ3RoKSA+PSBsZW4KCSAgICAgICYmIChzdHJjbXAgKG1zZ2lkLAoJCQkg
IGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAoJCQkJCSAgICBkb21haW4tPm9y
aWdfdGFiW25zdHIgLSAxXS5vZmZzZXQpKQoJCSAgPT0gMCkpCgkgICAgewoJICAgICAgYWN0ID0g
bnN0ciAtIDE7CgkgICAgICBnb3RvIGZvdW5kOwoJICAgIH0KCgkgIGlmIChpZHggPj0gZG9tYWlu
LT5oYXNoX3NpemUgLSBpbmNyKQoJICAgIGlkeCAtPSBkb21haW4tPmhhc2hfc2l6ZSAtIGluY3I7
CgkgIGVsc2UKCSAgICBpZHggKz0gaW5jcjsKCX0KICAgICAgLyogTk9UUkVBQ0hFRCAqLwogICAg
fQogIGVsc2UKICAgIHsKICAgICAgLyogVHJ5IHRoZSBkZWZhdWx0IG1ldGhvZDogIGJpbmFyeSBz
ZWFyY2ggaW4gdGhlIHNvcnRlZCBhcnJheSBvZgoJIG1lc3NhZ2VzLiAgKi8KICAgICAgc2l6ZV90
IHRvcCwgYm90dG9tOwoKICAgICAgYm90dG9tID0gMDsKICAgICAgYWN0ID0gMDsKICAgICAgdG9w
ID0gZG9tYWluLT5uc3RyaW5nczsKICAgICAgd2hpbGUgKGJvdHRvbSA8IHRvcCkKCXsKCSAgaW50
IGNtcF92YWw7CgoJICBhY3QgPSAoYm90dG9tICsgdG9wKSAvIDI7CgkgIGNtcF92YWwgPSBzdHJj
bXAgKG1zZ2lkLCAoZG9tYWluLT5kYXRhCgkJCQkgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwK
CQkJCQkgZG9tYWluLT5vcmlnX3RhYlthY3RdLm9mZnNldCkpKTsKCSAgaWYgKGNtcF92YWwgPCAw
KQoJICAgIHRvcCA9IGFjdDsKCSAgZWxzZSBpZiAoY21wX3ZhbCA+IDApCgkgICAgYm90dG9tID0g
YWN0ICsgMTsKCSAgZWxzZQoJICAgIGdvdG8gZm91bmQ7Cgl9CiAgICAgIC8qIE5vIHRyYW5zbGF0
aW9uIHdhcyBmb3VuZC4gICovCiAgICAgIHJldHVybiBOVUxMOwogICAgfQoKIGZvdW5kOgogIC8q
IFRoZSB0cmFuc2xhdGlvbiB3YXMgZm91bmQgYXQgaW5kZXggQUNULiAgSWYgd2UgaGF2ZSB0byBj
b252ZXJ0IHRoZQogICAgIHN0cmluZyB0byB1c2UgYSBkaWZmZXJlbnQgY2hhcmFjdGVyIHNldCwg
dGhpcyBpcyB0aGUgdGltZS4gICovCiAgcmVzdWx0ID0gKChjaGFyICopIGRvbWFpbi0+ZGF0YQoJ
ICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+dHJhbnNfdGFiW2FjdF0ub2Zmc2V0
KSk7CiAgcmVzdWx0bGVuID0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+dHJhbnNfdGFi
W2FjdF0ubGVuZ3RoKSArIDE7CgojaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0lDT05WCiAgaWYg
KGRvbWFpbi0+Y29kZXNldF9jbnRyCiAgICAgICE9IChkb21haW5iaW5kaW5nICE9IE5VTEwgPyBk
b21haW5iaW5kaW5nLT5jb2Rlc2V0X2NudHIgOiAwKSkKICAgIHsKICAgICAgLyogVGhlIGRvbWFp
bidzIGNvZGVzZXQgaGFzIGNoYW5nZWQgdGhyb3VnaCBiaW5kX3RleHRkb21haW5fY29kZXNldCgp
Cgkgc2luY2UgdGhlIG1lc3NhZ2UgY2F0YWxvZyB3YXMgaW5pdGlhbGl6ZWQgb3IgbGFzdCBhY2Nl
c3NlZC4gIFdlCgkgaGF2ZSB0byByZWluaXRpYWxpemUgdGhlIGNvbnZlcnRlci4gICovCiAgICAg
IF9ubF9mcmVlX2RvbWFpbl9jb252IChkb21haW4pOwogICAgICBfbmxfaW5pdF9kb21haW5fY29u
diAoZG9tYWluX2ZpbGUsIGRvbWFpbiwgZG9tYWluYmluZGluZyk7CiAgICB9CgogIGlmICgKIyBp
ZmRlZiBfTElCQwogICAgICBkb21haW4tPmNvbnYgIT0gKF9fZ2NvbnZfdCkgLTEKIyBlbHNlCiMg
IGlmIEhBVkVfSUNPTlYKICAgICAgZG9tYWluLT5jb252ICE9IChpY29udl90KSAtMQojICBlbmRp
ZgojIGVuZGlmCiAgICAgICkKICAgIHsKICAgICAgLyogV2UgYXJlIHN1cHBvc2VkIHRvIGRvIGEg
Y29udmVyc2lvbi4gIEZpcnN0IGFsbG9jYXRlIGFuCgkgYXBwcm9wcmlhdGUgdGFibGUgd2l0aCB0
aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgdGhlIHRhYmxlCgkgb2YgdHJhbnNsYXRpb25zIGluIHRoZSBm
aWxlLCB3aGVyZSB3ZSBjYW4gcHV0IHRoZSBwb2ludGVycwoJIHRvIHRoZSBjb252ZXJ0ZWQgc3Ry
aW5ncyBpbi4KCSBUaGVyZSBpcyBhIHNsaWdodCBjb21wbGljYXRpb24gd2l0aCBwbHVyYWwgZW50
cmllcy4gIFRoZXkKCSBhcmUgcmVwcmVzZW50ZWQgYnkgY29uc2VjdXRpdmUgTlVMIHRlcm1pbmF0
ZWQgc3RyaW5ncy4gIFdlCgkgaGFuZGxlIHRoaXMgY2FzZSBieSBjb252ZXJ0aW5nIFJFU1VMVExF
TiBieXRlcywgaW5jbHVkaW5nCgkgTlVMcy4gICovCgogICAgICBpZiAoZG9tYWluLT5jb252X3Rh
YiA9PSBOVUxMCgkgICYmICgoZG9tYWluLT5jb252X3RhYiA9IChjaGFyICoqKSBjYWxsb2MgKGRv
bWFpbi0+bnN0cmluZ3MsCgkJCQkJCSAgICBzaXplb2YgKGNoYXIgKikpKQoJICAgICAgPT0gTlVM
TCkpCgkvKiBNYXJrIHRoYXQgd2UgZGlkbid0IHN1Y2NlZWQgYWxsb2NhdGluZyBhIHRhYmxlLiAg
Ki8KCWRvbWFpbi0+Y29udl90YWIgPSAoY2hhciAqKikgLTE7CgogICAgICBpZiAoX19idWlsdGlu
X2V4cGVjdCAoZG9tYWluLT5jb252X3RhYiA9PSAoY2hhciAqKikgLTEsIDApKQoJLyogTm90aGlu
ZyB3ZSBjYW4gZG8sIG5vIG1vcmUgbWVtb3J5LiAgKi8KCWdvdG8gY29udmVydGVkOwoKICAgICAg
aWYgKGRvbWFpbi0+Y29udl90YWJbYWN0XSA9PSBOVUxMKQoJewoJICAvKiBXZSBoYXZlbid0IHVz
ZWQgdGhpcyBzdHJpbmcgc28gZmFyLCBzbyBpdCBpcyBub3QKCSAgICAgdHJhbnNsYXRlZCB5ZXQu
ICBEbyB0aGlzIG5vdy4gICovCgkgIC8qIFdlIHVzZSBhIGJpdCBtb3JlIGVmZmljaWVudCBtZW1v
cnkgaGFuZGxpbmcuCgkgICAgIFdlIGFsbG9jYXRlIGFsd2F5cyBsYXJnZXIgYmxvY2tzIHdoaWNo
IGdldCB1c2VkIG92ZXIKCSAgICAgdGltZS4gIFRoaXMgaXMgZmFzdGVyIHRoYW4gbWFueSBzbWFs
bCBhbGxvY2F0aW9ucy4gICAqLwoJICBfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0
YXRpYywgbG9jaykKIyBkZWZpbmUgSU5JVElBTF9CTE9DS19TSVpFCTQwODAKCSAgc3RhdGljIHVu
c2lnbmVkIGNoYXIgKmZyZWVtZW07CgkgIHN0YXRpYyBzaXplX3QgZnJlZW1lbV9zaXplOwoKCSAg
Y29uc3QgdW5zaWduZWQgY2hhciAqaW5idWY7CgkgIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZjsKCSAg
aW50IG1hbGxvY19jb3VudDsKIyBpZm5kZWYgX0xJQkMKCSAgdHJhbnNtZW1fYmxvY2tfdCAqdHJh
bnNtZW1fbGlzdCA9IE5VTEw7CiMgZW5kaWYKCgkgIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOwoK
CSAgaW5idWYgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSByZXN1bHQ7CgkgIG91dGJ1ZiA9IGZy
ZWVtZW0gKyBzaXplb2YgKHNpemVfdCk7CgoJICBtYWxsb2NfY291bnQgPSAwOwoJICB3aGlsZSAo
MSkKCSAgICB7CgkgICAgICB0cmFuc21lbV9ibG9ja190ICpuZXdtZW07CiMgaWZkZWYgX0xJQkMK
CSAgICAgIHNpemVfdCBub25fcmV2ZXJzaWJsZTsKCSAgICAgIGludCByZXM7CgoJICAgICAgaWYg
KGZyZWVtZW1fc2l6ZSA8IHNpemVvZiAoc2l6ZV90KSkKCQlnb3RvIHJlc2l6ZV9mcmVlbWVtOwoK
CSAgICAgIHJlcyA9IF9fZ2NvbnYgKGRvbWFpbi0+Y29udiwKCQkJICAgICAmaW5idWYsIGluYnVm
ICsgcmVzdWx0bGVuLAoJCQkgICAgICZvdXRidWYsCgkJCSAgICAgb3V0YnVmICsgZnJlZW1lbV9z
aXplIC0gc2l6ZW9mIChzaXplX3QpLAoJCQkgICAgICZub25fcmV2ZXJzaWJsZSk7CgoJICAgICAg
aWYgKHJlcyA9PSBfX0dDT05WX09LIHx8IHJlcyA9PSBfX0dDT05WX0VNUFRZX0lOUFVUKQoJCWJy
ZWFrOwoKCSAgICAgIGlmIChyZXMgIT0gX19HQ09OVl9GVUxMX09VVFBVVCkKCQl7CgkJICBfX2xp
YmNfbG9ja191bmxvY2sgKGxvY2spOwoJCSAgZ290byBjb252ZXJ0ZWQ7CgkJfQoKCSAgICAgIGlu
YnVmID0gcmVzdWx0OwojIGVsc2UKIyAgaWYgSEFWRV9JQ09OVgoJICAgICAgY29uc3QgY2hhciAq
aW5wdHIgPSAoY29uc3QgY2hhciAqKSBpbmJ1ZjsKCSAgICAgIHNpemVfdCBpbmxlZnQgPSByZXN1
bHRsZW47CgkgICAgICBjaGFyICpvdXRwdHIgPSAoY2hhciAqKSBvdXRidWY7CgkgICAgICBzaXpl
X3Qgb3V0bGVmdDsKCgkgICAgICBpZiAoZnJlZW1lbV9zaXplIDwgc2l6ZW9mIChzaXplX3QpKQoJ
CWdvdG8gcmVzaXplX2ZyZWVtZW07CgoJICAgICAgb3V0bGVmdCA9IGZyZWVtZW1fc2l6ZSAtIHNp
emVvZiAoc2l6ZV90KTsKCSAgICAgIGlmIChpY29udiAoZG9tYWluLT5jb252LAoJCQkgKElDT05W
X0NPTlNUIGNoYXIgKiopICZpbnB0ciwgJmlubGVmdCwKCQkJICZvdXRwdHIsICZvdXRsZWZ0KQoJ
CSAgIT0gKHNpemVfdCkgKC0xKSkKCQl7CgkJICBvdXRidWYgPSAodW5zaWduZWQgY2hhciAqKSBv
dXRwdHI7CgkJICBicmVhazsKCQl9CgkgICAgICBpZiAoZXJybm8gIT0gRTJCSUcpCgkJewoJCSAg
X19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKCQkgIGdvdG8gY29udmVydGVkOwoJCX0KIyAgZW5k
aWYKIyBlbmRpZgoKCSAgICByZXNpemVfZnJlZW1lbToKCSAgICAgIC8qIFdlIG11c3QgYWxsb2Nh
dGUgYSBuZXcgYnVmZmVyIG9yIHJlc2l6ZSB0aGUgb2xkIG9uZS4gICovCgkgICAgICBpZiAobWFs
bG9jX2NvdW50ID4gMCkKCQl7CgkJICArK21hbGxvY19jb3VudDsKCQkgIGZyZWVtZW1fc2l6ZSA9
IG1hbGxvY19jb3VudCAqIElOSVRJQUxfQkxPQ0tfU0laRTsKCQkgIG5ld21lbSA9ICh0cmFuc21l
bV9ibG9ja190ICopIHJlYWxsb2MgKHRyYW5zbWVtX2xpc3QsCgkJCQkJCQkgZnJlZW1lbV9zaXpl
KTsKIyBpZmRlZiBfTElCQwoJCSAgaWYgKG5ld21lbSAhPSBOVUxMKQoJCSAgICB0cmFuc21lbV9s
aXN0ID0gdHJhbnNtZW1fbGlzdC0+bmV4dDsKCQkgIGVsc2UKCQkgICAgewoJCSAgICAgIHN0cnVj
dCB0cmFuc21lbV9saXN0ICpvbGQgPSB0cmFuc21lbV9saXN0OwoKCQkgICAgICB0cmFuc21lbV9s
aXN0ID0gdHJhbnNtZW1fbGlzdC0+bmV4dDsKCQkgICAgICBmcmVlIChvbGQpOwoJCSAgICB9CiMg
ZW5kaWYKCQl9CgkgICAgICBlbHNlCgkJewoJCSAgbWFsbG9jX2NvdW50ID0gMTsKCQkgIGZyZWVt
ZW1fc2l6ZSA9IElOSVRJQUxfQkxPQ0tfU0laRTsKCQkgIG5ld21lbSA9ICh0cmFuc21lbV9ibG9j
a190ICopIG1hbGxvYyAoZnJlZW1lbV9zaXplKTsKCQl9CgkgICAgICBpZiAoX19idWlsdGluX2V4
cGVjdCAobmV3bWVtID09IE5VTEwsIDApKQoJCXsKCQkgIGZyZWVtZW0gPSBOVUxMOwoJCSAgZnJl
ZW1lbV9zaXplID0gMDsKCQkgIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CgkJICBnb3RvIGNv
bnZlcnRlZDsKCQl9CgojIGlmZGVmIF9MSUJDCgkgICAgICAvKiBBZGQgdGhlIGJsb2NrIHRvIHRo
ZSBsaXN0IG9mIGJsb2NrcyB3ZSBoYXZlIHRvIGZyZWUKICAgICAgICAgICAgICAgICBhdCBzb21l
IHBvaW50LiAgKi8KCSAgICAgIG5ld21lbS0+bmV4dCA9IHRyYW5zbWVtX2xpc3Q7CgkgICAgICB0
cmFuc21lbV9saXN0ID0gbmV3bWVtOwoKCSAgICAgIGZyZWVtZW0gPSBuZXdtZW0tPmRhdGE7Cgkg
ICAgICBmcmVlbWVtX3NpemUgLT0gb2Zmc2V0b2YgKHN0cnVjdCB0cmFuc21lbV9saXN0LCBkYXRh
KTsKIyBlbHNlCgkgICAgICB0cmFuc21lbV9saXN0ID0gbmV3bWVtOwoJICAgICAgZnJlZW1lbSA9
IG5ld21lbTsKIyBlbmRpZgoKCSAgICAgIG91dGJ1ZiA9IGZyZWVtZW0gKyBzaXplb2YgKHNpemVf
dCk7CgkgICAgfQoKCSAgLyogV2UgaGF2ZSBub3cgaW4gb3VyIGJ1ZmZlciBhIGNvbnZlcnRlZCBz
dHJpbmcuICBQdXQgdGhpcwoJICAgICBpbnRvIHRoZSB0YWJsZSBvZiBjb252ZXJzaW9ucy4gICov
CgkgICooc2l6ZV90ICopIGZyZWVtZW0gPSBvdXRidWYgLSBmcmVlbWVtIC0gc2l6ZW9mIChzaXpl
X3QpOwoJICBkb21haW4tPmNvbnZfdGFiW2FjdF0gPSAoY2hhciAqKSBmcmVlbWVtOwoJICAvKiBT
aHJpbmsgZnJlZW1lbSwgYnV0IGtlZXAgaXQgYWxpZ25lZC4gICovCgkgIGZyZWVtZW1fc2l6ZSAt
PSBvdXRidWYgLSBmcmVlbWVtOwoJICBmcmVlbWVtID0gb3V0YnVmOwoJICBmcmVlbWVtICs9IGZy
ZWVtZW1fc2l6ZSAmIChhbGlnbm9mIChzaXplX3QpIC0gMSk7CgkgIGZyZWVtZW1fc2l6ZSA9IGZy
ZWVtZW1fc2l6ZSAmIH4gKGFsaWdub2YgKHNpemVfdCkgLSAxKTsKCgkgIF9fbGliY19sb2NrX3Vu
bG9jayAobG9jayk7Cgl9CgogICAgICAvKiBOb3cgZG9tYWluLT5jb252X3RhYlthY3RdIGNvbnRh
aW5zIHRoZSB0cmFuc2xhdGlvbiBvZiBhbGwKCSB0aGUgcGx1cmFsIHZhcmlhbnRzLiAgKi8KICAg
ICAgcmVzdWx0ID0gZG9tYWluLT5jb252X3RhYlthY3RdICsgc2l6ZW9mIChzaXplX3QpOwogICAg
ICByZXN1bHRsZW4gPSAqKHNpemVfdCAqKSBkb21haW4tPmNvbnZfdGFiW2FjdF07CiAgICB9Cgog
Y29udmVydGVkOgogIC8qIFRoZSByZXN1bHQgc3RyaW5nIGlzIGNvbnZlcnRlZC4gICovCgojZW5k
aWYgLyogX0xJQkMgfHwgSEFWRV9JQ09OViAqLwoKICAqbGVuZ3RocCA9IHJlc3VsdGxlbjsKICBy
ZXR1cm4gcmVzdWx0Owp9CgoKLyogTG9vayB1cCBhIHBsdXJhbCB2YXJpYW50LiAgKi8Kc3RhdGlj
IGNoYXIgKgppbnRlcm5hbF9mdW5jdGlvbgpwbHVyYWxfbG9va3VwIChkb21haW4sIG4sIHRyYW5z
bGF0aW9uLCB0cmFuc2xhdGlvbl9sZW4pCiAgICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9t
YWluOwogICAgIHVuc2lnbmVkIGxvbmcgaW50IG47CiAgICAgY29uc3QgY2hhciAqdHJhbnNsYXRp
b247CiAgICAgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbjsKewogIHN0cnVjdCBsb2FkZWRfZG9tYWlu
ICpkb21haW5kYXRhID0gKHN0cnVjdCBsb2FkZWRfZG9tYWluICopIGRvbWFpbi0+ZGF0YTsKICB1
bnNpZ25lZCBsb25nIGludCBpbmRleDsKICBjb25zdCBjaGFyICpwOwoKICBpbmRleCA9IHBsdXJh
bF9ldmFsIChkb21haW5kYXRhLT5wbHVyYWwsIG4pOwogIGlmIChpbmRleCA+PSBkb21haW5kYXRh
LT5ucGx1cmFscykKICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIEl0IG1lYW5zIHRo
ZSBwbHVyYWwgZXhwcmVzc2lvbiBhbmQgdGhlCiAgICAgICBnaXZlbiBtYXhpbXVtIHZhbHVlIGRv
IG5vdCBtYXRjaC4gICovCiAgICBpbmRleCA9IDA7CgogIC8qIFNraXAgSU5ERVggc3RyaW5ncyBh
dCBUUkFOU0xBVElPTi4gICovCiAgcCA9IHRyYW5zbGF0aW9uOwogIHdoaWxlIChpbmRleC0tID4g
MCkKICAgIHsKI2lmZGVmIF9MSUJDCiAgICAgIHAgPSBfX3Jhd21lbWNociAocCwgJ1wwJyk7CiNl
bHNlCiAgICAgIHAgPSBzdHJjaHIgKHAsICdcMCcpOwojZW5kaWYKICAgICAgLyogQW5kIHNraXAg
b3ZlciB0aGUgTlVMIGJ5dGUuICAqLwogICAgICBwKys7CgogICAgICBpZiAocCA+PSB0cmFuc2xh
dGlvbiArIHRyYW5zbGF0aW9uX2xlbikKCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIEl0
IG1lYW5zIHRoZSBwbHVyYWwgZXhwcmVzc2lvbgoJICAgZXZhbHVhdGVkIHRvIGEgdmFsdWUgbGFy
Z2VyIHRoYW4gdGhlIG51bWJlciBvZiB2YXJpYW50cwoJICAgYXZhaWxhYmxlIGZvciBNU0dJRDEu
ICAqLwoJcmV0dXJuIChjaGFyICopIHRyYW5zbGF0aW9uOwogICAgfQogIHJldHVybiAoY2hhciAq
KSBwOwp9CgoKLyogRnVuY3Rpb24gdG8gZXZhbHVhdGUgdGhlIHBsdXJhbCBleHByZXNzaW9uIGFu
ZCByZXR1cm4gYW4gaW5kZXggdmFsdWUuICAqLwpzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQKaW50
ZXJuYWxfZnVuY3Rpb24KcGx1cmFsX2V2YWwgKHBleHAsIG4pCiAgICAgc3RydWN0IGV4cHJlc3Np
b24gKnBleHA7CiAgICAgdW5zaWduZWQgbG9uZyBpbnQgbjsKewogIHN3aXRjaCAocGV4cC0+bmFy
Z3MpCiAgICB7CiAgICBjYXNlIDA6CiAgICAgIHN3aXRjaCAocGV4cC0+b3BlcmF0aW9uKQoJewoJ
Y2FzZSB2YXI6CgkgIHJldHVybiBuOwoJY2FzZSBudW06CgkgIHJldHVybiBwZXhwLT52YWwubnVt
OwoJZGVmYXVsdDoKCSAgYnJlYWs7Cgl9CiAgICAgIC8qIE5PVFJFQUNIRUQgKi8KICAgICAgYnJl
YWs7CiAgICBjYXNlIDE6CiAgICAgIHsKCS8qIHBleHAtPm9wZXJhdGlvbiBtdXN0IGJlIGxub3Qu
ICAqLwoJdW5zaWduZWQgbG9uZyBpbnQgYXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdz
WzBdLCBuKTsKCXJldHVybiAhIGFyZzsKICAgICAgfQogICAgY2FzZSAyOgogICAgICB7Cgl1bnNp
Z25lZCBsb25nIGludCBsZWZ0YXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzBdLCBu
KTsKCWlmIChwZXhwLT5vcGVyYXRpb24gPT0gbG9yKQoJICByZXR1cm4gbGVmdGFyZyB8fCBwbHVy
YWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMV0sIG4pOwoJZWxzZSBpZiAocGV4cC0+b3BlcmF0aW9u
ID09IGxhbmQpCgkgIHJldHVybiBsZWZ0YXJnICYmIHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJn
c1sxXSwgbik7CgllbHNlCgkgIHsKCSAgICB1bnNpZ25lZCBsb25nIGludCByaWdodGFyZyA9IHBs
dXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CgoJICAgIHN3aXRjaCAocGV4cC0+b3Bl
cmF0aW9uKQoJICAgICAgewoJICAgICAgY2FzZSBtdWx0OgoJCXJldHVybiBsZWZ0YXJnICogcmln
aHRhcmc7CgkgICAgICBjYXNlIGRpdmlkZToKCQlyZXR1cm4gbGVmdGFyZyAvIHJpZ2h0YXJnOwoJ
ICAgICAgY2FzZSBtb2R1bGU6CgkJcmV0dXJuIGxlZnRhcmcgJSByaWdodGFyZzsKCSAgICAgIGNh
c2UgcGx1czoKCQlyZXR1cm4gbGVmdGFyZyArIHJpZ2h0YXJnOwoJICAgICAgY2FzZSBtaW51czoK
CQlyZXR1cm4gbGVmdGFyZyAtIHJpZ2h0YXJnOwoJICAgICAgY2FzZSBsZXNzX3RoYW46CgkJcmV0
dXJuIGxlZnRhcmcgPCByaWdodGFyZzsKCSAgICAgIGNhc2UgZ3JlYXRlcl90aGFuOgoJCXJldHVy
biBsZWZ0YXJnID4gcmlnaHRhcmc7CgkgICAgICBjYXNlIGxlc3Nfb3JfZXF1YWw6CgkJcmV0dXJu
IGxlZnRhcmcgPD0gcmlnaHRhcmc7CgkgICAgICBjYXNlIGdyZWF0ZXJfb3JfZXF1YWw6CgkJcmV0
dXJuIGxlZnRhcmcgPj0gcmlnaHRhcmc7CgkgICAgICBjYXNlIGVxdWFsOgoJCXJldHVybiBsZWZ0
YXJnID09IHJpZ2h0YXJnOwoJICAgICAgY2FzZSBub3RfZXF1YWw6CgkJcmV0dXJuIGxlZnRhcmcg
IT0gcmlnaHRhcmc7CgkgICAgICBkZWZhdWx0OgoJCWJyZWFrOwoJICAgICAgfQoJICB9CgkvKiBO
T1RSRUFDSEVEICovCglicmVhazsKICAgICAgfQogICAgY2FzZSAzOgogICAgICB7CgkvKiBwZXhw
LT5vcGVyYXRpb24gbXVzdCBiZSBxbW9wLiAgKi8KCXVuc2lnbmVkIGxvbmcgaW50IGJvb2xhcmcg
PSBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMF0sIG4pOwoJcmV0dXJuIHBsdXJhbF9ldmFs
IChwZXhwLT52YWwuYXJnc1tib29sYXJnID8gMSA6IDJdLCBuKTsKICAgICAgfQogICAgfQogIC8q
IE5PVFJFQUNIRUQgKi8KICByZXR1cm4gMDsKfQoKCi8qIFJldHVybiBzdHJpbmcgcmVwcmVzZW50
YXRpb24gb2YgbG9jYWxlIENBVEVHT1JZLiAgKi8Kc3RhdGljIGNvbnN0IGNoYXIgKgppbnRlcm5h
bF9mdW5jdGlvbgpjYXRlZ29yeV90b19uYW1lIChjYXRlZ29yeSkKICAgICBpbnQgY2F0ZWdvcnk7
CnsKICBjb25zdCBjaGFyICpyZXR2YWw7CgogIHN3aXRjaCAoY2F0ZWdvcnkpCiAgewojaWZkZWYg
TENfQ09MTEFURQogIGNhc2UgTENfQ09MTEFURToKICAgIHJldHZhbCA9ICJMQ19DT0xMQVRFIjsK
ICAgIGJyZWFrOwojZW5kaWYKI2lmZGVmIExDX0NUWVBFCiAgY2FzZSBMQ19DVFlQRToKICAgIHJl
dHZhbCA9ICJMQ19DVFlQRSI7CiAgICBicmVhazsKI2VuZGlmCiNpZmRlZiBMQ19NT05FVEFSWQog
IGNhc2UgTENfTU9ORVRBUlk6CiAgICByZXR2YWwgPSAiTENfTU9ORVRBUlkiOwogICAgYnJlYWs7
CiNlbmRpZgojaWZkZWYgTENfTlVNRVJJQwogIGNhc2UgTENfTlVNRVJJQzoKICAgIHJldHZhbCA9
ICJMQ19OVU1FUklDIjsKICAgIGJyZWFrOwojZW5kaWYKI2lmZGVmIExDX1RJTUUKICBjYXNlIExD
X1RJTUU6CiAgICByZXR2YWwgPSAiTENfVElNRSI7CiAgICBicmVhazsKI2VuZGlmCiNpZmRlZiBM
Q19NRVNTQUdFUwogIGNhc2UgTENfTUVTU0FHRVM6CiAgICByZXR2YWwgPSAiTENfTUVTU0FHRVMi
OwogICAgYnJlYWs7CiNlbmRpZgojaWZkZWYgTENfUkVTUE9OU0UKICBjYXNlIExDX1JFU1BPTlNF
OgogICAgcmV0dmFsID0gIkxDX1JFU1BPTlNFIjsKICAgIGJyZWFrOwojZW5kaWYKI2lmZGVmIExD
X0FMTAogIGNhc2UgTENfQUxMOgogICAgLyogVGhpcyBtaWdodCBub3QgbWFrZSBzZW5zZSBidXQg
aXMgcGVyaGFwcyBiZXR0ZXIgdGhhbiBhbnkgb3RoZXIKICAgICAgIHZhbHVlLiAgKi8KICAgIHJl
dHZhbCA9ICJMQ19BTEwiOwogICAgYnJlYWs7CiNlbmRpZgogIGRlZmF1bHQ6CiAgICAvKiBJZiB5
b3UgaGF2ZSBhIGJldHRlciBpZGVhIGZvciBhIGRlZmF1bHQgdmFsdWUgbGV0IG1lIGtub3cuICAq
LwogICAgcmV0dmFsID0gIkxDX1hYWCI7CiAgfQoKICByZXR1cm4gcmV0dmFsOwp9CgovKiBHdWVz
cyB2YWx1ZSBvZiBjdXJyZW50IGxvY2FsZSBmcm9tIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2
YXJpYWJsZXMuICAqLwpzdGF0aWMgY29uc3QgY2hhciAqCmludGVybmFsX2Z1bmN0aW9uCmd1ZXNz
X2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKQogICAgIGludCBjYXRlZ29y
eTsKICAgICBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWU7CnsKICBjb25zdCBjaGFyICpsYW5ndWFn
ZTsKICBjb25zdCBjaGFyICpyZXR2YWw7CiAgKHZvaWQpIGNhdGVnb3J5OyAgLyogc2h1dCB1cCBj
b21waWxlciAqLwogICh2b2lkKSBjYXRlZ29yeW5hbWU7ICAvKiBkaXR0byAqLwogIAogIC8qIFRo
ZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlIGlzIHRoZSBgTEFOR1VBR0UnIGVudmlyb25tZW50CiAg
ICAgdmFyaWFibGUuICBCdXQgd2UgZG9uJ3QgdXNlIHRoZSB2YWx1ZSBpZiB0aGUgY3VycmVudGx5
IHNlbGVjdGVkCiAgICAgbG9jYWxlIGlzIHRoZSBDIGxvY2FsZS4gIFRoaXMgaXMgYSBHTlUgZXh0
ZW5zaW9uLiAgKi8KICBsYW5ndWFnZSA9IGdldGVudiAoIkxBTkdVQUdFIik7CiAgaWYgKGxhbmd1
YWdlICE9IE5VTEwgJiYgbGFuZ3VhZ2VbMF0gPT0gJ1wwJykKICAgIGxhbmd1YWdlID0gTlVMTDsK
CiAgLyogV2UgaGF2ZSB0byBwcm9jZWVkIHdpdGggdGhlIFBPU0lYIG1ldGhvZHMgb2YgbG9va2lu
ZyB0byBgTENfQUxMJywKICAgICBgTENfeHh4JywgYW5kIGBMQU5HJy4gIE9uIHNvbWUgc3lzdGVt
cyB0aGlzIGNhbiBiZSBkb25lIGJ5IHRoZQogICAgIGBzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2Vs
Zi4gICovCiNpZiBkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIEhBVkVfU0VUTE9DQUxFICYmIGRl
ZmluZWQgSEFWRV9MQ19NRVNTQUdFUyAmJiBkZWZpbmVkIEhBVkVfTE9DQUxFX05VTEwpCiAgcmV0
dmFsID0gc2V0bG9jYWxlIChjYXRlZ29yeSwgTlVMTCk7CiNlbHNlCiAgLyogU2V0dGluZyBvZiBM
Q19BTEwgb3ZlcndyaXRlcyBhbGwgb3RoZXIuICAqLwogIHJldHZhbCA9IGdldGVudiAoIkxDX0FM
TCIpOwogIGlmIChyZXR2YWwgPT0gTlVMTCB8fCByZXR2YWxbMF0gPT0gJ1wwJykKICAgIHsKICAg
ICAgLyogTmV4dCBjb21lcyB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBjYXRlZ29yeS4gICovCiAg
ICAgIHJldHZhbCA9IGdldGVudiAoY2F0ZWdvcnluYW1lKTsKICAgICAgaWYgKHJldHZhbCA9PSBO
VUxMIHx8IHJldHZhbFswXSA9PSAnXDAnKQoJewoJICAvKiBMYXN0IHBvc3NpYmlsaXR5IGlzIHRo
ZSBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLiAgKi8KCSAgcmV0dmFsID0gZ2V0ZW52ICgiTEFO
RyIpOwoJICBpZiAocmV0dmFsID09IE5VTEwgfHwgcmV0dmFsWzBdID09ICdcMCcpCgkgICAgLyog
V2UgdXNlIEMgYXMgdGhlIGRlZmF1bHQgZG9tYWluLiAgUE9TSVggc2F5cyB0aGlzIGlzCgkgICAg
ICAgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4gICovCgkgICAgcmV0dXJuICJDIjsKCX0KICAgIH0K
I2VuZGlmCgogIHJldHVybiBsYW5ndWFnZSAhPSBOVUxMICYmIHN0cmNtcCAocmV0dmFsLCAiQyIp
ICE9IDAgPyBsYW5ndWFnZSA6IHJldHZhbDsKfQoKLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICov
CgovKiBXZSBkb24ndCB3YW50IGxpYmludGwuYSB0byBkZXBlbmQgb24gYW55IG90aGVyIGxpYnJh
cnkuICBTbyB3ZQogICBhdm9pZCB0aGUgbm9uLXN0YW5kYXJkIGZ1bmN0aW9uIHN0cGNweS4gIElu
IEdOVSBDIExpYnJhcnkgdGhpcwogICBmdW5jdGlvbiBpcyBhdmFpbGFibGUsIHRob3VnaC4gIEFs
c28gYWxsb3cgdGhlIHN5bWJvbCBIQVZFX1NUUENQWQogICB0byBiZSBkZWZpbmVkLiAgKi8KI2lm
ICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKc3RhdGljIGNoYXIgKgpzdHBjcHkgKGRlc3QsIHNyYykK
ICAgICBjaGFyICpkZXN0OwogICAgIGNvbnN0IGNoYXIgKnNyYzsKewogIHdoaWxlICgoKmRlc3Qr
KyA9ICpzcmMrKykgIT0gJ1wwJykKICAgIC8qIERvIG5vdGhpbmcuICovIDsKICByZXR1cm4gZGVz
dCAtIDE7Cn0KI2VuZGlmCgojaWYgIV9MSUJDICYmICFIQVZFX01FTVBDUFkKc3RhdGljIHZvaWQg
KgptZW1wY3B5IChkZXN0LCBzcmMsIG4pCiAgICAgdm9pZCAqZGVzdDsKICAgICBjb25zdCB2b2lk
ICpzcmM7CiAgICAgc2l6ZV90IG47CnsKICByZXR1cm4gKHZvaWQgKikgKChjaGFyICopIG1lbWNw
eSAoZGVzdCwgc3JjLCBuKSArIG4pOwp9CiNlbmRpZgoKCiNpZmRlZiBfTElCQwovKiBJZiB3ZSB3
YW50IHRvIGZyZWUgYWxsIHJlc291cmNlcyB3ZSBoYXZlIHRvIGRvIHNvbWUgd29yayBhdAogICBw
cm9ncmFtJ3MgZW5kLiAgKi8Kc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCmZy
ZWVfbWVtICh2b2lkKQp7CiAgdm9pZCAqb2xkOwoKICB3aGlsZSAoX25sX2RvbWFpbl9iaW5kaW5n
cyAhPSBOVUxMKQogICAgewogICAgICBzdHJ1Y3QgYmluZGluZyAqb2xkcCA9IF9ubF9kb21haW5f
YmluZGluZ3M7CiAgICAgIF9ubF9kb21haW5fYmluZGluZ3MgPSBfbmxfZG9tYWluX2JpbmRpbmdz
LT5uZXh0OwogICAgICBpZiAob2xkcC0+ZGlybmFtZSAhPSBfbmxfZGVmYXVsdF9kaXJuYW1lKQoJ
LyogWWVzLCB0aGlzIGlzIGEgcG9pbnRlciBjb21wYXJpc29uLiAgKi8KCWZyZWUgKG9sZHAtPmRp
cm5hbWUpOwogICAgICBmcmVlIChvbGRwLT5jb2Rlc2V0KTsKICAgICAgZnJlZSAob2xkcCk7CiAg
ICB9CgogIGlmIChfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiAhPSBfbmxfZGVmYXVsdF9kZWZh
dWx0X2RvbWFpbikKICAgIC8qIFllcywgYWdhaW4gYSBwb2ludGVyIGNvbXBhcmlzb24uICAqLwog
ICAgZnJlZSAoKGNoYXIgKikgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4pOwoKICAvKiBSZW1v
dmUgdGhlIHNlYXJjaCB0cmVlIHdpdGggdGhlIGtub3duIHRyYW5zbGF0aW9ucy4gICovCiAgX190
ZGVzdHJveSAocm9vdCwgZnJlZSk7CiAgcm9vdCA9IE5VTEw7CgogIHdoaWxlICh0cmFuc21lbV9s
aXN0ICE9IE5VTEwpCiAgICB7CiAgICAgIG9sZCA9IHRyYW5zbWVtX2xpc3Q7CiAgICAgIHRyYW5z
bWVtX2xpc3QgPSB0cmFuc21lbV9saXN0LT5uZXh0OwogICAgICBmcmVlIChvbGQpOwogICAgfQp9
Cgp0ZXh0X3NldF9lbGVtZW50IChfX2xpYmNfc3ViZnJlZXJlcywgZnJlZV9tZW0pOwojZW5kaWYK


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2003-05-16 22:46 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-05-16 22:46 c/10824: ICE in gcc/gcc/intl/dcigettext.c on FreeBSD5 arno
  -- strict thread matches above, loose matches on Subject: below --
2003-05-16 22:23 giovannibajo
2003-05-16 21:06 arno
2003-05-16 20:38 bangerth
2003-05-16 17:46 arno

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).