From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32608 invoked by alias); 19 Dec 2008 07:23:00 -0000 Received: (qmail 32596 invoked by uid 22791); 19 Dec 2008 07:22:50 -0000 X-SWARE-Spam-Status: No, hits=-0.2 required=5.0 tests=AWL,BAYES_50,J_CHICKENPOX_93,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from ti-out-0910.google.com (HELO ti-out-0910.google.com) (209.85.142.191) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 19 Dec 2008 07:21:54 +0000 Received: by ti-out-0910.google.com with SMTP id d10so580664tib.12 for ; Thu, 18 Dec 2008 23:21:50 -0800 (PST) Received: by 10.110.53.19 with SMTP id b19mr4217778tia.37.1229671310155; Thu, 18 Dec 2008 23:21:50 -0800 (PST) Received: by 10.110.68.20 with HTTP; Thu, 18 Dec 2008 23:21:50 -0800 (PST) Message-ID: Date: Fri, 19 Dec 2008 07:23:00 -0000 From: teawater To: "gdb-patches@sourceware.org" Subject: Re: [RFA] Resubmit process record and replay, 5/10 In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_38585_21044580.1229671310125" References: X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-12/txt/msg00338.txt.bz2 ------=_Part_38585_21044580.1229671310125 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 21353 This is the new version patch. On Sun, Nov 16, 2008 at 16:21, teawater wrote: > This patch add process record and replay for Linux support file. The > main function is "record_linux_system_call" will be called by > architecture record function. It is used to record the system call > execute log. > > 2008-11-16 Hui Zhu > > Process record and replay target. > > * Makefile.in (linux-record.c): New file. > * configure.tgt (linux-record.c): New file. > * linux-record.c, linux-record.h: New file. > > Makefile.in | 4 > b/linux-record.c | 2501 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > b/linux-record.h | 171 +++ > configure.tgt | 6 > 4 files changed, 2678 insertions(+), 4 deletions(-) > > Following is the diff with the previous patch: > @@ -1,6 +1,6 @@ > --- a/configure.tgt > +++ b/configure.tgt > -@@ -185,7 +185,8 @@ i[34567]86-*-solaris*) > +@@ -185,7 +185,8 @@ > i[34567]86-*-linux*) > # Target: Intel 386 running GNU/Linux > gdb_target_obs="i386-tdep.o i386-linux-tdep.o glibc-tdep.o i387-tdep.o \ > @@ -10,7 +10,7 @@ > build_gdbserver=yes > ;; > i[34567]86-*-gnu*) > -@@ -507,7 +508,8 @@ x86_64-*-linux*) > +@@ -508,7 +509,8 @@ > # Target: GNU/Linux x86-64 > gdb_target_obs="amd64-tdep.o amd64-linux-tdep.o i386-tdep.o \ > i387-tdep.o i386-linux-tdep.o glibc-tdep.o \ > @@ -20,29 +20,9 @@ > build_gdbserver=yes > ;; > x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu) > ---- a/Makefile.in > -+++ b/Makefile.in > -@@ -515,7 +515,7 @@ ALL_TARGET_OBS = \ > - xcoffread.o \ > - prologue-value.o \ > - symfile-mem.o \ > -- corelow.o > -+ corelow.o linux-record.o > - > - # Host-dependent makefile fragment comes in here. > - @host_makefile_frag@ > -@@ -1297,7 +1297,7 @@ ALLDEPFILES = \ > - inf-ptrace.c inf-ttrace.c \ > - irix5-nat.c \ > - libunwind-frame.c \ > -- linux-fork.c \ > -+ linux-fork.c linux-record.c \ > - m68hc11-tdep.c \ > - m32r-tdep.c \ > - m32r-linux-nat.c m32r-linux-tdep.c \ > ---- a/linux-record.c > +--- a//dev/null > +++ b/linux-record.c > -@@ -0,0 +1,2465 @@ > +@@ -0,0 +1,2501 @@ > +/* Process record and replay target code for GNU/Linux. > + > + Copyright (C) 2008 Free Software Foundation, Inc. > @@ -51,7 +31,7 @@ > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > -+ the Free Software Foundation; either version 2 of the License, or > ++ the Free Software Foundation; either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > @@ -148,7 +128,7 @@ > + target_terminal_ours (); > + q = > + yquery (_ > -+ ("The next instruction is syscall exit. It will make the > program exit. Do you want to stop the program.")); > ++ ("The next instruction is syscall exit. It will make the > program exit. Do you want to stop the program?")); > + target_terminal_inferior (); > + if (q) > + { > @@ -453,13 +433,13 @@ > + else if (tmpu32 == tdep->ioctl_TIOCSERGSTRUCT) > + { > + printf_unfiltered (_ > -+ ("Record: record and reverse target doesn't support ioctl > request TIOCSERGSTRUCT\n")); > ++ ("Process record and replay target doesn't support ioctl > request TIOCSERGSTRUCT\n")); > + return (1); > + } > + else > + { > + printf_unfiltered (_ > -+ ("Record: record and reverse target doesn't support ioctl > request 0x%08x.\n"), > ++ ("Process record and replay target doesn't support ioctl > request 0x%08x.\n"), > + tmpu32); > + return (1); > + } > @@ -616,22 +596,13 @@ > + /* old_select */ > + case 82: > + { > -+ /* > -+ struct sel_arg_struct { > -+ unsigned long n; > -+ fd_set *inp; > -+ fd_set *outp; > -+ fd_set *exp; > -+ struct timeval *tvp; > -+ }; > -+ */ > + struct sel_arg_struct > + { > -+ uint32_t n; > -+ uint32_t inp; > -+ uint32_t outp; > -+ uint32_t exp; > -+ uint32_t tvp; > ++ CORE_ADDR n; > ++ CORE_ADDR inp; > ++ CORE_ADDR outp; > ++ CORE_ADDR exp; > ++ CORE_ADDR tvp; > + } sel; > + > + regcache_raw_read (record_regcache, tdep->arg1, > @@ -640,9 +611,12 @@ > + { > + if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel))) > + { > -+ fprintf_unfiltered (gdb_stdlog, > -+ "Record: read memory addr = 0x%s len = %d error.\n", > -+ paddr_nz (tmpu32), sizeof (sel)); > ++ if (record_debug) > ++ { > ++ fprintf_unfiltered (gdb_stdlog, > ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", > ++ paddr_nz (tmpu32), sizeof (sel)); > ++ } > + return (-1); > + } > + if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set)) > @@ -696,7 +670,7 @@ > + target_terminal_ours (); > + q = > + yquery (_ > -+ ("The next instruction is syscall reboot. It will restart the > computer. Do you want to stop the program.")); > ++ ("The next instruction is syscall reboot. It will restart the > computer. Do you want to stop the program?")); > + target_terminal_inferior (); > + if (q) > + { > @@ -730,7 +704,7 @@ > + target_terminal_ours (); > + q = > + yquery (_ > -+ ("The next instruction is syscall munmap. It will free the > memory addr = 0x%s len = %d. It will make record target get error. > Do you want to stop the program."), > ++ ("The next instruction is syscall munmap. It will free the > memory addr = 0x%s len = %d. It will make record target get error. > Do you want to stop the program?"), > + paddr_nz (tmpu32), len); > + target_terminal_inferior (); > + if (q) > @@ -792,9 +766,12 @@ > + { > + if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) > + { > -+ fprintf_unfiltered (gdb_stdlog, > -+ "Record: read memory addr = 0x%s len = %d error.\n", > -+ paddr_nz (tmpu32), sizeof (a)); > ++ if (record_debug) > ++ { > ++ fprintf_unfiltered (gdb_stdlog, > ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", > ++ paddr_nz (tmpu32), sizeof (a)); > ++ } > + return (-1); > + } > + if (record_arch_list_add_mem (a[1], tdep->size_sockaddr)) > @@ -818,9 +795,12 @@ > + { > + if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) > + { > -+ fprintf_unfiltered (gdb_stdlog, > -+ "Record: read memory addr = 0x%s len = %d error.\n", > -+ paddr_nz (tmpu32), sizeof (a)); > ++ if (record_debug) > ++ { > ++ fprintf_unfiltered (gdb_stdlog, > ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", > ++ paddr_nz (tmpu32), sizeof (a)); > ++ } > + return (-1); > + } > + if (record_arch_list_add_mem (a[3], tdep->size_int)) > @@ -842,9 +822,12 @@ > + { > + if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) > + { > -+ fprintf_unfiltered (gdb_stdlog, > -+ "Record: read memory addr = 0x%s len = %d error.\n", > -+ paddr_nz (tmpu32), sizeof (a)); > ++ if (record_debug) > ++ { > ++ fprintf_unfiltered (gdb_stdlog, > ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", > ++ paddr_nz (tmpu32), sizeof (a)); > ++ } > + return (-1); > + } > + if (a[2]) > @@ -852,9 +835,12 @@ > + if (target_read_memory > + (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) > + { > -+ fprintf_unfiltered (gdb_stdlog, > -+ "Record: read memory addr = 0x%s len = %d error.\n", > -+ paddr_nz (a[2]), sizeof (a[2])); > ++ if (record_debug) > ++ { > ++ fprintf_unfiltered (gdb_stdlog, > ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", > ++ paddr_nz (a[2]), sizeof (a[2])); > ++ } > + return (-1); > + } > + if (record_arch_list_add_mem (a[1], a[2])) > @@ -874,9 +860,12 @@ > + { > + if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) > + { > -+ fprintf_unfiltered (gdb_stdlog, > -+ "Record: read memory addr = 0x%s len = %d error.\n", > -+ paddr_nz (tmpu32), sizeof (a)); > ++ if (record_debug) > ++ { > ++ fprintf_unfiltered (gdb_stdlog, > ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", > ++ paddr_nz (tmpu32), sizeof (a)); > ++ } > + return (-1); > + } > + if (a[2]) > @@ -884,9 +873,13 @@ > + if (target_read_memory > + (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) > + { > -+ fprintf_unfiltered (gdb_stdlog, > -+ "Record: read memory addr = 0x%s len = %d error.\n", > -+ paddr_nz (a[2]), sizeof (a[2])); > ++ if (record_debug) > ++ { > ++ fprintf_unfiltered (gdb_stdlog, > ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", > ++ paddr_nz (a[2]), > ++ sizeof (a[2])); > ++ } > + return (-1); > + } > + if (record_arch_list_add_mem (a[1], a[2])) > @@ -919,9 +912,12 @@ > + { > + if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) > + { > -+ fprintf_unfiltered (gdb_stdlog, > -+ "Record: read memory addr = 0x%s len = %d error.\n", > -+ paddr_nz (tmpu32), sizeof (a)); > ++ if (record_debug) > ++ { > ++ fprintf_unfiltered (gdb_stdlog, > ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", > ++ paddr_nz (tmpu32), sizeof (a)); > ++ } > + return (-1); > + } > + if (a[4]) > @@ -929,9 +925,12 @@ > + if (target_read_memory > + (a[4], (gdb_byte *) & av, sizeof (av))) > + { > -+ fprintf_unfiltered (gdb_stdlog, > -+ "Record: read memory addr = 0x%s len = %d error.\n", > -+ paddr_nz (a[4]), sizeof (av)); > ++ if (record_debug) > ++ { > ++ fprintf_unfiltered (gdb_stdlog, > ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", > ++ paddr_nz (a[4]), sizeof (av)); > ++ } > + return (-1); > + } > + if (record_arch_list_add_mem (a[3], av)) > @@ -973,9 +972,12 @@ > + { > + if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) > + { > -+ fprintf_unfiltered (gdb_stdlog, > -+ "Record: read memory addr = 0x%s len = %d error.\n", > -+ paddr_nz (tmpu32), sizeof (a)); > ++ if (record_debug) > ++ { > ++ fprintf_unfiltered (gdb_stdlog, > ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", > ++ paddr_nz (tmpu32), sizeof (a)); > ++ } > + return (-1); > + } > + if (record_arch_list_add_mem (a[1], tdep->size_msghdr)) > @@ -987,9 +989,13 @@ > + if (target_read_memory > + (a[1], (gdb_byte *) & rec, sizeof (rec))) > + { > -+ fprintf_unfiltered (gdb_stdlog, > -+ "Record: read memory addr = 0x%s len = %d error.\n", > -+ paddr_nz (a[1]), sizeof (rec)); > ++ if (record_debug) > ++ { > ++ fprintf_unfiltered (gdb_stdlog, > ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", > ++ paddr_nz (a[1]), > ++ sizeof (rec)); > ++ } > + return (-1); > + } > + if (record_arch_list_add_mem > @@ -1010,10 +1016,14 @@ > + (rec.msg_iov, (gdb_byte *) & iov, > + sizeof (iov))) > + { > -+ fprintf_unfiltered (gdb_stdlog, > -+ "Record: read memory addr = 0x%s len = %d error.\n", > -+ paddr_nz (rec.msg_iov), > -+ sizeof (iov)); > ++ if (record_debug) > ++ { > ++ fprintf_unfiltered (gdb_stdlog, > ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", > ++ paddr_nz (rec. > ++ msg_iov), > ++ sizeof (iov)); > ++ } > + return (-1); > + } > + if (record_arch_list_add_mem > @@ -1030,7 +1040,7 @@ > + break; > + default: > + printf_unfiltered (_ > -+ ("Record: record and reverse function doesn't support > socketcall call 0x%08x\n"), > ++ ("Process record and replay target doesn't support > socketcall call 0x%08x\n"), > + tmpu32); > + return (-1); > + break; > @@ -1378,10 +1388,13 @@ > + if (target_read_memory > + (vec, (gdb_byte *) & iov, sizeof (struct record_iovec))) > + { > -+ fprintf_unfiltered (gdb_stdlog, > -+ "Record: read memory addr = 0x%s len = %d error.\n", > -+ paddr_nz (vec), > -+ sizeof (struct record_iovec)); > ++ if (record_debug) > ++ { > ++ fprintf_unfiltered (gdb_stdlog, > ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", > ++ paddr_nz (vec), > ++ sizeof (struct record_iovec)); > ++ } > + return (-1); > + } > + if (record_arch_list_add_mem (iov.iov_base, iov.iov_len)) > @@ -2016,9 +2029,12 @@ > + if (target_read_memory > + (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int)) > + { > -+ fprintf_unfiltered (gdb_stdlog, > -+ "Record: read memory addr = 0x%s len = %d error.\n", > -+ paddr_nz (tmpu32), nr * tdep->size_int); > ++ if (record_debug) > ++ { > ++ fprintf_unfiltered (gdb_stdlog, > ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", > ++ paddr_nz (tmpu32), nr * tdep->size_int); > ++ } > + return (-1); > + } > + for (i = 0; i < nr; i++) > @@ -2053,7 +2069,7 @@ > + target_terminal_ours (); > + q = > + yquery (_ > -+ ("The next instruction is syscall exit_group. It will make the > program exit. Do you want to stop the program.")); > ++ ("The next instruction is syscall exit_group. It will make the > program exit. Do you want to stop the program?")); > + target_terminal_inferior (); > + if (q) > + { > @@ -2500,7 +2516,7 @@ > + > + default: > + printf_unfiltered (_ > -+ ("Record: record and reverse function doesn't support syscall > number 0x%08x\n"), > ++ ("Process record and replay target doesn't support syscall > number 0x%08x\n"), > + tmpu32); > + return (-1); > + break; > @@ -2508,7 +2524,7 @@ > + > + return (0); > +} > ---- a/linux-record.h > +--- a//dev/null > +++ b/linux-record.h > @@ -0,0 +1,171 @@ > +/* Process record and replay target code for GNU/Linux. > @@ -2519,7 +2535,7 @@ > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > -+ the Free Software Foundation; either version 2 of the License, or > ++ the Free Software Foundation; either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > @@ -2535,7 +2551,7 @@ > + > +typedef struct linux_record_tdep_s > +{ > -+ /* The size of the type that will be use in system call. */ > ++ /* The size of the type that will be use in system call. */ > + int size__old_kernel_stat; > + int size_tms; > + int size_loff_t; > @@ -2604,7 +2620,7 @@ > + int size_serial_icounter_struct; > + int size_hayes_esp_config; > + > -+ /* the values of the second argument of system call "sys_ioctl". */ > ++ /* the values of the second argument of system call "sys_ioctl". */ > + int ioctl_TCGETS; > + int ioctl_TCSETS; > + int ioctl_TCSETSW; > @@ -2671,7 +2687,7 @@ > + int ioctl_TIOCSHAYESESP; > + int ioctl_FIOQSIZE; > + > -+ /* The number of the registers that use to be the arguments of > system call. */ > ++ /* The number of the registers that use to be the arguments of > system call. */ > + int arg1; > + int arg2; > + int arg3; > @@ -2682,3 +2698,23 @@ > +extern int record_linux_system_call (int num, linux_record_tdep_t * tdep); > + > +#endif /* _LINUX_RECORD_H_ */ > +--- a/Makefile.in > ++++ b/Makefile.in > +@@ -515,7 +515,7 @@ > + xcoffread.o \ > + prologue-value.o \ > + symfile-mem.o \ > +- corelow.o > ++ corelow.o linux-record.o > + > + # Host-dependent makefile fragment comes in here. > + @host_makefile_frag@ > +@@ -1297,7 +1297,7 @@ > + inf-ptrace.c inf-ttrace.c \ > + irix5-nat.c \ > + libunwind-frame.c \ > +- linux-fork.c \ > ++ linux-fork.c linux-record.c \ > ------=_Part_38585_21044580.1229671310125 Content-Type: text/plain; name=5-linux-record.txt Content-Transfer-Encoding: base64 X-Attachment-Id: f_fowisg3y1 Content-Disposition: attachment; filename=5-linux-record.txt Content-length: 90529 LS0tIGEvY29uZmlndXJlLnRndAorKysgYi9jb25maWd1cmUudGd0CkBAIC0x OTAsNyArMTkwLDggQEAKIGlbMzQ1NjddODYtKi1saW51eCopCiAJIyBUYXJn ZXQ6IEludGVsIDM4NiBydW5uaW5nIEdOVS9MaW51eAogCWdkYl90YXJnZXRf b2JzPSJpMzg2LXRkZXAubyBpMzg2LWxpbnV4LXRkZXAubyBnbGliYy10ZGVw Lm8gaTM4Ny10ZGVwLm8gXAotCQkJc29saWIubyBzb2xpYi1zdnI0Lm8gc3lt ZmlsZS1tZW0ubyBjb3JlbG93Lm8iCisJCQlzb2xpYi5vIHNvbGliLXN2cjQu byBzeW1maWxlLW1lbS5vIGNvcmVsb3cubyBcCisJCQlsaW51eC1yZWNvcmQu byIKIAlidWlsZF9nZGJzZXJ2ZXI9eWVzCiAJOzsKIGlbMzQ1NjddODYtKi1n bnUqKQpAQCAtNTEzLDcgKzUxNCw4IEBACiAJIyBUYXJnZXQ6IEdOVS9MaW51 eCB4ODYtNjQKIAlnZGJfdGFyZ2V0X29icz0iYW1kNjQtdGRlcC5vIGFtZDY0 LWxpbnV4LXRkZXAubyBpMzg2LXRkZXAubyBcCiAJCQlpMzg3LXRkZXAubyBp Mzg2LWxpbnV4LXRkZXAubyBnbGliYy10ZGVwLm8gXAotCQkJc29saWIubyBz b2xpYi1zdnI0Lm8gY29yZWxvdy5vIHN5bWZpbGUtbWVtLm8iCisJCQlzb2xp Yi5vIHNvbGliLXN2cjQubyBjb3JlbG93Lm8gc3ltZmlsZS1tZW0ubyBcCisJ CQlsaW51eC1yZWNvcmQubyIKIAlidWlsZF9nZGJzZXJ2ZXI9eWVzCiAJOzsK IHg4Nl82NC0qLWZyZWVic2QqIHwgeDg2XzY0LSota2ZyZWVic2QqLWdudSkK LS0tIGEvL2Rldi9udWxsCisrKyBiL2xpbnV4LXJlY29yZC5jCkBAIC0wLDAg KzEsMjUwNyBAQAorLyogUHJvY2VzcyByZWNvcmQgYW5kIHJlcGxheSB0YXJn ZXQgY29kZSBmb3IgR05VL0xpbnV4LgorCisgICBDb3B5cmlnaHQgKEMpIDIw MDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJ0YXJnZXQu aCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorI2luY2x1ZGUgInJlY29yZC5o IgorI2luY2x1ZGUgImxpbnV4LXJlY29yZC5oIgorI2luY2x1ZGUgPHN0ZGlu dC5oPgorCisvKiBUaGVzZSBtYWNyb3MgYXJlIHRoZSB2YWx1ZXMgb2YgdGhl IGZpcnN0IGFyZ3VtZW50IG9mIHN5c3RlbSBjYWxsCisgICAic3lzX3B0cmFj ZSIuIFRoZSB2YWx1ZXMgb2YgdGhlc2UgbWFjcm9zIGFyZSBnb3R0ZW4gZnJv bSBMaW51eCBLZXJuZWwKKyAgIHNvdXJjZS4gICovCisKKyNkZWZpbmUgUkVD T1JEX1BUUkFDRV9QRUVLVEVYVAkxCisjZGVmaW5lIFJFQ09SRF9QVFJBQ0Vf UEVFS0RBVEEJMgorI2RlZmluZSBSRUNPUkRfUFRSQUNFX1BFRUtVU1IJMwor CisvKiBUaGVzZSBtYWNyb3MgYXJlIHRoZSB2YWx1ZXMgb2YgdGhlIGZpcnN0 IGFyZ3VtZW50IG9mIHN5c3RlbSBjYWxsCisgICAic3lzX3NvY2tldGNhbGwi LiBUaGUgdmFsdWVzIG9mIHRoZXNlIG1hY3JvcyBhcmUgZ290dGVuIGZyb20g TGludXggS2VybmVsCisgICBzb3VyY2UuICAqLworCisjZGVmaW5lIFJFQ09S RF9TWVNfU09DS0VUCTEKKyNkZWZpbmUgUkVDT1JEX1NZU19CSU5ECQkyCisj ZGVmaW5lIFJFQ09SRF9TWVNfQ09OTkVDVAkzCisjZGVmaW5lIFJFQ09SRF9T WVNfTElTVEVOCTQKKyNkZWZpbmUgUkVDT1JEX1NZU19BQ0NFUFQJNQorI2Rl ZmluZSBSRUNPUkRfU1lTX0dFVFNPQ0tOQU1FCTYKKyNkZWZpbmUgUkVDT1JE X1NZU19HRVRQRUVSTkFNRQk3CisjZGVmaW5lIFJFQ09SRF9TWVNfU09DS0VU UEFJUgk4CisjZGVmaW5lIFJFQ09SRF9TWVNfU0VORAkJOQorI2RlZmluZSBS RUNPUkRfU1lTX1JFQ1YJCTEwCisjZGVmaW5lIFJFQ09SRF9TWVNfU0VORFRP CTExCisjZGVmaW5lIFJFQ09SRF9TWVNfUkVDVkZST00JMTIKKyNkZWZpbmUg UkVDT1JEX1NZU19TSFVURE9XTgkxMworI2RlZmluZSBSRUNPUkRfU1lTX1NF VFNPQ0tPUFQJMTQKKyNkZWZpbmUgUkVDT1JEX1NZU19HRVRTT0NLT1BUCTE1 CisjZGVmaW5lIFJFQ09SRF9TWVNfU0VORE1TRwkxNgorI2RlZmluZSBSRUNP UkRfU1lTX1JFQ1ZNU0cJMTcKKworLyogVGhlc2UgbWFjcm9zIGFyZSB0aGUg dmFsdWVzIG9mIHRoZSBmaXJzdCBhcmd1bWVudCBvZiBzeXN0ZW0gY2FsbAor ICAgInN5c19pcGMiLiBUaGUgdmFsdWVzIG9mIHRoZXNlIG1hY3JvcyBhcmUg Z290dGVuIGZyb20gTGludXggS2VybmVsIHNvdXJjZS4KKyAqLworCisjZGVm aW5lIFJFQ09SRF9TRU1PUAkJMQorI2RlZmluZSBSRUNPUkRfU0VNR0VUCQky CisjZGVmaW5lIFJFQ09SRF9TRU1DVEwJCTMKKyNkZWZpbmUgUkVDT1JEX1NF TVRJTUVET1AJNAorI2RlZmluZSBSRUNPUkRfTVNHU05ECQkxMQorI2RlZmlu ZSBSRUNPUkRfTVNHUkNWCQkxMgorI2RlZmluZSBSRUNPUkRfTVNHR0VUCQkx MworI2RlZmluZSBSRUNPUkRfTVNHQ1RMCQkxNAorI2RlZmluZSBSRUNPUkRf U0hNQVQJCTIxCisjZGVmaW5lIFJFQ09SRF9TSE1EVAkJMjIKKyNkZWZpbmUg UkVDT1JEX1NITUdFVAkJMjMKKyNkZWZpbmUgUkVDT1JEX1NITUNUTAkJMjQK KworLyogVGhlc2UgbWFjcm9zIGFyZSB0aGUgdmFsdWVzIG9mIHRoZSBmaXJz dCBhcmd1bWVudCBvZiBzeXN0ZW0gY2FsbAorICAgInN5c19xdW90YWN0bCIu IFRoZSB2YWx1ZXMgb2YgdGhlc2UgbWFjcm9zIGFyZSBnb3R0ZW4gZnJvbSBM aW51eCBLZXJuZWwKKyAgIHNvdXJjZS4gICovCisKKyNkZWZpbmUgUkVDT1JE X1FfR0VURk1UCQkweDgwMDAwNAorI2RlZmluZSBSRUNPUkRfUV9HRVRJTkZP CTB4ODAwMDA1CisjZGVmaW5lIFJFQ09SRF9RX0dFVFFVT1RBCTB4ODAwMDA3 CisjZGVmaW5lIFJFQ09SRF9RX1hHRVRRU1RBVAkoKCc1Jzw8OCkrKDUpKQor I2RlZmluZSBSRUNPUkRfUV9YR0VUUVVPVEEJKCgnMyc8PDgpKygzKSkKKwor LyogV2hlbiB0aGUgYXJjaGl0ZWN0dXJlIHByb2Nlc3MgcmVjb3JkIGdldCBh IExpbnV4IHN5c2NhbGwgaW5zdHJ1Y3Rpb24sIGl0CisgICB3aWxsIGdldCBh IExpbnV4IHN5c2NhbGwgbnVtYmVyIG9mIHRoaXMgYXJjaGl0ZWN0dXJlIGFu ZCBjb252ZXJ0IGl0IHRvIHRoZQorICAgTGludXggc3lzY2FsbCBudW1iZXIg Im51bSIgd2hpY2ggaXMgaW50ZXJuYWwgdG8gR0RCLgorICAgTW9zdCBMaW51 eCBzeXNjYWxscyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyBpbiBMaW51eCB3b3Vs ZCBiZSBzaW1pbGFyIGFuZAorICAgbW9zdGx5IGRpZmZlciBieSBzaXplcyBv ZiB0eXBlcyBhbmQgc3RydWN0dXJlcy4gIFRoaXMgc2l6ZXMgYXJlIHB1dAor ICAgdG8gInRkZXAiLgorICAgUmVjb3JkIHRoZSB2YWx1ZXMgb2YgdGhlIHJl Z2lzdGVycyBhbmQgbWVtb3J5IHRoYXQgd2lsbCBiZSBjaGFuZ2VkIGluCisg ICBjdXJyZW50IHN5c3RlbSBjYWxsLgorICAgUmV0dXJuIC0xIGlmIHNvbWV0 aGluZyB3cm9uZy4gICovCisKK2ludAorcmVjb3JkX2xpbnV4X3N5c3RlbV9j YWxsIChpbnQgbnVtLCBsaW51eF9yZWNvcmRfdGRlcF90ICogdGRlcCkKK3sK KyAgdWludDMyX3QgdG1wdTMyOworCisgIHN3aXRjaCAobnVtKQorICAgIHsK KyAgICAgIC8qIHN5c19yZXN0YXJ0X3N5c2NhbGwgKi8KKyAgICBjYXNlIDA6 CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2V4aXQgKi8KKyAgICBj YXNlIDE6CisgICAgICB7CisJaW50IHE7CisJdGFyZ2V0X3Rlcm1pbmFsX291 cnMgKCk7CisJcSA9CisJICB5cXVlcnkgKF8KKwkJICAoIlRoZSBuZXh0IGlu c3RydWN0aW9uIGlzIHN5c2NhbGwgZXhpdC4gIEl0IHdpbGwgbWFrZSB0aGUg cHJvZ3JhbSBleGl0LiAgRG8geW91IHdhbnQgdG8gc3RvcCB0aGUgcHJvZ3Jh bT8iKSk7CisJdGFyZ2V0X3Rlcm1pbmFsX2luZmVyaW9yICgpOworCWlmIChx KQorCSAgeworCSAgICByZXR1cm4gKDEpOworCSAgfQorICAgICAgfQorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19mb3JrICovCisgICAgY2FzZSAy OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19yZWFkICovCisgICAg Y2FzZSAzOgorICAgICAgeworCXVpbnQzMl90IGFkZHIsIGNvdW50OworCXJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIs IChnZGJfYnl0ZSAqKSAmIGFkZHIpOworCXJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIGNv dW50KTsKKwlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhZGRyLCBj b3VudCkpCisJICB7CisJICAgIHJldHVybiAoLTEpOworCSAgfQorICAgICAg fQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c193cml0ZSAqLworICAg IGNhc2UgNDoKKyAgICAgIC8qIHN5c19vcGVuICovCisgICAgY2FzZSA1Ogor ICAgICAgLyogc3lzX2Nsb3NlICovCisgICAgY2FzZSA2OgorICAgICAgLyog c3lzX3dhaXRwaWQgKi8KKyAgICBjYXNlIDc6CisgICAgICAvKiBzeXNfY3Jl YXQgKi8KKyAgICBjYXNlIDg6CisgICAgICAvKiBzeXNfbGluayAqLworICAg IGNhc2UgOToKKyAgICAgIC8qIHN5c191bmxpbmsgKi8KKyAgICBjYXNlIDEw OgorICAgICAgLyogc3lzX2V4ZWN2ZSAqLworICAgIGNhc2UgMTE6CisgICAg ICAvKiBzeXNfY2hkaXIgKi8KKyAgICBjYXNlIDEyOgorICAgICAgLyogc3lz X3RpbWUgKi8KKyAgICBjYXNlIDEzOgorICAgICAgLyogc3lzX21rbm9kICov CisgICAgY2FzZSAxNDoKKyAgICAgIC8qIHN5c19jaG1vZCAqLworICAgIGNh c2UgMTU6CisgICAgICAvKiBzeXNfbGNob3duMTYgKi8KKyAgICBjYXNlIDE2 OgorICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8KKyAgICBjYXNlIDE3Ogor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zdGF0ICovCisgICAgY2Fz ZSAxODoKKyAgICAgIC8qIHN5c19mc3RhdCAqLworICAgIGNhc2UgMjg6Cisg ICAgICAvKiBzeXNfbHN0YXQgKi8KKyAgICBjYXNlIDg0OgorICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9fb2xkX2tlcm5l bF9zdGF0KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX2xzZWVrICovCisgICAgY2FzZSAxOToKKyAg ICAgIC8qIHN5c19nZXRwaWQgKi8KKyAgICBjYXNlIDIwOgorICAgICAgLyog c3lzX21vdW50ICovCisgICAgY2FzZSAyMToKKyAgICAgIC8qIHN5c19vbGR1 bW91bnQgKi8KKyAgICBjYXNlIDIyOgorICAgICAgLyogc3lzX3NldHVpZDE2 ICovCisgICAgY2FzZSAyMzoKKyAgICAgIC8qIHN5c19nZXR1aWQxNiAqLwor ICAgIGNhc2UgMjQ6CisgICAgICAvKiBzeXNfc3RpbWUgKi8KKyAgICBjYXNl IDI1OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19wdHJhY2UgKi8K KyAgICBjYXNlIDI2OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29y ZF9yZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKKyAgICAgIGlmICh0bXB1MzIgPT0gUkVDT1JEX1BUUkFDRV9QRUVLVEVY VAorCSAgfHwgdG1wdTMyID09IFJFQ09SRF9QVFJBQ0VfUEVFS0RBVEEKKwkg IHx8IHRtcHUzMiA9PSBSRUNPUkRfUFRSQUNFX1BFRUtVU1IpCisJeworCSAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJn NCwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgNCkpCisJICAgIHsK KwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfYWxhcm0gKi8KKyAgICBjYXNlIDI3OgorICAg ICAgLyogc3lzX3BhdXNlICovCisgICAgY2FzZSAyOToKKyAgICAgIC8qIHN5 c191dGltZSAgICAqLworICAgIGNhc2UgMzA6CisgICAgICAvKiBzeXNfbmlf c3lzY2FsbCAqLworICAgIGNhc2UgMzE6CisgICAgICAvKiBzeXNfbmlfc3lz Y2FsbCAqLworICAgIGNhc2UgMzI6CisgICAgICAvKiBzeXNfYWNjZXNzICov CisgICAgY2FzZSAzMzoKKyAgICAgIC8qIHN5c19uaWNlICovCisgICAgY2Fz ZSAzNDoKKyAgICAgIC8qIHN5c19uaV9zeXNjYWxsICovCisgICAgY2FzZSAz NToKKyAgICAgIC8qIHN5c19zeW5jICovCisgICAgY2FzZSAzNjoKKyAgICAg IC8qIHN5c19raWxsICovCisgICAgY2FzZSAzNzoKKyAgICAgIC8qIHN5c19y ZW5hbWUgKi8KKyAgICBjYXNlIDM4OgorICAgICAgLyogc3lzX21rZGlyICov CisgICAgY2FzZSAzOToKKyAgICAgIC8qIHN5c19ybWRpciAqLworICAgIGNh c2UgNDA6CisgICAgICAvKiBzeXNfZHVwICovCisgICAgY2FzZSA0MToKKyAg ICAgIC8qIHN5c19waXBlICovCisgICAgY2FzZSA0MjoKKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfdGltZXMgKi8KKyAgICBjYXNlIDQzOgorICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+ YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90bXMp KQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2UgNDQ6CisgICAg ICAvKiBzeXNfYnJrICovCisgICAgY2FzZSA0NToKKyAgICAgIC8qIHN5c19z ZXRnaWQxNiAqLworICAgIGNhc2UgNDY6CisgICAgICAvKiBzeXNfZ2V0Z2lk MTYgKi8KKyAgICBjYXNlIDQ3OgorICAgICAgLyogc3lzX3NpZ25hbCAqLwor ICAgIGNhc2UgNDg6CisgICAgICAvKiBzeXNfZ2V0ZXVpZDE2ICovCisgICAg Y2FzZSA0OToKKyAgICAgIC8qIHN5c19nZXRlZ2lkMTYgKi8KKyAgICBjYXNl IDUwOgorICAgICAgLyogc3lzX2FjY3QgKi8KKyAgICBjYXNlIDUxOgorICAg ICAgLyogc3lzX3Vtb3VudCAqLworICAgIGNhc2UgNTI6CisgICAgICAvKiBz eXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2UgNTM6CisgICAgICBicmVhazsK KworICAgICAgLyogc3lzX2lvY3RsICovCisgICAgY2FzZSA1NDoKKyAgICAg IC8qIFhYWCB0aGVyZSBuZWVkIGFkZCBhIGxvdCBvZiBzdXBwb3J0IG9mIG90 aGVyIGlvY3RsIHJlcXVlc3RzLiAgKi8KKyAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7CisgICAgICBpZiAodG1wdTMyID09IHRkZXAtPmlvY3Rs X0ZJT0NMRVggfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX0ZJT05DTEVYCisJ ICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfRklPTkJJTyB8fCB0bXB1MzIg PT0gdGRlcC0+aW9jdGxfRklPQVNZTkMKKwkgIHx8IHRtcHUzMiA9PSB0ZGVw LT5pb2N0bF9UQ1NFVFMgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RDU0VU U1cKKwkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NFVFNGIHx8IHRt cHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NFVEEKKwkgIHx8IHRtcHUzMiA9PSB0 ZGVwLT5pb2N0bF9UQ1NFVEFXIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9U Q1NFVEFGCisJICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVENTQlJLIHx8 IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1hPTkMKKwkgIHx8IHRtcHUzMiA9 PSB0ZGVwLT5pb2N0bF9UQ0ZMU0ggfHwgdG1wdTMyID09IHRkZXAtPmlvY3Rs X1RJT0NFWENMCisJICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ05Y Q0wKKwkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU0NUVFkKKwkg IHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU1BHUlAgfHwgdG1wdTMy ID09IHRkZXAtPmlvY3RsX1RJT0NTVEkKKwkgIHx8IHRtcHUzMiA9PSB0ZGVw LT5pb2N0bF9USU9DU1dJTlNaCisJICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9j dGxfVElPQ01CSVMgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NNQklD CisJICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ01TRVQKKwkgIHx8 IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU1NPRlRDQVIKKwkgIHx8IHRt cHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DQ09OUworCSAgfHwgdG1wdTMyID09 IHRkZXAtPmlvY3RsX1RJT0NTU0VSSUFMCisJICB8fCB0bXB1MzIgPT0gdGRl cC0+aW9jdGxfVElPQ1BLVCB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElP Q05PVFRZCisJICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NFVEQg fHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RDU0JSS1AKKwkgIHx8IHRtcHUz MiA9PSB0ZGVwLT5pb2N0bF9USU9DVFRZR1NUUlVDVAorCSAgfHwgdG1wdTMy ID09IHRkZXAtPmlvY3RsX1RJT0NTQlJLIHx8IHRtcHUzMiA9PSB0ZGVwLT5p b2N0bF9USU9DQ0JSSworCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RD U0VUUzIgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RDU0VUU1cyCisJICB8 fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVENTRVRTRjIKKwkgIHx8IHRtcHUz MiA9PSB0ZGVwLT5pb2N0bF9USU9DU1BUTENLCisJICB8fCB0bXB1MzIgPT0g dGRlcC0+aW9jdGxfVElPQ1NFUkNPTkZJRworCSAgfHwgdG1wdTMyID09IHRk ZXAtPmlvY3RsX1RJT0NTRVJHV0lMRAorCSAgfHwgdG1wdTMyID09IHRkZXAt PmlvY3RsX1RJT0NTRVJTV0lMRAorCSAgfHwgdG1wdTMyID09IHRkZXAtPmlv Y3RsX1RJT0NTTENLVFJNSU9TCisJICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9j dGxfVElPQ1NFUkdFVE1VTFRJCisJICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9j dGxfVElPQ1NFUlNFVE1VTFRJCisJICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9j dGxfVElPQ01JV0FJVAorCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJ T0NTSEFZRVNFU1ApCisJeworCSAgLyogTm90aGluZyB0byBkby4gICovCisJ fQorICAgICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RDR0VU UyB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVENHRVRBCisJICAgICAgIHx8 IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DR0xDS1RSTUlPUykKKwl7CisJ ICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5h cmczLAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X3Rlcm1pb3MpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAg IH0KKwl9CisgICAgICBlbHNlIGlmICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxf VElPQ0dQR1JQCisJICAgICAgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9U SU9DR1NJRCkKKwl7CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3Jl Z2NhY2hlLCB0ZGVwLT5hcmczLAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX3BpZF90KSkKKwkgICAgeworCSAgICAgIHJldHVy biAoLTEpOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAodG1wdTMyID09 IHRkZXAtPmlvY3RsX1RJT0NPVVRRCisJICAgICAgIHx8IHRtcHUzMiA9PSB0 ZGVwLT5pb2N0bF9USU9DTUdFVAorCSAgICAgICB8fCB0bXB1MzIgPT0gdGRl cC0+aW9jdGxfVElPQ0dTT0ZUQ0FSCisJICAgICAgIHx8IHRtcHUzMiA9PSB0 ZGVwLT5pb2N0bF9GSU9OUkVBRAorCSAgICAgICB8fCB0bXB1MzIgPT0gdGRl cC0+aW9jdGxfVElPQ0lOUQorCSAgICAgICB8fCB0bXB1MzIgPT0gdGRlcC0+ aW9jdGxfVElPQ0dFVEQKKwkgICAgICAgfHwgdG1wdTMyID09IHRkZXAtPmlv Y3RsX1RJT0NHUFROCisJICAgICAgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0 bF9USU9DU0VSR0VUTFNSKQorCXsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsCisJCQkgICAgIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIHRkZXAtPnNpemVfaW50KSkKKwkgICAgeworCSAgICAg IHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAodG1w dTMyID09IHRkZXAtPmlvY3RsX1RJT0NHV0lOU1opCisJeworCSAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywKKwkJ CSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV93aW5zaXpl KSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQor ICAgICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NMSU5V WCkKKwl7CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hl LCB0ZGVwLT5hcmczLAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX2NoYXIpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7 CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmICh0bXB1MzIgPT0gdGRlcC0+ aW9jdGxfVElPQ0dTRVJJQUwpCisJeworCSAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywKKwkJCSAgICAgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9zZXJpYWxfc3RydWN0KSkKKwkg ICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAg ZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RDR0VUUzIpCisJewor CSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+ YXJnMywKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6 ZV90ZXJtaW9zMikpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkg ICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKHRtcHUzMiA9PSB0ZGVwLT5pb2N0 bF9GSU9RU0laRSkKKwl7CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCB0ZGVwLT5hcmczLAorCQkJICAgICAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX2xvZmZfdCkpCisJICAgIHsKKwkgICAgICBy ZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKHRtcHUz MiA9PSB0ZGVwLT5pb2N0bF9USU9DR0lDT1VOVCkKKwl7CisJICByZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLAorCQkJ ICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbQorCSAgICAgICh0bXB1MzIsIHRkZXAtPnNpemVf c2VyaWFsX2ljb3VudGVyX3N0cnVjdCkpCisJICAgIHsKKwkgICAgICByZXR1 cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKHRtcHUzMiA9 PSB0ZGVwLT5pb2N0bF9USU9DR0hBWUVTRVNQKQorCXsKKwkgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsCisJCQkg ICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfaGF5ZXNfZXNw X2NvbmZpZykpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAg fQorCX0KKyAgICAgIGVsc2UgaWYgKHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9U SU9DU0VSR1NUUlVDVCkKKwl7CisJICBwcmludGZfdW5maWx0ZXJlZCAoXwor CQkJICAgICAoIlByb2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IGRv ZXNuJ3Qgc3VwcG9ydCBpb2N0bCByZXF1ZXN0IFRJT0NTRVJHU1RSVUNUXG4i KSk7CisJICByZXR1cm4gKDEpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBw cmludGZfdW5maWx0ZXJlZCAoXworCQkJICAgICAoIlByb2Nlc3MgcmVjb3Jk IGFuZCByZXBsYXkgdGFyZ2V0IGRvZXNuJ3Qgc3VwcG9ydCBpb2N0bCByZXF1 ZXN0IDB4JTA4eC5cbiIpLAorCQkJICAgICB0bXB1MzIpOworCSAgcmV0dXJu ICgxKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2ZjbnRs ICovCisgICAgY2FzZSA1NToKKyAgICAgIC8qIFhYWCAqLworICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICBzeXNfZmNudGw6CisgICAg ICBpZiAodG1wdTMyID09IEZfR0VUTEspCisJeworCSAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywKKwkJCSAgICAg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9mbG9jaykpCisJICAg IHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2Ug NTY6CisgICAgICAvKiBzeXNfc2V0cGdpZCAqLworICAgIGNhc2UgNTc6Cisg ICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2UgNTg6CisgICAg ICBicmVhazsKKworICAgICAgLyogc3lzX29sZHVuYW1lICovCisgICAgY2Fz ZSA1OToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfb2xkb2xkX3V0c25hbWUpKQorCXsKKwkgIHJldHVybiAoLTEpOwor CX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfdW1hc2sgKi8KKyAg ICBjYXNlIDYwOgorICAgICAgLyogc3lzX2Nocm9vdCAqLworICAgIGNhc2Ug NjE6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3VzdGF0ICovCisg ICAgY2FzZSA2MjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfdXN0YXQpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0K KyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfZHVwMiAqLworICAgIGNh c2UgNjM6CisgICAgICAvKiBzeXNfZ2V0cHBpZCAqLworICAgIGNhc2UgNjQ6 CisgICAgICAvKiBzeXNfZ2V0cGdycCAqLworICAgIGNhc2UgNjU6CisgICAg ICAvKiBzeXNfc2V0c2lkICovCisgICAgY2FzZSA2NjoKKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfc2lnYWN0aW9uICovCisgICAgY2FzZSA2NzoK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRk ZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf b2xkX3NpZ2FjdGlvbikpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zZ2V0bWFzayAqLworICAgIGNh c2UgNjg6CisgICAgICAvKiBzeXNfc3NldG1hc2sgKi8KKyAgICBjYXNlIDY5 OgorICAgICAgLyogc3lzX3NldHJldWlkMTYgKi8KKyAgICBjYXNlIDcwOgor ICAgICAgLyogc3lzX3NldHJlZ2lkMTYgKi8KKyAgICBjYXNlIDcxOgorICAg ICAgLyogc3lzX3NpZ3N1c3BlbmQgKi8KKyAgICBjYXNlIDcyOgorICAgICAg YnJlYWs7CisKKyAgICAgIC8qIHN5c19zaWdwZW5kaW5nICovCisgICAgY2Fz ZSA3MzoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfb2xkX3NpZ3NldF90KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9 CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3NldGhvc3RuYW1lICov CisgICAgY2FzZSA3NDoKKyAgICAgIC8qIHN5c19zZXRybGltaXQgKi8KKyAg ICBjYXNlIDc1OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19vbGRf Z2V0cmxpbWl0ICovCisgICAgY2FzZSA3NjoKKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfcmxpbWl0KSkKKwl7CisJICBy ZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lz X2dldHJ1c2FnZSAqLworICAgIGNhc2UgNzc6CisgICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3J1c2FnZSkpCisJeworCSAg cmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5 c19nZXR0aW1lb2ZkYXkgKi8KKyAgICBjYXNlIDc4OgorICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90aW1ldmFsKSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX3RpbWV6b25lKSkKKwl7CisJICByZXR1 cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3Nl dHRpbWVvZmRheSAqLworICAgIGNhc2UgNzk6CisgICAgICBicmVhazsKKwor ICAgICAgLyogc3lzX2dldGdyb3VwczE2ICovCisgICAgY2FzZSA4MDoKKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAt PmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xk X2dpZF90KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX3NldGdyb3VwczE2ICovCisgICAgY2FzZSA4 MToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUs IHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfb2xkX2dpZF90KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAg ICBicmVhazsKKworICAgICAgLyogb2xkX3NlbGVjdCAqLworICAgIGNhc2Ug ODI6CisgICAgICB7CisJc3RydWN0IHNlbF9hcmdfc3RydWN0CisJeworCSAg Q09SRV9BRERSIG47CisJICBDT1JFX0FERFIgaW5wOworCSAgQ09SRV9BRERS IG91dHA7CisJICBDT1JFX0FERFIgZXhwOworCSAgQ09SRV9BRERSIHR2cDsK Kwl9IHNlbDsKKworCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIHRkZXAtPmFyZzEsCisJCQkgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OworCWlmICh0bXB1MzIpCisJICB7CisJICAgIGlmICh0YXJnZXRfcmVhZF9t ZW1vcnkgKHRtcHUzMiwgKGdkYl9ieXRlICopICYgc2VsLCBzaXplb2YgKHNl bCkpKQorCSAgICAgIHsKKwkJaWYgKHJlY29yZF9kZWJ1ZykKKwkJICB7CisJ CSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSJQ cm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkgYXQgYWRkciA9 IDB4JXMgbGVuID0gJWQuXG4iLAorCQkJCQlwYWRkcl9ueiAodG1wdTMyKSwg c2l6ZW9mIChzZWwpKTsKKwkJICB9CisJCXJldHVybiAoLTEpOworCSAgICAg IH0KKwkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoc2VsLmlu cCwgdGRlcC0+c2l6ZV9mZF9zZXQpKQorCSAgICAgIHsKKwkJcmV0dXJuICgt MSk7CisJICAgICAgfQorCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtIChzZWwub3V0cCwgdGRlcC0+c2l6ZV9mZF9zZXQpKQorCSAgICAgIHsK KwkJcmV0dXJuICgtMSk7CisJICAgICAgfQorCSAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtIChzZWwuZXhwLCB0ZGVwLT5zaXplX2ZkX3NldCkp CisJICAgICAgeworCQlyZXR1cm4gKC0xKTsKKwkgICAgICB9CisJICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHNlbC50dnAsIHRkZXAtPnNp emVfdGltZXZhbCkpCisJICAgICAgeworCQlyZXR1cm4gKC0xKTsKKwkgICAg ICB9CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyog c3lzX3N5bWxpbmsgKi8KKyAgICBjYXNlIDgzOgorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIHN5c19yZWFkbGluayAqLworICAgIGNhc2UgODU6CisgICAg ICB7CisJdWludDMyX3QgbGVuOworCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWNv cmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsCisJCQkgICAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOworCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIGxlbik7CisJaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBsZW4pKQorCSAgewor CSAgICByZXR1cm4gKC0xKTsKKwkgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfdXNlbGliICovCisgICAgY2FzZSA4NjoKKyAg ICAgIC8qIHN5c19zd2Fwb24gKi8KKyAgICBjYXNlIDg3OgorICAgICAgYnJl YWs7CisKKyAgICAgIC8qIHN5c19yZWJvb3QgKi8KKyAgICBjYXNlIDg4Ogor ICAgICAgeworCWludCBxOworCXRhcmdldF90ZXJtaW5hbF9vdXJzICgpOwor CXEgPQorCSAgeXF1ZXJ5IChfCisJCSAgKCJUaGUgbmV4dCBpbnN0cnVjdGlv biBpcyBzeXNjYWxsIHJlYm9vdC4gIEl0IHdpbGwgcmVzdGFydCB0aGUgY29t cHV0ZXIuICBEbyB5b3Ugd2FudCB0byBzdG9wIHRoZSBwcm9ncmFtPyIpKTsK Kwl0YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7CisJaWYgKHEpCisJICB7 CisJICAgIHJldHVybiAoMSk7CisJICB9CisgICAgICB9CisgICAgICBicmVh azsKKworICAgICAgLyogb2xkX3JlYWRkaXIgKi8KKyAgICBjYXNlIDg5Ogor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRl cC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9k aXJlbnQpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBvbGRfbW1hcCAqLworICAgIGNhc2UgOTA6CisgICAg ICBicmVhazsKKworICAgICAgLyogc3lzX211bm1hcCAqLworICAgIGNhc2Ug OTE6CisgICAgICB7CisJaW50IHE7CisJdWludDMyX3QgbGVuOworCisJcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMSwK KwkJCSAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRl ICopICYgbGVuKTsKKwl0YXJnZXRfdGVybWluYWxfb3VycyAoKTsKKwlxID0K KwkgIHlxdWVyeSAoXworCQkgICgiVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMg c3lzY2FsbCBtdW5tYXAuICBJdCB3aWxsIGZyZWUgdGhlIG1lbW9yeSBhZGRy ID0gMHglcyBsZW4gPSAlZC4gIEl0IHdpbGwgbWFrZSByZWNvcmQgdGFyZ2V0 IGdldCBlcnJvci4gIERvIHlvdSB3YW50IHRvIHN0b3AgdGhlIHByb2dyYW0/ IiksCisJCSAgcGFkZHJfbnogKHRtcHUzMiksIGxlbik7CisJdGFyZ2V0X3Rl cm1pbmFsX2luZmVyaW9yICgpOworCWlmIChxKQorCSAgeworCSAgICByZXR1 cm4gKDEpOworCSAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c190cnVuY2F0ZSAqLworICAgIGNhc2UgOTI6CisgICAgICAvKiBz eXNfZnRydW5jYXRlICovCisgICAgY2FzZSA5MzoKKyAgICAgIC8qIHN5c19m Y2htb2QgKi8KKyAgICBjYXNlIDk0OgorICAgICAgLyogc3lzX2ZjaG93bjE2 ICovCisgICAgY2FzZSA5NToKKyAgICAgIC8qIHN5c19nZXRwcmlvcml0eSAq LworICAgIGNhc2UgOTY6CisgICAgICAvKiBzeXNfc2V0cHJpb3JpdHkgKi8K KyAgICBjYXNlIDk3OgorICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8KKyAg ICBjYXNlIDk4OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zdGF0 ZnMgKi8KKyAgICBjYXNlIDk5OgorICAgICAgLyogc3lzX2ZzdGF0ZnMgKi8K KyAgICBjYXNlIDEwMDoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNv cmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfc3RhdGZzKSkKKwl7CisJICByZXR1cm4gKC0xKTsK Kwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2lvcGVybSAqLwor ICAgIGNhc2UgMTAxOgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19z b2NrZXRjYWxsICovCisgICAgY2FzZSAxMDI6CisgICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOworICAgICAgc3dpdGNoICh0bXB1MzIpCisJewor CWNhc2UgUkVDT1JEX1NZU19TT0NLRVQ6CisJY2FzZSBSRUNPUkRfU1lTX0JJ TkQ6CisJY2FzZSBSRUNPUkRfU1lTX0NPTk5FQ1Q6CisJY2FzZSBSRUNPUkRf U1lTX0xJU1RFTjoKKwkgIGJyZWFrOworCWNhc2UgUkVDT1JEX1NZU19BQ0NF UFQ6CisJY2FzZSBSRUNPUkRfU1lTX0dFVFNPQ0tOQU1FOgorCWNhc2UgUkVD T1JEX1NZU19HRVRQRUVSTkFNRToKKwkgIHsKKwkgICAgdWludDMyX3QgYVsz XTsKKwkgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwg dGRlcC0+YXJnMiwKKwkJCSAgICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OworCSAgICBpZiAodG1wdTMyKQorCSAgICAgIHsKKwkJaWYgKHRhcmdldF9y ZWFkX21lbW9yeSAodG1wdTMyLCAoZ2RiX2J5dGUgKikgYSwgc2l6ZW9mIChh KSkpCisJCSAgeworCQkgICAgaWYgKHJlY29yZF9kZWJ1ZykKKwkJICAgICAg eworCQkgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywK KwkJCQkJICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyBtZW1v cnkgYXQgYWRkciA9IDB4JXMgbGVuID0gJWQuXG4iLAorCQkJCQkgICAgcGFk ZHJfbnogKHRtcHUzMiksIHNpemVvZiAoYSkpOworCQkgICAgICB9CisJCSAg ICByZXR1cm4gKC0xKTsKKwkJICB9CisJCWlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKGFbMV0sIHRkZXAtPnNpemVfc29ja2FkZHIpKQorCQkgIHsK KwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkJaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAoYVsyXSwgdGRlcC0+c2l6ZV9pbnQpKQorCQkgIHsK KwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkgICAgICB9CisJICB9CisJ ICBicmVhazsKKworCWNhc2UgUkVDT1JEX1NZU19TT0NLRVRQQUlSOgorCSAg eworCSAgICB1aW50MzJfdCBhWzRdOworCSAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLAorCQkJICAgICAgIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICAgIGlmICh0bXB1MzIpCisJICAg ICAgeworCQlpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICh0bXB1MzIsIChnZGJf Ynl0ZSAqKSBhLCBzaXplb2YgKGEpKSkKKwkJICB7CisJCSAgICBpZiAocmVj b3JkX2RlYnVnKQorCQkgICAgICB7CisJCSAgICAgICAgZnByaW50Zl91bmZp bHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCQkgICAgIlByb2Nlc3MgcmVjb3Jk OiBlcnJvciByZWFkaW5nIG1lbW9yeSBhdCBhZGRyID0gMHglcyBsZW4gPSAl ZC5cbiIsCisJCQkJCSAgICBwYWRkcl9ueiAodG1wdTMyKSwgc2l6ZW9mIChh KSk7CisJCSAgICAgIH0KKwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkJ aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYVszXSwgdGRlcC0+c2l6 ZV9pbnQpKQorCQkgIHsKKwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkg ICAgICB9CisJICB9CisJICBicmVhazsKKwljYXNlIFJFQ09SRF9TWVNfU0VO RDoKKwljYXNlIFJFQ09SRF9TWVNfU0VORFRPOgorCSAgYnJlYWs7CisJY2Fz ZSBSRUNPUkRfU1lTX1JFQ1Y6CisJICB7CisJICAgIHVpbnQzMl90IGFbM107 CisJICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRk ZXAtPmFyZzIsCisJCQkgICAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK KwkgICAgaWYgKHRtcHUzMikKKwkgICAgICB7CisJCWlmICh0YXJnZXRfcmVh ZF9tZW1vcnkgKHRtcHUzMiwgKGdkYl9ieXRlICopIGEsIHNpemVvZiAoYSkp KQorCQkgIHsKKwkJICAgIGlmIChyZWNvcmRfZGVidWcpCisJCSAgICAgIHsK KwkJICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ CQkJCSAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5 IGF0IGFkZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwKKwkJCQkJICAgIHBhZGRy X256ICh0bXB1MzIpLCBzaXplb2YgKGEpKTsKKwkJICAgICAgfQorCQkgICAg cmV0dXJuICgtMSk7CisJCSAgfQorCQlpZiAoYVsyXSkKKwkJICB7CisJCSAg ICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5CisJCQkoYVsyXSwgKGdkYl9ieXRl ICopICYgKGFbMl0pLCBzaXplb2YgKGFbMl0pKSkKKwkJICAgICAgeworCQkJ aWYgKHJlY29yZF9kZWJ1ZykKKwkJCSAgeworCQkJICAgIGZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkJCSJQcm9jZXNzIHJlY29yZDog ZXJyb3IgcmVhZGluZyBtZW1vcnkgYXQgYWRkciA9IDB4JXMgbGVuID0gJWQu XG4iLAorCQkJCQkJcGFkZHJfbnogKGFbMl0pLCBzaXplb2YgKGFbMl0pKTsK KwkJCSAgfQorCQkJcmV0dXJuICgtMSk7CisJCSAgICAgIH0KKwkJICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFbMV0sIGFbMl0pKQorCQkg ICAgICB7CisJCQlyZXR1cm4gKC0xKTsKKwkJICAgICAgfQorCQkgIH0KKwkg ICAgICB9CisJICB9CisJICBicmVhazsKKwljYXNlIFJFQ09SRF9TWVNfUkVD VkZST006CisJICB7CisJICAgIHVpbnQzMl90IGFbNl07CisJICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsCisJ CQkgICAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgICAgaWYgKHRt cHUzMikKKwkgICAgICB7CisJCWlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKHRt cHUzMiwgKGdkYl9ieXRlICopIGEsIHNpemVvZiAoYSkpKQorCQkgIHsKKwkJ ICAgIGlmIChyZWNvcmRfZGVidWcpCisJCSAgICAgIHsKKwkJCWZwcmludGZf dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkJICAgICJQcm9jZXNzIHJl Y29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkgYXQgYWRkciA9IDB4JXMgbGVu ID0gJWQuXG4iLAorCQkJCQkgICAgcGFkZHJfbnogKHRtcHUzMiksIHNpemVv ZiAoYSkpOworCQkgICAgICB9CisJCSAgICByZXR1cm4gKC0xKTsKKwkJICB9 CisJCWlmIChhWzJdKQorCQkgIHsKKwkJICAgIGlmICh0YXJnZXRfcmVhZF9t ZW1vcnkKKwkJCShhWzJdLCAoZ2RiX2J5dGUgKikgJiAoYVsyXSksIHNpemVv ZiAoYVsyXSkpKQorCQkgICAgICB7CisJCQlpZiAocmVjb3JkX2RlYnVnKQor CQkJICB7CisJCQkgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LAorCQkJCQkJIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5nIG1lbW9y eSBhdCBhZGRyID0gMHglcyBsZW4gPSAlZC5cbiIsCisJCQkJCQlwYWRkcl9u eiAoYVsyXSksCisJCQkJCQlzaXplb2YgKGFbMl0pKTsKKwkJCSAgfQorCQkJ cmV0dXJuICgtMSk7CisJCSAgICAgIH0KKwkJICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKGFbMV0sIGFbMl0pKQorCQkgICAgICB7CisJCQly ZXR1cm4gKC0xKTsKKwkJICAgICAgfQorCQkgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAoYVs0XSwgdGRlcC0+c2l6ZV9zb2NrYWRkcikpCisJ CSAgICAgIHsKKwkJCXJldHVybiAoLTEpOworCQkgICAgICB9CisJCSAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzVdLCB0ZGVwLT5zaXpl X2ludCkpCisJCSAgICAgIHsKKwkJCXJldHVybiAoLTEpOworCQkgICAgICB9 CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKwkgIGJyZWFrOworCWNhc2UgUkVD T1JEX1NZU19TSFVURE9XTjoKKwljYXNlIFJFQ09SRF9TWVNfU0VUU09DS09Q VDoKKwkgIGJyZWFrOworCWNhc2UgUkVDT1JEX1NZU19HRVRTT0NLT1BUOgor CSAgeworCSAgICB1aW50MzJfdCBhWzVdOworCSAgICB1aW50MzJfdCBhdjsK KworCSAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0 ZGVwLT5hcmcyLAorCQkJICAgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 CisJICAgIGlmICh0bXB1MzIpCisJICAgICAgeworCQlpZiAodGFyZ2V0X3Jl YWRfbWVtb3J5ICh0bXB1MzIsIChnZGJfYnl0ZSAqKSBhLCBzaXplb2YgKGEp KSkKKwkJICB7CisJCSAgICBpZiAocmVjb3JkX2RlYnVnKQorCQkgICAgICB7 CisJCQlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAg ICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5IGF0IGFk ZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwKKwkJCQkJICAgIHBhZGRyX256ICh0 bXB1MzIpLCBzaXplb2YgKGEpKTsKKwkJICAgICAgfQorCQkgICAgcmV0dXJu ICgtMSk7CisJCSAgfQorCQlpZiAoYVs0XSkKKwkJICB7CisJCSAgICBpZiAo dGFyZ2V0X3JlYWRfbWVtb3J5CisJCQkoYVs0XSwgKGdkYl9ieXRlICopICYg YXYsIHNpemVvZiAoYXYpKSkKKwkJICAgICAgeworCQkJaWYgKHJlY29yZF9k ZWJ1ZykKKwkJCSAgeworCQkJICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywKKwkJCQkJCSJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGlu ZyBtZW1vcnkgYXQgYWRkciA9IDB4JXMgbGVuID0gJWQuXG4iLAorCQkJCQkJ cGFkZHJfbnogKGFbNF0pLCBzaXplb2YgKGF2KSk7CisJCQkgIH0KKwkJCXJl dHVybiAoLTEpOworCQkgICAgICB9CisJCSAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtIChhWzNdLCBhdikpCisJCSAgICAgIHsKKwkJCXJldHVy biAoLTEpOworCQkgICAgICB9CisJCSAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtIChhWzRdLCB0ZGVwLT5zaXplX2ludCkpCisJCSAgICAgIHsK KwkJCXJldHVybiAoLTEpOworCQkgICAgICB9CisJCSAgfQorCSAgICAgIH0K KwkgIH0KKwkgIGJyZWFrOworCWNhc2UgUkVDT1JEX1NZU19TRU5ETVNHOgor CSAgYnJlYWs7CisJY2FzZSBSRUNPUkRfU1lTX1JFQ1ZNU0c6CisJICB7CisJ ICAgIHVpbnQzMl90IGFbMl0sIGk7CisJICAgIHN0cnVjdCByZWNvcmRfbXNn aGRyCisJICAgIHsKKwkgICAgICB1aW50MzJfdCBtc2dfbmFtZTsKKwkgICAg ICB1aW50MzJfdCBtc2dfbmFtZWxlbjsKKwkgICAgICB1aW50MzJfdCBtc2df aW92OworCSAgICAgIHVpbnQzMl90IG1zZ19pb3ZsZW47CisJICAgICAgdWlu dDMyX3QgbXNnX2NvbnRyb2w7CisJICAgICAgdWludDMyX3QgbXNnX2NvbnRy b2xsZW47CisJICAgICAgdWludDMyX3QgbXNnX2ZsYWdzOworCSAgICB9IHJl YzsKKwkgICAgc3RydWN0IHJlY29yZF9pb3ZlYworCSAgICB7CisJICAgICAg dWludDMyX3QgaW92X2Jhc2U7CisJICAgICAgdWludDMyX3QgaW92X2xlbjsK KwkgICAgfSBpb3Y7CisKKwkgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29y ZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwKKwkJCSAgICAgICAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOworCSAgICBpZiAodG1wdTMyKQorCSAgICAgIHsKKwkJ aWYgKHRhcmdldF9yZWFkX21lbW9yeSAodG1wdTMyLCAoZ2RiX2J5dGUgKikg YSwgc2l6ZW9mIChhKSkpCisJCSAgeworCQkgICAgaWYgKHJlY29yZF9kZWJ1 ZykKKwkJICAgICAgeworCQkJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk bG9nLAorCQkJCQkgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5n IG1lbW9yeSBhdCBhZGRyID0gMHglcyBsZW4gPSAlZC5cbiIsCisJCQkJCSAg ICBwYWRkcl9ueiAodG1wdTMyKSwgc2l6ZW9mIChhKSk7CisJCSAgICAgIH0K KwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkJaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAoYVsxXSwgdGRlcC0+c2l6ZV9tc2doZHIpKQorCQkg IHsKKwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkJaWYgKGFbMV0pCisJ CSAgeworCQkgICAgaWYgKHRhcmdldF9yZWFkX21lbW9yeQorCQkJKGFbMV0s IChnZGJfYnl0ZSAqKSAmIHJlYywgc2l6ZW9mIChyZWMpKSkKKwkJICAgICAg eworCQkJaWYgKHJlY29yZF9kZWJ1ZykKKwkJCSAgeworCQkJICAgIGZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkJCSJQcm9jZXNzIHJl Y29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkgYXQgYWRkciA9IDB4JXMgbGVu ID0gJWQuXG4iLAorCQkJCQkJcGFkZHJfbnogKGFbMV0pLAorCQkJCQkJc2l6 ZW9mIChyZWMpKTsKKwkJCSAgfQorCQkJcmV0dXJuICgtMSk7CisJCSAgICAg IH0KKwkJICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0KKwkJCShy ZWMubXNnX25hbWUsIHJlYy5tc2dfbmFtZWxlbikpCisJCSAgICAgIHsKKwkJ CXJldHVybiAoLTEpOworCQkgICAgICB9CisJCSAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtCisJCQkocmVjLm1zZ19jb250cm9sLCByZWMubXNn X2NvbnRyb2xsZW4pKQorCQkgICAgICB7CisJCQlyZXR1cm4gKC0xKTsKKwkJ ICAgICAgfQorCQkgICAgaWYgKHJlYy5tc2dfaW92KQorCQkgICAgICB7CisJ CQlmb3IgKGkgPSAwOyBpIDwgcmVjLm1zZ19pb3ZsZW47IGkrKykKKwkJCSAg eworCQkJICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkKKwkJCQkocmVjLm1z Z19pb3YsIChnZGJfYnl0ZSAqKSAmIGlvdiwKKwkJCQkgc2l6ZW9mIChpb3Yp KSkKKwkJCSAgICAgIHsKKwkJCQlpZiAocmVjb3JkX2RlYnVnKQorCQkJCSAg eworCQkJCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ CQkJCQkJIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5nIG1lbW9yeSBh dCBhZGRyID0gMHglcyBsZW4gPSAlZC5cbiIsCisJCQkJCQkJcGFkZHJfbnog KHJlYy4KKwkJCQkJCQkJICBtc2dfaW92KSwKKwkJCQkJCQlzaXplb2YgKGlv dikpOworCQkJCSAgfQorCQkJCXJldHVybiAoLTEpOworCQkJICAgICAgfQor CQkJICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0KKwkJCQkoaW92 Lmlvdl9iYXNlLCBpb3YuaW92X2xlbikpCisJCQkgICAgICB7CisJCQkJcmV0 dXJuICgtMSk7CisJCQkgICAgICB9CisJCQkgICAgcmVjLm1zZ19pb3YgKz0g c2l6ZW9mIChzdHJ1Y3QgcmVjb3JkX2lvdmVjKTsKKwkJCSAgfQorCQkgICAg ICB9CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKwkgIGJyZWFrOworCWRlZmF1 bHQ6CisJICBwcmludGZfdW5maWx0ZXJlZCAoXworCQkJICAgICAoIlByb2Nl c3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IGRvZXNuJ3Qgc3VwcG9ydCBz b2NrZXRjYWxsIGNhbGwgMHglMDh4XG4iKSwKKwkJCSAgICAgdG1wdTMyKTsK KwkgIHJldHVybiAoLTEpOworCSAgYnJlYWs7CisJfQorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c19zeXNsb2cgKi8KKyAgICBjYXNlIDEwMzoKKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfc2V0aXRpbWVyICovCisgICAg Y2FzZSAxMDQ6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3Jl Z2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX2l0aW1lcnZhbCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19nZXRpdGltZXIgKi8K KyAgICBjYXNlIDEwNToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNv cmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfaXRpbWVydmFsKSkKKwl7CisJICByZXR1cm4gKC0x KTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX25ld3N0YXQg Ki8KKyAgICBjYXNlIDEwNjoKKyAgICAgIC8qIHN5c19uZXdsc3RhdCAqLwor ICAgIGNhc2UgMTA3OgorICAgICAgLyogc3lzX25ld2ZzdGF0ICovCisgICAg Y2FzZSAxMDg6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3Jl Z2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX3N0YXQpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfdW5hbWUgKi8KKyAgICBjYXNl IDEwOToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfb2xkX3V0c25hbWUpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0K KyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfaW9wbCAqLworICAgIGNh c2UgMTEwOgorICAgICAgLyogc3lzX3ZoYW5ndXAgKi8KKyAgICBjYXNlIDEx MToKKyAgICAgIC8qIHN5c19uaV9zeXNjYWxsICovCisgICAgY2FzZSAxMTI6 CisgICAgICAvKiBzeXNfdm04Nm9sZCAqLworICAgIGNhc2UgMTEzOgorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c193YWl0NCAqLworICAgIGNhc2Ug MTE0OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNo ZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+ c2l6ZV9pbnQpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzQs IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfcnVzYWdlKSkK Kwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAg ICAgLyogc3lzX3N3YXBvZmYgKi8KKyAgICBjYXNlIDExNToKKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBzeXNfc3lzaW5mbyAqLworICAgIGNhc2UgMTE2 OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwg dGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6 ZV9zeXNpbmZvKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBi cmVhazsKKworICAgICAgLyogc3lzX2lwYyAqLworICAgIGNhc2UgMTE3Ogor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRl cC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIHN3aXRj aCAodG1wdTMyKQorCXsKKwljYXNlIFJFQ09SRF9NU0dSQ1Y6CisJICB7CisJ ICAgIGludDMyX3Qgc2Vjb25kOworCSAgICB1aW50MzJfdCBwdHI7CisJICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFy ZzMsCisJCQkgICAgICAgKGdkYl9ieXRlICopICYgc2Vjb25kKTsKKwkgICAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJn NSwKKwkJCSAgICAgICAoZ2RiX2J5dGUgKikgJiBwdHIpOworCSAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChwdHIsIHNlY29uZCArIHRkZXAt PnNpemVfbG9uZykpCisJICAgICAgeworCQlyZXR1cm4gKC0xKTsKKwkgICAg ICB9CisJICB9CisJICBicmVhazsKKwljYXNlIFJFQ09SRF9NU0dDVEw6CisJ ICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5h cmc1LAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X21zcWlkX2RzKSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAg ICB9CisJICBicmVhazsKKwljYXNlIFJFQ09SRF9TSE1BVDoKKwkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzQsCisJ CQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdWxvbmcp KQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGJy ZWFrOworCWNhc2UgUkVDT1JEX1NITUNUTDoKKwkgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzUsCisJCQkgICAgIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfc2htaWRfZHMpKQorCSAg ICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGJyZWFrOwor CX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfZnN5bmMgKi8KKyAg ICBjYXNlIDExODoKKyAgICAgIC8qIHN5c19zaWdyZXR1cm4gKi8KKyAgICBj YXNlIDExOToKKyAgICAgIC8qIHN5c19jbG9uZSAqLworICAgIGNhc2UgMTIw OgorICAgICAgLyogc3lzX3NldGRvbWFpbm5hbWUgKi8KKyAgICBjYXNlIDEy MToKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfbmV3dW5hbWUgKi8K KyAgICBjYXNlIDEyMjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNv cmRfcmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfbmV3X3V0c25hbWUpKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfbW9kaWZ5 X2xkdCAqLworICAgIGNhc2UgMTIzOgorICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIgPT0gMCB8fCB0bXB1MzIg PT0gMikKKwl7CisJICB1aW50MzJfdCBwdHIsIGJ5dGVjb3VudDsKKwkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIs IChnZGJfYnl0ZSAqKSAmIHB0cik7CisJICByZWdjYWNoZV9yYXdfcmVhZCAo cmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLAorCQkJICAgICAoZ2RiX2J5 dGUgKikgJiBieXRlY291bnQpOworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAocHRyLCBieXRlY291bnQpKQorCSAgICB7CisJICAgICAgcmV0 dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAgICBicmVhazsKKworICAgICAg Lyogc3lzX2FkanRpbWV4ICovCisgICAgY2FzZSAxMjQ6CisgICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3RpbWV4KSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAg Lyogc3lzX21wcm90ZWN0ICovCisgICAgY2FzZSAxMjU6CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX3NpZ3Byb2NtYXNrICovCisgICAgY2FzZSAx MjY6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hl LCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX29sZF9zaWdzZXRfdCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19uaV9zeXNjYWxsICovCisg ICAgY2FzZSAxMjc6CisgICAgICAvKiBzeXNfaW5pdF9tb2R1bGUgKi8KKyAg ICBjYXNlIDEyODoKKyAgICAgIC8qIHN5c19kZWxldGVfbW9kdWxlICovCisg ICAgY2FzZSAxMjk6CisgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAg IGNhc2UgMTMwOgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19xdW90 YWN0bCAqLworICAgIGNhc2UgMTMxOgorICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKKyAgICAgIHN3aXRjaCAodG1wdTMyKQorCXsKKwljYXNl IFJFQ09SRF9RX0dFVEZNVDoKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNv cmRfcmVnY2FjaGUsIHRkZXAtPmFyZzQsCisJCQkgICAgIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIDQpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJ ICAgIH0KKwkgIGJyZWFrOworCWNhc2UgUkVDT1JEX1FfR0VUSU5GTzoKKwkg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFy ZzQsCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf bWVtX2RxaW5mbykpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkg ICAgfQorCSAgYnJlYWs7CisJY2FzZSBSRUNPUkRfUV9HRVRRVU9UQToKKwkg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFy ZzQsCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf aWZfZHFibGspKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAg IH0KKwkgIGJyZWFrOworCWNhc2UgUkVDT1JEX1FfWEdFVFFTVEFUOgorCWNh c2UgUkVDT1JEX1FfWEdFVFFVT1RBOgorCSAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnNCwKKwkJCSAgICAgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9mc19xdW90YV9zdGF0KSkKKwkg ICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJICBicmVhazsK Kwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2dldHBnaWQgKi8K KyAgICBjYXNlIDEzMjoKKyAgICAgIC8qIHN5c19mY2hkaXIgKi8KKyAgICBj YXNlIDEzMzoKKyAgICAgIC8qIHN5c19iZGZsdXNoICovCisgICAgY2FzZSAx MzQ6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3N5c2ZzICovCisg ICAgY2FzZSAxMzU6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OworICAgICAgaWYgKHRtcHUzMiA9PSAyKQorCXsKKwkgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsCisJCQkgICAg IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICAvKlhYWCB0aGUgc2l6ZSBv ZiBtZW1vcnkgaXMgbm90IHZlcnkgY2xlYXIgKi8KKwkgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgMTApKQorCSAgICB7CisJICAg ICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAgICBicmVhazsKKwor ICAgICAgLyogc3lzX3BlcnNvbmFsaXR5ICovCisgICAgY2FzZSAxMzY6Cisg ICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2UgMTM3OgorICAg ICAgLyogc3lzX3NldGZzdWlkMTYgKi8KKyAgICBjYXNlIDEzODoKKyAgICAg IC8qIHN5c19zZXRmc2dpZDE2ICovCisgICAgY2FzZSAxMzk6CisgICAgICBi cmVhazsKKworICAgICAgLyogc3lzX2xsc2VlayAqLworICAgIGNhc2UgMTQw OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwg dGRlcC0+YXJnNCwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6 ZV9sb2ZmX3QpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBzeXNfZ2V0ZGVudHMgKi8KKyAgICBjYXNlIDE0 MToKKyAgICAgIHsKKwl1aW50MzJfdCBjb3VudDsKKwlyZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLAorCQkJICAgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKKwlyZWdjYWNoZV9yYXdfcmVhZCAocmVj b3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiBjb3Vu dCk7CisJaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX2RpcmVudCAqIGNvdW50KSkKKwkgIHsKKwkgICAgcmV0dXJu ICgtMSk7CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgICAg Lyogc3lzX3NlbGVjdCAqLworICAgIGNhc2UgMTQyOgorICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9mZF9zZXQpKQorCXsK KwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfZmRfc2V0KSkKKwl7CisJICByZXR1cm4g KC0xKTsKKwl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3Jl Z2NhY2hlLCB0ZGVwLT5hcmc0LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX2ZkX3NldCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRl cC0+YXJnNSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90 aW1ldmFsKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX2Zsb2NrICovCisgICAgY2FzZSAxNDM6Cisg ICAgICAvKiBzeXNfbXN5bmMgKi8KKyAgICBjYXNlIDE0NDoKKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBzeXNfcmVhZHYgKi8KKyAgICBjYXNlIDE0NToK KyAgICAgIHsKKwl1aW50MzJfdCB2ZWM7CisJdWludDMyX3QgdmxlbjsKKwlz dHJ1Y3QgcmVjb3JkX2lvdmVjCisJeworCSAgdWludDMyX3QgaW92X2Jhc2U7 CisJICB1aW50MzJfdCBpb3ZfbGVuOworCX0gaW92OworCXJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0 ZSAqKSAmIHZlYyk7CisJaWYgKHZlYykKKwkgIHsKKwkgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywKKwkJCSAg ICAgICAoZ2RiX2J5dGUgKikgJiB2bGVuKTsKKwkgICAgZm9yICh0bXB1MzIg PSAwOyB0bXB1MzIgPCB2bGVuOyB0bXB1MzIrKykKKwkgICAgICB7CisJCWlm ICh0YXJnZXRfcmVhZF9tZW1vcnkKKwkJICAgICh2ZWMsIChnZGJfYnl0ZSAq KSAmIGlvdiwgc2l6ZW9mIChzdHJ1Y3QgcmVjb3JkX2lvdmVjKSkpCisJCSAg eworCQkgICAgaWYgKHJlY29yZF9kZWJ1ZykKKwkJICAgICAgeworCQkJZnBy aW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCQkgICAgIlByb2Nl c3MgcmVjb3JkOiBlcnJvciByZWFkaW5nIG1lbW9yeSBhdCBhZGRyID0gMHgl cyBsZW4gPSAlZC5cbiIsCisJCQkJCSAgICBwYWRkcl9ueiAodmVjKSwKKwkJ CQkJICAgIHNpemVvZiAoc3RydWN0IHJlY29yZF9pb3ZlYykpOworCQkgICAg ICB9CisJCSAgICByZXR1cm4gKC0xKTsKKwkJICB9CisJCWlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKGlvdi5pb3ZfYmFzZSwgaW92Lmlvdl9sZW4p KQorCQkgIHsKKwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkJdmVjICs9 IHNpemVvZiAoc3RydWN0IHJlY29yZF9pb3ZlYyk7CisJICAgICAgfQorCSAg fQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c193cml0 ZXYgKi8KKyAgICBjYXNlIDE0NjoKKyAgICAgIC8qIHN5c19nZXRzaWQgKi8K KyAgICBjYXNlIDE0NzoKKyAgICAgIC8qIHN5c19mZGF0YXN5bmMgKi8KKyAg ICBjYXNlIDE0ODoKKyAgICAgIC8qIHN5c19zeXNjdGwgKi8KKyAgICBjYXNl IDE0OToKKyAgICAgIC8qIHN5c19tbG9jayAqLworICAgIGNhc2UgMTUwOgor ICAgICAgLyogc3lzX211bmxvY2sgKi8KKyAgICBjYXNlIDE1MToKKyAgICAg IC8qIHN5c19tbG9ja2FsbCAqLworICAgIGNhc2UgMTUyOgorICAgICAgLyog c3lzX211bmxvY2thbGwgKi8KKyAgICBjYXNlIDE1MzoKKyAgICAgIC8qIHN5 c19zY2hlZF9zZXRwYXJhbSAqLworICAgIGNhc2UgMTU0OgorICAgICAgYnJl YWs7CisKKyAgICAgIC8qIHN5c19zY2hlZF9nZXRwYXJhbSAqLworICAgIGNh c2UgMTU1OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdj YWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRl cC0+c2l6ZV9pbnQpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAg IGJyZWFrOworCisgICAgICAvKiBzeXNfc2NoZWRfc2V0c2NoZWR1bGVyICov CisgICAgY2FzZSAxNTY6CisgICAgICAvKiBzeXNfc2NoZWRfZ2V0c2NoZWR1 bGVyICovCisgICAgY2FzZSAxNTc6CisgICAgICAvKiBzeXNfc2NoZWRfeWll bGQgKi8KKyAgICBjYXNlIDE1ODoKKyAgICAgIC8qIHN5c19zY2hlZF9nZXRf cHJpb3JpdHlfbWF4ICovCisgICAgY2FzZSAxNTk6CisgICAgICAvKiBzeXNf c2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAqLworICAgIGNhc2UgMTYwOgorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2 YWwgKi8KKyAgICBjYXNlIDE2MToKKyAgICAgIC8qIHN5c19uYW5vc2xlZXAg Ki8KKyAgICBjYXNlIDE2MjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0 bXB1MzIsIHRkZXAtPnNpemVfdGltZXNwZWMpKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfbXJlbWFw ICovCisgICAgY2FzZSAxNjM6CisgICAgICAvKiBzeXNfc2V0cmVzdWlkMTYg Ki8KKyAgICBjYXNlIDE2NDoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNfZ2V0cmVzdWlkMTYgKi8KKyAgICBjYXNlIDE2NToKKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzEsIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX3VpZF90KSkK Kwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX29sZF91aWRfdCkpCisJeworCSAg cmV0dXJuICgtMSk7CisJfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Y29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9vbGRfdWlkX3QpKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfdm04NiAq LworICAgIGNhc2UgMTY2OgorICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8K KyAgICBjYXNlIDE2NzoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNf cG9sbCAqLworICAgIGNhc2UgMTY4OgorICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIpCisJeworCSAgdWludDMy X3QgbmZkczsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIHRkZXAtPmFyZzIsCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIG5mZHMp OworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX3BvbGxmZCAqIG5mZHMpKQorCSAgICB7CisJICAgICAgcmV0 dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAgICBicmVhazsKKworICAgICAg Lyogc3lzX25mc3NlcnZjdGwgKi8KKyAgICBjYXNlIDE2OToKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzEs IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAodG1wdTMyID09 IDcgfHwgdG1wdTMyID09IDgpCisJeworCSAgdWludDMyX3QgcnNpemU7CisJ ICBpZiAodG1wdTMyID09IDcpCisJICAgIHsKKwkgICAgICByc2l6ZSA9IHRk ZXAtPnNpemVfTkZTX0ZIU0laRTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7 CisJICAgICAgcnNpemUgPSB0ZGVwLT5zaXplX2tuZnNkX2ZoOworCSAgICB9 CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVw LT5hcmczLAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCByc2l6ZSkp CisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfc2V0cmVzZ2lkMTYgKi8KKyAg ICBjYXNlIDE3MDoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfZ2V0 cmVzZ2lkMTYgKi8KKyAgICBjYXNlIDE3MToKKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX2dpZF90KSkKKwl7CisJ ICByZXR1cm4gKC0xKTsKKwl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX29sZF9naWRfdCkpCisJeworCSAgcmV0dXJu ICgtMSk7CisJfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9y ZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg dGRlcC0+c2l6ZV9vbGRfZ2lkX3QpKQorCXsKKwkgIHJldHVybiAoLTEpOwor CX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfcHJjdGwgKi8KKyAg ICBjYXNlIDE3MjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 CisgICAgICBzd2l0Y2ggKHRtcHUzMikKKwl7CisJY2FzZSAyOgorCSAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwK KwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pbnQp KQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGJy ZWFrOworCWNhc2UgMTY6CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLAorCQkJICAgICAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX1RBU0tfQ09NTV9MRU4pKQorCSAgICB7CisJ ICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGJyZWFrOworCX0KKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfcnRfc2lncmV0dXJuICovCisg ICAgY2FzZSAxNzM6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3J0 X3NpZ2FjdGlvbiAqLworICAgIGNhc2UgMTc0OgorICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9zaWdhY3Rpb24pKQorCXsK KwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAv KiBzeXNfcnRfc2lncHJvY21hc2sgKi8KKyAgICBjYXNlIDE3NToKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFy ZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfc2lnc2V0 X3QpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBzeXNfcnRfc2lncGVuZGluZyAqLworICAgIGNhc2UgMTc2 OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwg dGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlm ICh0bXB1MzIpCisJeworCSAgdWludDMyX3Qgc2lnc2V0c2l6ZTsKKwkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIs CisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIHNpZ3NldHNpemUpOworCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBzaWdzZXRzaXpl KSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19ydF9zaWd0aW1lZHdhaXQg Ki8KKyAgICBjYXNlIDE3NzoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0 bXB1MzIsIHRkZXAtPnNpemVfc2lnaW5mb190KSkKKwl7CisJICByZXR1cm4g KC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3J0X3Np Z3F1ZXVlaW5mbyAqLworICAgIGNhc2UgMTc4OgorICAgICAgLyogc3lzX3J0 X3NpZ3N1c3BlbmQgKi8KKyAgICBjYXNlIDE3OToKKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBzeXNfcHJlYWQ2NCAqLworICAgIGNhc2UgMTgwOgorICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+ YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1 MzIpCisJeworCSAgdWludDMyX3QgY291bnQ7CisJICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLAorCQkJICAgICAo Z2RiX2J5dGUgKikgJiBjb3VudCk7CisJICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIGNvdW50KSkKKwkgICAgeworCSAgICAgIHJl dHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c19wd3JpdGU2NCAqLworICAgIGNhc2UgMTgxOgorICAgICAgLyog c3lzX2Nob3duMTYgKi8KKyAgICBjYXNlIDE4MjoKKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBzeXNfZ2V0Y3dkICovCisgICAgY2FzZSAxODM6CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5h cmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHRtcHUz MikKKwl7CisJICB1aW50MzJfdCBzaXplOworCSAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwKKwkJCSAgICAgKGdk Yl9ieXRlICopICYgc2l6ZSk7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHNpemUpKQorCSAgICB7CisJICAgICAgcmV0dXJu ICgtMSk7CisJICAgIH0KKwl9CisgICAgICBicmVhazsKKworICAgICAgLyog c3lzX2NhcGdldCAqLworICAgIGNhc2UgMTg0OgorICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9jYXBfdXNlcl9kYXRhX3Qp KQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfY2Fwc2V0ICovCisgICAgY2FzZSAxODU6CisgICAgICBi cmVhazsKKworICAgICAgLyogc3lzX3NpZ2FsdHN0YWNrICovCisgICAgY2Fz ZSAxODY6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVw LT5zaXplX3N0YWNrX3QpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfc2VuZGZpbGUgKi8KKyAgICBj YXNlIDE4NzoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfb2ZmX3QpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAg IGNhc2UgMTg4OgorICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8KKyAgICBj YXNlIDE4OToKKyAgICAgIC8qIHN5c192Zm9yayAqLworICAgIGNhc2UgMTkw OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19nZXRybGltaXQgKi8K KyAgICBjYXNlIDE5MToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNv cmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfcmxpbWl0KSkKKwl7CisJICByZXR1cm4gKC0xKTsK Kwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX21tYXAyICovCisg ICAgY2FzZSAxOTI6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3Ry dW5jYXRlNjQgKi8KKyAgICBjYXNlIDE5MzoKKyAgICAgIC8qIHN5c19mdHJ1 bmNhdGU2NCAqLworICAgIGNhc2UgMTk0OgorICAgICAgYnJlYWs7CisKKyAg ICAgIC8qIHN5c19zdGF0NjQgKi8KKyAgICBjYXNlIDE5NToKKyAgICAgIC8q IHN5c19sc3RhdDY0ICovCisgICAgY2FzZSAxOTY6CisgICAgICAvKiBzeXNf ZnN0YXQ2NCAqLworICAgIGNhc2UgMTk3OgorICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9zdGF0NjQpKQorCXsKKwkgIHJl dHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNf bGNob3duICovCisgICAgY2FzZSAxOTg6CisgICAgICAvKiBzeXNfZ2V0dWlk ICovCisgICAgY2FzZSAxOTk6CisgICAgICAvKiBzeXNfZ2V0Z2lkICovCisg ICAgY2FzZSAyMDA6CisgICAgICAvKiBzeXNfZ2V0ZXVpZCAqLworICAgIGNh c2UgMjAxOgorICAgICAgLyogc3lzX2dldGVnaWQgKi8KKyAgICBjYXNlIDIw MjoKKyAgICAgIC8qIHN5c19zZXRyZXVpZCAqLworICAgIGNhc2UgMjAzOgor ICAgICAgLyogc3lzX3NldHJlZ2lkICovCisgICAgY2FzZSAyMDQ6CisgICAg ICBicmVhazsKKworICAgICAgLyogc3lzX2dldGdyb3VwcyAqLworICAgIGNh c2UgMjA1OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdj YWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAg ICAgIGlmICh0bXB1MzIpCisJeworCSAgaW50IGdpZHNldHNpemU7CisJICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcx LAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiBnaWRzZXRzaXplKTsKKwkgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0KKwkgICAgICAodG1wdTMyLCB0 ZGVwLT5zaXplX2dpZF90ICogZ2lkc2V0c2l6ZSkpCisJICAgIHsKKwkgICAg ICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfc2V0Z3JvdXBzICovCisgICAgY2FzZSAyMDY6CisgICAg ICAvKiBzeXNfZmNob3duICovCisgICAgY2FzZSAyMDc6CisgICAgICAvKiBz eXNfc2V0cmVzdWlkICovCisgICAgY2FzZSAyMDg6CisgICAgICBicmVhazsK KworICAgICAgLyogc3lzX2dldHJlc3VpZCAqLworICAgIGNhc2UgMjA5Ogor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRl cC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV91 aWRfdCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV91aWRfdCkpCisJewor CSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgdGRlcC0+c2l6ZV91aWRfdCkpCisJeworCSAgcmV0dXJuICgt MSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zZXRyZXNn aWQgKi8KKyAgICBjYXNlIDIxMDoKKyAgICAgIGJyZWFrOworCisgICAgICAv KiBzeXNfZ2V0cmVzZ2lkICovCisgICAgY2FzZSAyMTE6CisgICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2dpZF90KSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX2dpZF90KSkKKwl7CisJICByZXR1cm4g KC0xKTsKKwl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3Jl Z2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX2dpZF90KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9Cisg ICAgICBicmVhazsKKworICAgICAgLyogc3lzX2Nob3duICovCisgICAgY2Fz ZSAyMTI6CisgICAgICAvKiBzeXNfc2V0dWlkICovCisgICAgY2FzZSAyMTM6 CisgICAgICAvKiBzeXNfc2V0Z2lkICovCisgICAgY2FzZSAyMTQ6CisgICAg ICAvKiBzeXNfc2V0ZnN1aWQgKi8KKyAgICBjYXNlIDIxNToKKyAgICAgIC8q IHN5c19zZXRmc2dpZCAqLworICAgIGNhc2UgMjE2OgorICAgICAgLyogc3lz X3Bpdm90X3Jvb3QgKi8KKyAgICBjYXNlIDIxNzoKKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBzeXNfbWluY29yZSAqLworICAgIGNhc2UgMjE4OgorICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+ YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9QQUdF X1NJWkUpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfbWFkdmlzZSAqLworICAgIGNhc2UgMjE5Ogor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19nZXRkZW50czY0ICovCisg ICAgY2FzZSAyMjA6CisgICAgICB7CisJdWludDMyX3QgY291bnQ7CisJcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwK KwkJCSAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRl ICopICYgY291bnQpOworCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgdGRlcC0+c2l6ZV9kaXJlbnQ2NCAqIGNvdW50KSkKKwkgIHsK KwkgICAgcmV0dXJuICgtMSk7CisJICB9CisgICAgICB9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX2ZjbnRsNjQgKi8KKyAgICBjYXNlIDIyMToK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRk ZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBzd2l0 Y2ggKHRtcHUzMikKKwl7CisJY2FzZSBGX0dFVExLNjQ6CisJICByZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLAorCQkJ ICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2Zsb2NrNjQp KQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGJy ZWFrOworCWNhc2UgRl9TRVRMSzY0OgorCWNhc2UgRl9TRVRMS1c2NDoKKwkg IGJyZWFrOworCWRlZmF1bHQ6CisJICBnb3RvIHN5c19mY250bDsKKwkgIGJy ZWFrOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfbmlfc3lz Y2FsbCAqLworICAgIGNhc2UgMjIyOgorICAgICAgLyogc3lzX25pX3N5c2Nh bGwgKi8KKyAgICBjYXNlIDIyMzoKKyAgICAgIC8qIHN5c19nZXR0aWQgKi8K KyAgICBjYXNlIDIyNDoKKyAgICAgIC8qIHN5c19yZWFkYWhlYWQgKi8KKyAg ICBjYXNlIDIyNToKKyAgICAgIC8qIHN5c19zZXR4YXR0ciAqLworICAgIGNh c2UgMjI2OgorICAgICAgLyogc3lzX2xzZXR4YXR0ciAqLworICAgIGNhc2Ug MjI3OgorICAgICAgLyogc3lzX2ZzZXR4YXR0ciAqLworICAgIGNhc2UgMjI4 OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19nZXR4YXR0ciAqLwor ICAgIGNhc2UgMjI5OgorICAgICAgLyogc3lzX2xnZXR4YXR0ciAqLworICAg IGNhc2UgMjMwOgorICAgICAgLyogc3lzX2ZnZXR4YXR0ciAqLworICAgIGNh c2UgMjMxOgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdj YWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAg ICAgIGlmICh0bXB1MzIpCisJeworCSAgdWludDMyX3Qgc2l6ZTsKKwkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzQs CisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIHNpemUpOworCSAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBzaXplKSkKKwkgICAgewor CSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c19saXN0eGF0dHIgKi8KKyAgICBjYXNlIDIzMjoK KyAgICAgIC8qIHN5c19sbGlzdHhhdHRyICovCisgICAgY2FzZSAyMzM6Cisg ICAgICAvKiBzeXNfZmxpc3R4YXR0ciAqLworICAgIGNhc2UgMjM0OgorICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+ YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1 MzIpCisJeworCSAgdWludDMyX3Qgc2l6ZTsKKwkgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsCisJCQkgICAgIChn ZGJfYnl0ZSAqKSAmIHNpemUpOworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAodG1wdTMyLCBzaXplKSkKKwkgICAgeworCSAgICAgIHJldHVy biAoLTEpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8q IHN5c19yZW1vdmV4YXR0ciAqLworICAgIGNhc2UgMjM1OgorICAgICAgLyog c3lzX2xyZW1vdmV4YXR0ciAqLworICAgIGNhc2UgMjM2OgorICAgICAgLyog c3lzX2ZyZW1vdmV4YXR0ciAqLworICAgIGNhc2UgMjM3OgorICAgICAgLyog c3lzX3RraWxsICovCisgICAgY2FzZSAyMzg6CisgICAgICBicmVhazsKKwor ICAgICAgLyogc3lzX3NlbmRmaWxlNjQgKi8KKyAgICBjYXNlIDIzOToKKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAt PmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfbG9m Zl90KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsK KworICAgICAgLyogc3lzX2Z1dGV4ICovCisgICAgY2FzZSAyNDA6CisgICAg ICAvKiBzeXNfc2NoZWRfc2V0YWZmaW5pdHkgKi8KKyAgICBjYXNlIDI0MToK KyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfc2NoZWRfZ2V0YWZmaW5p dHkgKi8KKyAgICBjYXNlIDI0MjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7CisgICAgICBpZiAodG1wdTMyKQorCXsKKwkgIHVpbnQzMl90 IGxlbjsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUs IHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIGxlbik7CisJICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIGxlbikpCisJICAgIHsK KwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfc2V0X3RocmVhZF9hcmVhICovCisgICAgY2Fz ZSAyNDM6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2Nh Y2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVw LT5zaXplX2ludCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAg YnJlYWs7CisKKyAgICAgIC8qIHN5c19nZXRfdGhyZWFkX2FyZWEgKi8KKyAg ICBjYXNlIDI0NDoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfdXNlcl9kZXNjKSkKKwl7CisJICByZXR1cm4gKC0xKTsK Kwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2lvX3NldHVwICov CisgICAgY2FzZSAyNDU6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVj b3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX2xvbmcpKQorCXsKKwkgIHJldHVybiAoLTEpOwor CX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfaW9fZGVzdHJveSAq LworICAgIGNhc2UgMjQ2OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5 c19pb19nZXRldmVudHMgKi8KKyAgICBjYXNlIDI0NzoKKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzQsIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAodG1wdTMyKQorCXsK KwkgIGludDMyX3QgbnI7CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiBucik7CisJ ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIG5yICog dGRlcC0+c2l6ZV9pb19ldmVudCkpCisJICAgIHsKKwkgICAgICByZXR1cm4g KC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNfaW9fc3VibWl0ICovCisgICAgY2FzZSAyNDg6CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHRtcHUzMikKKwl7CisJ ICBpbnQzMl90IGksIG5yOworCSAgdWludDMyX3QgKmlvY2JwOworCSAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwg KGdkYl9ieXRlICopICYgbnIpOworCSAgaW9jYnAgPSAodWludDMyX3QgKikg YWxsb2NhIChuciAqIHRkZXAtPnNpemVfaW50KTsKKwkgIGlmICh0YXJnZXRf cmVhZF9tZW1vcnkKKwkgICAgICAodG1wdTMyLCAoZ2RiX2J5dGUgKikgaW9j YnAsIG5yICogdGRlcC0+c2l6ZV9pbnQpKQorCSAgICB7CisJICAgICAgaWYg KHJlY29yZF9kZWJ1ZykKKwkJeworCQkgIGZwcmludGZfdW5maWx0ZXJlZCAo Z2RiX3N0ZGxvZywKKwkJCQkgICAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9y IHJlYWRpbmcgbWVtb3J5IGF0IGFkZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwK KwkJCQkgICAgICBwYWRkcl9ueiAodG1wdTMyKSwgbnIgKiB0ZGVwLT5zaXpl X2ludCk7CisJCX0KKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCSAg Zm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisJICAgIHsKKwkgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChpb2NicFtpXSwgdGRlcC0+c2l6 ZV9pb2NiKSkKKwkJeworCQkgIHJldHVybiAoLTEpOworCQl9CisJICAgIH0K Kwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2lvX2NhbmNlbCAq LworICAgIGNhc2UgMjQ5OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Y29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9pb19ldmVudCkpCisJeworCSAgcmV0dXJuICgt MSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19mYWR2aXNl NjQgKi8KKyAgICBjYXNlIDI1MDoKKyAgICAgIC8qIHN5c19uaV9zeXNjYWxs ICovCisgICAgY2FzZSAyNTE6CisgICAgICBicmVhazsKKworICAgICAgLyog c3lzX2V4aXRfZ3JvdXAgKi8KKyAgICBjYXNlIDI1MjoKKyAgICAgIHsKKwlp bnQgcTsKKwl0YXJnZXRfdGVybWluYWxfb3VycyAoKTsKKwlxID0KKwkgIHlx dWVyeSAoXworCQkgICgiVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgc3lzY2Fs bCBleGl0X2dyb3VwLiAgSXQgd2lsbCBtYWtlIHRoZSBwcm9ncmFtIGV4aXQu ICBEbyB5b3Ugd2FudCB0byBzdG9wIHRoZSBwcm9ncmFtPyIpKTsKKwl0YXJn ZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7CisJaWYgKHEpCisJICB7CisJICAg IHJldHVybiAoMSk7CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKwor ICAgICAgLyogc3lzX2xvb2t1cF9kY29va2llICovCisgICAgY2FzZSAyNTM6 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0 ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYg KHRtcHUzMikKKwl7CisJICB1aW50MzJfdCBsZW47CisJICByZWdjYWNoZV9y YXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5 dGUgKikgJiBsZW4pOworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCBsZW4pKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7 CisJICAgIH0KKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2Vw b2xsX2NyZWF0ZSAqLworICAgIGNhc2UgMjU0OgorICAgICAgLyogc3lzX2Vw b2xsX2N0bCAqLworICAgIGNhc2UgMjU1OgorICAgICAgYnJlYWs7CisKKyAg ICAgIC8qIHN5c19lcG9sbF93YWl0ICovCisgICAgY2FzZSAyNTY6CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5h cmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHRtcHUz MikKKwl7CisJICBpbnQzMl90IG1heGV2ZW50czsKKwkgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsCisJCQkgICAg IChnZGJfYnl0ZSAqKSAmIG1heGV2ZW50cyk7CisJICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtCisJICAgICAgKHRtcHUzMiwgbWF4ZXZlbnRzICog dGRlcC0+c2l6ZV9lcG9sbF9ldmVudCkpCisJICAgIHsKKwkgICAgICByZXR1 cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworCisgICAgICAv KiBzeXNfcmVtYXBfZmlsZV9wYWdlcyAqLworICAgIGNhc2UgMjU3OgorICAg ICAgLyogc3lzX3NldF90aWRfYWRkcmVzcyAqLworICAgIGNhc2UgMjU4Ogor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c190aW1lcl9jcmVhdGUgKi8K KyAgICBjYXNlIDI1OToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNv cmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfaW50KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9 CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3RpbWVyX3NldHRpbWUg Ki8KKyAgICBjYXNlIDI2MDoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzQsIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0 bXB1MzIsIHRkZXAtPnNpemVfaXRpbWVyc3BlYykpCisJeworCSAgcmV0dXJu ICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c190aW1l cl9nZXR0aW1lICovCisgICAgY2FzZSAyNjE6CisgICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2l0aW1lcnNwZWMpKQorCXsK KwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAv KiBzeXNfdGltZXJfZ2V0b3ZlcnJ1biAqLworICAgIGNhc2UgMjYyOgorICAg ICAgLyogc3lzX3RpbWVyX2RlbGV0ZSAqLworICAgIGNhc2UgMjYzOgorICAg ICAgLyogc3lzX2Nsb2NrX3NldHRpbWUgKi8KKyAgICBjYXNlIDI2NDoKKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfY2xvY2tfZ2V0dGltZSAqLwor ICAgIGNhc2UgMjY1OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29y ZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgdGRlcC0+c2l6ZV90aW1lc3BlYykpCisJeworCSAgcmV0dXJuICgtMSk7 CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19jbG9ja19nZXRy ZXMgKi8KKyAgICBjYXNlIDI2NjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfdGltZXNwZWMpKQorCXsKKwkgIHJldHVy biAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfY2xv Y2tfbmFub3NsZWVwICovCisgICAgY2FzZSAyNjc6CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3RpbWVzcGVjKSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAg Lyogc3lzX3N0YXRmczY0ICovCisgICAgY2FzZSAyNjg6CisgICAgICAvKiBz eXNfZnN0YXRmczY0ICovCisgICAgY2FzZSAyNjk6CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3N0YXRmczY0KSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAg Lyogc3lzX3Rna2lsbCAqLworICAgIGNhc2UgMjcwOgorICAgICAgLyogc3lz X3V0aW1lcyAqLworICAgIGNhc2UgMjcxOgorICAgICAgLyogc3lzX2ZhZHZp c2U2NF82NCAqLworICAgIGNhc2UgMjcyOgorICAgICAgLyogc3lzX25pX3N5 c2NhbGwgKi8KKyAgICBjYXNlIDI3MzoKKyAgICAgIC8qIHN5c19tYmluZCAq LworICAgIGNhc2UgMjc0OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5 c19nZXRfbWVtcG9saWN5ICovCisgICAgY2FzZSAyNzU6CisgICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2ludCkpCisJewor CSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIpCisJeworCSAgdWludDMyX3Qg bWF4bm9kZTsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIHRkZXAtPmFyZzMsCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIG1heG5v ZGUpOworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCBtYXhub2RlICogdGRlcC0+c2l6ZV9sb25nKSkKKwkgICAgeworCSAgICAg IHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisKKyAg ICAgIC8qIHN5c19zZXRfbWVtcG9saWN5ICovCisgICAgY2FzZSAyNzY6Cisg ICAgICAvKiBzeXNfbXFfb3BlbiAqLworICAgIGNhc2UgMjc3OgorICAgICAg Lyogc3lzX21xX3VubGluayAqLworICAgIGNhc2UgMjc4OgorICAgICAgLyog c3lzX21xX3RpbWVkc2VuZCAqLworICAgIGNhc2UgMjc5OgorICAgICAgYnJl YWs7CisKKyAgICAgIC8qIHN5c19tcV90aW1lZHJlY2VpdmUgKi8KKyAgICBj YXNlIDI4MDoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Cisg ICAgICBpZiAodG1wdTMyKQorCXsKKwkgIHVpbnQzMl90IG1zZ19sZW47CisJ ICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5h cmczLAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiBtc2dfbGVuKTsKKwkgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgbXNnX2xlbikp CisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAt PmFyZzQsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfaW50 KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKwor ICAgICAgLyogc3lzX21xX25vdGlmeSAqLworICAgIGNhc2UgMjgxOgorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19tcV9nZXRzZXRhdHRyICovCisg ICAgY2FzZSAyODI6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCB0ZGVwLT5zaXplX21xX2F0dHIpKQorCXsKKwkgIHJldHVybiAoLTEpOwor CX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfa2V4ZWNfbG9hZCAq LworICAgIGNhc2UgMjgzOgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5 c193YWl0aWQgKi8KKyAgICBjYXNlIDI4NDoKKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfc2lnaW5mbykpCisJeworCSAg cmV0dXJuICgtMSk7CisJfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Y29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnNSwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9ydXNhZ2UpKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfbmlfc3lzY2Fs bCAqLworICAgIGNhc2UgMjg1OgorICAgICAgLyogc3lzX2FkZF9rZXkgKi8K KyAgICBjYXNlIDI4NjoKKyAgICAgIC8qIHN5c19yZXF1ZXN0X2tleSAqLwor ICAgIGNhc2UgMjg3OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19r ZXljdGwgKi8KKyAgICBjYXNlIDI4ODoKKyAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7CisgICAgICBpZiAodG1wdTMyID09IDYgfHwgdG1wdTMy ID09IDExKQorCXsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIHRkZXAtPmFyZzMsCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7CisJICBpZiAodG1wdTMyKQorCSAgICB7CisJICAgICAgdWludDMy X3QgYnVmbGVuOworCSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIHRkZXAtPmFyZzQsCisJCQkJIChnZGJfYnl0ZSAqKSAmIGJ1 Zmxlbik7CisJICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCBidWZsZW4pKQorCQl7CisJCSAgcmV0dXJuICgtMSk7CisJCX0K KwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfaW9w cmlvX3NldCAqLworICAgIGNhc2UgMjg5OgorICAgICAgLyogc3lzX2lvcHJp b19nZXQgKi8KKyAgICBjYXNlIDI5MDoKKyAgICAgIC8qIHN5c19pbm90aWZ5 X2luaXQgKi8KKyAgICBjYXNlIDI5MToKKyAgICAgIC8qIHN5c19pbm90aWZ5 X2FkZF93YXRjaCAqLworICAgIGNhc2UgMjkyOgorICAgICAgLyogc3lzX2lu b3RpZnlfcm1fd2F0Y2ggKi8KKyAgICBjYXNlIDI5MzoKKyAgICAgIC8qIHN5 c19taWdyYXRlX3BhZ2VzICovCisgICAgY2FzZSAyOTQ6CisgICAgICAvKiBz eXNfb3BlbmF0ICovCisgICAgY2FzZSAyOTU6CisgICAgICAvKiBzeXNfbWtk aXJhdCAqLworICAgIGNhc2UgMjk2OgorICAgICAgLyogc3lzX21rbm9kYXQg Ki8KKyAgICBjYXNlIDI5NzoKKyAgICAgIC8qIHN5c19mY2hvd25hdCAqLwor ICAgIGNhc2UgMjk4OgorICAgICAgLyogc3lzX2Z1dGltZXNhdCAqLworICAg IGNhc2UgMjk5OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19mc3Rh dGF0NjQgKi8KKyAgICBjYXNlIDMwMDoKKyAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIHRkZXAtPnNpemVfc3RhdDY0KSkKKwl7CisJICByZXR1 cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3Vu bGlua2F0ICovCisgICAgY2FzZSAzMDE6CisgICAgICAvKiBzeXNfcmVuYW1l YXQgKi8KKyAgICBjYXNlIDMwMjoKKyAgICAgIC8qIHN5c19saW5rYXQgKi8K KyAgICBjYXNlIDMwMzoKKyAgICAgIC8qIHN5c19zeW1saW5rYXQgKi8KKyAg ICBjYXNlIDMwNDoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfcmVh ZGxpbmthdCAqLworICAgIGNhc2UgMzA1OgorICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIpCisJeworCSAgaW50 MzJfdCBidWZzaXo7CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3Jl Z2NhY2hlLCB0ZGVwLT5hcmc0LAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiBi dWZzaXopOworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCBidWZzaXopKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJ ICAgIH0KKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2ZjaG1v ZGF0ICovCisgICAgY2FzZSAzMDY6CisgICAgICAvKiBzeXNfZmFjY2Vzc2F0 ICovCisgICAgY2FzZSAzMDc6CisgICAgICBicmVhazsKKworICAgICAgLyog c3lzX3BzZWxlY3Q2ICovCisgICAgY2FzZSAzMDg6CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2ZkX3NldCkpCisJewor CSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgdGRlcC0+c2l6ZV9mZF9zZXQpKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIHRkZXAtPmFyZzQsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfZmRfc2V0KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVw LT5hcmc1LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3Rp bWVzcGVjKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX3Bwb2xsICovCisgICAgY2FzZSAzMDk6Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVw LT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHRt cHUzMikKKwl7CisJICB1aW50MzJfdCBuZmRzOworCSAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwKKwkJCSAgICAg KGdkYl9ieXRlICopICYgbmZkcyk7CisJICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfcG9sbGZkICogbmZkcykp CisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAt PmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdGlt ZXNwZWMpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfdW5zaGFyZSAqLworICAgIGNhc2UgMzEwOgor ICAgICAgLyogc3lzX3NldF9yb2J1c3RfbGlzdCAqLworICAgIGNhc2UgMzEx OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19nZXRfcm9idXN0X2xp c3QgKi8KKyAgICBjYXNlIDMxMjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfaW50KSkKKwl7CisJICByZXR1cm4gKC0x KTsKKwl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2Nh Y2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVw LT5zaXplX2ludCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAg YnJlYWs7CisKKyAgICAgIC8qIHN5c19zcGxpY2UgKi8KKyAgICBjYXNlIDMx MzoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUs IHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfbG9mZl90KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmc0 LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2xvZmZfdCkp CisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAg ICAgIC8qIHN5c19zeW5jX2ZpbGVfcmFuZ2UgKi8KKyAgICBjYXNlIDMxNDoK KyAgICAgIC8qIHN5c190ZWUgKi8KKyAgICBjYXNlIDMxNToKKyAgICAgIC8q IHN5c192bXNwbGljZSAqLworICAgIGNhc2UgMzE2OgorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c19tb3ZlX3BhZ2VzICovCisgICAgY2FzZSAzMTc6 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0 ZGVwLT5hcmc1LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYg KHRtcHUzMikKKwl7CisJICB1aW50MzJfdCBucl9wYWdlczsKKwkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsCisJ CQkgICAgIChnZGJfYnl0ZSAqKSAmIG5yX3BhZ2VzKTsKKwkgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgbnJfcGFnZXMgKiB0ZGVw LT5zaXplX2ludCkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkg ICAgfQorCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfZ2V0Y3B1 ICovCisgICAgY2FzZSAzMTg6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX2ludCkpCisJeworCSAgcmV0dXJuICgtMSk7 CisJfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNo ZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+ c2l6ZV9pbnQpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMs IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdWxvbmcgKiAy KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKwor ICAgICAgLyogc3lzX2Vwb2xsX3B3YWl0ICovCisgICAgY2FzZSAzMTk6Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVw LT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHRt cHUzMikKKwl7CisJICBpbnQzMl90IG1heGV2ZW50czsKKwkgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsCisJCQkg ICAgIChnZGJfYnl0ZSAqKSAmIG1heGV2ZW50cyk7CisJICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtCisJICAgICAgKHRtcHUzMiwgbWF4ZXZlbnRz ICogdGRlcC0+c2l6ZV9lcG9sbF9ldmVudCkpCisJICAgIHsKKwkgICAgICBy ZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworCisgICAg ZGVmYXVsdDoKKyAgICAgIHByaW50Zl91bmZpbHRlcmVkIChfCisJCQkgKCJQ cm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vzbid0IHN1cHBv cnQgc3lzY2FsbCBudW1iZXIgMHglMDh4XG4iKSwKKwkJCSB0bXB1MzIpOwor ICAgICAgcmV0dXJuICgtMSk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAg cmV0dXJuICgwKTsKK30KLS0tIGEvL2Rldi9udWxsCisrKyBiL2xpbnV4LXJl Y29yZC5oCkBAIC0wLDAgKzEsMTcxIEBACisvKiBQcm9jZXNzIHJlY29yZCBh bmQgcmVwbGF5IHRhcmdldCBjb2RlIGZvciBHTlUvTGludXguCisKKyAgIENv cHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9MSU5VWF9SRUNPUkRf SF8KKyNkZWZpbmUgX0xJTlVYX1JFQ09SRF9IXworCit0eXBlZGVmIHN0cnVj dCBsaW51eF9yZWNvcmRfdGRlcF9zCit7CisgIC8qIFRoZSBzaXplIG9mIHRo ZSB0eXBlIHRoYXQgd2lsbCBiZSB1c2UgaW4gc3lzdGVtIGNhbGwuICAqLwor ICBpbnQgc2l6ZV9fb2xkX2tlcm5lbF9zdGF0OworICBpbnQgc2l6ZV90bXM7 CisgIGludCBzaXplX2xvZmZfdDsKKyAgaW50IHNpemVfZmxvY2s7CisgIGlu dCBzaXplX29sZG9sZF91dHNuYW1lOworICBpbnQgc2l6ZV91c3RhdDsKKyAg aW50IHNpemVfb2xkX3NpZ2FjdGlvbjsKKyAgaW50IHNpemVfb2xkX3NpZ3Nl dF90OworICBpbnQgc2l6ZV9ybGltaXQ7CisgIGludCBzaXplX3J1c2FnZTsK KyAgaW50IHNpemVfdGltZXZhbDsKKyAgaW50IHNpemVfdGltZXpvbmU7Cisg IGludCBzaXplX29sZF9naWRfdDsKKyAgaW50IHNpemVfb2xkX3VpZF90Owor ICBpbnQgc2l6ZV9mZF9zZXQ7CisgIGludCBzaXplX2RpcmVudDsKKyAgaW50 IHNpemVfZGlyZW50NjQ7CisgIGludCBzaXplX3N0YXRmczsKKyAgaW50IHNp emVfc3RhdGZzNjQ7CisgIGludCBzaXplX3NvY2thZGRyOworICBpbnQgc2l6 ZV9pbnQ7CisgIGludCBzaXplX2xvbmc7CisgIGludCBzaXplX3Vsb25nOwor ICBpbnQgc2l6ZV9tc2doZHI7CisgIGludCBzaXplX2l0aW1lcnZhbDsKKyAg aW50IHNpemVfc3RhdDsKKyAgaW50IHNpemVfb2xkX3V0c25hbWU7CisgIGlu dCBzaXplX3N5c2luZm87CisgIGludCBzaXplX21zcWlkX2RzOworICBpbnQg c2l6ZV9zaG1pZF9kczsKKyAgaW50IHNpemVfbmV3X3V0c25hbWU7CisgIGlu dCBzaXplX3RpbWV4OworICBpbnQgc2l6ZV9tZW1fZHFpbmZvOworICBpbnQg c2l6ZV9pZl9kcWJsazsKKyAgaW50IHNpemVfZnNfcXVvdGFfc3RhdDsKKyAg aW50IHNpemVfdGltZXNwZWM7CisgIGludCBzaXplX3BvbGxmZDsKKyAgaW50 IHNpemVfTkZTX0ZIU0laRTsKKyAgaW50IHNpemVfa25mc2RfZmg7CisgIGlu dCBzaXplX1RBU0tfQ09NTV9MRU47CisgIGludCBzaXplX3NpZ2FjdGlvbjsK KyAgaW50IHNpemVfc2lnc2V0X3Q7CisgIGludCBzaXplX3NpZ2luZm9fdDsK KyAgaW50IHNpemVfY2FwX3VzZXJfZGF0YV90OworICBpbnQgc2l6ZV9zdGFj a190OworICBpbnQgc2l6ZV9vZmZfdDsKKyAgaW50IHNpemVfc3RhdDY0Owor ICBpbnQgc2l6ZV9naWRfdDsKKyAgaW50IHNpemVfdWlkX3Q7CisgIGludCBz aXplX1BBR0VfU0laRTsKKyAgaW50IHNpemVfZmxvY2s2NDsKKyAgaW50IHNp emVfdXNlcl9kZXNjOworICBpbnQgc2l6ZV9pb19ldmVudDsKKyAgaW50IHNp emVfaW9jYjsKKyAgaW50IHNpemVfZXBvbGxfZXZlbnQ7CisgIGludCBzaXpl X2l0aW1lcnNwZWM7CisgIGludCBzaXplX21xX2F0dHI7CisgIGludCBzaXpl X3NpZ2luZm87CisKKyAgaW50IHNpemVfdGVybWlvczsKKyAgaW50IHNpemVf dGVybWlvczI7CisgIGludCBzaXplX3BpZF90OworICBpbnQgc2l6ZV93aW5z aXplOworICBpbnQgc2l6ZV9jaGFyOworICBpbnQgc2l6ZV9zZXJpYWxfc3Ry dWN0OworICBpbnQgc2l6ZV9zZXJpYWxfaWNvdW50ZXJfc3RydWN0OworICBp bnQgc2l6ZV9oYXllc19lc3BfY29uZmlnOworCisgIC8qIHRoZSB2YWx1ZXMg b2YgdGhlIHNlY29uZCBhcmd1bWVudCBvZiBzeXN0ZW0gY2FsbCAic3lzX2lv Y3RsIi4gICovCisgIGludCBpb2N0bF9UQ0dFVFM7CisgIGludCBpb2N0bF9U Q1NFVFM7CisgIGludCBpb2N0bF9UQ1NFVFNXOworICBpbnQgaW9jdGxfVENT RVRTRjsKKyAgaW50IGlvY3RsX1RDR0VUQTsKKyAgaW50IGlvY3RsX1RDU0VU QTsKKyAgaW50IGlvY3RsX1RDU0VUQVc7CisgIGludCBpb2N0bF9UQ1NFVEFG OworICBpbnQgaW9jdGxfVENTQlJLOworICBpbnQgaW9jdGxfVENYT05DOwor ICBpbnQgaW9jdGxfVENGTFNIOworICBpbnQgaW9jdGxfVElPQ0VYQ0w7Cisg IGludCBpb2N0bF9USU9DTlhDTDsKKyAgaW50IGlvY3RsX1RJT0NTQ1RUWTsK KyAgaW50IGlvY3RsX1RJT0NHUEdSUDsKKyAgaW50IGlvY3RsX1RJT0NTUEdS UDsKKyAgaW50IGlvY3RsX1RJT0NPVVRROworICBpbnQgaW9jdGxfVElPQ1NU STsKKyAgaW50IGlvY3RsX1RJT0NHV0lOU1o7CisgIGludCBpb2N0bF9USU9D U1dJTlNaOworICBpbnQgaW9jdGxfVElPQ01HRVQ7CisgIGludCBpb2N0bF9U SU9DTUJJUzsKKyAgaW50IGlvY3RsX1RJT0NNQklDOworICBpbnQgaW9jdGxf VElPQ01TRVQ7CisgIGludCBpb2N0bF9USU9DR1NPRlRDQVI7CisgIGludCBp b2N0bF9USU9DU1NPRlRDQVI7CisgIGludCBpb2N0bF9GSU9OUkVBRDsKKyAg aW50IGlvY3RsX1RJT0NJTlE7CisgIGludCBpb2N0bF9USU9DTElOVVg7Cisg IGludCBpb2N0bF9USU9DQ09OUzsKKyAgaW50IGlvY3RsX1RJT0NHU0VSSUFM OworICBpbnQgaW9jdGxfVElPQ1NTRVJJQUw7CisgIGludCBpb2N0bF9USU9D UEtUOworICBpbnQgaW9jdGxfRklPTkJJTzsKKyAgaW50IGlvY3RsX1RJT0NO T1RUWTsKKyAgaW50IGlvY3RsX1RJT0NTRVREOworICBpbnQgaW9jdGxfVElP Q0dFVEQ7CisgIGludCBpb2N0bF9UQ1NCUktQOworICBpbnQgaW9jdGxfVElP Q1RUWUdTVFJVQ1Q7CisgIGludCBpb2N0bF9USU9DU0JSSzsKKyAgaW50IGlv Y3RsX1RJT0NDQlJLOworICBpbnQgaW9jdGxfVElPQ0dTSUQ7CisgIGludCBp b2N0bF9UQ0dFVFMyOworICBpbnQgaW9jdGxfVENTRVRTMjsKKyAgaW50IGlv Y3RsX1RDU0VUU1cyOworICBpbnQgaW9jdGxfVENTRVRTRjI7CisgIGludCBp b2N0bF9USU9DR1BUTjsKKyAgaW50IGlvY3RsX1RJT0NTUFRMQ0s7CisgIGlu dCBpb2N0bF9GSU9OQ0xFWDsKKyAgaW50IGlvY3RsX0ZJT0NMRVg7CisgIGlu dCBpb2N0bF9GSU9BU1lOQzsKKyAgaW50IGlvY3RsX1RJT0NTRVJDT05GSUc7 CisgIGludCBpb2N0bF9USU9DU0VSR1dJTEQ7CisgIGludCBpb2N0bF9USU9D U0VSU1dJTEQ7CisgIGludCBpb2N0bF9USU9DR0xDS1RSTUlPUzsKKyAgaW50 IGlvY3RsX1RJT0NTTENLVFJNSU9TOworICBpbnQgaW9jdGxfVElPQ1NFUkdT VFJVQ1Q7CisgIGludCBpb2N0bF9USU9DU0VSR0VUTFNSOworICBpbnQgaW9j dGxfVElPQ1NFUkdFVE1VTFRJOworICBpbnQgaW9jdGxfVElPQ1NFUlNFVE1V TFRJOworICBpbnQgaW9jdGxfVElPQ01JV0FJVDsKKyAgaW50IGlvY3RsX1RJ T0NHSUNPVU5UOworICBpbnQgaW9jdGxfVElPQ0dIQVlFU0VTUDsKKyAgaW50 IGlvY3RsX1RJT0NTSEFZRVNFU1A7CisgIGludCBpb2N0bF9GSU9RU0laRTsK KworICAvKiBUaGUgbnVtYmVyIG9mIHRoZSByZWdpc3RlcnMgdGhhdCB1c2Ug dG8gYmUgdGhlIGFyZ3VtZW50cyBvZiBzeXN0ZW0gY2FsbC4gICovCisgIGlu dCBhcmcxOworICBpbnQgYXJnMjsKKyAgaW50IGFyZzM7CisgIGludCBhcmc0 OworICBpbnQgYXJnNTsKK30gbGludXhfcmVjb3JkX3RkZXBfdDsKKworZXh0 ZXJuIGludCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIGxp bnV4X3JlY29yZF90ZGVwX3QgKiB0ZGVwKTsKKworI2VuZGlmIC8qIF9MSU5V WF9SRUNPUkRfSF8gKi8KLS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZp bGUuaW4KQEAgLTUxNSw3ICs1MTUsNyBAQAogCXhjb2ZmcmVhZC5vIFwKIAlw cm9sb2d1ZS12YWx1ZS5vIFwKIAlzeW1maWxlLW1lbS5vIFwKLQljb3JlbG93 Lm8KKwljb3JlbG93Lm8gbGludXgtcmVjb3JkLm8KIAogIyBIb3N0LWRlcGVu ZGVudCBtYWtlZmlsZSBmcmFnbWVudCBjb21lcyBpbiBoZXJlLgogQGhvc3Rf bWFrZWZpbGVfZnJhZ0AKQEAgLTEyOTcsNyArMTI5Nyw3IEBACiAJaW5mLXB0 cmFjZS5jIGluZi10dHJhY2UuYyBcCiAJaXJpeDUtbmF0LmMgXAogCWxpYnVu d2luZC1mcmFtZS5jIFwKLQlsaW51eC1mb3JrLmMgXAorCWxpbnV4LWZvcmsu YyBsaW51eC1yZWNvcmQuYyBcCiAJbTY4aGMxMS10ZGVwLmMgXAogCW0zMnIt dGRlcC5jIFwKIAltMzJyLWxpbnV4LW5hdC5jIG0zMnItbGludXgtdGRlcC5j IFwK ------=_Part_38585_21044580.1229671310125--