Return-Path: X-Original-To: apmail-httpd-dev-archive@www.apache.org Delivered-To: apmail-httpd-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 775DD116C7 for ; Mon, 2 Jun 2014 08:22:33 +0000 (UTC) Received: (qmail 75336 invoked by uid 500); 2 Jun 2014 08:22:33 -0000 Delivered-To: apmail-httpd-dev-archive@httpd.apache.org Received: (qmail 75257 invoked by uid 500); 2 Jun 2014 08:22:33 -0000 Mailing-List: contact dev-help@httpd.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@httpd.apache.org list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list dev@httpd.apache.org Received: (qmail 75249 invoked by uid 99); 2 Jun 2014 08:22:32 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 02 Jun 2014 08:22:32 +0000 X-ASF-Spam-Status: No, hits=-5.0 required=5.0 tests=RCVD_IN_DNSWL_HI,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of yingqi.lu@intel.com designates 143.182.124.21 as permitted sender) Received: from [143.182.124.21] (HELO mga03.intel.com) (143.182.124.21) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 02 Jun 2014 08:22:28 +0000 Received: from azsmga001.ch.intel.com ([10.2.17.19]) by azsmga101.ch.intel.com with ESMTP; 02 Jun 2014 01:22:05 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.98,955,1392192000"; d="scan'208";a="439751651" Received: from orsmsx109.amr.corp.intel.com ([10.22.240.7]) by azsmga001.ch.intel.com with ESMTP; 02 Jun 2014 01:22:03 -0700 Received: from orsmsx113.amr.corp.intel.com ([169.254.7.170]) by ORSMSX109.amr.corp.intel.com ([169.254.2.245]) with mapi id 14.03.0123.003; Mon, 2 Jun 2014 01:22:03 -0700 From: "Lu, Yingqi" To: "dev@httpd.apache.org" Subject: RE: [PATCH ASF bugzilla# 55897]prefork_mpm patch with SO_REUSEPORT support Thread-Topic: [PATCH ASF bugzilla# 55897]prefork_mpm patch with SO_REUSEPORT support Thread-Index: AQHPfOnXu18Rb17O8k6v06IRbBQ5i5tbWkkA///q9LaAAHWVQIABsM1w Date: Mon, 2 Jun 2014 08:22:02 +0000 Message-ID: <9ACD5B67AAC5594CB6268234CF29CF9AA3762528@ORSMSX113.amr.corp.intel.com> References: <9ACD5B67AAC5594CB6268234CF29CF9AA37532AE@ORSMSX113.amr.corp.intel.com> <9ACD5B67AAC5594CB6268234CF29CF9AA3757792@ORSMSX113.amr.corp.intel.com> <9ACD5B67AAC5594CB6268234CF29CF9AA3757D88@ORSMSX113.amr.corp.intel.com> <3AB38FA5-CA8D-4818-8DA7-8198AE01A8BB@jaguNET.com> <9ACD5B67AAC5594CB6268234CF29CF9AA3758EA6@ORSMSX113.amr.corp.intel.com> <9ACD5B67AAC5594CB6268234CF29CF9AA37610E3@ORSMSX113.amr.corp.intel.com> <99688D42-DC68-4159-9ACB-D24C4A3ECD15@jaguNET.com>, <46E15AF1-6E0F-43B5-83A8-B0BDD6436824@intel.com> <9ACD5B67AAC5594CB6268234CF29CF9AA3761DF8@ORSMSX113.amr.corp.intel.com> In-Reply-To: <9ACD5B67AAC5594CB6268234CF29CF9AA3761DF8@ORSMSX113.amr.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [10.22.254.138] Content-Type: multipart/mixed; boundary="_003_9ACD5B67AAC5594CB6268234CF29CF9AA3762528ORSMSX113amrcor_" MIME-Version: 1.0 X-Virus-Checked: Checked by ClamAV on apache.org --_003_9ACD5B67AAC5594CB6268234CF29CF9AA3762528ORSMSX113amrcor_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Jim, Personally, I think the second approach is better, it keeps ap_mpm_pod_sign= al () and ap_mpm_pod_killpg () exactly as the original ones, only modifies = dummy_connection (). Please let me know if you have different opinions. Attached is the latest version of the two patches. They were both generated= against trunk rev. 1598561. Please review them and let me know if there is= anything missing. I already updated the Bugzilla database for the item 55897 and item 56279. Thanks, Yingqi -----Original Message----- From: Lu, Yingqi [mailto:yingqi.lu@intel.com]=20 Sent: Saturday, May 31, 2014 11:48 PM To: dev@httpd.apache.org Subject: RE: [PATCH ASF bugzilla# 55897]prefork_mpm patch with SO_REUSEPORT= support Hi Jim, Regarding to your comment #2, yes, you are right, it should be ap_mpm_pod_k= illpg(pod, retained->max_daemons_limit, i). Thanks very much for catching t= his. Regarding to your comment #1, the patch modifies the dummy_connection(ap_po= d_t *pod) to be dummy_connection(ap_pod_t *pod, int child_bucket). Inside t= he function, the reference listen statement is mpm_listen[child_bucket]. An= d, ap_mpm_pod_signal() calls dummy_connection().=20 Can we just modify the return of ap_mpm_pod_signal() from dummy_connection(= pod) to dummy_connection(pod, 0) and add ap_mpm_pod_signal_ex()?=20 Or, if we need to keep ap_mpm_pod_signal() exactly as the original, I can m= odify dummy_connection() to send dummy data via all the duplicated listen s= tatements. Then, we do not need child_bucket as the input parameter for dum= my_connection(). In this case, we do not need adding ap_mpm_pod_signal_ex()= too. I already tested the code for the above approaches and they both work.=20 Please let me know which way you think is better. I can quickly send you an= update for review. Thanks, Yingqi -----Original Message----- From: Lu, Yingqi Sent: Saturday, May 31, 2014 3:28 PM To: Subject: Re: [PATCH ASF bugzilla# 55897]prefork_mpm patch with SO_REUSEPORT= support Hi Jim, Thanks very much for your email! I will look into both of them and send an = update tonight! Thanks, Yingqi > On May 31, 2014, at 9:43 AM, "Jim Jagielski" wrote: >=20 > I also see: >=20 > /* kill off the idle ones */ > - ap_mpm_pod_killpg(pod, retained->max_daemons_limit); > + for (i =3D 0; i < num_buckets; i++) { > + ap_mpm_pod_killpg(pod[i], i, retained->max_daemons_limit); > + } >=20 >=20 > Is that right? Why isn't it: ap_mpm_pod_killpg(pod, retained->max_daemons= _limit, i); ?? >=20 > /** > * Write data to the pipe-of-death, signalling that all child process > * should die. > * @param pod The pipe-of-death to write to. > * @param num The number of child processes to kill > + * @param my_bucket the bucket that holds the dying child process. > */ > -AP_DECLARE(void) ap_mpm_pod_killpg(ap_pod_t *pod, int num); > +AP_DECLARE(void) ap_mpm_pod_killpg(ap_pod_t *pod, int num, int=20 > +child_bucket); >=20 > Isn't 'num' the same in both implementation?? >=20 >> On May 31, 2014, at 12:03 PM, Jim Jagielski wrote: >>=20 >> Sorry I didn't catch this earlier: >>=20 >> I see >>=20 >> +++ httpd-trunk.new/include/mpm_common.h 2014-05-16 13:07:03.89298749= 1 -0400 >> @@ -267,16 +267,18 @@ >> * Write data to the pipe-of-death, signalling that one child process >> * should die. >> * @param pod the pipe-of-death to write to. >> + * @param my_bucket the bucket that holds the dying child process. >> */ >> -AP_DECLARE(apr_status_t) ap_mpm_pod_signal(ap_pod_t *pod); >> +AP_DECLARE(apr_status_t) ap_mpm_pod_signal(ap_pod_t *pod, int=20 >> +child_bucket); >>=20 >> We can change the API at this point. We could add another function,=20 >> eg ap_mpm_pod_signal_ex() which takes the int param, but we can't=20 >> modify ap_mpm_pod_signal() itself. >>=20 >>> On May 30, 2014, at 11:15 AM, Lu, Yingqi wrote: >>>=20 >>> Thank you very much! >>>=20 >>> Thanks, >>> Yingqi >>>=20 >>> -----Original Message----- >>> From: Jim Jagielski [mailto:jim@jaguNET.com] >>> Sent: Friday, May 30, 2014 7:07 AM >>> To: dev@httpd.apache.org >>> Subject: Re: [PATCH ASF bugzilla# 55897]prefork_mpm patch with=20 >>> SO_REUSEPORT support >>>=20 >>> Thx! Let me review. My plan is to fold into trunk this weekend. >>>=20 >>>> On May 16, 2014, at 2:53 PM, Lu, Yingqi wrote: >>>>=20 >>>> Hi Jim, >>>>=20 >>>> Thanks very much for clarifying this with me. I added #ifdef in the co= de to check _SC_NPROCESSORS_ONLN in the so_reuseport patch. Bucket patch do= es not use this parameter so that it remains the same. >>>>=20 >>>> Attached are the two most recent patches. I already updated the bugzil= la #55897 as well. >>>>=20 >>>> Thanks, >>>> Yingqi >>>>=20 >>>> -----Original Message----- >>>> From: Jim Jagielski [mailto:jim@jaguNET.com] >>>> Sent: Thursday, May 15, 2014 7:53 AM >>>> To: dev@httpd.apache.org >>>> Subject: Re: [PATCH ASF bugzilla# 55897]prefork_mpm patch with=20 >>>> SO_REUSEPORT support >>>>=20 >>>> I was thinking more about the sysconf(_SC_NPROCESSORS_ONLN) stuff... >>>> We could either check for that during config/build or protect it with = a #ifdef in the code (and create some logging so the admin nows if it was f= ound or not). >>>>=20 >>>>> On May 14, 2014, at 11:59 AM, Lu, Yingqi wrote: >>>>>=20 >>>>> Hi Jim, >>>>>=20 >>>>> Thanks very much for your email. >>>>>=20 >>>>> In the SO_REUSEPORT patch, SO_REUSEPORT support is checked inside lis= ten.c file. If the feature is not supported on the OS (for example, Linux k= ernel < 3.9), it will fall back to the original behavior.=20 >>>>>=20 >>>>> In the bucket patch, there is no need to check the params. With singl= e listen statement, it is just the default behavior.=20 >>>>>=20 >>>>> Please let me know if this answers your question. >>>>>=20 >>>>> Thanks, >>>>> Yingqi >>>>>=20 >>>>> -----Original Message----- >>>>> From: Jim Jagielski [mailto:jim@jaguNET.com] >>>>> Sent: Wednesday, May 14, 2014 6:57 AM >>>>> To: dev@httpd.apache.org >>>>> Subject: Re: [PATCH ASF bugzilla# 55897]prefork_mpm patch with=20 >>>>> SO_REUSEPORT support >>>>>=20 >>>>> This is very cool! >>>>>=20 >>>>> mod_status assumes that sysconf() exists, but do we need to do a conf= ig check on the params we use in these patches? >>>>> We look OK on Linux, FreeBSD and OSX... >>>>>=20 >>>>> I'm +1 on folding into trunk. >>>>>=20 >>>>>> On May 13, 2014, at 7:55 PM, Lu, Yingqi wrote: >>>>>>=20 >>>>>> Dear All, >>>>>>=20 >>>>>> During the last couple weeks, I spent some time extending the origin= al two patches from prefork MPM only to all three Linux MPMs (prefork, work= er and event). Attached is the latest version of the two patches. Bugzilla = database has also been updated already. The ID for the two patches are #558= 97 and #56279. Please refer to messages below for details on both of the pa= tches. >>>>>>=20 >>>>>> Quick test result on modern dual socket Intel platform (Linux=20 >>>>>> Kernel >>>>>> 3.13.9) SO_REUSEPORT patch (bugzilla #55897) >>>>>> 1. Prefork MPM: 1 listen statement: 2.16X throughput improveme= nt; 2 listen statements: 2.33X throughput improvement >>>>>> 2. Worker MPM: 1 listen statement: 10% throughput improvement;= 2 listen statements: 35% throughput improvement >>>>>> 3. Event MPM: 1 listen statement: 13% throughput improvement; = 2 listen statements: throughput parity, but 62% response time reduction (wi= th patch, 38% response time as original SW) >>>>>>=20 >>>>>> Bucket patch (bugzilla #56279, only impact multiple listen statement= case) >>>>>> 1. Prefork MPM: 2 listen statements: 42% throughput improvemen= t >>>>>> 2. Worker MPM: 2 listen statements: 7% throughput improvement >>>>>>=20 >>>>>> In all the above testing cases, significant response time reductions= are observed, even with throughput improvements. >>>>>>=20 >>>>>> Please let me know your feedback and comments. >>>>>>=20 >>>>>> Thanks, >>>>>> Yingqi >>>>>> Software and workloads used in performance tests may have been optim= ized for performance only on Intel microprocessors. Performance tests, such= as SYSmark and MobileMark, are measured using specific computer systems, c= omponents, software, operations and functions. Any change to any of those f= actors may cause the results to vary. You should consult other information = and performance tests to assist you in fully evaluating your contemplated p= urchases, including the performance of that product when combined with othe= r products. >>>>>>=20 >>>>>> From: Lu, Yingqi [mailto:yingqi.lu@intel.com] >>>>>> Sent: Monday, March 17, 2014 1:41 PM >>>>>> To: dev@httpd.apache.org >>>>>> Subject: RE: FW: [PATCH ASF bugzilla# 55897]prefork_mpm patch=20 >>>>>> with SO_REUSEPORT support >>>>>>=20 >>>>>> Dear all, >>>>>>=20 >>>>>> Based on the feedback we received, we modified this patch. Here is t= he most recent version. We also modified the Bugzilla database(Bugzilla# 55= 897 for SO_REUSEPORT patch; Bugzilla# 56279 for bucket patch). >>>>>>=20 >>>>>> Below are the changes we made into this new version: >>>>>>=20 >>>>>> According to Yann Ylavic and other people's comments, we separate th= e original patch between with and without SO_REUSEPORT into two separated p= atches. The SO_REUSEPORT patch does not change the original listen sockets,= it just duplicate the original one into multiple ones. Since the listen so= ckets are identical, there is no need to change the idle_server_maintenance= function. The bucket patch (without SO_REUSEPORT), on the other hand, it b= reaks down the original listen record (if there are multiple listen socks) = to multiple listen record linked lists. In this case, idle_server_maintenan= ce is implemented at bucket level to address the situation that imbalanced = traffic occurs among different listen sockets/children buckets. In the buck= et patch, the polling in the child process is removed since each child only= listens to 1 sock. >>>>>>=20 >>>>>> According to Arkadiusz Miskiewicz's comment, we make the "detection = of SO_REUSEPORT" at run time. >>>>>>=20 >>>>>> According to Jeff Trawick's comments, 1. We generate the patches=20 >>>>>> against the httpd trunk. >>>>>> 2. We tested the current patches and they do not impact event and wo= rker mpms. If current patches can be accepted, we would be happy to extend = them to other Linux based mpms. There are not much code changes, but requir= e some time to setup the workload to test. >>>>>> 3. We removed unnecessary comments and changed APLOGNO(). We also ch= anged some of the parameter/variable/function names to better represent the= ir meanings. >>>>>> 4. There should be no build-in limitations for SO_REUSEPORT patch. F= or bucket patch, the only thing is the number of children bucket only scale= s to MAX_SPAWN_RATE. If there are more than 32 (current default MAX_SPQN_RA= TE) listen statements specified in the httpd.conf, the number of buckets wi= ll be fixed to 32. The reason for this is because that we implement the idl= e_server_maintenance at bucket level, each bucket's own max_spawn_rate is s= et to MAX_SPAWN_RATE/num_buckets. >>>>>>=20 >>>>>> Again, thanks very much for all the comments and feedback. Please le= t us know if there are more changes we need to complete to make them accept= ed. >>>>>>=20 >>>>>> Thanks, >>>>>> Yingqi Lu >>>>>>=20 >>>>>>=20 >>>>>>=20 >>>>>> From: Lu, Yingqi >>>>>> Sent: Tuesday, March 04, 2014 10:43 AM >>>>>> To: dev@httpd.apache.org >>>>>> Subject: RE: FW: [PATCH ASF bugzilla# 55897]prefork_mpm patch=20 >>>>>> with SO_REUSEPORT support >>>>>>=20 >>>>>> Hi Jeff, >>>>>>=20 >>>>>> Thanks very much for your time reviewing the patch! We will modify t= he patch according to your comments and repost it here. >>>>>>=20 >>>>>> Thanks, >>>>>> Yingqi >>>>>>=20 >>>>>> From: Jeff Trawick [mailto:trawick@gmail.com] >>>>>> Sent: Tuesday, March 04, 2014 10:08 AM >>>>>> To: Apache HTTP Server Development List >>>>>> Subject: Re: FW: [PATCH ASF bugzilla# 55897]prefork_mpm patch=20 >>>>>> with SO_REUSEPORT support >>>>>>=20 >>>>>> On Tue, Mar 4, 2014 at 10:35 AM, Lu, Yingqi wr= ote: >>>>>> Hi All, >>>>>>=20 >>>>>> I just want to ping again on this patch to gather your feedback and = comments. Please refer to the messages below for patch details. >>>>>>=20 >>>>>> If you need any additional information/supporting data, please let u= s know as well. >>>>>>=20 >>>>>> Yeah, it has been on my todo list, but I don't have time to give=20 >>>>>> an in depth review at the moment. Here are a few questions/comments= . >>>>>> (And you'll have to deal with the fact that it is unnecessarily=20 >>>>>> tedious for me to evaluate higher-level considerations if there=20 >>>>>> are a lot of distractions, such as the code comments below ;) But=20 >>>>>> others are of course free to chime in.) >>>>>>=20 >>>>>> The patch should be against httpd trunk. It probably won't take muc= h time for you to create that patch and confirm basic operation. >>>>>>=20 >>>>>> What is the impact to other MPMs, even if they shouldn't use or don'= t have the necessary code to use SO_REUSEPORT at this time? >>>>>>=20 >>>>>> Have you tried the event MPM? >>>>>>=20 >>>>>> Is there a way for the admin to choose this behavior? Most won't ca= re, but everyone's behavior is changed AFAICT. >>>>>>=20 >>>>>> Are there built-in limitations in this patch that we should be aware= of? E.g., the free slot/spawn rate changes suggest to me that there can't= be more than 1025 children??? >>>>>>=20 >>>>>> We should assume for now that there's no reason this couldn't be com= mitted to trunk after review/rework, so make sure it is as close as you can= get it to what you think is the final form. >>>>>>=20 >>>>>> For the configure-time check for 3.9 kernel: I think we'd also=20 >>>>>> use AC_TRY_COMPILE at configure time to confirm that the=20 >>>>>> SO_REUSEPORT definition is available, and not enable it if the=20 >>>>>> system includes doesn't define it. (Does that cause a problem=20 >>>>>> for any significant number of people?) >>>>>>=20 >>>>>> Don't mention the patch in the patch ;) (e.g., "This function is=20 >>>>>> added for the patch.") >>>>>>=20 >>>>>> Incomplete comments on style/syntax issues: >>>>>>=20 >>>>>> * mixing declarations and statements (e.g., "duplr->next =3D 0;=20 >>>>>> apr_socket_t *temps;") isn't supported by all compilers and is=20 >>>>>> distracting when reviewing >>>>>> * suitable identifier names (e.g., fix global variable "flag" and=20 >>>>>> whatever else isn't appropriate; "ap_post_config_listeners" >>>>>> should be renamed to indicate what it does >>>>>> * APLOGNO(99999) and comments about fixing it: Instead put "APLOGNO(= )"=20 >>>>>> and don't add reminders in comments >>>>>> * this doesn't seem portable: "int free_slots[MAX_SPAWN_RATE/num_buc= kets];" >>>>>> and so on >>>>>>=20 >>>>>>=20 >>>>>> Thanks, >>>>>> Yingqi >>>>>>=20 >>>>>>=20 >>>>>> From: Lu, Yingqi >>>>>> Sent: Friday, January 24, 2014 3:26 PM >>>>>> To: dev@httpd.apache.org >>>>>> Subject: [PATCH ASF bugzilla# 55897]prefork_mpm patch with=20 >>>>>> SO_REUSEPORT support >>>>>>=20 >>>>>> Dear All, >>>>>>=20 >>>>>> Our analysis of Apache httpd 2.4.7 prefork mpm, on 32 and 64 thread = Intel Xeon 2600 series systems, using an open source three tier social netw= orking web server workload, revealed performance scaling issues. In curren= t software single listen statement (listen 80) provides better scalability = due to un-serialized accept. However, when system is under very high load, = this can lead to big number of child processes stuck in D state. On the oth= er hand, the serialized accept approach cannot scale with the high load eit= her. In our analysis, a 32-thread system, with 2 listen statements specifi= ed, could scale to just 70% utilization, and a 64-thread system, with signa= l listen statement specified (listen 80, 4 network interfaces), could scale= to only 60% utilization. >>>>>>=20 >>>>>> Based on those findings, we created a prototype patch for prefork mp= m which extends performance and thread utilization. In Linux kernel newer t= han 3.9, SO_REUSEPORT is enabled. This feature allows multiple sockets list= en to the same IP:port and automatically round robins connections. We use t= his feature to create multiple duplicated listener records of the original = one and partition the child processes into buckets. Each bucket listens to = 1 IP:port. In case of old kernel which does not have the SO_REUSEPORT enabl= ed, we modified the "multiple listen statement case" by creating 1 listen r= ecord for each listen statement and partitioning the child processes into d= ifferent buckets. Each bucket listens to 1 IP:port. >>>>>>=20 >>>>>> Quick tests of the patch, running the same workload, demonstrated a = 22% throughput increase with 32-threads system and 2 listen statements (Lin= ux kernel 3.10.4). With the older kernel (Linux Kernel 3.8.8, without SO_RE= USEPORT), 10% performance gain was measured. With single listen statement (= listen 80) configuration, we observed over 2X performance improvements on m= odern dual socket Intel platforms (Linux Kernel 3.10.4). We also observed b= ig reduction in response time, in addition to the throughput improvement ga= ined in our tests 1. >>>>>>=20 >>>>>> Following the feedback from the bugzilla website where we originally= submitted the patch, we removed the dependency of APR change to simplify t= he patch testing process. Thanks Jeff Trawick for his good suggestion! We a= re also actively working on extending the patch to worker and event MPMs, a= s a next step. Meanwhile, we would like to gather comments from all of you = on the current prefork patch. Please take some time test it and let us know= how it works in your environment. >>>>>>=20 >>>>>> This is our first patch to the Apache community. Please help us revi= ew it and let us know if there is anything we might revise to improve it. Y= our feedback is very much appreciated. >>>>>>=20 >>>>>> Configuration: >>>>>> >>>>>> ListenBacklog 105384 >>>>>> ServerLimit 105000 >>>>>> MaxClients 1024 >>>>>> MaxRequestsPerChild 0 >>>>>> StartServers 64 >>>>>> MinSpareServers 8 >>>>>> MaxSpareServers 16 >>>>>> >>>>>>=20 >>>>>> 1. Software and workloads used in performance tests may have been op= timized for performance only on Intel microprocessors. Performance tests, s= uch as SYSmark and MobileMark, are measured using specific computer systems= , components, software, operations and functions. Any change to any of thos= e factors may cause the results to vary. You should consult other informati= on and performance tests to assist you in fully evaluating your contemplate= d purchases, including the performance of that product when combined with o= ther products. >>>>>>=20 >>>>>> Thanks, >>>>>> Yingqi >>>>>>=20 >>>>>>=20 >>>>>>=20 >>>>>> -- >>>>>> Born in Roswell... married an alien... >>>>>> http://emptyhammock.com/ >>>>>> http://edjective.org/ >>>>>>=20 >>>>>>=20 >>>>>>=20 >>>>>>=20 >>>>>> -- >>>>>> Born in Roswell... married an alien... >>>>>> http://emptyhammock.com/ >>>>>> http://edjective.org/ >>>>>>=20 >>>>>> >>>>=20 >>>> >=20 --_003_9ACD5B67AAC5594CB6268234CF29CF9AA3762528ORSMSX113amrcor_ Content-Type: application/octet-stream; name="httpd_trunk_so_reuseport.patch" Content-Description: httpd_trunk_so_reuseport.patch Content-Disposition: attachment; filename="httpd_trunk_so_reuseport.patch"; size=57500; creation-date="Mon, 02 Jun 2014 05:09:40 GMT"; modification-date="Mon, 02 Jun 2014 05:27:43 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtcnUgaHR0cGQtdHJ1bmsvaW5jbHVkZS9hcF9saXN0ZW4uaCBodHRwZC10cnVuay5uZXcv aW5jbHVkZS9hcF9saXN0ZW4uaAotLS0gaHR0cGQtdHJ1bmsvaW5jbHVkZS9hcF9saXN0ZW4uaAky MDE0LTA1LTMxIDIzOjEwOjE0Ljc3OTM2NzkwMCAtMDQwMAorKysgaHR0cGQtdHJ1bmsubmV3L2lu Y2x1ZGUvYXBfbGlzdGVuLmgJMjAxNC0wNi0wMSAyMzo0Mjo1Ny4zMjA5MTcxNTIgLTA0MDAKQEAg LTc4LDYgKzc4LDE0IEBACiAgKi8KIEFQX0RFQ0xBUkVfREFUQSBleHRlcm4gYXBfbGlzdGVuX3Jl YyAqYXBfbGlzdGVuZXJzOwogCitBUF9ERUNMQVJFX0RBVEEgZXh0ZXJuIGFwX2xpc3Rlbl9yZWMg KiptcG1fbGlzdGVuOworCitBUF9ERUNMQVJFX0RBVEEgZXh0ZXJuIGludCBlbmFibGVfZGVmYXVs dF9saXN0ZW5lcjsKKworQVBfREVDTEFSRV9EQVRBIGV4dGVybiBpbnQgbnVtX2J1Y2tldHM7CisK K0FQX0RFQ0xBUkVfREFUQSBleHRlcm4gaW50IGhhdmVfc29fcmV1c2Vwb3J0OworCiAvKioKICAq IFNldHVwIGFsbCBvZiB0aGUgZGVmYXVsdHMgZm9yIHRoZSBsaXN0ZW5lciBsaXN0CiAgKi8KQEAg LTkxLDYgKzk5LDE0IEBACiAgKi8KIEFQX0RFQ0xBUkUoaW50KSBhcF9zZXR1cF9saXN0ZW5lcnMo c2VydmVyX3JlYyAqcyk7CiAKKy8qKlRoaXMgZnVuY3Rpb24gZHVwbGljYXRlcyBhcF9saXN0ZW5l cnMuCisgKiBAcGFyYW0gcyBUaGUgZ2xvYmFsIHNlcnZlcl9yZWMKKyAqIEBwYXJhbSBwIFRoZSBj b25maWcgcG9vbAorICogQHBhcmFtIG51bV9idWNrZXRzIFRoZSB0b3RhbCBudW1iZXIgb2YgbGlz dGVuZXIgYnVja2V0cy4KKyoqLworQVBfREVDTEFSRShhcHJfc3RhdHVzX3QpIGFwX2R1cGxpY2F0 ZV9saXN0ZW5lcnMoc2VydmVyX3JlYyAqcywgYXByX3Bvb2xfdCAqcCwgaW50IG51bV9idWNrZXRz KTsKKworCiAvKioKICAqIExvb3AgdGhyb3VnaCB0aGUgZ2xvYmFsIGFwX2xpc3Rlbl9yZWMgbGlz dCBhbmQgY2xvc2UgZWFjaCBvZiB0aGUgc29ja2V0cy4KICAqLwpkaWZmIC1ydSBodHRwZC10cnVu ay9zZXJ2ZXIvbGlzdGVuLmMgaHR0cGQtdHJ1bmsubmV3L3NlcnZlci9saXN0ZW4uYwotLS0gaHR0 cGQtdHJ1bmsvc2VydmVyL2xpc3Rlbi5jCTIwMTQtMDUtMzEgMjM6MTA6MTQuOTQ0MzY3ODkzIC0w NDAwCisrKyBodHRwZC10cnVuay5uZXcvc2VydmVyL2xpc3Rlbi5jCTIwMTQtMDYtMDEgMjM6NDM6 MTYuMjQ5OTE2NDExIC0wNDAwCkBAIC0zOCw2ICszOCwxMSBAQAogCiBBUF9ERUNMQVJFX0RBVEEg YXBfbGlzdGVuX3JlYyAqYXBfbGlzdGVuZXJzID0gTlVMTDsKIAorQVBfREVDTEFSRV9EQVRBIGFw X2xpc3Rlbl9yZWMgKiptcG1fbGlzdGVuID0gTlVMTDsKK0FQX0RFQ0xBUkVfREFUQSBpbnQgZW5h YmxlX2RlZmF1bHRfbGlzdGVuZXIgPSAxOworQVBfREVDTEFSRV9EQVRBIGludCBudW1fYnVja2V0 cyA9IDE7CitBUF9ERUNMQVJFX0RBVEEgaW50IGhhdmVfc29fcmV1c2Vwb3J0ID0gMTsKKwogc3Rh dGljIGFwX2xpc3Rlbl9yZWMgKm9sZF9saXN0ZW5lcnM7CiBzdGF0aWMgaW50IGFwX2xpc3RlbmJh Y2tsb2c7CiBzdGF0aWMgaW50IHNlbmRfYnVmZmVyX3NpemU7CkBAIC0xMjQsNiArMTI5LDI0IEBA CiAgICAgYXBfc29ja19kaXNhYmxlX25hZ2xlKHMpOwogI2VuZGlmCiAKKyNpZm5kZWYgU09fUkVV U0VQT1JUCisjZGVmaW5lIFNPX1JFVVNFUE9SVCAxNQorI2VuZGlmCisgICAgaW50IHRoZXNvY2s7 CisgICAgYXByX29zX3NvY2tfZ2V0KCZ0aGVzb2NrLCBzKTsKKyAgICBpZiAoc2V0c29ja29wdCh0 aGVzb2NrLCBTT0xfU09DS0VULCBTT19SRVVTRVBPUlQsICh2b2lkICopJm9uZSwgc2l6ZW9mKGlu dCkpIDwgMCkgeworICAgICAgICBpZiAoZXJybm8gPT0gRU5PUFJPVE9PUFQpIHsKKyAgICAgICAg ICAgIGhhdmVfc29fcmV1c2Vwb3J0ID0gMDsKKyAgICAgICAgfSAvKiBDaGVjayBpZiBTT19SRVVT RVBPUlQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBydW5uaW5nIExpbnV4IEtlcm5lbC4qLworICAgICAg ICBlbHNlIHsKKyAgICAgICAgICAgIGFwX2xvZ19wZXJyb3IoQVBMT0dfTUFSSywgQVBMT0dfQ1JJ VCwgc3RhdCwgcCwgQVBMT0dOTygpCisgICAgICAgICAgICAgICAgICAgICJtYWtlX3NvY2s6IGZv ciBhZGRyZXNzICVwSSwgYXByX3NvY2tldF9vcHRfc2V0OiAoU09fUkVVU0VQT1JUKSIsCisgICAg ICAgICAgICAgICAgICAgICBzZXJ2ZXItPmJpbmRfYWRkcik7CisgICAgICAgICAgICBhcHJfc29j a2V0X2Nsb3NlKHMpOworICAgICAgICAgICAgcmV0dXJuIGVycm5vOworICAgICAgICB9CisgICAg IH0KKwogICAgIGlmIChkb19iaW5kX2xpc3RlbikgewogI2lmIEFQUl9IQVZFX0lQVjYKICAgICAg ICAgaWYgKHNlcnZlci0+YmluZF9hZGRyLT5mYW1pbHkgPT0gQVBSX0lORVQ2KSB7CkBAIC0xNzks NyArMjAyLDcgQEAKICNlbmRpZgogCiAgICAgc2VydmVyLT5zZCA9IHM7Ci0gICAgc2VydmVyLT5h Y3RpdmUgPSAxOworICAgIHNlcnZlci0+YWN0aXZlID0gZW5hYmxlX2RlZmF1bHRfbGlzdGVuZXI7 CiAKICAgICBzZXJ2ZXItPmFjY2VwdF9mdW5jID0gTlVMTDsKIApAQCAtNTc1LDcgKzU5OCw3IEBA CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgICAgICBp ZiAobWFrZV9zb2NrKHBvb2wsIGxyLCAxKSA9PSBBUFJfU1VDQ0VTUykgeworICAgICAgICAgICAg aWYgKG1ha2Vfc29jayhwb29sLCBsciwgZW5hYmxlX2RlZmF1bHRfbGlzdGVuZXIpID09IEFQUl9T VUNDRVNTKSB7CiAgICAgICAgICAgICAgICAgKytudW1fb3BlbjsKICAgICAgICAgICAgIH0KICAg ICAgICAgICAgIGVsc2UgewpAQCAtNzI3LDEzICs3NTAsNzMgQEAKICAgICByZXR1cm4gbnVtX2xp c3RlbmVyczsKIH0KIAorQVBfREVDTEFSRShhcHJfc3RhdHVzX3QpIGFwX2R1cGxpY2F0ZV9saXN0 ZW5lcnMoc2VydmVyX3JlYyAqcywgYXByX3Bvb2xfdCAqcCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9idWNrZXRzKSB7CisgICAgaW50 IGk7CisgICAgYXByX3N0YXR1c190IHN0YXQ7CisgICAgaW50IHVzZV9ub25ibG9jayA9IDA7Cisg ICAgYXBfbGlzdGVuX3JlYyAqbHI7CisKKyAgICBtcG1fbGlzdGVuID0gYXByX3BhbGxvYyhwLCBz aXplb2YoYXBfbGlzdGVuX3JlYyopICogbnVtX2J1Y2tldHMpOworICAgIGZvciAoaSA9IDA7IGkg PCBudW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgIGxyID0gYXBfbGlzdGVuZXJzOworICAgICAg ICBhcF9saXN0ZW5fcmVjICpsYXN0ID0gTlVMTDsKKyAgICAgICAgd2hpbGUgKGxyKSB7CisgICAg ICAgICAgICBhcF9saXN0ZW5fcmVjICpkdXBscjsKKyAgICAgICAgICAgIGNoYXIgKmhvc3RuYW1l OworICAgICAgICAgICAgYXByX3BvcnRfdCBwb3J0OworICAgICAgICAgICAgYXByX3NvY2thZGRy X3QgKnNhOworICAgICAgICAgICAgZHVwbHIgID0gYXByX3BhbGxvYyhwLCBzaXplb2YoYXBfbGlz dGVuX3JlYykpOworICAgICAgICAgICAgZHVwbHItPnNsYXZlID0gTlVMTDsKKyAgICAgICAgICAg IGR1cGxyLT5wcm90b2NvbCA9IGFwcl9wc3RyZHVwKHAsIGxyLT5wcm90b2NvbCk7CisgICAgICAg ICAgICBob3N0bmFtZSA9IGFwcl9wc3RyZHVwKHAsIGxyLT5iaW5kX2FkZHItPmhvc3RuYW1lKTsK KyAgICAgICAgICAgIHBvcnQgPSBsci0+YmluZF9hZGRyLT5wb3J0OworICAgICAgICAgICAgYXBy X3NvY2thZGRyX2luZm9fZ2V0KCZzYSwgaG9zdG5hbWUsIEFQUl9VTlNQRUMsIHBvcnQsIDAsIHAp OworICAgICAgICAgICAgZHVwbHItPmJpbmRfYWRkciA9IHNhOworICAgICAgICAgICAgZHVwbHIt Pm5leHQgPSBOVUxMOworICAgICAgICAgICAgYXByX3NvY2tldF90ICp0ZW1wcyA9IGR1cGxyLT5z ZDsKKyAgICAgICAgICAgIGlmICgoc3RhdCA9IGFwcl9zb2NrZXRfY3JlYXRlKCZkdXBsci0+c2Qs IGR1cGxyLT5iaW5kX2FkZHItPmZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFNPQ0tfU1RSRUFNLCAwLCBwKSkgIT0gQVBSX1NVQ0NFU1MpIHsKKyAgICAg ICAgICAgICAgICBhcF9sb2dfcGVycm9yKEFQTE9HX01BUkssIEFQTE9HX0NSSVQsIDAsIHAsIEFQ TE9HTk8oKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFwX2R1cGxpY2F0ZV9zb2Nr ZXQ6IGZvciBhZGRyZXNzICVwSSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNh bm5vdCBkdXBsaWNhdGUgYSBuZXcgc29ja2V0ISIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkdXBsci0+YmluZF9hZGRyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ha2Vfc29jayhwLCBkdXBsciwgMSk7CisjaWYgQVBf Tk9OQkxPQ0tfV0hFTl9NVUxUSV9MSVNURU4KKyAgICAgICAgICAgIHVzZV9ub25ibG9jayA9IChh cF9saXN0ZW5lcnMgJiYgYXBfbGlzdGVuZXJzLT5uZXh0KTsKKyAgICAgICAgICAgIGlmICgoc3Rh dCA9IGFwcl9zb2NrZXRfb3B0X3NldChkdXBsci0+c2QsIEFQUl9TT19OT05CTE9DSywgdXNlX25v bmJsb2NrKSkKKyAgICAgICAgICAgICAgICAhPSBBUFJfU1VDQ0VTUykgeworICAgICAgICAgICAg ICAgIGFwX2xvZ19wZXJyb3IoQVBMT0dfTUFSSywgQVBMT0dfQ1JJVCwgc3RhdCwgcCwgQVBMT0dO TygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5hYmxlIHRvIGNvbnRyb2wgc29j a2V0IG5vbi1ibG9ja2luZyBzdGF0dXMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdDsK KyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgYXBfYXBwbHlfYWNjZXB0X2ZpbHRl cihwLCBkdXBsciwgcyk7CisKKyAgICAgICAgICAgIGlmIChsYXN0ID09IE5VTEwpIHsKKyAgICAg ICAgICAgICAgICBtcG1fbGlzdGVuW2ldID0gbGFzdCA9IGR1cGxyOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdC0+bmV4dCA9IGR1cGxyOwor ICAgICAgICAgICAgICAgIGxhc3QgPSBkdXBscjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGxyID0gbHItPm5leHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEFQUl9TVUNDRVNT OworfQorCiBBUF9ERUNMQVJFX05PTlNURCh2b2lkKSBhcF9jbG9zZV9saXN0ZW5lcnModm9pZCkK IHsKICAgICBhcF9saXN0ZW5fcmVjICpscjsKLQotICAgIGZvciAobHIgPSBhcF9saXN0ZW5lcnM7 IGxyOyBsciA9IGxyLT5uZXh0KSB7Ci0gICAgICAgIGFwcl9zb2NrZXRfY2xvc2UobHItPnNkKTsK LSAgICAgICAgbHItPmFjdGl2ZSA9IDA7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8 IG51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgZm9yIChsciA9IG1wbV9saXN0ZW5baV07IGxy OyBsciA9IGxyLT5uZXh0KSB7CisgICAgICAgICAgICBhcHJfc29ja2V0X2Nsb3NlKGxyLT5zZCk7 CisgICAgICAgICAgICBsci0+YWN0aXZlID0gMDsKKyAgICAgICAgfQogICAgIH0KIH0KIApkaWZm IC1ydSBodHRwZC10cnVuay9zZXJ2ZXIvbXBtL2V2ZW50L2V2ZW50LmMgaHR0cGQtdHJ1bmsubmV3 L3NlcnZlci9tcG0vZXZlbnQvZXZlbnQuYwotLS0gaHR0cGQtdHJ1bmsvc2VydmVyL21wbS9ldmVu dC9ldmVudC5jCTIwMTQtMDUtMzEgMjM6MTA6MTUuMjI0MzY3ODgyIC0wNDAwCisrKyBodHRwZC10 cnVuay5uZXcvc2VydmVyL21wbS9ldmVudC9ldmVudC5jCTIwMTQtMDYtMDEgMjM6NDM6NDEuNTE1 OTE1NDIzIC0wNDAwCkBAIC01OSw2ICs1OSw4IEBACiAjaW5jbHVkZSAiYXByX3dhbnQuaCIKICNp bmNsdWRlICJhcHJfdmVyc2lvbi5oIgogCisjaW5jbHVkZSA8c3RkbGliLmg+CisKICNpZiBBUFJf SEFWRV9VTklTVERfSAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCkBAIC0zNDksNyArMzUx LDcgQEAKICAgICAgKiBkb3VibGVkIHVwIHRvIE1BWF9TUEFXTl9SQVRFLCBhbmQgcmVzZXQgb25s eSB3aGVuIGEgY3ljbGUgZ29lcyBieQogICAgICAqIHdpdGhvdXQgdGhlIG5lZWQgdG8gc3Bhd24u CiAgICAgICovCi0gICAgaW50IGlkbGVfc3Bhd25fcmF0ZTsKKyAgICBpbnQgKmlkbGVfc3Bhd25f cmF0ZTsKICNpZm5kZWYgTUFYX1NQQVdOX1JBVEUKICNkZWZpbmUgTUFYX1NQQVdOX1JBVEUgICAg ICAgICgzMikKICNlbmRpZgpAQCAtMzU5LDcgKzM2MSwxMCBAQAogCiAjZGVmaW5lIElEX0ZST01f Q0hJTERfVEhSRUFEKGMsIHQpICAgICgoYyAqIHRocmVhZF9saW1pdCkgKyB0KQogCi1zdGF0aWMg YXBfcG9kX3QgKnBvZDsKK3N0YXRpYyBhcF9wb2RfdCAqKnBvZDsKK3N0YXRpYyBhcF9wb2RfdCAq Y2hpbGRfcG9kOworYXBfbGlzdGVuX3JlYyAqY2hpbGRfbGlzdGVuOworaW50ICpidWNrZXQ7ICAg IC8qIGJ1Y2tldCBhcnJheSBmb3IgdGhlIGh0dHBkIGNoaWxkIHByb2Nlc3NlcyAqLwogCiAvKiBU aGUgZXZlbnQgTVBNIHJlc3BlY3RzIGEgY291cGxlIG9mIHJ1bnRpbWUgZmxhZ3MgdGhhdCBjYW4g YWlkCiAgKiBpbiBkZWJ1Z2dpbmcuIFNldHRpbmcgdGhlIC1ETk9fREVUQUNIIGZsYWcgd2lsbCBw cmV2ZW50IHRoZSByb290IHByb2Nlc3MKQEAgLTEyOTIsNyArMTI5Nyw3IEBACiAgICAgVE9fUVVF VUVfSU5JVChzaG9ydF9saW5nZXJfcSk7CiAKICAgICBsaXN0ZW5lcl9wb2xsZmQgPSBhcHJfcGFs bG9jKHAsIHNpemVvZihhcHJfcG9sbGZkX3QpICogbnVtX2xpc3RlbnNvY2tzKTsKLSAgICBmb3Ig KGxyID0gYXBfbGlzdGVuZXJzOyBsciAhPSBOVUxMOyBsciA9IGxyLT5uZXh0LCBpKyspIHsKKyAg ICBmb3IgKGxyID0gY2hpbGRfbGlzdGVuOyBsciAhPSBOVUxMOyBsciA9IGxyLT5uZXh0LCBpKysp IHsKICAgICAgICAgYXByX3BvbGxmZF90ICpwZmQ7CiAgICAgICAgIEFQX0RFQlVHX0FTU0VSVChp IDwgbnVtX2xpc3RlbnNvY2tzKTsKICAgICAgICAgcGZkID0gJmxpc3RlbmVyX3BvbGxmZFtpXTsK QEAgLTI0MjEsNiArMjQyNiw4IEBACiAgICAgYXByX3RocmVhZGF0dHJfdCAqdGhyZWFkX2F0dHI7 CiAgICAgYXByX3RocmVhZF90ICpzdGFydF90aHJlYWRfaWQ7CiAgICAgYXByX3Bvb2xfdCAqcHNr aXA7CisgICAgaW50IGk7CisgICAgYXBfbGlzdGVuX3JlYyAqbHI7CiAKICAgICBtcG1fc3RhdGUg PSBBUF9NUE1RX1NUQVJUSU5HOyAgICAgICAvKiBmb3IgYmVuZWZpdCBvZiBhbnkgaG9va3MgdGhh dCBydW4gYXMgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq IGNoaWxkIGluaXRpYWxpemVzCkBAIC0yNDI5LDYgKzI0MzYsMTkgQEAKICAgICBhcF9mYXRhbF9z aWduYWxfY2hpbGRfc2V0dXAoYXBfc2VydmVyX2NvbmYpOwogICAgIGFwcl9wb29sX2NyZWF0ZSgm cGNoaWxkLCBwY29uZik7CiAKKyAgICAvKiBjbG9zZSB1bnVzZWQgbGlzdGVuZXJzIGFuZCBwb2Rz ICovCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgaWYg KGkgIT0gYnVja2V0W2NoaWxkX251bV9hcmddKSB7CisgICAgICAgICAgICBsciA9IG1wbV9saXN0 ZW5baV07CisgICAgICAgICAgICB3aGlsZShscikgeworICAgICAgICAgICAgICAgIGFwcl9zb2Nr ZXRfY2xvc2UobHItPnNkKTsKKyAgICAgICAgICAgICAgICBsciA9IGxyLT5uZXh0OworICAgICAg ICAgICAgfQorICAgICAgICAgICAgbXBtX2xpc3RlbltpXS0+YWN0aXZlID0gMDsKKyAgICAgICAg ICAgIGFwX21wbV9wb2R4X2Nsb3NlKHBvZFtpXSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICAv KnN0dWZmIHRvIGRvIGJlZm9yZSB3ZSBzd2l0Y2ggaWQncywgc28gd2UgaGF2ZSBwZXJtaXNzaW9u cy4gKi8KICAgICBhcF9yZW9wZW5fc2NvcmVib2FyZChwY2hpbGQsIE5VTEwsIDApOwogCkBAIC0y NTM5LDcgKzI1NTksNyBAQAogICAgICAgICBhcHJfc2lnbmFsKFNJR1RFUk0sIGR1bW15X3NpZ25h bF9oYW5kbGVyKTsKICAgICAgICAgLyogV2F0Y2ggZm9yIGFueSBtZXNzYWdlcyBmcm9tIHRoZSBw YXJlbnQgb3ZlciB0aGUgUE9EICovCiAgICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBy diA9IGFwX21wbV9wb2R4X2NoZWNrKHBvZCk7CisgICAgICAgICAgICBydiA9IGFwX21wbV9wb2R4 X2NoZWNrKGNoaWxkX3BvZCk7CiAgICAgICAgICAgICBpZiAocnYgPT0gQVBfTVBNX1BPRFhfTk9S RVNUQVJUKSB7CiAgICAgICAgICAgICAgICAgLyogc2VlIGlmIHRlcm1pbmF0aW9uIHdhcyB0cmln Z2VyZWQgd2hpbGUgd2Ugc2xlcHQgKi8KICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRlcm1pbmF0 ZV9tb2RlKSB7CkBAIC0yNTkyLDYgKzI2MTIsOSBAQAogICAgICAgICAvKiBOT1RSRUFDSEVEICov CiAgICAgfQogCisgICAgY2hpbGRfbGlzdGVuID0gbXBtX2xpc3RlbltidWNrZXRbc2xvdF1dOwor ICAgIGNoaWxkX3BvZCA9IHBvZFtidWNrZXRbc2xvdF1dOworCiAgICAgaWYgKChwaWQgPSBmb3Jr KCkpID09IC0xKSB7CiAgICAgICAgIGFwX2xvZ19lcnJvcihBUExPR19NQVJLLCBBUExPR19FUlIs IGVycm5vLCBzLCBBUExPR05PKDAwNDgxKQogICAgICAgICAgICAgICAgICAgICAgImZvcms6IFVu YWJsZSB0byBmb3JrIG5ldyBwcm9jZXNzIik7CkBAIC0yNjUyLDYgKzI2NzUsNyBAQAogICAgICAg ICBpZiAoYXBfc2NvcmVib2FyZF9pbWFnZS0+cGFyZW50W2ldLnBpZCAhPSAwKSB7CiAgICAgICAg ICAgICBjb250aW51ZTsKICAgICAgICAgfQorICAgICAgICBidWNrZXRbaV0gPSBpICUgbnVtX2J1 Y2tldHM7CiAgICAgICAgIGlmIChtYWtlX2NoaWxkKGFwX3NlcnZlcl9jb25mLCBpKSA8IDApIHsK ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNjU5LDcgKzI2ODMsNyBAQAogICAg IH0KIH0KIAotc3RhdGljIHZvaWQgcGVyZm9ybV9pZGxlX3NlcnZlcl9tYWludGVuYW5jZSh2b2lk KQorc3RhdGljIHZvaWQgcGVyZm9ybV9pZGxlX3NlcnZlcl9tYWludGVuYW5jZShpbnQgY2hpbGRf YnVja2V0KQogewogICAgIGludCBpLCBqOwogICAgIGludCBpZGxlX3RocmVhZF9jb3VudDsKQEAg LTI2NjcsNyArMjY5MSw5IEBACiAgICAgcHJvY2Vzc19zY29yZSAqcHM7CiAgICAgaW50IGZyZWVf bGVuZ3RoOwogICAgIGludCB0b3RhbGx5X2ZyZWVfbGVuZ3RoID0gMDsKLSAgICBpbnQgZnJlZV9z bG90c1tNQVhfU1BBV05fUkFURV07CisgICAgaW50IGNoaWxkX21heF9zcGF3bl9yYXRlOworICAg IGNoaWxkX21heF9zcGF3bl9yYXRlID0gTUFYX1NQQVdOX1JBVEUvbnVtX2J1Y2tldHM7CisgICAg aW50IGZyZWVfc2xvdHNbY2hpbGRfbWF4X3NwYXduX3JhdGVdOwogICAgIGludCBsYXN0X25vbl9k ZWFkOwogICAgIGludCB0b3RhbF9ub25fZGVhZDsKICAgICBpbnQgYWN0aXZlX3RocmVhZF9jb3Vu dCA9IDA7CkBAIC0yNjg5LDcgKzI3MTUsNyBAQAogICAgICAgICBpbnQgY2hpbGRfdGhyZWFkc19h Y3RpdmUgPSAwOwogCiAgICAgICAgIGlmIChpID49IHJldGFpbmVkLT5tYXhfZGFlbW9uc19saW1p dAotICAgICAgICAgICAgJiYgdG90YWxseV9mcmVlX2xlbmd0aCA9PSByZXRhaW5lZC0+aWRsZV9z cGF3bl9yYXRlKQorICAgICAgICAgICAgJiYgdG90YWxseV9mcmVlX2xlbmd0aCA9PSByZXRhaW5l ZC0+aWRsZV9zcGF3bl9yYXRlW2NoaWxkX2J1Y2tldF0pCiAgICAgICAgICAgICAvKiBzaG9ydCBj dXQgaWYgYWxsIGFjdGl2ZSBwcm9jZXNzZXMgaGF2ZSBiZWVuIGV4YW1pbmVkIGFuZAogICAgICAg ICAgICAgICogZW5vdWdoIGVtcHR5IHNjb3JlYm9hcmQgc2xvdHMgaGF2ZSBiZWVuIGZvdW5kCiAg ICAgICAgICAgICAgKi8KQEAgLTI3MTYsNyArMjc0Miw4IEBACiAgICAgICAgICAgICBpZiAocHMt PnBpZCAhPSAwKSB7IC8qIFhYWCBqdXN0IHNldCBhbGxfZGVhZF90aHJlYWRzIGluIG91dGVyCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBsb29wIGlmIG5vIHBpZD8gIG5v dCBtdWNoIGVsc2UgbWF0dGVycyAqLwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPD0gU0VS VkVSX1JFQURZICYmICFwcy0+cXVpZXNjaW5nICYmICFwcy0+bm90X2FjY2VwdGluZwotICAgICAg ICAgICAgICAgICAgICAmJiBwcy0+Z2VuZXJhdGlvbiA9PSByZXRhaW5lZC0+bXlfZ2VuZXJhdGlv bikKKyAgICAgICAgICAgICAgICAgICAgJiYgcHMtPmdlbmVyYXRpb24gPT0gcmV0YWluZWQtPm15 X2dlbmVyYXRpb24gJiYKKyAgICAgICAgICAgICAgICAgICAgYnVja2V0W2ldID09IGNoaWxkX2J1 Y2tldCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICsraWRsZV90aHJl YWRfY291bnQ7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjcyNyw4ICsyNzU0LDggQEAKICAgICAg ICAgfQogICAgICAgICBhY3RpdmVfdGhyZWFkX2NvdW50ICs9IGNoaWxkX3RocmVhZHNfYWN0aXZl OwogICAgICAgICBpZiAoYW55X2RlYWRfdGhyZWFkcwotICAgICAgICAgICAgJiYgdG90YWxseV9m cmVlX2xlbmd0aCA8IHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGUKLSAgICAgICAgICAgICYmIGZy ZWVfbGVuZ3RoIDwgTUFYX1NQQVdOX1JBVEUKKyAgICAgICAgICAgICYmIHRvdGFsbHlfZnJlZV9s ZW5ndGggPCByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlW2NoaWxkX2J1Y2tldF0KKyAgICAgICAg ICAgICYmIGZyZWVfbGVuZ3RoIDwgTUFYX1NQQVdOX1JBVEUvbnVtX2J1Y2tldHMKICAgICAgICAg ICAgICYmICghcHMtPnBpZCAgICAgIC8qIG5vIHByb2Nlc3MgaW4gdGhlIHNsb3QgKi8KICAgICAg ICAgICAgICAgICAgIHx8IHBzLT5xdWllc2NpbmcpKSB7ICAvKiBvciBhdCBsZWFzdCBvbmUgaXMg Z29pbmcgYXdheSAqLwogICAgICAgICAgICAgaWYgKGFsbF9kZWFkX3RocmVhZHMpIHsKQEAgLTI3 ODQsMTIgKzI4MTEsMTIgQEAKIAogICAgIHJldGFpbmVkLT5tYXhfZGFlbW9uc19saW1pdCA9IGxh c3Rfbm9uX2RlYWQgKyAxOwogCi0gICAgaWYgKGlkbGVfdGhyZWFkX2NvdW50ID4gbWF4X3NwYXJl X3RocmVhZHMpIHsKKyAgICBpZiAoaWRsZV90aHJlYWRfY291bnQgPiBtYXhfc3BhcmVfdGhyZWFk cy9udW1fYnVja2V0cykgewogICAgICAgICAvKiBLaWxsIG9mZiBvbmUgY2hpbGQgKi8KLSAgICAg ICAgYXBfbXBtX3BvZHhfc2lnbmFsKHBvZCwgQVBfTVBNX1BPRFhfR1JBQ0VGVUwpOwotICAgICAg ICByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlID0gMTsKKyAgICAgICAgYXBfbXBtX3BvZHhfc2ln bmFsKHBvZFtjaGlsZF9idWNrZXRdLCBBUF9NUE1fUE9EWF9HUkFDRUZVTCk7CisgICAgICAgIHJl dGFpbmVkLT5pZGxlX3NwYXduX3JhdGVbY2hpbGRfYnVja2V0XSA9IDE7CiAgICAgfQotICAgIGVs c2UgaWYgKGlkbGVfdGhyZWFkX2NvdW50IDwgbWluX3NwYXJlX3RocmVhZHMpIHsKKyAgICBlbHNl IGlmIChpZGxlX3RocmVhZF9jb3VudCA8IG1pbl9zcGFyZV90aHJlYWRzL251bV9idWNrZXRzKSB7 CiAgICAgICAgIC8qIHRlcm1pbmF0ZSB0aGUgZnJlZSBsaXN0ICovCiAgICAgICAgIGlmIChmcmVl X2xlbmd0aCA9PSAwKSB7IC8qIHNjb3JlYm9hcmQgaXMgZnVsbCwgY2FuJ3QgZm9yayAqLwogCkBA IC0yODA3LDEzICsyODM0LDEzIEBACiAgICAgICAgICAgICAgICAgYXBfbG9nX2Vycm9yKEFQTE9H X01BUkssIEFQTE9HX0VSUiwgMCwgYXBfc2VydmVyX2NvbmYsIEFQTE9HTk8oMDA0ODUpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJzY29yZWJvYXJkIGlzIGZ1bGwsIG5vdCBhdCBNYXhS ZXF1ZXN0V29ya2VycyIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0YWluZWQtPmlk bGVfc3Bhd25fcmF0ZSA9IDE7CisgICAgICAgICAgICByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRl W2NoaWxkX2J1Y2tldF0gPSAxOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAg ICAgaWYgKGZyZWVfbGVuZ3RoID4gcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZSkgewotICAgICAg ICAgICAgICAgIGZyZWVfbGVuZ3RoID0gcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZTsKKyAgICAg ICAgICAgIGlmIChmcmVlX2xlbmd0aCA+IHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGVbY2hpbGRf YnVja2V0XSkgeworICAgICAgICAgICAgICAgIGZyZWVfbGVuZ3RoID0gcmV0YWluZWQtPmlkbGVf c3Bhd25fcmF0ZVtjaGlsZF9idWNrZXRdOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg KHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGUgPj0gOCkgeworICAgICAgICAgICAgaWYgKHJldGFp bmVkLT5pZGxlX3NwYXduX3JhdGVbY2hpbGRfYnVja2V0XSA+PSA4KSB7CiAgICAgICAgICAgICAg ICAgYXBfbG9nX2Vycm9yKEFQTE9HX01BUkssIEFQTE9HX0lORk8sIDAsIGFwX3NlcnZlcl9jb25m LCBBUExPR05PKDAwNDg2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VydmVyIHNl ZW1zIGJ1c3ksICh5b3UgbWF5IG5lZWQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi dG8gaW5jcmVhc2UgU3RhcnRTZXJ2ZXJzLCBUaHJlYWRzUGVyQ2hpbGQgIgpAQCAtMjgyMyw2ICsy ODUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRsZV90aHJlYWRfY291bnQs IHRvdGFsX25vbl9kZWFkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBmcmVlX2xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgYnVja2V0W2ZyZWVfc2xv dHNbaV1dID0gY2hpbGRfYnVja2V0OwogICAgICAgICAgICAgICAgIG1ha2VfY2hpbGQoYXBfc2Vy dmVyX2NvbmYsIGZyZWVfc2xvdHNbaV0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyog dGhlIG5leHQgdGltZSBhcm91bmQgd2Ugd2FudCB0byBzcGF3biB0d2ljZSBhcyBtYW55IGlmIHRo aXMKQEAgLTI4MzEsMTMgKzI4NTksMTMgQEAKICAgICAgICAgICAgIGlmIChyZXRhaW5lZC0+aG9s ZF9vZmZfb25fZXhwb25lbnRpYWxfc3Bhd25pbmcpIHsKICAgICAgICAgICAgICAgICAtLXJldGFp bmVkLT5ob2xkX29mZl9vbl9leHBvbmVudGlhbF9zcGF3bmluZzsKICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGVsc2UgaWYgKHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGUgPCBNQVhfU1BBV05f UkFURSkgewotICAgICAgICAgICAgICAgIHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGUgKj0gMjsK KyAgICAgICAgICAgIGVsc2UgaWYgKHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGVbY2hpbGRfYnVj a2V0XSA8IE1BWF9TUEFXTl9SQVRFL251bV9idWNrZXRzKSB7CisgICAgICAgICAgICAgICAgcmV0 YWluZWQtPmlkbGVfc3Bhd25fcmF0ZVtjaGlsZF9idWNrZXRdICo9IDI7CiAgICAgICAgICAgICB9 CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHJldGFpbmVkLT5pZGxlX3Nw YXduX3JhdGUgPSAxOworICAgICAgICByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlW2NoaWxkX2J1 Y2tldF0gPSAxOwogICAgIH0KIH0KIApAQCAtMjg5NCw3ICsyOTIyLDcgQEAKICAgICAgICAgICAg ICAgICBhcF9zY29yZWJvYXJkX2ltYWdlLT5wYXJlbnRbY2hpbGRfc2xvdF0ucXVpZXNjaW5nID0g MDsKICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkX3N0YXR1cyA9PSBBUEVYSVRfQ0hJTERT SUNLKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIHJlc291cmNlIHNob3J0YWdlLCBtaW5pbWl6 ZSB0aGUgZm9yayByYXRlICovCi0gICAgICAgICAgICAgICAgICAgIHJldGFpbmVkLT5pZGxlX3Nw YXduX3JhdGUgPSAxOworICAgICAgICAgICAgICAgICAgICByZXRhaW5lZC0+aWRsZV9zcGF3bl9y YXRlW2J1Y2tldFtjaGlsZF9zbG90XV0gPSAxOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICBlbHNlIGlmIChyZW1haW5pbmdfY2hpbGRyZW5fdG9fc3RhcnQKICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiBjaGlsZF9zbG90IDwgYXBfZGFlbW9uc19saW1pdCkgewpAQCAtMjkx Miw3ICsyOTQwLDkgQEAKICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkX3N0YXR1cyA9PSBB UEVYSVRfQ0hJTERTSUNLCiAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9nZW4gPT0gcmV0YWlu ZWQtPm15X2dlbmVyYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgLyogcmVzb3VyY2Ugc2hv cnRhZ2UsIG1pbmltaXplIHRoZSBmb3JrIHJhdGUgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0 YWluZWQtPmlkbGVfc3Bhd25fcmF0ZSA9IDE7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXRh aW5lZC0+aWRsZV9zcGF3bl9yYXRlW2ldID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgIH0KICNpZiBBUFJfSEFTX09USEVSX0NISUxECiAgICAgICAgICAgICB9CkBA IC0yOTUwLDggKzI5ODAsMTAgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgY29udGlu dWU7CiAgICAgICAgIH0KLQotICAgICAgICBwZXJmb3JtX2lkbGVfc2VydmVyX21haW50ZW5hbmNl KCk7CisgICAgICAgIAorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykg eworICAgICAgICAgICAgcGVyZm9ybV9pZGxlX3NlcnZlcl9tYWludGVuYW5jZShpKTsKKyAgICAg ICAgfQogICAgIH0KIH0KIApAQCAtMjk1OSw2ICsyOTkxLDkgQEAKIHsKICAgICBpbnQgcmVtYWlu aW5nX2NoaWxkcmVuX3RvX3N0YXJ0OwogCisgICAgaW50IGk7CisgICAgYXBfbGlzdGVuX3JlYyAq bHI7CisKICAgICBhcF9sb2dfcGlkKHBjb25mLCBhcF9waWRfZm5hbWUpOwogCiAgICAgaWYgKCFy ZXRhaW5lZC0+aXNfZ3JhY2VmdWwpIHsKQEAgLTI5NzIsMTEgKzMwMDcsMTMgQEAKICAgICAgICAg YXBfc2NvcmVib2FyZF9pbWFnZS0+Z2xvYmFsLT5ydW5uaW5nX2dlbmVyYXRpb24gPSByZXRhaW5l ZC0+bXlfZ2VuZXJhdGlvbjsKICAgICB9CiAKKyAgICBidWNrZXQgPSBhcHJfcGFsbG9jKF9wY29u Ziwgc2l6ZW9mKGludCkgKiAgYXBfZGFlbW9uc19saW1pdCk7CisKICAgICByZXN0YXJ0X3BlbmRp bmcgPSBzaHV0ZG93bl9wZW5kaW5nID0gMDsKICAgICBzZXRfc2lnbmFscygpOwogICAgIC8qIERv bid0IHRocmFzaC4uLiAqLwotICAgIGlmIChtYXhfc3BhcmVfdGhyZWFkcyA8IG1pbl9zcGFyZV90 aHJlYWRzICsgdGhyZWFkc19wZXJfY2hpbGQpCi0gICAgICAgIG1heF9zcGFyZV90aHJlYWRzID0g bWluX3NwYXJlX3RocmVhZHMgKyB0aHJlYWRzX3Blcl9jaGlsZDsKKyAgICBpZiAobWF4X3NwYXJl X3RocmVhZHMgPCBtaW5fc3BhcmVfdGhyZWFkcyArIHRocmVhZHNfcGVyX2NoaWxkICogbnVtX2J1 Y2tldHMpCisgICAgICAgIG1heF9zcGFyZV90aHJlYWRzID0gbWluX3NwYXJlX3RocmVhZHMgKyB0 aHJlYWRzX3Blcl9jaGlsZCAqIG51bV9idWNrZXRzOwogCiAgICAgLyogSWYgd2UncmUgZG9pbmcg YSBncmFjZWZ1bF9yZXN0YXJ0IHRoZW4gd2UncmUgZ29pbmcgdG8gc2VlIGEgbG90CiAgICAgICog b2YgY2hpbGRyZW4gZXhpdGluZyBpbW1lZGlhdGVseSB3aGVuIHdlIGdldCBpbnRvIHRoZSBtYWlu IGxvb3AKQEAgLTMwMTcsNyArMzA1NCw5IEBACiAgICAgICAgIC8qIFRpbWUgdG8gc2h1dCBkb3du OgogICAgICAgICAgKiBLaWxsIGNoaWxkIHByb2Nlc3NlcywgdGVsbCB0aGVtIHRvIGNhbGwgY2hp bGRfZXhpdCwgZXRjLi4uCiAgICAgICAgICAqLwotICAgICAgICBhcF9tcG1fcG9keF9raWxscGco cG9kLCBhcF9kYWVtb25zX2xpbWl0LCBBUF9NUE1fUE9EWF9SRVNUQVJUKTsKKyAgICAgICAgZm9y IChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgICAgIGFwX21wbV9wb2R4 X2tpbGxwZyhwb2RbaV0sIGFwX2RhZW1vbnNfbGltaXQsIEFQX01QTV9QT0RYX1JFU1RBUlQpOwor ICAgICAgICB9CiAgICAgICAgIGFwX3JlY2xhaW1fY2hpbGRfcHJvY2Vzc2VzKDEsIC8qIFN0YXJ0 IHdpdGggU0lHVEVSTSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVu dF9ub3RlX2NoaWxkX2tpbGxlZCk7CiAKQEAgLTMwMzgsNyArMzA3Nyw5IEBACiAKICAgICAgICAg LyogQ2xvc2Ugb3VyIGxpc3RlbmVycywgYW5kIHRoZW4gYXNrIG91ciBjaGlsZHJlbiB0byBkbyBz YW1lICovCiAgICAgICAgIGFwX2Nsb3NlX2xpc3RlbmVycygpOwotICAgICAgICBhcF9tcG1fcG9k eF9raWxscGcocG9kLCBhcF9kYWVtb25zX2xpbWl0LCBBUF9NUE1fUE9EWF9HUkFDRUZVTCk7Cisg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgICAgICBh cF9tcG1fcG9keF9raWxscGcocG9kW2ldLCBhcF9kYWVtb25zX2xpbWl0LCBBUF9NUE1fUE9EWF9H UkFDRUZVTCk7CisgICAgICAgIH0KICAgICAgICAgYXBfcmVsaWV2ZV9jaGlsZF9wcm9jZXNzZXMo ZXZlbnRfbm90ZV9jaGlsZF9raWxsZWQpOwogCiAgICAgICAgIGlmICghY2hpbGRfZmF0YWwpIHsK QEAgLTMwNzgsNyArMzExOSw5IEBACiAgICAgICAgICAqIHdheSwgdHJ5IGFuZCBtYWtlIHN1cmUg dGhhdCBhbGwgb2Ygb3VyIHByb2Nlc3NlcyBhcmUKICAgICAgICAgICogcmVhbGx5IGRlYWQuCiAg ICAgICAgICAqLwotICAgICAgICBhcF9tcG1fcG9keF9raWxscGcocG9kLCBhcF9kYWVtb25zX2xp bWl0LCBBUF9NUE1fUE9EWF9SRVNUQVJUKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9i dWNrZXRzOyBpKyspIHsKKyAgICAgICAgICAgIGFwX21wbV9wb2R4X2tpbGxwZyhwb2RbaV0sIGFw X2RhZW1vbnNfbGltaXQsIEFQX01QTV9QT0RYX1JFU1RBUlQpOworICAgICAgICB9CiAgICAgICAg IGFwX3JlY2xhaW1fY2hpbGRfcHJvY2Vzc2VzKDEsIGV2ZW50X25vdGVfY2hpbGRfa2lsbGVkKTsK IAogICAgICAgICByZXR1cm4gRE9ORTsKQEAgLTMxMDQsOCArMzE0Nyw5IEBACiAgICAgICAgICAg ICAgICAgICAgICBBUF9TSUdfR1JBQ0VGVUxfU1RSSU5HCiAgICAgICAgICAgICAgICAgICAgICAi IHJlY2VpdmVkLiAgRG9pbmcgZ3JhY2VmdWwgcmVzdGFydCIpOwogICAgICAgICAvKiB3YWtlIHVw IHRoZSBjaGlsZHJlbi4uLnRpbWUgdG8gZGllLiAgQnV0IHdlJ2xsIGhhdmUgbW9yZSBzb29uICov Ci0gICAgICAgIGFwX21wbV9wb2R4X2tpbGxwZyhwb2QsIGFwX2RhZW1vbnNfbGltaXQsIEFQX01Q TV9QT0RYX0dSQUNFRlVMKTsKLQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7 IGkrKykgeworICAgICAgICAgICAgYXBfbXBtX3BvZHhfa2lsbHBnKHBvZFtpXSwgYXBfZGFlbW9u c19saW1pdCwgQVBfTVBNX1BPRFhfR1JBQ0VGVUwpOworICAgICAgICB9CiAKICAgICAgICAgLyog VGhpcyBpcyBtb3N0bHkgZm9yIGRlYnVnZ2luZy4uLiBzbyB0aGF0IHdlIGtub3cgd2hhdCBpcyBz dGlsbAogICAgICAgICAgKiBncmFjZWZ1bGx5IGRlYWxpbmcgd2l0aCBleGlzdGluZyByZXF1ZXN0 LgpAQCAtMzExNyw3ICszMTYxLDkgQEAKICAgICAgICAgICogYW5kIGEgU0lHSFVQLCB3ZSBtYXkg YXMgd2VsbCB1c2UgdGhlIHNhbWUgc2lnbmFsLCBiZWNhdXNlIHNvbWUgdXNlcgogICAgICAgICAg KiBwdGhyZWFkcyBhcmUgc3RlYWxpbmcgc2lnbmFscyBmcm9tIHVzIGxlZnQgYW5kIHJpZ2h0Lgog ICAgICAgICAgKi8KLSAgICAgICAgYXBfbXBtX3BvZHhfa2lsbHBnKHBvZCwgYXBfZGFlbW9uc19s aW1pdCwgQVBfTVBNX1BPRFhfUkVTVEFSVCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1f YnVja2V0czsgaSsrKSB7CisgICAgICAgICAgICBhcF9tcG1fcG9keF9raWxscGcocG9kW2ldLCBh cF9kYWVtb25zX2xpbWl0LCBBUF9NUE1fUE9EWF9SRVNUQVJUKTsKKyAgICAgICAgfQogCiAgICAg ICAgIGFwX3JlY2xhaW1fY2hpbGRfcHJvY2Vzc2VzKDEsICAvKiBTdGFydCB3aXRoIFNJR1RFUk0g Ki8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbm90ZV9jaGlsZF9r aWxsZWQpOwpAQCAtMzEzNyw2ICszMTgzLDggQEAKICAgICBpbnQgc3RhcnR1cCA9IDA7CiAgICAg aW50IGxldmVsX2ZsYWdzID0gMDsKICAgICBhcHJfc3RhdHVzX3QgcnY7CisgICAgaW50IGk7Cisg ICAgaW50IG51bV9vZl9jb3JlcyA9IDA7CiAKICAgICBwY29uZiA9IHA7CiAKQEAgLTMxNDYsNiAr MzE5NCw4IEBACiAgICAgICAgIGxldmVsX2ZsYWdzIHw9IEFQTE9HX1NUQVJUVVA7CiAgICAgfQog CisgICAgZW5hYmxlX2RlZmF1bHRfbGlzdGVuZXIgPSAwOworCiAgICAgaWYgKChudW1fbGlzdGVu c29ja3MgPSBhcF9zZXR1cF9saXN0ZW5lcnMoYXBfc2VydmVyX2NvbmYpKSA8IDEpIHsKICAgICAg ICAgYXBfbG9nX2Vycm9yKEFQTE9HX01BUkssIEFQTE9HX0FMRVJUIHwgbGV2ZWxfZmxhZ3MsIDAs CiAgICAgICAgICAgICAgICAgICAgICAoc3RhcnR1cCA/IE5VTEwgOiBzKSwKQEAgLTMxNTMsMTIg KzMyMDMsMzYgQEAKICAgICAgICAgcmV0dXJuIERPTkU7CiAgICAgfQogCisgICAgZW5hYmxlX2Rl ZmF1bHRfbGlzdGVuZXIgPSAxOworICAgIGlmIChoYXZlX3NvX3JldXNlcG9ydCkgeworI2lmZGVm IF9TQ19OUFJPQ0VTU09SU19PTkxOCisgICAgICAgIG51bV9vZl9jb3JlcyA9IHN5c2NvbmYoX1ND X05QUk9DRVNTT1JTX09OTE4pOworI2Vsc2UKKyAgICAgICAgbnVtX29mX2NvcmVzID0gMTsKKyNl bmRpZgorICAgICAgICBpZiAobnVtX29mX2NvcmVzID4gOCkgeworICAgICAgICAgICAgbnVtX2J1 Y2tldHMgPSBudW1fb2ZfY29yZXMvODsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg ICAgICAgIG51bV9idWNrZXRzID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAg ICAgICAgbnVtX2J1Y2tldHMgPSAxOworICAgIH0KKworICAgIGFwX2R1cGxpY2F0ZV9saXN0ZW5l cnMoYXBfc2VydmVyX2NvbmYsIHBjb25mLCBudW1fYnVja2V0cyk7CisgCisgICAgcG9kID0gYXBy X3BhbGxvYyhwY29uZiwgc2l6ZW9mKGFwX3BvZF90ICopICogbnVtX2J1Y2tldHMpOworCiAgICAg aWYgKCFvbmVfcHJvY2VzcykgewotICAgICAgICBpZiAoKHJ2ID0gYXBfbXBtX3BvZHhfb3Blbihw Y29uZiwgJnBvZCkpKSB7Ci0gICAgICAgICAgICBhcF9sb2dfZXJyb3IoQVBMT0dfTUFSSywgQVBM T0dfQ1JJVCB8IGxldmVsX2ZsYWdzLCBydiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoc3Rh cnR1cCA/IE5VTEwgOiBzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IG9w ZW4gcGlwZS1vZi1kZWF0aCIpOwotICAgICAgICAgICAgcmV0dXJuIERPTkU7CisgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgICAgICBpZiAoKHJ2ID0g YXBfbXBtX3BvZHhfb3BlbihwY29uZiwgJnBvZFtpXSkpKSB7CisgICAgICAgICAgICAgICAgYXBf bG9nX2Vycm9yKEFQTE9HX01BUkssIEFQTE9HX0NSSVQgfCBsZXZlbF9mbGFncywgcnYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydHVwID8gTlVMTCA6IHMpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IG9wZW4gcGlwZS1vZi1kZWF0aCIpOworICAg ICAgICAgICAgICAgIHJldHVybiBET05FOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg fQogICAgIC8qIGZvciBza2lwbGlzdCAqLwpAQCAtMzE3Miw2ICszMjQ2LDcgQEAKICAgICBpbnQg bm9fZGV0YWNoLCBkZWJ1ZywgZm9yZWdyb3VuZDsKICAgICBhcHJfc3RhdHVzX3QgcnY7CiAgICAg Y29uc3QgY2hhciAqdXNlcmRhdGFfa2V5ID0gIm1wbV9ldmVudF9tb2R1bGUiOworICAgIGludCBp OwogCiAgICAgbXBtX3N0YXRlID0gQVBfTVBNUV9TVEFSVElORzsKIApAQCAtMzE5Miw3ICszMjY3 LDYgQEAKICAgICBpZiAoIXJldGFpbmVkKSB7CiAgICAgICAgIHJldGFpbmVkID0gYXBfcmV0YWlu ZWRfZGF0YV9jcmVhdGUodXNlcmRhdGFfa2V5LCBzaXplb2YoKnJldGFpbmVkKSk7CiAgICAgICAg IHJldGFpbmVkLT5tYXhfZGFlbW9uc19saW1pdCA9IC0xOwotICAgICAgICByZXRhaW5lZC0+aWRs ZV9zcGF3bl9yYXRlID0gMTsKICAgICB9CiAgICAgKytyZXRhaW5lZC0+bW9kdWxlX2xvYWRzOwog ICAgIGlmIChyZXRhaW5lZC0+bW9kdWxlX2xvYWRzID09IDIpIHsKQEAgLTMyMDYsNiArMzI4MCwx MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICJhdG9taWNzIG5vdCB3b3JraW5nIGFzIGV4 cGVjdGVkIC0gYWRkMzIgb2YgbmVnYXRpdmUgbnVtYmVyIik7CiAgICAgICAgICAgICByZXR1cm4g SFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiAgICAgICAgIH0KKyAgICAgICAgcmV0YWluZWQt PmlkbGVfc3Bhd25fcmF0ZSA9IGFwcl9wYWxsb2MocGNvbmYsIHNpemVvZihpbnQpICogbnVtX2J1 Y2tldHMpOworICAgICAgICBmb3IgKGkgPSAwOyBpPCBudW1fYnVja2V0czsgaSsrKSB7CisgICAg ICAgICAgICByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlW2ldID0gMTsKKyAgICAgICAgfQogICAg ICAgICBydiA9IGFwcl9wb2xsc2V0X2NyZWF0ZSgmZXZlbnRfcG9sbHNldCwgMSwgcGxvZywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBSX1BPTExTRVRfVEhSRUFEU0FGRSB8IEFQ Ul9QT0xMU0VUX05PQ09QWSk7CiAgICAgICAgIGlmIChydiAhPSBBUFJfU1VDQ0VTUykgewpkaWZm IC1ydSBodHRwZC10cnVuay9zZXJ2ZXIvbXBtL3ByZWZvcmsvcHJlZm9yay5jIGh0dHBkLXRydW5r Lm5ldy9zZXJ2ZXIvbXBtL3ByZWZvcmsvcHJlZm9yay5jCi0tLSBodHRwZC10cnVuay9zZXJ2ZXIv bXBtL3ByZWZvcmsvcHJlZm9yay5jCTIwMTQtMDUtMzEgMjM6MTA6MTUuMzk5MzY3ODc2IC0wNDAw CisrKyBodHRwZC10cnVuay5uZXcvc2VydmVyL21wbS9wcmVmb3JrL3ByZWZvcmsuYwkyMDE0LTA2 LTAxIDIzOjQ0OjE3LjQ4NzkxNDAxNiAtMDQwMApAQCAtNDgsNiArNDgsOCBAQAogI2luY2x1ZGUg ImFwX21tbi5oIgogI2luY2x1ZGUgImFwcl9wb2xsLmgiCiAKKyNpbmNsdWRlIDxzdGRsaWIuaD4K KwogI2lmZGVmIEhBVkVfVElNRV9ICiAjaW5jbHVkZSA8dGltZS5oPgogI2VuZGlmCkBAIC04Niwx NCArODgsMTkgQEAKIAogLyogY29uZmlnIGdsb2JhbHMgKi8KIAotc3RhdGljIGFwcl9wcm9jX211 dGV4X3QgKmFjY2VwdF9tdXRleDsKK3N0YXRpYyBhcHJfcHJvY19tdXRleF90ICoqYWNjZXB0X211 dGV4Owogc3RhdGljIGludCBhcF9kYWVtb25zX3RvX3N0YXJ0PTA7CiBzdGF0aWMgaW50IGFwX2Rh ZW1vbnNfbWluX2ZyZWU9MDsKIHN0YXRpYyBpbnQgYXBfZGFlbW9uc19tYXhfZnJlZT0wOwogc3Rh dGljIGludCBhcF9kYWVtb25zX2xpbWl0PTA7ICAgICAgLyogTWF4UmVxdWVzdFdvcmtlcnMgKi8K IHN0YXRpYyBpbnQgc2VydmVyX2xpbWl0ID0gMDsKIHN0YXRpYyBpbnQgbXBtX3N0YXRlID0gQVBf TVBNUV9TVEFSVElORzsKLXN0YXRpYyBhcF9wb2RfdCAqcG9kOworc3RhdGljIGFwX3BvZF90ICoq cG9kOworc3RhdGljIGFwX3BvZF90ICpjaGlsZF9wb2Q7CitzdGF0aWMgYXByX3Byb2NfbXV0ZXhf dCAqY2hpbGRfbXV0ZXg7CithcF9saXN0ZW5fcmVjICpjaGlsZF9saXN0ZW47CitpbnQgKmJ1Y2tl dDsgICAgLyogYnVja2V0IGFycmF5IGZvciB0aGUgaHR0cGQgY2hpbGQgcHJvY2Vzc2VzICovCisK IAogLyogZGF0YSByZXRhaW5lZCBieSBwcmVmb3JrIGFjcm9zcyBsb2FkL3VubG9hZCBvZiB0aGUg bW9kdWxlCiAgKiBhbGxvY2F0ZWQgb24gZmlyc3QgY2FsbCB0byBwcmUtY29uZmlnIGhvb2s7IGxv Y2F0ZWQgb24KQEAgLTIyMiwxNCArMjI5LDE0IEBACiAgICAgICAgIHByZWZvcmtfbm90ZV9jaGls ZF9raWxsZWQoLyogc2xvdCAqLyAwLCAwLCAwKTsKICAgICB9CiAKLSAgICBhcF9tcG1fcG9kX2Ns b3NlKHBvZCk7CisgICAgYXBfbXBtX3BvZF9jbG9zZShjaGlsZF9wb2QpOwogICAgIGNoZGlyX2Zv cl9ncHJvZigpOwogICAgIGV4aXQoY29kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFjY2VwdF9tdXRl eF9vbih2b2lkKQogewotICAgIGFwcl9zdGF0dXNfdCBydiA9IGFwcl9wcm9jX211dGV4X2xvY2so YWNjZXB0X211dGV4KTsKKyAgICBhcHJfc3RhdHVzX3QgcnYgPSBhcHJfcHJvY19tdXRleF9sb2Nr KGNoaWxkX211dGV4KTsKICAgICBpZiAocnYgIT0gQVBSX1NVQ0NFU1MpIHsKICAgICAgICAgY29u c3QgY2hhciAqbXNnID0gImNvdWxkbid0IGdyYWIgdGhlIGFjY2VwdCBtdXRleCI7CiAKQEAgLTI0 Nyw3ICsyNTQsNyBAQAogCiBzdGF0aWMgdm9pZCBhY2NlcHRfbXV0ZXhfb2ZmKHZvaWQpCiB7Ci0g ICAgYXByX3N0YXR1c190IHJ2ID0gYXByX3Byb2NfbXV0ZXhfdW5sb2NrKGFjY2VwdF9tdXRleCk7 CisgICAgYXByX3N0YXR1c190IHJ2ID0gYXByX3Byb2NfbXV0ZXhfdW5sb2NrKGNoaWxkX211dGV4 KTsKICAgICBpZiAocnYgIT0gQVBSX1NVQ0NFU1MpIHsKICAgICAgICAgY29uc3QgY2hhciAqbXNn ID0gImNvdWxkbid0IHJlbGVhc2UgdGhlIGFjY2VwdCBtdXRleCI7CiAKQEAgLTI3Miw3ICsyNzks NyBAQAogICogd2hlbiBpdCdzIHNhZmUgaW4gdGhlIHNpbmdsZSBMaXN0ZW4gY2FzZS4KICAqLwog I2lmZGVmIFNJTkdMRV9MSVNURU5fVU5TRVJJQUxJWkVEX0FDQ0VQVAotI2RlZmluZSBTQUZFX0FD Q0VQVChzdG10KSBkbyB7aWYgKGFwX2xpc3RlbmVycy0+bmV4dCkge3N0bXQ7fX0gd2hpbGUoMCkK KyNkZWZpbmUgU0FGRV9BQ0NFUFQoc3RtdCkgZG8ge2lmIChjaGlsZF9saXN0ZW4tPm5leHQpIHtz dG10O319IHdoaWxlKDApCiAjZWxzZQogI2RlZmluZSBTQUZFX0FDQ0VQVChzdG10KSBkbyB7c3Rt dDt9IHdoaWxlKDApCiAjZW5kaWYKQEAgLTUyMSwxMCArNTI4LDIzIEBACiAgICAgYXByX3Bvb2xf Y3JlYXRlKCZwdHJhbnMsIHBjaGlsZCk7CiAgICAgYXByX3Bvb2xfdGFnKHB0cmFucywgInRyYW5z YWN0aW9uIik7CiAKKy8qIGNsb3NlIHVudXNlZCBsaXN0ZW5lcnMgYW5kIHBvZHMgKi8KKyAgICBm b3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICBpZiAoaSAhPSBidWNr ZXRbbXlfY2hpbGRfbnVtXSkgeworICAgICAgICAgICAgbHIgPSBtcG1fbGlzdGVuW2ldOworICAg ICAgICAgICAgd2hpbGUobHIpIHsKKyAgICAgICAgICAgICAgICBhcHJfc29ja2V0X2Nsb3NlKGxy LT5zZCk7CisgICAgICAgICAgICAgICAgbHIgPSBsci0+bmV4dDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIG1wbV9saXN0ZW5baV0tPmFjdGl2ZSA9IDA7CisgICAgICAgICAgICBhcF9tcG1f cG9kX2Nsb3NlKHBvZFtpXSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKiBuZWVkcyB0byBi ZSBkb25lIGJlZm9yZSB3ZSBzd2l0Y2ggVUlEcyBzbyB3ZSBoYXZlIHBlcm1pc3Npb25zICovCiAg ICAgYXBfcmVvcGVuX3Njb3JlYm9hcmQocGNoaWxkLCBOVUxMLCAwKTsKLSAgICBsb2NrZmlsZSA9 IGFwcl9wcm9jX211dGV4X2xvY2tmaWxlKGFjY2VwdF9tdXRleCk7Ci0gICAgc3RhdHVzID0gYXBy X3Byb2NfbXV0ZXhfY2hpbGRfaW5pdCgmYWNjZXB0X211dGV4LAorICAgIGxvY2tmaWxlID0gYXBy X3Byb2NfbXV0ZXhfbG9ja2ZpbGUoY2hpbGRfbXV0ZXgpOworICAgIHN0YXR1cyA9IGFwcl9wcm9j X211dGV4X2NoaWxkX2luaXQoJmNoaWxkX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbG9ja2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwY2hpbGQpOwogICAgIGlmIChzdGF0dXMgIT0gQVBSX1NVQ0NFU1MpIHsKQEAgLTUz Miw3ICs1NTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGluaXRpYWxpemUg Y3Jvc3MtcHJvY2VzcyBsb2NrIGluIGNoaWxkICIKICAgICAgICAgICAgICAgICAgICAgICIoJXMp ICglcykiLAogICAgICAgICAgICAgICAgICAgICAgbG9ja2ZpbGUgPyBsb2NrZmlsZSA6ICJub25l IiwKLSAgICAgICAgICAgICAgICAgICAgIGFwcl9wcm9jX211dGV4X25hbWUoYWNjZXB0X211dGV4 KSk7CisgICAgICAgICAgICAgICAgICAgICBhcHJfcHJvY19tdXRleF9uYW1lKGNoaWxkX211dGV4 KSk7CiAgICAgICAgIGNsZWFuX2NoaWxkX2V4aXQoQVBFWElUX0NISUxERkFUQUwpOwogICAgIH0K IApAQCAtNTU0LDcgKzU3NCw3IEBACiAgICAgICAgIGNsZWFuX2NoaWxkX2V4aXQoQVBFWElUX0NI SUxEU0lDSyk7IC8qIGFzc3VtZSB0ZW1wb3JhcnkgcmVzb3VyY2UgaXNzdWUgKi8KICAgICB9CiAK LSAgICBmb3IgKGxyID0gYXBfbGlzdGVuZXJzLCBpID0gbnVtX2xpc3RlbnNvY2tzOyBpLS07IGxy ID0gbHItPm5leHQpIHsKKyAgICBmb3IgKGxyID0gY2hpbGRfbGlzdGVuLCBpID0gbnVtX2xpc3Rl bnNvY2tzOyBpLS07IGxyID0gbHItPm5leHQpIHsKICAgICAgICAgYXByX3BvbGxmZF90IHBmZCA9 IHsgMCB9OwogCiAgICAgICAgIHBmZC5kZXNjX3R5cGUgPSBBUFJfUE9MTF9TT0NLRVQ7CkBAIC02 MTIsNyArNjMyLDcgQEAKIAogICAgICAgICBpZiAobnVtX2xpc3RlbnNvY2tzID09IDEpIHsKICAg ICAgICAgICAgIC8qIFRoZXJlIGlzIG9ubHkgb25lIGxpc3RlbmVyIHJlY29yZCwgc28gcmVmZXIg dG8gdGhhdCBvbmUuICovCi0gICAgICAgICAgICBsciA9IGFwX2xpc3RlbmVyczsKKyAgICAgICAg ICAgIGxyID0gY2hpbGRfbGlzdGVuOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAg ICAgICAgLyogbXVsdGlwbGUgbGlzdGVuaW5nIHNvY2tldHMgLSBuZWVkIHRvIHBvbGwgKi8KQEAg LTcxMCw3ICs3MzAsNyBAQAogICAgICAgICAgKiB3aGlsZSB3ZSB3ZXJlIHByb2Nlc3NpbmcgdGhl IGNvbm5lY3Rpb24gb3Igd2UgYXJlIHRoZSBsdWNreQogICAgICAgICAgKiBpZGxlIHNlcnZlciBw cm9jZXNzIHRoYXQgZ2V0cyB0byBkaWUuCiAgICAgICAgICAqLwotICAgICAgICBpZiAoYXBfbXBt X3BvZF9jaGVjayhwb2QpID09IEFQUl9TVUNDRVNTKSB7IC8qIHNlbGVjdGVkIGFzIGlkbGU/ICov CisgICAgICAgIGlmIChhcF9tcG1fcG9kX2NoZWNrKGNoaWxkX3BvZCkgPT0gQVBSX1NVQ0NFU1Mp IHsgLyogc2VsZWN0ZWQgYXMgaWRsZT8gKi8KICAgICAgICAgICAgIGRpZV9ub3cgPSAxOwogICAg ICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHJldGFpbmVkLT5teV9nZW5lcmF0aW9uICE9CkBAIC03 NTAsNiArNzcwLDkgQEAKICAgICAodm9pZCkgYXBfdXBkYXRlX2NoaWxkX3N0YXR1c19mcm9tX2lu ZGV4ZXMoc2xvdCwgMCwgU0VSVkVSX1NUQVJUSU5HLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdF9yZWMgKikgTlVMTCk7CiAKKyAgICBjaGls ZF9saXN0ZW4gPSBtcG1fbGlzdGVuW2J1Y2tldFtzbG90XV07CisgICAgY2hpbGRfbXV0ZXggPSBh Y2NlcHRfbXV0ZXhbYnVja2V0W3Nsb3RdXTsKKyAgICBjaGlsZF9wb2QgPSBwb2RbYnVja2V0W3Ns b3RdXTsKIAogI2lmZGVmIF9PU0RfUE9TSVgKICAgICAvKiBCUzIwMDAgcmVxdWlyZXMgYSAic3Bl Y2lhbCIgdmVyc2lvbiBvZiBmb3JrKCkgYmVmb3JlIGEgc2V0dWlkKCkgY2FsbCAqLwpAQCAtODE1 LDYgKzgzOCw3IEBACiAgICAgICAgIGlmIChhcF9zY29yZWJvYXJkX2ltYWdlLT5zZXJ2ZXJzW2ld WzBdLnN0YXR1cyAhPSBTRVJWRVJfREVBRCkgewogICAgICAgICAgICAgY29udGludWU7CiAgICAg ICAgIH0KKyAgICAgICAgYnVja2V0W2ldID0gaSAlIG51bV9idWNrZXRzOwogICAgICAgICBpZiAo bWFrZV9jaGlsZChhcF9zZXJ2ZXJfY29uZiwgaSkgPCAwKSB7CiAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgfQpAQCAtODIyLDYgKzg0Niw4IEBACiAgICAgfQogfQogCitzdGF0aWMgaW50IGJ1 Y2tldF9tYWtlX2NoaWxkX3JlY29yZCA9IC0xOworc3RhdGljIGludCBidWNrZXRfa2lsbF9jaGls ZF9yZWNvcmQgPSAtMTsKIHN0YXRpYyB2b2lkIHBlcmZvcm1faWRsZV9zZXJ2ZXJfbWFpbnRlbmFu Y2UoYXByX3Bvb2xfdCAqcCkKIHsKICAgICBpbnQgaTsKQEAgLTg3NCw3ICs5MDAsOCBAQAogICAg ICAgICAgKiBzaHV0IGRvd24gZ3JhY2VmdWxseSwgaW4gY2FzZSBpdCBoYXBwZW5lZCB0byBwaWNr IHVwIGEgcmVxdWVzdAogICAgICAgICAgKiB3aGlsZSB3ZSB3ZXJlIGNvdW50aW5nCiAgICAgICAg ICAqLwotICAgICAgICBhcF9tcG1fcG9kX3NpZ25hbChwb2QpOworICAgICAgICBidWNrZXRfa2ls bF9jaGlsZF9yZWNvcmQgPSAoYnVja2V0X2tpbGxfY2hpbGRfcmVjb3JkICsgMSkgJSBudW1fYnVj a2V0czsKKyAgICAgICAgYXBfbXBtX3BvZF9zaWduYWwocG9kW2J1Y2tldF9raWxsX2NoaWxkX3Jl Y29yZF0pOwogICAgICAgICByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlID0gMTsKICAgICB9CiAg ICAgZWxzZSBpZiAoaWRsZV9jb3VudCA8IGFwX2RhZW1vbnNfbWluX2ZyZWUpIHsKQEAgLTg5OSw2 ICs5MjYsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZGxlX2NvdW50LCB0b3RhbF9ub25fZGVh ZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZnJlZV9sZW5n dGg7ICsraSkgeworICAgICAgICAgICAgICAgIGJ1Y2tldFtmcmVlX3Nsb3RzW2ldXT0gKCsrYnVj a2V0X21ha2VfY2hpbGRfcmVjb3JkKSAlIG51bV9idWNrZXRzOwogICAgICAgICAgICAgICAgIG1h a2VfY2hpbGQoYXBfc2VydmVyX2NvbmYsIGZyZWVfc2xvdHNbaV0pOwogICAgICAgICAgICAgfQog ICAgICAgICAgICAgLyogdGhlIG5leHQgdGltZSBhcm91bmQgd2Ugd2FudCB0byBzcGF3biB0d2lj ZSBhcyBtYW55IGlmIHRoaXMKQEAgLTkyNiwxNSArOTU0LDI0IEBACiAgICAgaW50IGluZGV4Owog ICAgIGludCByZW1haW5pbmdfY2hpbGRyZW5fdG9fc3RhcnQ7CiAgICAgYXByX3N0YXR1c190IHJ2 OworICAgIGludCBpOworICAgIGFwX2xpc3Rlbl9yZWMgKmxyOwogCiAgICAgYXBfbG9nX3BpZChw Y29uZiwgYXBfcGlkX2ZuYW1lKTsKIAotICAgIC8qIEluaXRpYWxpemUgY3Jvc3MtcHJvY2VzcyBh Y2NlcHQgbG9jayAqLwotICAgIHJ2ID0gYXBfcHJvY19tdXRleF9jcmVhdGUoJmFjY2VwdF9tdXRl eCwgTlVMTCwgQVBfQUNDRVBUX01VVEVYX1RZUEUsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzLCBfcGNvbmYsIDApOwotICAgIGlmIChydiAhPSBBUFJfU1VDQ0VTUykgewot ICAgICAgICBtcG1fc3RhdGUgPSBBUF9NUE1RX1NUT1BQSU5HOwotICAgICAgICByZXR1cm4gRE9O RTsKKyAgICBidWNrZXQgPSBhcHJfcGFsbG9jKF9wY29uZiwgc2l6ZW9mKGludCkgKiAgYXBfZGFl bW9uc19saW1pdCk7CisgICAgLyogSW5pdGlhbGl6ZSBjcm9zcy1wcm9jZXNzIGFjY2VwdCBsb2Nr IGZvciBlYWNoIGJ1Y2tldCovCisgICAgYWNjZXB0X211dGV4ID0gYXByX3BhbGxvYyhfcGNvbmYs IHNpemVvZihhcHJfcHJvY19tdXRleF90ICopICogbnVtX2J1Y2tldHMpOworICAgIGZvciAoaSA9 IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgIHJ2ID0gYXBfcHJvY19tdXRleF9j cmVhdGUoJmFjY2VwdF9tdXRleFtpXSwgTlVMTCwgQVBfQUNDRVBUX01VVEVYX1RZUEUsIE5VTEws CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcywgX3Bjb25mLCAwKTsKKyAgICAg ICAgaWYgKHJ2ICE9IEFQUl9TVUNDRVNTKSB7CisgICAgICAgICAgICBtcG1fc3RhdGUgPSBBUF9N UE1RX1NUT1BQSU5HOworICAgICAgICAgICAgcmV0dXJuIERPTkU7CisgICAgICAgIH0KKyAgICAg fQorICAgIGZvciAobHIgPSBhcF9saXN0ZW5lcnM7IGxyOyBsciA9IGxyLT5uZXh0KSB7CisgICAg ICAgIGFwcl9zb2NrZXRfY2xvc2UobHItPnNkKTsKICAgICB9CiAKICAgICBpZiAoIXJldGFpbmVk LT5pc19ncmFjZWZ1bCkgewpAQCAtOTUzLDEyICs5OTAsMTMgQEAKIAogICAgIGlmIChvbmVfcHJv Y2VzcykgewogICAgICAgICBBUF9NT05DT05UUk9MKDEpOworICAgICAgICBidWNrZXRbMF0gPSAw OwogICAgICAgICBtYWtlX2NoaWxkKGFwX3NlcnZlcl9jb25mLCAwKTsKICAgICAgICAgLyogTk9U UkVBQ0hFRCAqLwogICAgIH0KICAgICBlbHNlIHsKLSAgICBpZiAoYXBfZGFlbW9uc19tYXhfZnJl ZSA8IGFwX2RhZW1vbnNfbWluX2ZyZWUgKyAxKSAgLyogRG9uJ3QgdGhyYXNoLi4uICovCi0gICAg ICAgIGFwX2RhZW1vbnNfbWF4X2ZyZWUgPSBhcF9kYWVtb25zX21pbl9mcmVlICsgMTsKKyAgICBp ZiAoYXBfZGFlbW9uc19tYXhfZnJlZSA8IGFwX2RhZW1vbnNfbWluX2ZyZWUgKyBudW1fYnVja2V0 cykgIC8qIERvbid0IHRocmFzaC4uLiAqLworICAgICAgICBhcF9kYWVtb25zX21heF9mcmVlID0g YXBfZGFlbW9uc19taW5fZnJlZSArIG51bV9idWNrZXRzOwogCiAgICAgLyogSWYgd2UncmUgZG9p bmcgYSBncmFjZWZ1bF9yZXN0YXJ0IHRoZW4gd2UncmUgZ29pbmcgdG8gc2VlIGEgbG90CiAgICAg ICogb2YgY2hpbGRyZW4gZXhpdGluZyBpbW1lZGlhdGVseSB3aGVuIHdlIGdldCBpbnRvIHRoZSBt YWluIGxvb3AKQEAgLTk5MSw3ICsxMDI5LDcgQEAKICAgICBhcF9sb2dfY29tbWFuZF9saW5lKHBs b2csIHMpOwogICAgIGFwX2xvZ19lcnJvcihBUExPR19NQVJLLCBBUExPR19ERUJVRywgMCwgYXBf c2VydmVyX2NvbmYsIEFQTE9HTk8oMDAxNjUpCiAgICAgICAgICAgICAgICAgIkFjY2VwdCBtdXRl eDogJXMgKGRlZmF1bHQ6ICVzKSIsCi0gICAgICAgICAgICAgICAgYXByX3Byb2NfbXV0ZXhfbmFt ZShhY2NlcHRfbXV0ZXgpLAorICAgICAgICAgICAgICAgIGFwcl9wcm9jX211dGV4X25hbWUoYWNj ZXB0X211dGV4WzBdKSwKICAgICAgICAgICAgICAgICBhcHJfcHJvY19tdXRleF9kZWZuYW1lKCkp OwogCiAgICAgbXBtX3N0YXRlID0gQVBfTVBNUV9SVU5OSU5HOwpAQCAtMTEyMiw3ICsxMTYwLDkg QEAKICAgICAgICAgYXBfY2xvc2VfbGlzdGVuZXJzKCk7CiAKICAgICAgICAgLyoga2lsbCBvZmYg dGhlIGlkbGUgb25lcyAqLwotICAgICAgICBhcF9tcG1fcG9kX2tpbGxwZyhwb2QsIHJldGFpbmVk LT5tYXhfZGFlbW9uc19saW1pdCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0 czsgaSsrKSB7CisgICAgICAgICAgICBhcF9tcG1fcG9kX2tpbGxwZyhwb2RbaV0sIHJldGFpbmVk LT5tYXhfZGFlbW9uc19saW1pdCk7CisgICAgICAgIH0KIAogICAgICAgICAvKiBTZW5kIFNJR1VT UjEgdG8gdGhlIGFjdGl2ZSBjaGlsZHJlbiAqLwogICAgICAgICBhY3RpdmVfY2hpbGRyZW4gPSAw OwpAQCAtMTE5Niw3ICsxMjM2LDkgQEAKICAgICAgICAgICAgICAgICAgICAgIkdyYWNlZnVsIHJl c3RhcnQgcmVxdWVzdGVkLCBkb2luZyByZXN0YXJ0Iik7CiAKICAgICAgICAgLyoga2lsbCBvZmYg dGhlIGlkbGUgb25lcyAqLwotICAgICAgICBhcF9tcG1fcG9kX2tpbGxwZyhwb2QsIHJldGFpbmVk LT5tYXhfZGFlbW9uc19saW1pdCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0 czsgaSsrKSB7CisgICAgICAgICAgICBhcF9tcG1fcG9kX2tpbGxwZyhwb2RbaV0sIHJldGFpbmVk LT5tYXhfZGFlbW9uc19saW1pdCk7CisgICAgICAgIH0KIAogICAgICAgICAvKiBUaGlzIGlzIG1v c3RseSBmb3IgZGVidWdnaW5nLi4uIHNvIHRoYXQgd2Uga25vdyB3aGF0IGlzIHN0aWxsCiAgICAg ICAgICAqIGdyYWNlZnVsbHkgZGVhbGluZyB3aXRoIGV4aXN0aW5nIHJlcXVlc3QuICBUaGlzIHdp bGwgYnJlYWsKQEAgLTEyMzksNiArMTI4MSw4IEBACiAgICAgaW50IHN0YXJ0dXAgPSAwOwogICAg IGludCBsZXZlbF9mbGFncyA9IDA7CiAgICAgYXByX3N0YXR1c190IHJ2OworICAgIGludCBpOwor ICAgIGludCBudW1fb2ZfY29yZXMgPSAwOwogCiAgICAgcGNvbmYgPSBwOwogCkBAIC0xMjQ4LDYg KzEyOTIsNyBAQAogICAgICAgICBsZXZlbF9mbGFncyB8PSBBUExPR19TVEFSVFVQOwogICAgIH0K IAorICAgIGVuYWJsZV9kZWZhdWx0X2xpc3RlbmVyID0gMDsKICAgICBpZiAoKG51bV9saXN0ZW5z b2NrcyA9IGFwX3NldHVwX2xpc3RlbmVycyhhcF9zZXJ2ZXJfY29uZikpIDwgMSkgewogICAgICAg ICBhcF9sb2dfZXJyb3IoQVBMT0dfTUFSSywgQVBMT0dfQUxFUlQgfCBsZXZlbF9mbGFncywgMCwK ICAgICAgICAgICAgICAgICAgICAgIChzdGFydHVwID8gTlVMTCA6IHMpLApAQCAtMTI1NSwxMiAr MTMwMCwzNiBAQAogICAgICAgICByZXR1cm4gRE9ORTsKICAgICB9CiAKLSAgICBpZiAoKHJ2ID0g YXBfbXBtX3BvZF9vcGVuKHBjb25mLCAmcG9kKSkpIHsKLSAgICAgICAgYXBfbG9nX2Vycm9yKEFQ TE9HX01BUkssIEFQTE9HX0NSSVQgfCBsZXZlbF9mbGFncywgcnYsCi0gICAgICAgICAgICAgICAg ICAgICAoc3RhcnR1cCA/IE5VTEwgOiBzKSwKLSAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBu b3Qgb3BlbiBwaXBlLW9mLWRlYXRoIik7Ci0gICAgICAgIHJldHVybiBET05FOworICAgIGVuYWJs ZV9kZWZhdWx0X2xpc3RlbmVyID0gMTsKKyAgICBpZiAoaGF2ZV9zb19yZXVzZXBvcnQpIHsKKyNp ZmRlZiBfU0NfTlBST0NFU1NPUlNfT05MTgorICAgICAgICBudW1fb2ZfY29yZXMgPSBzeXNjb25m KF9TQ19OUFJPQ0VTU09SU19PTkxOKTsKKyNlbHNlCisgICAgICAgIG51bV9vZl9jb3JlcyA9IDE7 CisjZW5kaWYKKyAgICAgICAgaWYgKG51bV9vZl9jb3JlcyA+IDgpIHsKKyAgICAgICAgICAgIG51 bV9idWNrZXRzID0gbnVtX29mX2NvcmVzLzg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg ICAgICAgICAgICBudW1fYnVja2V0cyA9IDE7CisgICAgICAgIH0KICAgICB9CisgICAgZWxzZSB7 CisgICAgICAgIG51bV9idWNrZXRzID0gMTsKKyAgICB9CisKKyAgICBhcF9kdXBsaWNhdGVfbGlz dGVuZXJzKGFwX3NlcnZlcl9jb25mLCBwY29uZiwgbnVtX2J1Y2tldHMpOworCisgICAgcG9kID0g YXByX3BhbGxvYyhwY29uZiwgc2l6ZW9mKGFwX3BvZF90ICopICogbnVtX2J1Y2tldHMpOworICAg IGZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgIGlmICgocnYgPSBh cF9tcG1fcG9kX29wZW4ocGNvbmYsICZwb2RbaV0pKSkgeworICAgICAgICAgICAgYXBfbG9nX2Vy cm9yKEFQTE9HX01BUkssIEFQTE9HX0NSSVQgfCBsZXZlbF9mbGFncywgcnYsCisgICAgICAgICAg ICAgICAgICAgICAgICAgKHN0YXJ0dXAgPyBOVUxMIDogcyksCisgICAgICAgICAgICAgICAgICAg ICAgICAgImNvdWxkIG5vdCBvcGVuIHBpcGUtb2YtZGVhdGgiKTsKKyAgICAgICAgICAgIHJldHVy biBET05FOworICAgICAgICB9CisgICAgIH0KKwogICAgIHJldHVybiBPSzsKIH0KIApkaWZmIC1y dSBodHRwZC10cnVuay9zZXJ2ZXIvbXBtL3dvcmtlci93b3JrZXIuYyBodHRwZC10cnVuay5uZXcv c2VydmVyL21wbS93b3JrZXIvd29ya2VyLmMKLS0tIGh0dHBkLXRydW5rL3NlcnZlci9tcG0vd29y a2VyL3dvcmtlci5jCTIwMTQtMDUtMzEgMjM6MTA6MTUuMjU2MzY3ODgxIC0wNDAwCisrKyBodHRw ZC10cnVuay5uZXcvc2VydmVyL21wbS93b3JrZXIvd29ya2VyLmMJMjAxNC0wNi0wMSAyMzo0NDo0 NS4zNjc5MTI5MjYgLTA0MDAKQEAgLTMwLDYgKzMwLDkgQEAKICNpbmNsdWRlICJhcHJfdGhyZWFk X211dGV4LmgiCiAjaW5jbHVkZSAiYXByX3Byb2NfbXV0ZXguaCIKICNpbmNsdWRlICJhcHJfcG9s bC5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKICNkZWZpbmUgQVBSX1dBTlRfU1RSRlVOQwog I2luY2x1ZGUgImFwcl93YW50LmgiCiAKQEAgLTE1OSw3ICsxNjIsNyBAQAogICAgICAqIGRvdWJs ZWQgdXAgdG8gTUFYX1NQQVdOX1JBVEUsIGFuZCByZXNldCBvbmx5IHdoZW4gYSBjeWNsZSBnb2Vz IGJ5CiAgICAgICogd2l0aG91dCB0aGUgbmVlZCB0byBzcGF3bi4KICAgICAgKi8KLSAgICBpbnQg aWRsZV9zcGF3bl9yYXRlOworICAgIGludCAqaWRsZV9zcGF3bl9yYXRlOwogI2lmbmRlZiBNQVhf U1BBV05fUkFURQogI2RlZmluZSBNQVhfU1BBV05fUkFURSAgICAgICAgKDMyKQogI2VuZGlmCkBA IC0xODgsNyArMTkxLDggQEAKIAogI2RlZmluZSBJRF9GUk9NX0NISUxEX1RIUkVBRChjLCB0KSAg ICAoKGMgKiB0aHJlYWRfbGltaXQpICsgdCkKIAotc3RhdGljIGFwX3BvZF90ICpwb2Q7CitzdGF0 aWMgYXBfcG9kX3QgKipwb2Q7CitzdGF0aWMgYXBfcG9kX3QgKmNoaWxkX3BvZDsKIAogLyogVGhl IHdvcmtlciBNUE0gcmVzcGVjdHMgYSBjb3VwbGUgb2YgcnVudGltZSBmbGFncyB0aGF0IGNhbiBh aWQKICAqIGluIGRlYnVnZ2luZy4gU2V0dGluZyB0aGUgLUROT19ERVRBQ0ggZmxhZyB3aWxsIHBy ZXZlbnQgdGhlIHJvb3QgcHJvY2VzcwpAQCAtMjE4LDEwICsyMjIsMTMgQEAKIHN0YXRpYyBhcHJf b3NfdGhyZWFkX3QgKmxpc3RlbmVyX29zX3RocmVhZDsKIAogLyogTG9ja3MgZm9yIGFjY2VwdCBz ZXJpYWxpemF0aW9uICovCi1zdGF0aWMgYXByX3Byb2NfbXV0ZXhfdCAqYWNjZXB0X211dGV4Owor c3RhdGljIGFwcl9wcm9jX211dGV4X3QgKiphY2NlcHRfbXV0ZXg7CitzdGF0aWMgYXByX3Byb2Nf bXV0ZXhfdCAqY2hpbGRfbXV0ZXg7CithcF9saXN0ZW5fcmVjICpjaGlsZF9saXN0ZW47CitpbnQg KmJ1Y2tldDsgICAgLyogYnVja2V0IGFycmF5IGZvciB0aGUgaHR0cGQgY2hpbGQgcHJvY2Vzc2Vz ICovCiAKICNpZmRlZiBTSU5HTEVfTElTVEVOX1VOU0VSSUFMSVpFRF9BQ0NFUFQKLSNkZWZpbmUg U0FGRV9BQ0NFUFQoc3RtdCkgKGFwX2xpc3RlbmVycy0+bmV4dCA/IChzdG10KSA6IEFQUl9TVUND RVNTKQorI2RlZmluZSBTQUZFX0FDQ0VQVChzdG10KSAoY2hpbGRfbGlzdGVuLT5uZXh0ID8gKHN0 bXQpIDogQVBSX1NVQ0NFU1MpCiAjZWxzZQogI2RlZmluZSBTQUZFX0FDQ0VQVChzdG10KSAoc3Rt dCkKICNlbmRpZgpAQCAtNzAxLDcgKzcwOCw3IEBACiAgICAgICAgIGNsZWFuX2NoaWxkX2V4aXQo QVBFWElUX0NISUxEU0lDSyk7CiAgICAgfQogCi0gICAgZm9yIChsciA9IGFwX2xpc3RlbmVyczsg bHIgIT0gTlVMTDsgbHIgPSBsci0+bmV4dCkgeworICAgIGZvciAobHIgPSBjaGlsZF9saXN0ZW47 IGxyICE9IE5VTEw7IGxyID0gbHItPm5leHQpIHsKICAgICAgICAgYXByX3BvbGxmZF90IHBmZCA9 IHsgMCB9OwogCiAgICAgICAgIHBmZC5kZXNjX3R5cGUgPSBBUFJfUE9MTF9TT0NLRVQ7CkBAIC03 NTgsNyArNzY1LDcgQEAKICAgICAgICAgLyogV2UndmUgYWxyZWFkeSBkZWNyZW1lbnRlZCB0aGUg aWRsZSB3b3JrZXIgY291bnQgaW5zaWRlCiAgICAgICAgICAqIGFwX3F1ZXVlX2luZm9fd2FpdF9m b3JfaWRsZXIuICovCiAKLSAgICAgICAgaWYgKChydiA9IFNBRkVfQUNDRVBUKGFwcl9wcm9jX211 dGV4X2xvY2soYWNjZXB0X211dGV4KSkpCisgICAgICAgIGlmICgocnYgPSBTQUZFX0FDQ0VQVChh cHJfcHJvY19tdXRleF9sb2NrKGNoaWxkX211dGV4KSkpCiAgICAgICAgICAgICAhPSBBUFJfU1VD Q0VTUykgewogCiAgICAgICAgICAgICBpZiAoIWxpc3RlbmVyX21heV9leGl0KSB7CkBAIC03Njcs OSArNzc0LDkgQEAKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLyogc2tp cCB0aGUgbG9jayByZWxlYXNlICovCiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWFwX2xpc3Rl bmVycy0+bmV4dCkgeworICAgICAgICBpZiAoIWNoaWxkX2xpc3Rlbi0+bmV4dCkgewogICAgICAg ICAgICAgLyogT25seSBvbmUgbGlzdGVuZXIsIHNvIHNraXAgdGhlIHBvbGwgKi8KLSAgICAgICAg ICAgIGxyID0gYXBfbGlzdGVuZXJzOworICAgICAgICAgICAgbHIgPSBjaGlsZF9saXN0ZW47CiAg ICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB3aGlsZSAoIWxpc3RlbmVyX21h eV9leGl0KSB7CkBAIC04MzksNyArODQ2LDcgQEAKICAgICAgICAgICAgICAgICByZXNvdXJjZV9z aG9ydGFnZSA9IDE7CiAgICAgICAgICAgICAgICAgc2lnbmFsX3RocmVhZHMoU1RfR1JBQ0VGVUwp OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChydiA9IFNBRkVfQUNDRVBUKGFwcl9w cm9jX211dGV4X3VubG9jayhhY2NlcHRfbXV0ZXgpKSkKKyAgICAgICAgICAgIGlmICgocnYgPSBT QUZFX0FDQ0VQVChhcHJfcHJvY19tdXRleF91bmxvY2soY2hpbGRfbXV0ZXgpKSkKICAgICAgICAg ICAgICAgICAhPSBBUFJfU1VDQ0VTUykgewogCiAgICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVy X21heV9leGl0KSB7CkBAIC04NjMsNyArODcwLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAg fQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmICgocnYgPSBTQUZFX0FDQ0VQVChhcHJf cHJvY19tdXRleF91bmxvY2soYWNjZXB0X211dGV4KSkpCisgICAgICAgICAgICBpZiAoKHJ2ID0g U0FGRV9BQ0NFUFQoYXByX3Byb2NfbXV0ZXhfdW5sb2NrKGNoaWxkX211dGV4KSkpCiAgICAgICAg ICAgICAgICAgIT0gQVBSX1NVQ0NFU1MpIHsKICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwgPSBB UExPR19FTUVSRzsKIApAQCAtMTIxNyw2ICsxMjI0LDggQEAKICAgICB0aHJlYWRfc3RhcnRlciAq dHM7CiAgICAgYXByX3RocmVhZGF0dHJfdCAqdGhyZWFkX2F0dHI7CiAgICAgYXByX3RocmVhZF90 ICpzdGFydF90aHJlYWRfaWQ7CisgICAgaW50IGk7CisgICAgYXBfbGlzdGVuX3JlYyAqbHI7CiAK ICAgICBtcG1fc3RhdGUgPSBBUF9NUE1RX1NUQVJUSU5HOyAvKiBmb3IgYmVuZWZpdCBvZiBhbnkg aG9va3MgdGhhdCBydW4gYXMgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqIGNoaWxkIGluaXRpYWxpemVzCkBAIC0xMjI1LDExICsxMjM0LDI0IEBACiAgICAgYXBfZmF0 YWxfc2lnbmFsX2NoaWxkX3NldHVwKGFwX3NlcnZlcl9jb25mKTsKICAgICBhcHJfcG9vbF9jcmVh dGUoJnBjaGlsZCwgcGNvbmYpOwogCisgICAgLyogY2xvc2UgdW51c2VkIGxpc3RlbmVycyBhbmQg cG9kcyAqLworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKSB7CisgICAgICAg IGlmIChpICE9IGJ1Y2tldFtjaGlsZF9udW1fYXJnXSkgeworICAgICAgICAgICAgbHIgPSBtcG1f bGlzdGVuW2ldOworICAgICAgICAgICAgd2hpbGUobHIpIHsKKyAgICAgICAgICAgICAgICBhcHJf c29ja2V0X2Nsb3NlKGxyLT5zZCk7CisgICAgICAgICAgICAgICAgbHIgPSBsci0+bmV4dDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1wbV9saXN0ZW5baV0tPmFjdGl2ZSA9IDA7CisgICAg ICAgICAgICBhcF9tcG1fcG9keF9jbG9zZShwb2RbaV0pOworICAgICAgICB9CisgICAgfQorCiAg ICAgLypzdHVmZiB0byBkbyBiZWZvcmUgd2Ugc3dpdGNoIGlkJ3MsIHNvIHdlIGhhdmUgcGVybWlz c2lvbnMuKi8KICAgICBhcF9yZW9wZW5fc2NvcmVib2FyZChwY2hpbGQsIE5VTEwsIDApOwogCi0g ICAgcnYgPSBTQUZFX0FDQ0VQVChhcHJfcHJvY19tdXRleF9jaGlsZF9pbml0KCZhY2NlcHRfbXV0 ZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9w cm9jX211dGV4X2xvY2tmaWxlKGFjY2VwdF9tdXRleCksCisgICAgcnYgPSBTQUZFX0FDQ0VQVChh cHJfcHJvY19tdXRleF9jaGlsZF9pbml0KCZjaGlsZF9tdXRleCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Byb2NfbXV0ZXhfbG9ja2ZpbGUoY2hp bGRfbXV0ZXgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwY2hpbGQpKTsKICAgICBpZiAocnYgIT0gQVBSX1NVQ0NFU1MpIHsKICAgICAgICAgYXBfbG9n X2Vycm9yKEFQTE9HX01BUkssIEFQTE9HX0VNRVJHLCBydiwgYXBfc2VydmVyX2NvbmYsIEFQTE9H Tk8oMDAyODApCkBAIC0xMzM4LDcgKzEzNjAsNyBAQAogICAgICAgICBhcHJfc2lnbmFsKFNJR1RF Uk0sIGR1bW15X3NpZ25hbF9oYW5kbGVyKTsKICAgICAgICAgLyogV2F0Y2ggZm9yIGFueSBtZXNz YWdlcyBmcm9tIHRoZSBwYXJlbnQgb3ZlciB0aGUgUE9EICovCiAgICAgICAgIHdoaWxlICgxKSB7 Ci0gICAgICAgICAgICBydiA9IGFwX21wbV9wb2R4X2NoZWNrKHBvZCk7CisgICAgICAgICAgICBy diA9IGFwX21wbV9wb2R4X2NoZWNrKGNoaWxkX3BvZCk7CiAgICAgICAgICAgICBpZiAocnYgPT0g QVBfTVBNX1BPRFhfTk9SRVNUQVJUKSB7CiAgICAgICAgICAgICAgICAgLyogc2VlIGlmIHRlcm1p bmF0aW9uIHdhcyB0cmlnZ2VyZWQgd2hpbGUgd2Ugc2xlcHQgKi8KICAgICAgICAgICAgICAgICBz d2l0Y2godGVybWluYXRlX21vZGUpIHsKQEAgLTEzOTEsNiArMTQxMywxMCBAQAogICAgICAgICAv KiBOT1RSRUFDSEVEICovCiAgICAgfQogCisgICAgY2hpbGRfbGlzdGVuID0gbXBtX2xpc3Rlblti dWNrZXRbc2xvdF1dOworICAgIGNoaWxkX211dGV4ID0gYWNjZXB0X211dGV4W2J1Y2tldFtzbG90 XV07CisgICAgY2hpbGRfcG9kID0gcG9kW2J1Y2tldFtzbG90XV07CisKICAgICBpZiAoKHBpZCA9 IGZvcmsoKSkgPT0gLTEpIHsKICAgICAgICAgYXBfbG9nX2Vycm9yKEFQTE9HX01BUkssIEFQTE9H X0VSUiwgZXJybm8sIHMsIEFQTE9HTk8oMDAyODMpCiAgICAgICAgICAgICAgICAgICAgICAiZm9y azogVW5hYmxlIHRvIGZvcmsgbmV3IHByb2Nlc3MiKTsKQEAgLTE0NDksNiArMTQ3NSw3IEBACiAg ICAgICAgIGlmIChhcF9zY29yZWJvYXJkX2ltYWdlLT5wYXJlbnRbaV0ucGlkICE9IDApIHsKICAg ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CisgICAgICAgIGJ1Y2tldFtpXSA9IGkgJSBu dW1fYnVja2V0czsKICAgICAgICAgaWYgKG1ha2VfY2hpbGQoYXBfc2VydmVyX2NvbmYsIGkpIDwg MCkgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE0NTYsNyArMTQ4Myw3IEBA CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBwZXJmb3JtX2lkbGVfc2VydmVyX21haW50ZW5hbmNl KHZvaWQpCitzdGF0aWMgdm9pZCBwZXJmb3JtX2lkbGVfc2VydmVyX21haW50ZW5hbmNlKGludCBj aGlsZF9idWNrZXQpCiB7CiAgICAgaW50IGksIGo7CiAgICAgaW50IGlkbGVfdGhyZWFkX2NvdW50 OwpAQCAtMTQ2NCw3ICsxNDkxLDkgQEAKICAgICBwcm9jZXNzX3Njb3JlICpwczsKICAgICBpbnQg ZnJlZV9sZW5ndGg7CiAgICAgaW50IHRvdGFsbHlfZnJlZV9sZW5ndGggPSAwOwotICAgIGludCBm cmVlX3Nsb3RzW01BWF9TUEFXTl9SQVRFXTsKKyAgICBpbnQgY2hpbGRfbWF4X3NwYXduX3JhdGU7 CisgICAgY2hpbGRfbWF4X3NwYXduX3JhdGUgPSBNQVhfU1BBV05fUkFURS9udW1fYnVja2V0czsK KyAgICBpbnQgZnJlZV9zbG90c1tjaGlsZF9tYXhfc3Bhd25fcmF0ZV07CiAgICAgaW50IGxhc3Rf bm9uX2RlYWQ7CiAgICAgaW50IHRvdGFsX25vbl9kZWFkOwogICAgIGludCBhY3RpdmVfdGhyZWFk X2NvdW50ID0gMDsKQEAgLTE0ODUsNyArMTUxNCw3IEBACiAgICAgICAgIGludCBhbGxfZGVhZF90 aHJlYWRzID0gMTsKICAgICAgICAgaW50IGNoaWxkX3RocmVhZHNfYWN0aXZlID0gMDsKIAotICAg ICAgICBpZiAoaSA+PSByZXRhaW5lZC0+bWF4X2RhZW1vbnNfbGltaXQgJiYgdG90YWxseV9mcmVl X2xlbmd0aCA9PSByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlKQorICAgICAgICBpZiAoaSA+PSBy ZXRhaW5lZC0+bWF4X2RhZW1vbnNfbGltaXQgJiYgdG90YWxseV9mcmVlX2xlbmd0aCA9PSByZXRh aW5lZC0+aWRsZV9zcGF3bl9yYXRlW2NoaWxkX2J1Y2tldF0pCiAgICAgICAgICAgICAvKiBzaG9y dCBjdXQgaWYgYWxsIGFjdGl2ZSBwcm9jZXNzZXMgaGF2ZSBiZWVuIGV4YW1pbmVkIGFuZAogICAg ICAgICAgICAgICogZW5vdWdoIGVtcHR5IHNjb3JlYm9hcmQgc2xvdHMgaGF2ZSBiZWVuIGZvdW5k CiAgICAgICAgICAgICAgKi8KQEAgLTE1MTMsNyArMTU0Miw4IEBACiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxvb3AgaWYgbm8gcGlkPyAgbm90IG11Y2ggZWxzZSBtYXR0ZXJz ICovCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA8PSBTRVJWRVJfUkVBRFkgJiYKICAgICAg ICAgICAgICAgICAgICAgICAgICFwcy0+cXVpZXNjaW5nICYmCi0gICAgICAgICAgICAgICAgICAg ICAgICBwcy0+Z2VuZXJhdGlvbiA9PSByZXRhaW5lZC0+bXlfZ2VuZXJhdGlvbikgeworICAgICAg ICAgICAgICAgICAgICAgICAgcHMtPmdlbmVyYXRpb24gPT0gcmV0YWluZWQtPm15X2dlbmVyYXRp b24gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldFtpXSA9PSBjaGlsZF9idWNrZXQp IHsKICAgICAgICAgICAgICAgICAgICAgKytpZGxlX3RocmVhZF9jb3VudDsKICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA+PSBTRVJWRVJfUkVBRFkgJiYgc3Rh dHVzIDwgU0VSVkVSX0dSQUNFRlVMKSB7CkBAIC0xNTIyLDggKzE1NTIsOCBAQAogICAgICAgICAg ICAgfQogICAgICAgICB9CiAgICAgICAgIGFjdGl2ZV90aHJlYWRfY291bnQgKz0gY2hpbGRfdGhy ZWFkc19hY3RpdmU7Ci0gICAgICAgIGlmIChhbnlfZGVhZF90aHJlYWRzICYmIHRvdGFsbHlfZnJl ZV9sZW5ndGggPCByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlCi0gICAgICAgICAgICAgICAgJiYg ZnJlZV9sZW5ndGggPCBNQVhfU1BBV05fUkFURQorICAgICAgICBpZiAoYW55X2RlYWRfdGhyZWFk cyAmJiB0b3RhbGx5X2ZyZWVfbGVuZ3RoIDwgcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZVtjaGls ZF9idWNrZXRdCisgICAgICAgICAgICAgICAgJiYgZnJlZV9sZW5ndGggPCBNQVhfU1BBV05fUkFU RS9udW1fYnVja2V0cwogICAgICAgICAgICAgICAgICYmICghcHMtPnBpZCAgICAgICAgICAgICAg IC8qIG5vIHByb2Nlc3MgaW4gdGhlIHNsb3QgKi8KICAgICAgICAgICAgICAgICAgICAgfHwgcHMt PnF1aWVzY2luZykpIHsgICAvKiBvciBhdCBsZWFzdCBvbmUgaXMgZ29pbmcgYXdheSAqLwogICAg ICAgICAgICAgaWYgKGFsbF9kZWFkX3RocmVhZHMpIHsKQEAgLTE1NzksMTIgKzE2MDksMTIgQEAK IAogICAgIHJldGFpbmVkLT5tYXhfZGFlbW9uc19saW1pdCA9IGxhc3Rfbm9uX2RlYWQgKyAxOwog Ci0gICAgaWYgKGlkbGVfdGhyZWFkX2NvdW50ID4gbWF4X3NwYXJlX3RocmVhZHMpIHsKKyAgICBp ZiAoaWRsZV90aHJlYWRfY291bnQgPiBtYXhfc3BhcmVfdGhyZWFkcy9udW1fYnVja2V0cykgewog ICAgICAgICAvKiBLaWxsIG9mZiBvbmUgY2hpbGQgKi8KLSAgICAgICAgYXBfbXBtX3BvZHhfc2ln bmFsKHBvZCwgQVBfTVBNX1BPRFhfR1JBQ0VGVUwpOwotICAgICAgICByZXRhaW5lZC0+aWRsZV9z cGF3bl9yYXRlID0gMTsKKyAgICAgICAgYXBfbXBtX3BvZHhfc2lnbmFsKHBvZFtjaGlsZF9idWNr ZXRdLCBBUF9NUE1fUE9EWF9HUkFDRUZVTCk7CisgICAgICAgIHJldGFpbmVkLT5pZGxlX3NwYXdu X3JhdGVbY2hpbGRfYnVja2V0XSA9IDE7CiAgICAgfQotICAgIGVsc2UgaWYgKGlkbGVfdGhyZWFk X2NvdW50IDwgbWluX3NwYXJlX3RocmVhZHMpIHsKKyAgICBlbHNlIGlmIChpZGxlX3RocmVhZF9j b3VudCA8IG1pbl9zcGFyZV90aHJlYWRzL251bV9idWNrZXRzKSB7CiAgICAgICAgIC8qIHRlcm1p bmF0ZSB0aGUgZnJlZSBsaXN0ICovCiAgICAgICAgIGlmIChmcmVlX2xlbmd0aCA9PSAwKSB7IC8q IHNjb3JlYm9hcmQgaXMgZnVsbCwgY2FuJ3QgZm9yayAqLwogCkBAIC0xNjE1LDEzICsxNjQ1LDEz IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwX3NlcnZlcl9jb25mLCBBUExPR05P KDAwMjg4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcmVib2FyZCBpcyBmdWxs LCBub3QgYXQgTWF4UmVxdWVzdFdvcmtlcnMiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGUgPSAxOworICAgICAgICAgICAgcmV0YWluZWQtPmlk bGVfc3Bhd25fcmF0ZVtjaGlsZF9idWNrZXRdID0gMTsKICAgICAgICAgfQogICAgICAgICBlbHNl IHsKLSAgICAgICAgICAgIGlmIChmcmVlX2xlbmd0aCA+IHJldGFpbmVkLT5pZGxlX3NwYXduX3Jh dGUpIHsKLSAgICAgICAgICAgICAgICBmcmVlX2xlbmd0aCA9IHJldGFpbmVkLT5pZGxlX3NwYXdu X3JhdGU7CisgICAgICAgICAgICBpZiAoZnJlZV9sZW5ndGggPiByZXRhaW5lZC0+aWRsZV9zcGF3 bl9yYXRlW2NoaWxkX2J1Y2tldF0pIHsKKyAgICAgICAgICAgICAgICBmcmVlX2xlbmd0aCA9IHJl dGFpbmVkLT5pZGxlX3NwYXduX3JhdGVbY2hpbGRfYnVja2V0XTsKICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGlmIChyZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlID49IDgpIHsKKyAgICAgICAg ICAgIGlmIChyZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlW2NoaWxkX2J1Y2tldF0gPj0gOCkgewog ICAgICAgICAgICAgICAgIGFwX2xvZ19lcnJvcihBUExPR19NQVJLLCBBUExPR19JTkZPLCAwLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcF9zZXJ2ZXJfY29uZiwgQVBMT0dOTygwMDI4 OSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZlciBzZWVtcyBidXN5LCAoeW91 IG1heSBuZWVkICIKQEAgLTE2MzIsNiArMTY2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlkbGVfdGhyZWFkX2NvdW50LCB0b3RhbF9ub25fZGVhZCk7CiAgICAgICAgICAgICB9 CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZnJlZV9sZW5ndGg7ICsraSkgeworICAgICAg ICAgICAgICAgIGJ1Y2tldFtmcmVlX3Nsb3RzW2ldXSA9IGNoaWxkX2J1Y2tldDsKICAgICAgICAg ICAgICAgICBtYWtlX2NoaWxkKGFwX3NlcnZlcl9jb25mLCBmcmVlX3Nsb3RzW2ldKTsKICAgICAg ICAgICAgIH0KICAgICAgICAgICAgIC8qIHRoZSBuZXh0IHRpbWUgYXJvdW5kIHdlIHdhbnQgdG8g c3Bhd24gdHdpY2UgYXMgbWFueSBpZiB0aGlzCkBAIC0xNjQwLDEzICsxNjcxLDEzIEBACiAgICAg ICAgICAgICBpZiAocmV0YWluZWQtPmhvbGRfb2ZmX29uX2V4cG9uZW50aWFsX3NwYXduaW5nKSB7 CiAgICAgICAgICAgICAgICAgLS1yZXRhaW5lZC0+aG9sZF9vZmZfb25fZXhwb25lbnRpYWxfc3Bh d25pbmc7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChyZXRhaW5lZC0+aWRs ZV9zcGF3bl9yYXRlIDwgTUFYX1NQQVdOX1JBVEUpIHsKLSAgICAgICAgICAgICAgICByZXRhaW5l ZC0+aWRsZV9zcGF3bl9yYXRlICo9IDI7CisgICAgICAgICAgICBlbHNlIGlmIChyZXRhaW5lZC0+ aWRsZV9zcGF3bl9yYXRlW2NoaWxkX2J1Y2tldF0gPCBNQVhfU1BBV05fUkFURS9udW1fYnVja2V0 cykgeworICAgICAgICAgICAgICAgIHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGVbY2hpbGRfYnVj a2V0XSAqPSAyOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGVsc2Ugewot ICAgICAgcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZSA9IDE7CisgICAgICByZXRhaW5lZC0+aWRs ZV9zcGF3bl9yYXRlW2NoaWxkX2J1Y2tldF0gPSAxOwogICAgIH0KIH0KIApAQCAtMTcwMiw3ICsx NzMzLDcgQEAKICAgICAgICAgICAgICAgICBhcF9zY29yZWJvYXJkX2ltYWdlLT5wYXJlbnRbY2hp bGRfc2xvdF0ucXVpZXNjaW5nID0gMDsKICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkX3N0 YXR1cyA9PSBBUEVYSVRfQ0hJTERTSUNLKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIHJlc291 cmNlIHNob3J0YWdlLCBtaW5pbWl6ZSB0aGUgZm9yayByYXRlICovCi0gICAgICAgICAgICAgICAg ICAgIHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGUgPSAxOworICAgICAgICAgICAgICAgICAgICBy ZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlW2J1Y2tldFtjaGlsZF9zbG90XV0gPSAxOwogICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZW1haW5pbmdfY2hpbGRyZW5f dG9fc3RhcnQKICAgICAgICAgICAgICAgICAgICAgJiYgY2hpbGRfc2xvdCA8IGFwX2RhZW1vbnNf bGltaXQpIHsKQEAgLTE3MTksNyArMTc1MCw5IEBACiAgICAgICAgICAgICAgICAgaWYgKHByb2Nl c3NlZF9zdGF0dXMgPT0gQVBFWElUX0NISUxEU0lDSwogICAgICAgICAgICAgICAgICAgICAmJiBv bGRfZ2VuID09IHJldGFpbmVkLT5teV9nZW5lcmF0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAg IC8qIHJlc291cmNlIHNob3J0YWdlLCBtaW5pbWl6ZSB0aGUgZm9yayByYXRlICovCi0gICAgICAg ICAgICAgICAgICAgIHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGUgPSAxOworICAgICAgICAgICAg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICAgICAg ICAgICAgICAgICAgcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZVtpXSA9IDE7CisgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAjaWYgQVBSX0hBU19PVEhFUl9DSElMRAog ICAgICAgICAgICAgfQpAQCAtMTc1OCw3ICsxNzkxLDkgQEAKICAgICAgICAgICAgIGNvbnRpbnVl OwogICAgICAgICB9CiAKLSAgICAgICAgcGVyZm9ybV9pZGxlX3NlcnZlcl9tYWludGVuYW5jZSgp OworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICAg ICAgcGVyZm9ybV9pZGxlX3NlcnZlcl9tYWludGVuYW5jZShpKTsKKyAgICAgICAgfQogICAgIH0K IH0KIApAQCAtMTc2NiwxNiArMTgwMSwyNSBAQAogewogICAgIGludCByZW1haW5pbmdfY2hpbGRy ZW5fdG9fc3RhcnQ7CiAgICAgYXByX3N0YXR1c190IHJ2OworICAgIGludCBpOworICAgIGFwX2xp c3Rlbl9yZWMgKmxyOwogCiAgICAgYXBfbG9nX3BpZChwY29uZiwgYXBfcGlkX2ZuYW1lKTsKIAor ICAgIGJ1Y2tldCA9IGFwcl9wYWxsb2MoX3Bjb25mLCBzaXplb2YoaW50KSAqICBhcF9kYWVtb25z X2xpbWl0KTsKICAgICAvKiBJbml0aWFsaXplIGNyb3NzLXByb2Nlc3MgYWNjZXB0IGxvY2sgKi8K LSAgICBydiA9IGFwX3Byb2NfbXV0ZXhfY3JlYXRlKCZhY2NlcHRfbXV0ZXgsIE5VTEwsIEFQX0FD Q0VQVF9NVVRFWF9UWVBFLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcywg X3Bjb25mLCAwKTsKLSAgICBpZiAocnYgIT0gQVBSX1NVQ0NFU1MpIHsKLSAgICAgICAgbXBtX3N0 YXRlID0gQVBfTVBNUV9TVE9QUElORzsKLSAgICAgICAgcmV0dXJuIERPTkU7CisgICAgYWNjZXB0 X211dGV4ID0gYXByX3BhbGxvYyhfcGNvbmYsIHNpemVvZihhcHJfcHJvY19tdXRleF90ICopICog bnVtX2J1Y2tldHMpOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKSB7Cisg ICAgICAgIHJ2ID0gYXBfcHJvY19tdXRleF9jcmVhdGUoJmFjY2VwdF9tdXRleFtpXSwgTlVMTCwg QVBfQUNDRVBUX01VVEVYX1RZUEUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcywgX3Bjb25mLCAwKTsKKyAgICAgICAgaWYgKHJ2ICE9IEFQUl9TVUNDRVNTKSB7Cisg ICAgICAgICAgICBtcG1fc3RhdGUgPSBBUF9NUE1RX1NUT1BQSU5HOworICAgICAgICAgICAgcmV0 dXJuIERPTkU7CisgICAgICAgIH0KICAgICB9CisgICAgZm9yIChsciA9IGFwX2xpc3RlbmVyczsg bHI7IGxyID0gbHItPm5leHQpIHsKKyAgICAgICAgYXByX3NvY2tldF9jbG9zZShsci0+c2QpOwor ICAgICB9CiAKICAgICBpZiAoIXJldGFpbmVkLT5pc19ncmFjZWZ1bCkgewogICAgICAgICBpZiAo YXBfcnVuX3ByZV9tcG0ocy0+cHJvY2Vzcy0+cG9vbCwgU0JfU0hBUkVEKSAhPSBPSykgewpAQCAt MTc5MSw4ICsxODM1LDggQEAKICAgICByZXN0YXJ0X3BlbmRpbmcgPSBzaHV0ZG93bl9wZW5kaW5n ID0gMDsKICAgICBzZXRfc2lnbmFscygpOwogICAgIC8qIERvbid0IHRocmFzaC4uLiAqLwotICAg IGlmIChtYXhfc3BhcmVfdGhyZWFkcyA8IG1pbl9zcGFyZV90aHJlYWRzICsgdGhyZWFkc19wZXJf Y2hpbGQpCi0gICAgICAgIG1heF9zcGFyZV90aHJlYWRzID0gbWluX3NwYXJlX3RocmVhZHMgKyB0 aHJlYWRzX3Blcl9jaGlsZDsKKyAgICBpZiAobWF4X3NwYXJlX3RocmVhZHMgPCBtaW5fc3BhcmVf dGhyZWFkcyArIHRocmVhZHNfcGVyX2NoaWxkICogbnVtX2J1Y2tldHMpCisgICAgICAgIG1heF9z cGFyZV90aHJlYWRzID0gbWluX3NwYXJlX3RocmVhZHMgKyB0aHJlYWRzX3Blcl9jaGlsZCAqIG51 bV9idWNrZXRzOwogCiAgICAgLyogSWYgd2UncmUgZG9pbmcgYSBncmFjZWZ1bF9yZXN0YXJ0IHRo ZW4gd2UncmUgZ29pbmcgdG8gc2VlIGEgbG90CiAgICAgICogb2YgY2hpbGRyZW4gZXhpdGluZyBp bW1lZGlhdGVseSB3aGVuIHdlIGdldCBpbnRvIHRoZSBtYWluIGxvb3AKQEAgLTE4MjUsNyArMTg2 OSw3IEBACiAgICAgYXBfbG9nX2NvbW1hbmRfbGluZShwbG9nLCBzKTsKICAgICBhcF9sb2dfZXJy b3IoQVBMT0dfTUFSSywgQVBMT0dfREVCVUcsIDAsIGFwX3NlcnZlcl9jb25mLCBBUExPR05PKDAw Mjk0KQogICAgICAgICAgICAgICAgICJBY2NlcHQgbXV0ZXg6ICVzIChkZWZhdWx0OiAlcykiLAot ICAgICAgICAgICAgICAgIGFwcl9wcm9jX211dGV4X25hbWUoYWNjZXB0X211dGV4KSwKKyAgICAg ICAgICAgICAgICBhcHJfcHJvY19tdXRleF9uYW1lKGFjY2VwdF9tdXRleFswXSksCiAgICAgICAg ICAgICAgICAgYXByX3Byb2NfbXV0ZXhfZGVmbmFtZSgpKTsKICAgICBtcG1fc3RhdGUgPSBBUF9N UE1RX1JVTk5JTkc7CiAKQEAgLTE4MzYsNyArMTg4MCw5IEBACiAgICAgICAgIC8qIFRpbWUgdG8g c2h1dCBkb3duOgogICAgICAgICAgKiBLaWxsIGNoaWxkIHByb2Nlc3NlcywgdGVsbCB0aGVtIHRv IGNhbGwgY2hpbGRfZXhpdCwgZXRjLi4uCiAgICAgICAgICAqLwotICAgICAgICBhcF9tcG1fcG9k eF9raWxscGcocG9kLCBhcF9kYWVtb25zX2xpbWl0LCBBUF9NUE1fUE9EWF9SRVNUQVJUKTsKKyAg ICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgICAgIGFw X21wbV9wb2R4X2tpbGxwZyhwb2RbaV0sIGFwX2RhZW1vbnNfbGltaXQsIEFQX01QTV9QT0RYX1JF U1RBUlQpOworICAgICAgICB9CiAgICAgICAgIGFwX3JlY2xhaW1fY2hpbGRfcHJvY2Vzc2VzKDEs IC8qIFN0YXJ0IHdpdGggU0lHVEVSTSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3b3JrZXJfbm90ZV9jaGlsZF9raWxsZWQpOwogCkBAIC0xODU3LDcgKzE5MDMsOSBAQAog CiAgICAgICAgIC8qIENsb3NlIG91ciBsaXN0ZW5lcnMsIGFuZCB0aGVuIGFzayBvdXIgY2hpbGRy ZW4gdG8gZG8gc2FtZSAqLwogICAgICAgICBhcF9jbG9zZV9saXN0ZW5lcnMoKTsKLSAgICAgICAg YXBfbXBtX3BvZHhfa2lsbHBnKHBvZCwgYXBfZGFlbW9uc19saW1pdCwgQVBfTVBNX1BPRFhfR1JB Q0VGVUwpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykgeworICAg ICAgICAgICAgYXBfbXBtX3BvZHhfa2lsbHBnKHBvZFtpXSwgYXBfZGFlbW9uc19saW1pdCwgQVBf TVBNX1BPRFhfR1JBQ0VGVUwpOworICAgICAgICB9CiAgICAgICAgIGFwX3JlbGlldmVfY2hpbGRf cHJvY2Vzc2VzKHdvcmtlcl9ub3RlX2NoaWxkX2tpbGxlZCk7CiAKICAgICAgICAgaWYgKCFjaGls ZF9mYXRhbCkgewpAQCAtMTg5Nyw3ICsxOTQ1LDkgQEAKICAgICAgICAgICogd2F5LCB0cnkgYW5k IG1ha2Ugc3VyZSB0aGF0IGFsbCBvZiBvdXIgcHJvY2Vzc2VzIGFyZQogICAgICAgICAgKiByZWFs bHkgZGVhZC4KICAgICAgICAgICovCi0gICAgICAgIGFwX21wbV9wb2R4X2tpbGxwZyhwb2QsIGFw X2RhZW1vbnNfbGltaXQsIEFQX01QTV9QT0RYX1JFU1RBUlQpOworICAgICAgICBmb3IgKGkgPSAw OyBpIDwgbnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICAgICAgYXBfbXBtX3BvZHhfa2lsbHBn KHBvZFtpXSwgYXBfZGFlbW9uc19saW1pdCwgQVBfTVBNX1BPRFhfUkVTVEFSVCk7CisgICAgICAg IH0KICAgICAgICAgYXBfcmVjbGFpbV9jaGlsZF9wcm9jZXNzZXMoMSwgd29ya2VyX25vdGVfY2hp bGRfa2lsbGVkKTsKIAogICAgICAgICByZXR1cm4gRE9ORTsKQEAgLTE5MjIsOCArMTk3Miw5IEBA CiAgICAgICAgIGFwX2xvZ19lcnJvcihBUExPR19NQVJLLCBBUExPR19OT1RJQ0UsIDAsIGFwX3Nl cnZlcl9jb25mLCBBUExPR05PKDAwMjk3KQogICAgICAgICAgICAgICAgICAgICAgQVBfU0lHX0dS QUNFRlVMX1NUUklORyAiIHJlY2VpdmVkLiAgRG9pbmcgZ3JhY2VmdWwgcmVzdGFydCIpOwogICAg ICAgICAvKiB3YWtlIHVwIHRoZSBjaGlsZHJlbi4uLnRpbWUgdG8gZGllLiAgQnV0IHdlJ2xsIGhh dmUgbW9yZSBzb29uICovCi0gICAgICAgIGFwX21wbV9wb2R4X2tpbGxwZyhwb2QsIGFwX2RhZW1v bnNfbGltaXQsIEFQX01QTV9QT0RYX0dSQUNFRlVMKTsKLQorICAgICAgICBmb3IgKGkgPSAwOyBp IDwgbnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICAgICAgYXBfbXBtX3BvZHhfa2lsbHBnKHBv ZFtpXSwgYXBfZGFlbW9uc19saW1pdCwgQVBfTVBNX1BPRFhfR1JBQ0VGVUwpOworICAgICAgICB9 CiAKICAgICAgICAgLyogVGhpcyBpcyBtb3N0bHkgZm9yIGRlYnVnZ2luZy4uLiBzbyB0aGF0IHdl IGtub3cgd2hhdCBpcyBzdGlsbAogICAgICAgICAgKiBncmFjZWZ1bGx5IGRlYWxpbmcgd2l0aCBl eGlzdGluZyByZXF1ZXN0LgpAQCAtMTkzNSw3ICsxOTg2LDkgQEAKICAgICAgICAgICogYW5kIGEg U0lHSFVQLCB3ZSBtYXkgYXMgd2VsbCB1c2UgdGhlIHNhbWUgc2lnbmFsLCBiZWNhdXNlIHNvbWUg dXNlcgogICAgICAgICAgKiBwdGhyZWFkcyBhcmUgc3RlYWxpbmcgc2lnbmFscyBmcm9tIHVzIGxl ZnQgYW5kIHJpZ2h0LgogICAgICAgICAgKi8KLSAgICAgICAgYXBfbXBtX3BvZHhfa2lsbHBnKHBv ZCwgYXBfZGFlbW9uc19saW1pdCwgQVBfTVBNX1BPRFhfUkVTVEFSVCk7CisgICAgICAgIGZvciAo aSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgICAgICBhcF9tcG1fcG9keF9r aWxscGcocG9kW2ldLCBhcF9kYWVtb25zX2xpbWl0LCBBUF9NUE1fUE9EWF9SRVNUQVJUKTsKKyAg ICAgICAgfQogCiAgICAgICAgIGFwX3JlY2xhaW1fY2hpbGRfcHJvY2Vzc2VzKDEsIC8qIFN0YXJ0 IHdpdGggU0lHVEVSTSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jr ZXJfbm90ZV9jaGlsZF9raWxsZWQpOwpAQCAtMTk1NCw2ICsyMDA3LDggQEAKICAgICBpbnQgc3Rh cnR1cCA9IDA7CiAgICAgaW50IGxldmVsX2ZsYWdzID0gMDsKICAgICBhcHJfc3RhdHVzX3QgcnY7 CisgICAgaW50IGk7CisgICAgaW50IG51bV9vZl9jb3JlcyA9IDA7CiAKICAgICBwY29uZiA9IHA7 CiAKQEAgLTE5NjMsMTkgKzIwMTgsNDIgQEAKICAgICAgICAgbGV2ZWxfZmxhZ3MgfD0gQVBMT0df U1RBUlRVUDsKICAgICB9CiAKKyAgICBlbmFibGVfZGVmYXVsdF9saXN0ZW5lciA9IDA7CiAgICAg aWYgKChudW1fbGlzdGVuc29ja3MgPSBhcF9zZXR1cF9saXN0ZW5lcnMoYXBfc2VydmVyX2NvbmYp KSA8IDEpIHsKICAgICAgICAgYXBfbG9nX2Vycm9yKEFQTE9HX01BUkssIEFQTE9HX0FMRVJUIHwg bGV2ZWxfZmxhZ3MsIDAsCiAgICAgICAgICAgICAgICAgICAgICAoc3RhcnR1cCA/IE5VTEwgOiBz KSwKICAgICAgICAgICAgICAgICAgICAgICJubyBsaXN0ZW5pbmcgc29ja2V0cyBhdmFpbGFibGUs IHNodXR0aW5nIGRvd24iKTsKICAgICAgICAgcmV0dXJuIERPTkU7CiAgICAgfQorICAgIGVuYWJs ZV9kZWZhdWx0X2xpc3RlbmVyID0gMTsKKyAgICBpZiAoaGF2ZV9zb19yZXVzZXBvcnQpIHsKKyNp ZmRlZiBfU0NfTlBST0NFU1NPUlNfT05MTgorICAgICAgICBudW1fb2ZfY29yZXMgPSBzeXNjb25m KF9TQ19OUFJPQ0VTU09SU19PTkxOKTsKKyNlbHNlCisgICAgICAgIG51bV9vZl9jb3JlcyA9IDE7 CisjZW5kaWYKKyAgICAgICAgaWYgKG51bV9vZl9jb3JlcyA+IDgpIHsKKyAgICAgICAgICAgIG51 bV9idWNrZXRzID0gbnVtX29mX2NvcmVzLzg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg ICAgICAgICAgICBudW1fYnVja2V0cyA9IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7 CisgICAgICAgIG51bV9idWNrZXRzID0gMTsKKyAgICB9CiAKKyAgICBhcF9kdXBsaWNhdGVfbGlz dGVuZXJzKGFwX3NlcnZlcl9jb25mLCBwY29uZiwgbnVtX2J1Y2tldHMpOworIAorICAgIHBvZCA9 IGFwcl9wYWxsb2MocGNvbmYsIHNpemVvZihhcF9wb2RfdCAqKSAqIG51bV9idWNrZXRzKTsKICAg ICBpZiAoIW9uZV9wcm9jZXNzKSB7Ci0gICAgICAgIGlmICgocnYgPSBhcF9tcG1fcG9keF9vcGVu KHBjb25mLCAmcG9kKSkpIHsKLSAgICAgICAgICAgIGFwX2xvZ19lcnJvcihBUExPR19NQVJLLCBB UExPR19DUklUIHwgbGV2ZWxfZmxhZ3MsIHJ2LAotICAgICAgICAgICAgICAgICAgICAgICAgIChz dGFydHVwID8gTlVMTCA6IHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3Qg b3BlbiBwaXBlLW9mLWRlYXRoIik7Ci0gICAgICAgICAgICByZXR1cm4gRE9ORTsKKyAgICAgICAg Zm9yIChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgICAgIGlmICgocnYg PSBhcF9tcG1fcG9keF9vcGVuKHBjb25mLCAmcG9kW2ldKSkpIHsKKyAgICAgICAgICAgICAgICBh cF9sb2dfZXJyb3IoQVBMT0dfTUFSSywgQVBMT0dfQ1JJVCB8IGxldmVsX2ZsYWdzLCBydiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0dXAgPyBOVUxMIDogcyksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3Qgb3BlbiBwaXBlLW9mLWRlYXRoIik7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIERPTkU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg ICB9CiAgICAgcmV0dXJuIE9LOwpAQCAtMTk4Nyw2ICsyMDY1LDcgQEAKICAgICBpbnQgbm9fZGV0 YWNoLCBkZWJ1ZywgZm9yZWdyb3VuZDsKICAgICBhcHJfc3RhdHVzX3QgcnY7CiAgICAgY29uc3Qg Y2hhciAqdXNlcmRhdGFfa2V5ID0gIm1wbV93b3JrZXJfbW9kdWxlIjsKKyAgICBpbnQgaTsKIAog ICAgIG1wbV9zdGF0ZSA9IEFQX01QTVFfU1RBUlRJTkc7CiAKQEAgLTIwMDksNyArMjA4OCw2IEBA CiAgICAgaWYgKCFyZXRhaW5lZCkgewogICAgICAgICByZXRhaW5lZCA9IGFwX3JldGFpbmVkX2Rh dGFfY3JlYXRlKHVzZXJkYXRhX2tleSwgc2l6ZW9mKCpyZXRhaW5lZCkpOwogICAgICAgICByZXRh aW5lZC0+bWF4X2RhZW1vbnNfbGltaXQgPSAtMTsKLSAgICAgICAgcmV0YWluZWQtPmlkbGVfc3Bh d25fcmF0ZSA9IDE7CiAgICAgfQogICAgICsrcmV0YWluZWQtPm1vZHVsZV9sb2FkczsKICAgICBp ZiAocmV0YWluZWQtPm1vZHVsZV9sb2FkcyA9PSAyKSB7CkBAIC0yMDIzLDYgKzIxMDEsMTAgQEAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFwcl9wcm9jX2RldGFjaCBmYWlsZWQiKTsK ICAgICAgICAgICAgICAgICByZXR1cm4gSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiAgICAg ICAgICAgICB9CisgICAgICAgICAgICByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlID0gYXByX3Bh bGxvYyhwY29uZiwgc2l6ZW9mKGludCkgKiBudW1fYnVja2V0cyk7CisgICAgICAgICAgICBmb3Ig KGkgPSAwOyBpPCBudW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgICAgICAgICAgcmV0YWluZWQt PmlkbGVfc3Bhd25fcmF0ZVtpXSA9IDE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9 CiAKZGlmZiAtcnUgaHR0cGQtdHJ1bmsvc2VydmVyL21wbV91bml4LmMgaHR0cGQtdHJ1bmsubmV3 L3NlcnZlci9tcG1fdW5peC5jCi0tLSBodHRwZC10cnVuay9zZXJ2ZXIvbXBtX3VuaXguYwkyMDE0 LTA1LTMxIDIzOjEwOjE0Ljk1OTM2Nzg5MyAtMDQwMAorKysgaHR0cGQtdHJ1bmsubmV3L3NlcnZl ci9tcG1fdW5peC5jCTIwMTQtMDYtMDEgMjM6NDU6MjIuNzQ1OTExNDY0IC0wNDAwCkBAIC02MTUs NiArNjE1LDcgQEAKICAgICBhcHJfcG9vbF90ICpwOwogICAgIGFwcl9zaXplX3QgbGVuOwogICAg IGFwX2xpc3Rlbl9yZWMgKmxwOworICAgIGludCBpOwogCiAgICAgLyogY3JlYXRlIGEgdGVtcG9y YXJ5IHBvb2wgZm9yIHRoZSBzb2NrZXQuICBwY29uZiBzdGF5cyBhcm91bmQgdG9vIGxvbmcgKi8K ICAgICBydiA9IGFwcl9wb29sX2NyZWF0ZSgmcCwgcG9kLT5wKTsKQEAgLTYyNiw4NyArNjI3LDg5 IEBACiAgICAgICogcGxhaW4tSFRUUCwgbm90IFNTTDsgdXNpbmcgYW4gU1NMIHBvcnQgd291bGQg ZWl0aGVyIGJlCiAgICAgICogZXhwZW5zaXZlIHRvIGRvIGNvcnJlY3RseSAocGVyZm9ybWluZyBh IGNvbXBsZXRlIFNTTCBoYW5kc2hha2UpCiAgICAgICogb3IgY2F1c2UgbG9nIHNwYW0gYnkgZG9p bmcgaW5jb3JyZWN0bHkgKHNpbXBseSBzZW5kaW5nIEVPRikuICovCi0gICAgbHAgPSBhcF9saXN0 ZW5lcnM7Ci0gICAgd2hpbGUgKGxwICYmIGxwLT5wcm90b2NvbCAmJiBzdHJjYXNlY21wKGxwLT5w cm90b2NvbCwgImh0dHAiKSAhPSAwKSB7Ci0gICAgICAgIGxwID0gbHAtPm5leHQ7Ci0gICAgfQot ICAgIGlmICghbHApIHsKLSAgICAgICAgbHAgPSBhcF9saXN0ZW5lcnM7Ci0gICAgfQotCi0gICAg cnYgPSBhcHJfc29ja2V0X2NyZWF0ZSgmc29jaywgbHAtPmJpbmRfYWRkci0+ZmFtaWx5LCBTT0NL X1NUUkVBTSwgMCwgcCk7Ci0gICAgaWYgKHJ2ICE9IEFQUl9TVUNDRVNTKSB7Ci0gICAgICAgIGFw X2xvZ19lcnJvcihBUExPR19NQVJLLCBBUExPR19XQVJOSU5HLCBydiwgYXBfc2VydmVyX2NvbmYs IEFQTE9HTk8oMDAwNTQpCi0gICAgICAgICAgICAgICAgICAgICAiZ2V0IHNvY2tldCB0byBjb25u ZWN0IHRvIGxpc3RlbmVyIik7Ci0gICAgICAgIGFwcl9wb29sX2Rlc3Ryb3kocCk7Ci0gICAgICAg IHJldHVybiBydjsKLSAgICB9Ci0KLSAgICAvKiBvbiBzb21lIHBsYXRmb3JtcyAoZS5nLiwgRnJl ZUJTRCksIHRoZSBrZXJuZWwgd29uJ3QgYWNjZXB0IG1hbnkKLSAgICAgKiBxdWV1ZWQgY29ubmVj dGlvbnMgYmVmb3JlIGl0IHN0YXJ0cyBibG9ja2luZyBsb2NhbCBjb25uZWN0cy4uLgotICAgICAq IHdlIG5lZWQgdG8ga2VlcCBmcm9tIGJsb2NraW5nIHRvbyBsb25nIGFuZCBpbnN0ZWFkIHJldHVy biBhbiBlcnJvciwKLSAgICAgKiBiZWNhdXNlIHRoZSBNUE0gd29uJ3Qgd2FudCB0byBob2xkIHVw IGEgZ3JhY2VmdWwgcmVzdGFydCBmb3IgYQotICAgICAqIGxvbmcgdGltZQotICAgICAqLwotICAg IHJ2ID0gYXByX3NvY2tldF90aW1lb3V0X3NldChzb2NrLCBhcHJfdGltZV9mcm9tX3NlYygzKSk7 Ci0gICAgaWYgKHJ2ICE9IEFQUl9TVUNDRVNTKSB7Ci0gICAgICAgIGFwX2xvZ19lcnJvcihBUExP R19NQVJLLCBBUExPR19XQVJOSU5HLCBydiwgYXBfc2VydmVyX2NvbmYsIEFQTE9HTk8oMDAwNTUp Ci0gICAgICAgICAgICAgICAgICAgICAic2V0IHRpbWVvdXQgb24gc29ja2V0IHRvIGNvbm5lY3Qg dG8gbGlzdGVuZXIiKTsKLSAgICAgICAgYXByX3NvY2tldF9jbG9zZShzb2NrKTsKLSAgICAgICAg YXByX3Bvb2xfZGVzdHJveShwKTsKLSAgICAgICAgcmV0dXJuIHJ2OwotICAgIH0KLQotICAgIHJ2 ID0gYXByX3NvY2tldF9jb25uZWN0KHNvY2ssIGxwLT5iaW5kX2FkZHIpOwotICAgIGlmIChydiAh PSBBUFJfU1VDQ0VTUykgewotICAgICAgICBpbnQgbG9nX2xldmVsID0gQVBMT0dfV0FSTklORzsK KyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICBscCA9IG1w bV9saXN0ZW5baV07CisgICAgICAgIHdoaWxlIChscCAmJiBscC0+cHJvdG9jb2wgJiYgc3RyY2Fz ZWNtcChscC0+cHJvdG9jb2wsICJodHRwIikgIT0gMCkgeworICAgICAgICAgICAgbHAgPSBscC0+ bmV4dDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWxwKSB7CisgICAgICAgICAgICBscCA9IG1w bV9saXN0ZW5baV07CisgICAgICAgIH0KKworICAgICAgICBydiA9IGFwcl9zb2NrZXRfY3JlYXRl KCZzb2NrLCBscC0+YmluZF9hZGRyLT5mYW1pbHksIFNPQ0tfU1RSRUFNLCAwLCBwKTsKKyAgICAg ICAgaWYgKHJ2ICE9IEFQUl9TVUNDRVNTKSB7CisgICAgICAgICAgICBhcF9sb2dfZXJyb3IoQVBM T0dfTUFSSywgQVBMT0dfV0FSTklORywgcnYsIGFwX3NlcnZlcl9jb25mLCBBUExPR05PKDAwMDU0 KQorICAgICAgICAgICAgICAgICAgICAgICAgICJnZXQgc29ja2V0IHRvIGNvbm5lY3QgdG8gbGlz dGVuZXIiKTsKKyAgICAgICAgICAgIGFwcl9wb29sX2Rlc3Ryb3kocCk7CisgICAgICAgICAgICBy ZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICAvKiBvbiBzb21lIHBsYXRmb3JtcyAoZS5n LiwgRnJlZUJTRCksIHRoZSBrZXJuZWwgd29uJ3QgYWNjZXB0IG1hbnkKKyAgICAgICAgICogcXVl dWVkIGNvbm5lY3Rpb25zIGJlZm9yZSBpdCBzdGFydHMgYmxvY2tpbmcgbG9jYWwgY29ubmVjdHMu Li4KKyAgICAgICAgICogd2UgbmVlZCB0byBrZWVwIGZyb20gYmxvY2tpbmcgdG9vIGxvbmcgYW5k IGluc3RlYWQgcmV0dXJuIGFuIGVycm9yLAorICAgICAgICAgKiBiZWNhdXNlIHRoZSBNUE0gd29u J3Qgd2FudCB0byBob2xkIHVwIGEgZ3JhY2VmdWwgcmVzdGFydCBmb3IgYQorICAgICAgICAgKiBs b25nIHRpbWUKKyAgICAgICAgICovCisgICAgICAgIHJ2ID0gYXByX3NvY2tldF90aW1lb3V0X3Nl dChzb2NrLCBhcHJfdGltZV9mcm9tX3NlYygzKSk7CisgICAgICAgIGlmIChydiAhPSBBUFJfU1VD Q0VTUykgeworICAgICAgICAgICAgYXBfbG9nX2Vycm9yKEFQTE9HX01BUkssIEFQTE9HX1dBUk5J TkcsIHJ2LCBhcF9zZXJ2ZXJfY29uZiwgQVBMT0dOTygwMDA1NSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAic2V0IHRpbWVvdXQgb24gc29ja2V0IHRvIGNvbm5lY3QgdG8gbGlzdGVuZXIiKTsK KyAgICAgICAgICAgIGFwcl9zb2NrZXRfY2xvc2Uoc29jayk7CisgICAgICAgICAgICBhcHJfcG9v bF9kZXN0cm95KHApOworICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAg ICAgcnYgPSBhcHJfc29ja2V0X2Nvbm5lY3Qoc29jaywgbHAtPmJpbmRfYWRkcik7CisgICAgICAg IGlmIChydiAhPSBBUFJfU1VDQ0VTUykgeworICAgICAgICAgICAgaW50IGxvZ19sZXZlbCA9IEFQ TE9HX1dBUk5JTkc7CisKKyAgICAgICAgICAgIGlmIChBUFJfU1RBVFVTX0lTX1RJTUVVUChydikp IHsKKyAgICAgICAgICAgICAgICAvKiBwcm9iYWJseSBzb21lIHNlcnZlciBwcm9jZXNzZXMgYmFp bGVkIG91dCBhbHJlYWR5IGFuZCB0aGVyZQorICAgICAgICAgICAgICAgICAqIGlzIG5vYm9keSBh cm91bmQgdG8gY2FsbCBhY2NlcHQgYW5kIGNsZWFyIG91dCB0aGUga2VybmVsCisgICAgICAgICAg ICAgICAgICogY29ubmVjdGlvbiBxdWV1ZTsgdXN1YWxseSB0aGlzIGlzIG5vdCB3b3J0aCBsb2dn aW5nCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgbG9nX2xldmVsID0gQVBM T0dfREVCVUc7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgaWYgKEFQUl9TVEFUVVNfSVNfVElN RVVQKHJ2KSkgewotICAgICAgICAgICAgLyogcHJvYmFibHkgc29tZSBzZXJ2ZXIgcHJvY2Vzc2Vz IGJhaWxlZCBvdXQgYWxyZWFkeSBhbmQgdGhlcmUKLSAgICAgICAgICAgICAqIGlzIG5vYm9keSBh cm91bmQgdG8gY2FsbCBhY2NlcHQgYW5kIGNsZWFyIG91dCB0aGUga2VybmVsCi0gICAgICAgICAg ICAgKiBjb25uZWN0aW9uIHF1ZXVlOyB1c3VhbGx5IHRoaXMgaXMgbm90IHdvcnRoIGxvZ2dpbmcK LSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbG9nX2xldmVsID0gQVBMT0dfREVCVUc7Cisg ICAgICAgICAgICBhcF9sb2dfZXJyb3IoQVBMT0dfTUFSSywgbG9nX2xldmVsLCBydiwgYXBfc2Vy dmVyX2NvbmYsIEFQTE9HTk8oMDAwNTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvbm5l Y3QgdG8gbGlzdGVuZXIgb24gJXBJIiwgbHAtPmJpbmRfYWRkcik7CisgICAgICAgICAgICBhcHJf cG9vbF9kZXN0cm95KHApOworICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAg ICAgICAgaWYgKGxwLT5wcm90b2NvbCAmJiBzdHJjYXNlY21wKGxwLT5wcm90b2NvbCwgImh0dHBz IikgPT0gMCkgeworICAgICAgICAgICAgLyogU2VuZCBhIFRMUyAxLjAgY2xvc2Vfbm90aWZ5IGFs ZXJ0LiAgVGhpcyBpcyBwZXJoYXBzIHRoZQorICAgICAgICAgICAgICogImxlYXN0IHdyb25nIiB3 YXkgdG8gb3BlbiBhbmQgY2xlYW5seSB0ZXJtaW5hdGUgYW4gU1NMCisgICAgICAgICAgICAgKiBj b25uZWN0aW9uLiAgSXQgc2hvdWxkICJ3b3JrIiB3aXRob3V0IG5vaXN5IGVycm9yIGxvZ3MgaWYK KyAgICAgICAgICAgICAqIHRoZSBzZXJ2ZXIgYWN0dWFsbHkgZXhwZWN0cyBTU0x2My9UTFN2MS4g IFdpdGgKKyAgICAgICAgICAgICAqIFNTTHYyM19zZXJ2ZXJfbWV0aG9kKCkgT3BlblNTTCdzIFNT TF9hY2NlcHQoKSBmYWlscworICAgICAgICAgICAgICogdW5ncmFjZWZ1bGx5IG9uIHJlY2VpcHQg b2YgdGhpcyBtZXNzYWdlLCBzaW5jZSBpdCByZXF1aXJlcworICAgICAgICAgICAgICogYW4gMTEt Ynl0ZSBDbGllbnRIZWxsbyBtZXNzYWdlIGFuZCB0aGlzIGlzIHRvbyBzaG9ydC4gKi8KKyAgICAg ICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHRsczEwX2Nsb3NlX25vdGlmeVs3XSA9 IHsKKyAgICAgICAgICAgICAgICAnXHgxNScsICAgICAgICAgLyogVExTUGxhaW5UZXh0LnR5cGUg PSBBbGVydCAoMjEpICovCisgICAgICAgICAgICAgICAgJ1x4MDMnLCAnXHgwMScsIC8qIFRMU1Bs YWluVGV4dC52ZXJzaW9uID0gezMsIDF9ICovCisgICAgICAgICAgICAgICAgJ1x4MDAnLCAnXHgw MicsIC8qIFRMU1BsYWluVGV4dC5sZW5ndGggPSAyICovCisgICAgICAgICAgICAgICAgJ1x4MDEn LCAgICAgICAgIC8qIEFsZXJ0LmxldmVsID0gd2FybmluZyAoMSkgKi8KKyAgICAgICAgICAgICAg ICAnXHgwMCcgICAgICAgICAgLyogQWxlcnQuZGVzY3JpcHRpb24gPSBjbG9zZV9ub3RpZnkgKDAp ICovCisgICAgICAgICAgICB9OworICAgICAgICAgICAgZGF0YSA9IChjb25zdCBjaGFyICopdGxz MTBfY2xvc2Vfbm90aWZ5OworICAgICAgICAgICAgbGVuID0gc2l6ZW9mKHRsczEwX2Nsb3NlX25v dGlmeSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvKiAuLi4gWFhYIG90aGVyIHJlcXVlc3Qg dHlwZXMgaGVyZT8gKi8geworICAgICAgICAgICAgLyogQ3JlYXRlIGFuIEhUVFAgcmVxdWVzdCBz dHJpbmcuICBXZSBpbmNsdWRlIGEgVXNlci1BZ2VudCBzbworICAgICAgICAgICAgICogdGhhdCBh ZG1pbnN0cmF0b3JzIGNhbiB0cmFjayBkb3duIHRoZSBjYXVzZSBvZiB0aGUKKyAgICAgICAgICAg ICAqIG9kZC1sb29raW5nIHJlcXVlc3RzIGluIHRoZWlyIGxvZ3MuICBBIGNvbXBsZXRlIHJlcXVl c3QgaXMKKyAgICAgICAgICAgICAqIHVzZWQgc2luY2Uga2VybmVsLWxldmVsIGZpbHRlcmluZyBt YXkgcmVxdWlyZSB0aGF0IG11Y2gKKyAgICAgICAgICAgICAqIGRhdGEgYmVmb3JlIHJldHVybmlu ZyBmcm9tIGFjY2VwdCgpLiAqLworICAgICAgICAgICAgZGF0YSA9IGFwcl9wc3RyY2F0KHAsICJP UFRJT05TICogSFRUUC8xLjBcclxuVXNlci1BZ2VudDogIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhcF9nZXRfc2VydmVyX2Rlc2NyaXB0aW9uKCksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIiAoaW50ZXJuYWwgZHVtbXkgY29ubmVjdGlvbilcclxuXHJcbiIsIE5V TEwpOworICAgICAgICAgICAgbGVuID0gc3RybGVuKGRhdGEpOwogICAgICAgICB9CiAKLSAgICAg ICAgYXBfbG9nX2Vycm9yKEFQTE9HX01BUkssIGxvZ19sZXZlbCwgcnYsIGFwX3NlcnZlcl9jb25m LCBBUExPR05PKDAwMDU2KQotICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3QgdG8gbGlzdGVu ZXIgb24gJXBJIiwgbHAtPmJpbmRfYWRkcik7Ci0gICAgICAgIGFwcl9wb29sX2Rlc3Ryb3kocCk7 Ci0gICAgICAgIHJldHVybiBydjsKLSAgICB9Ci0KLSAgICBpZiAobHAtPnByb3RvY29sICYmIHN0 cmNhc2VjbXAobHAtPnByb3RvY29sLCAiaHR0cHMiKSA9PSAwKSB7Ci0gICAgICAgIC8qIFNlbmQg YSBUTFMgMS4wIGNsb3NlX25vdGlmeSBhbGVydC4gIFRoaXMgaXMgcGVyaGFwcyB0aGUKLSAgICAg ICAgICogImxlYXN0IHdyb25nIiB3YXkgdG8gb3BlbiBhbmQgY2xlYW5seSB0ZXJtaW5hdGUgYW4g U1NMCi0gICAgICAgICAqIGNvbm5lY3Rpb24uICBJdCBzaG91bGQgIndvcmsiIHdpdGhvdXQgbm9p c3kgZXJyb3IgbG9ncyBpZgotICAgICAgICAgKiB0aGUgc2VydmVyIGFjdHVhbGx5IGV4cGVjdHMg U1NMdjMvVExTdjEuICBXaXRoCi0gICAgICAgICAqIFNTTHYyM19zZXJ2ZXJfbWV0aG9kKCkgT3Bl blNTTCdzIFNTTF9hY2NlcHQoKSBmYWlscwotICAgICAgICAgKiB1bmdyYWNlZnVsbHkgb24gcmVj ZWlwdCBvZiB0aGlzIG1lc3NhZ2UsIHNpbmNlIGl0IHJlcXVpcmVzCi0gICAgICAgICAqIGFuIDEx LWJ5dGUgQ2xpZW50SGVsbG8gbWVzc2FnZSBhbmQgdGhpcyBpcyB0b28gc2hvcnQuICovCi0gICAg ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHRsczEwX2Nsb3NlX25vdGlmeVs3XSA9IHsK LSAgICAgICAgICAgICdceDE1JywgICAgICAgICAvKiBUTFNQbGFpblRleHQudHlwZSA9IEFsZXJ0 ICgyMSkgKi8KLSAgICAgICAgICAgICdceDAzJywgJ1x4MDEnLCAvKiBUTFNQbGFpblRleHQudmVy c2lvbiA9IHszLCAxfSAqLwotICAgICAgICAgICAgJ1x4MDAnLCAnXHgwMicsIC8qIFRMU1BsYWlu VGV4dC5sZW5ndGggPSAyICovCi0gICAgICAgICAgICAnXHgwMScsICAgICAgICAgLyogQWxlcnQu bGV2ZWwgPSB3YXJuaW5nICgxKSAqLwotICAgICAgICAgICAgJ1x4MDAnICAgICAgICAgIC8qIEFs ZXJ0LmRlc2NyaXB0aW9uID0gY2xvc2Vfbm90aWZ5ICgwKSAqLwotICAgICAgICB9OwotICAgICAg ICBkYXRhID0gKGNvbnN0IGNoYXIgKil0bHMxMF9jbG9zZV9ub3RpZnk7Ci0gICAgICAgIGxlbiA9 IHNpemVvZih0bHMxMF9jbG9zZV9ub3RpZnkpOwotICAgIH0KLSAgICBlbHNlIC8qIC4uLiBYWFgg b3RoZXIgcmVxdWVzdCB0eXBlcyBoZXJlPyAqLyB7Ci0gICAgICAgIC8qIENyZWF0ZSBhbiBIVFRQ IHJlcXVlc3Qgc3RyaW5nLiAgV2UgaW5jbHVkZSBhIFVzZXItQWdlbnQgc28KLSAgICAgICAgICog dGhhdCBhZG1pbnN0cmF0b3JzIGNhbiB0cmFjayBkb3duIHRoZSBjYXVzZSBvZiB0aGUKLSAgICAg ICAgICogb2RkLWxvb2tpbmcgcmVxdWVzdHMgaW4gdGhlaXIgbG9ncy4gIEEgY29tcGxldGUgcmVx dWVzdCBpcwotICAgICAgICAgKiB1c2VkIHNpbmNlIGtlcm5lbC1sZXZlbCBmaWx0ZXJpbmcgbWF5 IHJlcXVpcmUgdGhhdCBtdWNoCi0gICAgICAgICAqIGRhdGEgYmVmb3JlIHJldHVybmluZyBmcm9t IGFjY2VwdCgpLiAqLwotICAgICAgICBkYXRhID0gYXByX3BzdHJjYXQocCwgIk9QVElPTlMgKiBI VFRQLzEuMFxyXG5Vc2VyLUFnZW50OiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBf Z2V0X3NlcnZlcl9kZXNjcmlwdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAo aW50ZXJuYWwgZHVtbXkgY29ubmVjdGlvbilcclxuXHJcbiIsIE5VTEwpOwotICAgICAgICBsZW4g PSBzdHJsZW4oZGF0YSk7CisgICAgICAgIGFwcl9zb2NrZXRfc2VuZChzb2NrLCBkYXRhLCAmbGVu KTsKKyAgICAgICAgYXByX3NvY2tldF9jbG9zZShzb2NrKTsKICAgICB9Ci0KLSAgICBhcHJfc29j a2V0X3NlbmQoc29jaywgZGF0YSwgJmxlbik7Ci0gICAgYXByX3NvY2tldF9jbG9zZShzb2NrKTsK ICAgICBhcHJfcG9vbF9kZXN0cm95KHApOwogCiAgICAgcmV0dXJuIHJ2Owo= --_003_9ACD5B67AAC5594CB6268234CF29CF9AA3762528ORSMSX113amrcor_ Content-Type: application/octet-stream; name="httpd_trunk_bucket.patch" Content-Description: httpd_trunk_bucket.patch Content-Disposition: attachment; filename="httpd_trunk_bucket.patch"; size=49964; creation-date="Mon, 02 Jun 2014 05:27:44 GMT"; modification-date="Mon, 02 Jun 2014 05:27:44 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtcnUgaHR0cGQtdHJ1bmsvaW5jbHVkZS9hcF9saXN0ZW4uaCBodHRwZC10cnVuay5uZXcv aW5jbHVkZS9hcF9saXN0ZW4uaAotLS0gaHR0cGQtdHJ1bmsvaW5jbHVkZS9hcF9saXN0ZW4uaAky MDE0LTA1LTMxIDIzOjEwOjE0Ljc3OTM2NzkwMCAtMDQwMAorKysgaHR0cGQtdHJ1bmsubmV3L2lu Y2x1ZGUvYXBfbGlzdGVuLmgJMjAxNC0wNi0wMiAwMDoyMDoxOS42NzQ4Mjk0NTMgLTA0MDAKQEAg LTc4LDYgKzc4LDEwIEBACiAgKi8KIEFQX0RFQ0xBUkVfREFUQSBleHRlcm4gYXBfbGlzdGVuX3Jl YyAqYXBfbGlzdGVuZXJzOwogCitBUF9ERUNMQVJFX0RBVEEgZXh0ZXJuIGFwX2xpc3Rlbl9yZWMg KiptcG1fbGlzdGVuOworCitBUF9ERUNMQVJFX0RBVEEgZXh0ZXJuIGludCBudW1fYnVja2V0czsK KwogLyoqCiAgKiBTZXR1cCBhbGwgb2YgdGhlIGRlZmF1bHRzIGZvciB0aGUgbGlzdGVuZXIgbGlz dAogICovCmRpZmYgLXJ1IGh0dHBkLXRydW5rL3NlcnZlci9saXN0ZW4uYyBodHRwZC10cnVuay5u ZXcvc2VydmVyL2xpc3Rlbi5jCi0tLSBodHRwZC10cnVuay9zZXJ2ZXIvbGlzdGVuLmMJMjAxNC0w NS0zMSAyMzoxMDoxNC45NDQzNjc4OTMgLTA0MDAKKysrIGh0dHBkLXRydW5rLm5ldy9zZXJ2ZXIv bGlzdGVuLmMJMjAxNC0wNi0wMiAwMDoyMDoxOS42NzU4Mjk0NTMgLTA0MDAKQEAgLTM4LDYgKzM4 LDkgQEAKIAogQVBfREVDTEFSRV9EQVRBIGFwX2xpc3Rlbl9yZWMgKmFwX2xpc3RlbmVycyA9IE5V TEw7CiAKK0FQX0RFQ0xBUkVfREFUQSBhcF9saXN0ZW5fcmVjICoqbXBtX2xpc3RlbiA9IE5VTEw7 CitBUF9ERUNMQVJFX0RBVEEgaW50IG51bV9idWNrZXRzID0gMTsKKwogc3RhdGljIGFwX2xpc3Rl bl9yZWMgKm9sZF9saXN0ZW5lcnM7CiBzdGF0aWMgaW50IGFwX2xpc3RlbmJhY2tsb2c7CiBzdGF0 aWMgaW50IHNlbmRfYnVmZmVyX3NpemU7CmRpZmYgLXJ1IGh0dHBkLXRydW5rL3NlcnZlci9tcG0v cHJlZm9yay9wcmVmb3JrLmMgaHR0cGQtdHJ1bmsubmV3L3NlcnZlci9tcG0vcHJlZm9yay9wcmVm b3JrLmMKLS0tIGh0dHBkLXRydW5rL3NlcnZlci9tcG0vcHJlZm9yay9wcmVmb3JrLmMJMjAxNC0w NS0zMSAyMzoxMDoxNS4zOTkzNjc4NzYgLTA0MDAKKysrIGh0dHBkLXRydW5rLm5ldy9zZXJ2ZXIv bXBtL3ByZWZvcmsvcHJlZm9yay5jCTIwMTQtMDYtMDIgMDA6MjM6MjAuMzkzODIyMzg1IC0wNDAw CkBAIC04NiwxNCArODYsMTggQEAKIAogLyogY29uZmlnIGdsb2JhbHMgKi8KIAotc3RhdGljIGFw cl9wcm9jX211dGV4X3QgKmFjY2VwdF9tdXRleDsKK3N0YXRpYyBhcHJfcHJvY19tdXRleF90ICoq YWNjZXB0X211dGV4Owogc3RhdGljIGludCBhcF9kYWVtb25zX3RvX3N0YXJ0PTA7CiBzdGF0aWMg aW50IGFwX2RhZW1vbnNfbWluX2ZyZWU9MDsKIHN0YXRpYyBpbnQgYXBfZGFlbW9uc19tYXhfZnJl ZT0wOwogc3RhdGljIGludCBhcF9kYWVtb25zX2xpbWl0PTA7ICAgICAgLyogTWF4UmVxdWVzdFdv cmtlcnMgKi8KIHN0YXRpYyBpbnQgc2VydmVyX2xpbWl0ID0gMDsKIHN0YXRpYyBpbnQgbXBtX3N0 YXRlID0gQVBfTVBNUV9TVEFSVElORzsKLXN0YXRpYyBhcF9wb2RfdCAqcG9kOworc3RhdGljIGFw X3BvZF90ICoqcG9kOworc3RhdGljIGFwX3BvZF90ICpjaGlsZF9wb2Q7CitzdGF0aWMgYXByX3By b2NfbXV0ZXhfdCAqY2hpbGRfbXV0ZXg7CithcF9saXN0ZW5fcmVjICpjaGlsZF9saXN0ZW47Citp bnQgKmJ1Y2tldDsgICAgLyogYnVja2V0IGFycmF5IGZvciB0aGUgaHR0cGQgY2hpbGQgcHJvY2Vz c2VzICovCiAKIC8qIGRhdGEgcmV0YWluZWQgYnkgcHJlZm9yayBhY3Jvc3MgbG9hZC91bmxvYWQg b2YgdGhlIG1vZHVsZQogICogYWxsb2NhdGVkIG9uIGZpcnN0IGNhbGwgdG8gcHJlLWNvbmZpZyBo b29rOyBsb2NhdGVkIG9uCkBAIC0xMTcsNyArMTIxLDcgQEAKICAgICAgKiBkb3VibGVkIHVwIHRv IE1BWF9TUEFXTl9SQVRFLCBhbmQgcmVzZXQgb25seSB3aGVuIGEgY3ljbGUgZ29lcyBieQogICAg ICAqIHdpdGhvdXQgdGhlIG5lZWQgdG8gc3Bhd24uCiAgICAgICovCi0gICAgaW50IGlkbGVfc3Bh d25fcmF0ZTsKKyAgICBpbnQgKmlkbGVfc3Bhd25fcmF0ZTsKICNpZm5kZWYgTUFYX1NQQVdOX1JB VEUKICNkZWZpbmUgTUFYX1NQQVdOX1JBVEUgICgzMikKICNlbmRpZgpAQCAtMjIyLDE0ICsyMjYs MTQgQEAKICAgICAgICAgcHJlZm9ya19ub3RlX2NoaWxkX2tpbGxlZCgvKiBzbG90ICovIDAsIDAs IDApOwogICAgIH0KIAotICAgIGFwX21wbV9wb2RfY2xvc2UocG9kKTsKKyAgICBhcF9tcG1fcG9k X2Nsb3NlKGNoaWxkX3BvZCk7CiAgICAgY2hkaXJfZm9yX2dwcm9mKCk7CiAgICAgZXhpdChjb2Rl KTsKIH0KIAogc3RhdGljIHZvaWQgYWNjZXB0X211dGV4X29uKHZvaWQpCiB7Ci0gICAgYXByX3N0 YXR1c190IHJ2ID0gYXByX3Byb2NfbXV0ZXhfbG9jayhhY2NlcHRfbXV0ZXgpOworICAgIGFwcl9z dGF0dXNfdCBydiA9IGFwcl9wcm9jX211dGV4X2xvY2soY2hpbGRfbXV0ZXgpOwogICAgIGlmIChy diAhPSBBUFJfU1VDQ0VTUykgewogICAgICAgICBjb25zdCBjaGFyICptc2cgPSAiY291bGRuJ3Qg Z3JhYiB0aGUgYWNjZXB0IG11dGV4IjsKIApAQCAtMjQ3LDcgKzI1MSw3IEBACiAKIHN0YXRpYyB2 b2lkIGFjY2VwdF9tdXRleF9vZmYodm9pZCkKIHsKLSAgICBhcHJfc3RhdHVzX3QgcnYgPSBhcHJf cHJvY19tdXRleF91bmxvY2soYWNjZXB0X211dGV4KTsKKyAgICBhcHJfc3RhdHVzX3QgcnYgPSBh cHJfcHJvY19tdXRleF91bmxvY2soY2hpbGRfbXV0ZXgpOwogICAgIGlmIChydiAhPSBBUFJfU1VD Q0VTUykgewogICAgICAgICBjb25zdCBjaGFyICptc2cgPSAiY291bGRuJ3QgcmVsZWFzZSB0aGUg YWNjZXB0IG11dGV4IjsKIApAQCAtMjcyLDcgKzI3Niw3IEBACiAgKiB3aGVuIGl0J3Mgc2FmZSBp biB0aGUgc2luZ2xlIExpc3RlbiBjYXNlLgogICovCiAjaWZkZWYgU0lOR0xFX0xJU1RFTl9VTlNF UklBTElaRURfQUNDRVBUCi0jZGVmaW5lIFNBRkVfQUNDRVBUKHN0bXQpIGRvIHtpZiAoYXBfbGlz dGVuZXJzLT5uZXh0KSB7c3RtdDt9fSB3aGlsZSgwKQorI2RlZmluZSBTQUZFX0FDQ0VQVChzdG10 KSBkbyB7aWYgKGNoaWxkX2xpc3Rlbi0+bmV4dCkge3N0bXQ7fX0gd2hpbGUoMCkKICNlbHNlCiAj ZGVmaW5lIFNBRkVfQUNDRVBUKHN0bXQpIGRvIHtzdG10O30gd2hpbGUoMCkKICNlbmRpZgpAQCAt NTIxLDEwICs1MjUsMTcgQEAKICAgICBhcHJfcG9vbF9jcmVhdGUoJnB0cmFucywgcGNoaWxkKTsK ICAgICBhcHJfcG9vbF90YWcocHRyYW5zLCAidHJhbnNhY3Rpb24iKTsKIAorICAgIC8qIGNsb3Nl IHVudXNlZCBsaXN0ZW5lcnMgYW5kIHBvZHMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J1 Y2tldHM7IGkrKykgeworICAgICAgICBpZiAoaSAhPSBidWNrZXRbbXlfY2hpbGRfbnVtXSkgewor ICAgICAgICAgICAgYXBfbXBtX3BvZF9jbG9zZShwb2RbaV0pOworICAgICAgICB9CisgICAgfQor CiAgICAgLyogbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgd2Ugc3dpdGNoIFVJRHMgc28gd2UgaGF2 ZSBwZXJtaXNzaW9ucyAqLwogICAgIGFwX3Jlb3Blbl9zY29yZWJvYXJkKHBjaGlsZCwgTlVMTCwg MCk7Ci0gICAgbG9ja2ZpbGUgPSBhcHJfcHJvY19tdXRleF9sb2NrZmlsZShhY2NlcHRfbXV0ZXgp OwotICAgIHN0YXR1cyA9IGFwcl9wcm9jX211dGV4X2NoaWxkX2luaXQoJmFjY2VwdF9tdXRleCwK KyAgICBsb2NrZmlsZSA9IGFwcl9wcm9jX211dGV4X2xvY2tmaWxlKGNoaWxkX211dGV4KTsKKyAg ICBzdGF0dXMgPSBhcHJfcHJvY19tdXRleF9jaGlsZF9pbml0KCZjaGlsZF9tdXRleCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tmaWxlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNoaWxkKTsKICAgICBpZiAoc3RhdHVzICE9IEFQ Ul9TVUNDRVNTKSB7CkBAIC01MzIsNyArNTQzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICJD b3VsZG4ndCBpbml0aWFsaXplIGNyb3NzLXByb2Nlc3MgbG9jayBpbiBjaGlsZCAiCiAgICAgICAg ICAgICAgICAgICAgICAiKCVzKSAoJXMpIiwKICAgICAgICAgICAgICAgICAgICAgIGxvY2tmaWxl ID8gbG9ja2ZpbGUgOiAibm9uZSIsCi0gICAgICAgICAgICAgICAgICAgICBhcHJfcHJvY19tdXRl eF9uYW1lKGFjY2VwdF9tdXRleCkpOworICAgICAgICAgICAgICAgICAgICAgYXByX3Byb2NfbXV0 ZXhfbmFtZShjaGlsZF9tdXRleCkpOwogICAgICAgICBjbGVhbl9jaGlsZF9leGl0KEFQRVhJVF9D SElMREZBVEFMKTsKICAgICB9CiAKQEAgLTU0NywzOCArNTU4LDM3IEBACiAgICAgKHZvaWQpIGFw X3VwZGF0ZV9jaGlsZF9zdGF0dXMoc2JoLCBTRVJWRVJfUkVBRFksIChyZXF1ZXN0X3JlYyAqKSBO VUxMKTsKIAogICAgIC8qIFNldCB1cCB0aGUgcG9sbGZkIGFycmF5ICovCi0gICAgc3RhdHVzID0g YXByX3BvbGxzZXRfY3JlYXRlKCZwb2xsc2V0LCBudW1fbGlzdGVuc29ja3MsIHBjaGlsZCwgMCk7 CisgICAgc3RhdHVzID0gYXByX3BvbGxzZXRfY3JlYXRlKCZwb2xsc2V0LCAxLCBwY2hpbGQsIDAp OwogICAgIGlmIChzdGF0dXMgIT0gQVBSX1NVQ0NFU1MpIHsKICAgICAgICAgYXBfbG9nX2Vycm9y KEFQTE9HX01BUkssIEFQTE9HX0VNRVJHLCBzdGF0dXMsIGFwX3NlcnZlcl9jb25mLCBBUExPR05P KDAwMTU2KQogICAgICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGNyZWF0ZSBwb2xsc2V0IGlu IGNoaWxkOyBjaGVjayBzeXN0ZW0gb3IgdXNlciBsaW1pdHMiKTsKICAgICAgICAgY2xlYW5fY2hp bGRfZXhpdChBUEVYSVRfQ0hJTERTSUNLKTsgLyogYXNzdW1lIHRlbXBvcmFyeSByZXNvdXJjZSBp c3N1ZSAqLwogICAgIH0KIAotICAgIGZvciAobHIgPSBhcF9saXN0ZW5lcnMsIGkgPSBudW1fbGlz dGVuc29ja3M7IGktLTsgbHIgPSBsci0+bmV4dCkgewotICAgICAgICBhcHJfcG9sbGZkX3QgcGZk ID0geyAwIH07CisgICAgbHIgPSBjaGlsZF9saXN0ZW47CisgICAgYXByX3BvbGxmZF90IHBmZCA9 IHsgMCB9OwogCi0gICAgICAgIHBmZC5kZXNjX3R5cGUgPSBBUFJfUE9MTF9TT0NLRVQ7Ci0gICAg ICAgIHBmZC5kZXNjLnMgPSBsci0+c2Q7Ci0gICAgICAgIHBmZC5yZXFldmVudHMgPSBBUFJfUE9M TElOOwotICAgICAgICBwZmQuY2xpZW50X2RhdGEgPSBscjsKLQotICAgICAgICBzdGF0dXMgPSBh cHJfcG9sbHNldF9hZGQocG9sbHNldCwgJnBmZCk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gQVBS X1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIC8qIElmIHRoZSBjaGlsZCBwcm9jZXNzZWQgYSBTSUdX SU5DSCBiZWZvcmUgc2V0dGluZyB1cCB0aGUKLSAgICAgICAgICAgICAqIHBvbGxzZXQsIHRoaXMg ZXJyb3IgcGF0aCBpcyBleHBlY3RlZCBhbmQgaGFybWxlc3MsCi0gICAgICAgICAgICAgKiBzaW5j ZSB0aGUgbGlzdGVuZXIgZmQgd2FzIGFscmVhZHkgY2xvc2VkOyBzbyBkb24ndAotICAgICAgICAg ICAgICogcG9sbHV0ZSB0aGUgbG9ncyBpbiB0aGF0IGNhc2UuICovCi0gICAgICAgICAgICBpZiAo IWRpZV9ub3cpIHsKLSAgICAgICAgICAgICAgICBhcF9sb2dfZXJyb3IoQVBMT0dfTUFSSywgQVBM T0dfRU1FUkcsIHN0YXR1cywgYXBfc2VydmVyX2NvbmYsIEFQTE9HTk8oMDAxNTcpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJDb3VsZG4ndCBhZGQgbGlzdGVuZXIgdG8gcG9sbHNldDsg Y2hlY2sgc3lzdGVtIG9yIHVzZXIgbGltaXRzIik7Ci0gICAgICAgICAgICAgICAgY2xlYW5fY2hp bGRfZXhpdChBUEVYSVRfQ0hJTERTSUNLKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNs ZWFuX2NoaWxkX2V4aXQoMCk7Ci0gICAgICAgIH0KKyAgICBwZmQuZGVzY190eXBlID0gQVBSX1BP TExfU09DS0VUOworICAgIHBmZC5kZXNjLnMgPSBsci0+c2Q7CisgICAgcGZkLnJlcWV2ZW50cyA9 IEFQUl9QT0xMSU47CisgICAgcGZkLmNsaWVudF9kYXRhID0gbHI7CiAKLSAgICAgICAgbHItPmFj Y2VwdF9mdW5jID0gYXBfdW5peGRfYWNjZXB0OworICAgIHN0YXR1cyA9IGFwcl9wb2xsc2V0X2Fk ZChwb2xsc2V0LCAmcGZkKTsKKyAgICBpZiAoc3RhdHVzICE9IEFQUl9TVUNDRVNTKSB7CisgICAg ICAgIC8qIElmIHRoZSBjaGlsZCBwcm9jZXNzZWQgYSBTSUdXSU5DSCBiZWZvcmUgc2V0dGluZyB1 cCB0aGUKKyAgICAgICAgICogcG9sbHNldCwgdGhpcyBlcnJvciBwYXRoIGlzIGV4cGVjdGVkIGFu ZCBoYXJtbGVzcywKKyAgICAgICAgICogc2luY2UgdGhlIGxpc3RlbmVyIGZkIHdhcyBhbHJlYWR5 IGNsb3NlZDsgc28gZG9uJ3QKKyAgICAgICAgICogcG9sbHV0ZSB0aGUgbG9ncyBpbiB0aGF0IGNh c2UuICovCisgICAgICAgIGlmICghZGllX25vdykgeworICAgICAgICAgICAgYXBfbG9nX2Vycm9y KEFQTE9HX01BUkssIEFQTE9HX0VNRVJHLCBzdGF0dXMsIGFwX3NlcnZlcl9jb25mLCBBUExPR05P KDAwMTU3KQorICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZG4ndCBhZGQgbGlzdGVuZXIg dG8gcG9sbHNldDsgY2hlY2sgc3lzdGVtIG9yIHVzZXIgbGltaXRzIik7CisgICAgICAgICAgICBj bGVhbl9jaGlsZF9leGl0KEFQRVhJVF9DSElMRFNJQ0spOworICAgICAgICB9CisgICAgICAgIGNs ZWFuX2NoaWxkX2V4aXQoMCk7CiAgICAgfQogCisgICAgbHItPmFjY2VwdF9mdW5jID0gYXBfdW5p eGRfYWNjZXB0OworCiAgICAgbXBtX3N0YXRlID0gQVBfTVBNUV9SVU5OSU5HOwogCiAgICAgYnVj a2V0X2FsbG9jID0gYXByX2J1Y2tldF9hbGxvY19jcmVhdGUocGNoaWxkKTsKQEAgLTYxMCw3MiAr NjIwLDYgQEAKICAgICAgICAgLyogTG9jayBhcm91bmQgImFjY2VwdCIsIGlmIG5lY2Vzc2FyeSAq LwogICAgICAgICBTQUZFX0FDQ0VQVChhY2NlcHRfbXV0ZXhfb24oKSk7CiAKLSAgICAgICAgaWYg KG51bV9saXN0ZW5zb2NrcyA9PSAxKSB7Ci0gICAgICAgICAgICAvKiBUaGVyZSBpcyBvbmx5IG9u ZSBsaXN0ZW5lciByZWNvcmQsIHNvIHJlZmVyIHRvIHRoYXQgb25lLiAqLwotICAgICAgICAgICAg bHIgPSBhcF9saXN0ZW5lcnM7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg ICAvKiBtdWx0aXBsZSBsaXN0ZW5pbmcgc29ja2V0cyAtIG5lZWQgdG8gcG9sbCAqLwotICAgICAg ICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgIGFwcl9pbnQzMl90IG51bWRlc2M7Ci0g ICAgICAgICAgICAgICAgY29uc3QgYXByX3BvbGxmZF90ICpwZGVzYzsKLQotICAgICAgICAgICAg ICAgIC8qIGNoZWNrIGZvciB0ZXJtaW5hdGlvbiBmaXJzdCBzbyB3ZSBkb24ndCBzbGVlcCBmb3Ig YSB3aGlsZSBpbgotICAgICAgICAgICAgICAgICAqIHBvbGwgaWYgYWxyZWFkeSBzaWduYWxsZWQK LSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoZGllX25vdyAgICAgICAg IC8qIGluIGdyYWNlZnVsIHN0b3AvcmVzdGFydCAqLwotICAgICAgICAgICAgICAgICAgICB8fCAo b25lX3Byb2Nlc3MgJiYgc2h1dGRvd25fcGVuZGluZykpIHsKLSAgICAgICAgICAgICAgICAgICAg U0FGRV9BQ0NFUFQoYWNjZXB0X211dGV4X29mZigpKTsKLSAgICAgICAgICAgICAgICAgICAgY2xl YW5fY2hpbGRfZXhpdCgwKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAv KiB0aW1lb3V0ID09IDEwIHNlY29uZHMgdG8gYXZvaWQgYSBoYW5nIGF0IGdyYWNlZnVsIHJlc3Rh cnQvc3RvcAotICAgICAgICAgICAgICAgICAqIGNhdXNlZCBieSB0aGUgY2xvc2luZyBvZiBzb2Nr ZXRzIGJ5IHRoZSBzaWduYWwgaGFuZGxlcgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg ICAgICAgIHN0YXR1cyA9IGFwcl9wb2xsc2V0X3BvbGwocG9sbHNldCwgYXByX3RpbWVfZnJvbV9z ZWMoMTApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm51bWRl c2MsICZwZGVzYyk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBBUFJfU1VDQ0VTUykg ewotICAgICAgICAgICAgICAgICAgICBpZiAoQVBSX1NUQVRVU19JU19USU1FVVAoc3RhdHVzKSB8 fAotICAgICAgICAgICAgICAgICAgICAgICAgQVBSX1NUQVRVU19JU19FSU5UUihzdGF0dXMpKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICAvKiBTaW5nbGUgVW5peCBkb2N1bWVudHMgc2VsZWN0IGFz IHJldHVybmluZyBlcnJub3MKLSAgICAgICAgICAgICAgICAgICAgICogRUJBREYsIEVJTlRSLCBh bmQgRUlOVkFMLi4uIGFuZCBpbiBub25lIG9mIHRob3NlCi0gICAgICAgICAgICAgICAgICAgICAq IGNhc2VzIGRvZXMgaXQgbWFrZSBzZW5zZSB0byBjb250aW51ZS4gIEluIGZhY3QKLSAgICAgICAg ICAgICAgICAgICAgICogb24gTGludXggMi4wLnggd2Ugc2VlbSB0byBlbmQgdXAgd2l0aCBFRkFV TFQKLSAgICAgICAgICAgICAgICAgICAgICogb2NjYXNpb25hbGx5LCBhbmQgd2UnZCBsb29wIGZv cmV2ZXIgZHVlIHRvIGl0LgotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAg ICAgICAgYXBfbG9nX2Vycm9yKEFQTE9HX01BUkssIEFQTE9HX0VSUiwgc3RhdHVzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBfc2VydmVyX2NvbmYsIEFQTE9HTk8oMDAxNTgp ICJhcHJfcG9sbHNldF9wb2xsOiAobGlzdGVuKSIpOwotICAgICAgICAgICAgICAgICAgICBTQUZF X0FDQ0VQVChhY2NlcHRfbXV0ZXhfb2ZmKCkpOwotICAgICAgICAgICAgICAgICAgICBjbGVhbl9j aGlsZF9leGl0KEFQRVhJVF9DSElMRFNJQ0spOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg ICAgICAgICAgIC8qIFdlIGNhbiBhbHdheXMgdXNlIHBkZXNjWzBdLCBidXQgc29ja2V0cyBhdCBw b3NpdGlvbiBOCi0gICAgICAgICAgICAgICAgICogY291bGQgZW5kIHVwIGNvbXBsZXRlbHkgc3Rh cnZlZCBvZiBhdHRlbnRpb24gaW4gYSB2ZXJ5Ci0gICAgICAgICAgICAgICAgICogYnVzeSBzZXJ2 ZXIuIFRoZXJlZm9yZSwgd2Ugcm91bmQtcm9iaW4gYWNyb3NzIHRoZQotICAgICAgICAgICAgICAg ICAqIHJldHVybmVkIHNldCBvZiBkZXNjcmlwdG9ycy4gV2hpbGUgaXQgaXMgcG9zc2libGUgdGhh dAotICAgICAgICAgICAgICAgICAqIHRoZSByZXR1cm5lZCBzZXQgb2YgZGVzY3JpcHRvcnMgbWln aHQgZmxpcCBhcm91bmQgYW5kCi0gICAgICAgICAgICAgICAgICogY29udGludWUgdG8gc3RhcnZl IHNvbWUgc29ja2V0cywgd2UgaGFwcGVuIHRvIGtub3cgdGhlCi0gICAgICAgICAgICAgICAgICog aW50ZXJuYWwgcG9sbHNldCBpbXBsZW1lbnRhdGlvbiByZXRhaW5zIG9yZGVyaW5nCi0gICAgICAg ICAgICAgICAgICogc3RhYmlsaXR5IG9mIHRoZSBzb2NrZXRzLiBUaHVzLCB0aGUgcm91bmQtcm9i aW4gc2hvdWxkCi0gICAgICAgICAgICAgICAgICogZW5zdXJlIHRoYXQgYSBzb2NrZXQgd2lsbCBl dmVudHVhbGx5IGJlIHNlcnZpY2VkLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg ICAgIGlmIChsYXN0X3BvbGxfaWR4ID49IG51bWRlc2MpCi0gICAgICAgICAgICAgICAgICAgIGxh c3RfcG9sbF9pZHggPSAwOwotCi0gICAgICAgICAgICAgICAgLyogR3JhYiBhIGxpc3RlbmVyIHJl Y29yZCBmcm9tIHRoZSBjbGllbnRfZGF0YSBvZiB0aGUgcG9sbAotICAgICAgICAgICAgICAgICAq IGRlc2NyaXB0b3IsIGFuZCBhZHZhbmNlIG91ciBzYXZlZCBpbmRleCB0byByb3VuZC1yb2Jpbgot ICAgICAgICAgICAgICAgICAqIHRoZSBuZXh0IGZldGNoLgotICAgICAgICAgICAgICAgICAqCi0g ICAgICAgICAgICAgICAgICogIyMjIGhtbS4uLiB0aGlzIGRlc2NyaXB0b3IgbWlnaHQgaGF2ZSBQ T0xMRVJSIHJhdGhlcgotICAgICAgICAgICAgICAgICAqICMjIyB0aGFuIFBPTExJTgotICAgICAg ICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGxyID0gcGRlc2NbbGFzdF9wb2xsX2lkeCsr XS5jbGllbnRfZGF0YTsKLSAgICAgICAgICAgICAgICBnb3RvIGdvdF9mZDsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgIGdvdF9mZDoKICAgICAgICAgLyogaWYgd2UgYWNjZXB0KCkgc29t ZXRoaW5nIHdlIGRvbid0IHdhbnQgdG8gZGllLCBzbyB3ZSBoYXZlIHRvCiAgICAgICAgICAqIGRl ZmVyIHRoZSBleGl0CiAgICAgICAgICAqLwpAQCAtNzEwLDcgKzY1NCw3IEBACiAgICAgICAgICAq IHdoaWxlIHdlIHdlcmUgcHJvY2Vzc2luZyB0aGUgY29ubmVjdGlvbiBvciB3ZSBhcmUgdGhlIGx1 Y2t5CiAgICAgICAgICAqIGlkbGUgc2VydmVyIHByb2Nlc3MgdGhhdCBnZXRzIHRvIGRpZS4KICAg ICAgICAgICovCi0gICAgICAgIGlmIChhcF9tcG1fcG9kX2NoZWNrKHBvZCkgPT0gQVBSX1NVQ0NF U1MpIHsgLyogc2VsZWN0ZWQgYXMgaWRsZT8gKi8KKyAgICAgICAgaWYgKGFwX21wbV9wb2RfY2hl Y2soY2hpbGRfcG9kKSA9PSBBUFJfU1VDQ0VTUykgeyAvKiBzZWxlY3RlZCBhcyBpZGxlPyAqLwog ICAgICAgICAgICAgZGllX25vdyA9IDE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAocmV0 YWluZWQtPm15X2dlbmVyYXRpb24gIT0KQEAgLTc1MCw2ICs2OTQsOSBAQAogICAgICh2b2lkKSBh cF91cGRhdGVfY2hpbGRfc3RhdHVzX2Zyb21faW5kZXhlcyhzbG90LCAwLCBTRVJWRVJfU1RBUlRJ TkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXF1 ZXN0X3JlYyAqKSBOVUxMKTsKIAorICAgIGNoaWxkX2xpc3RlbiA9IG1wbV9saXN0ZW5bYnVja2V0 W3Nsb3RdXTsKKyAgICBjaGlsZF9tdXRleCA9IGFjY2VwdF9tdXRleFtidWNrZXRbc2xvdF1dOwor ICAgIGNoaWxkX3BvZCA9IHBvZFtidWNrZXRbc2xvdF1dOwogCiAjaWZkZWYgX09TRF9QT1NJWAog ICAgIC8qIEJTMjAwMCByZXF1aXJlcyBhICJzcGVjaWFsIiB2ZXJzaW9uIG9mIGZvcmsoKSBiZWZv cmUgYSBzZXR1aWQoKSBjYWxsICovCkBAIC04MTUsNiArNzYyLDcgQEAKICAgICAgICAgaWYgKGFw X3Njb3JlYm9hcmRfaW1hZ2UtPnNlcnZlcnNbaV1bMF0uc3RhdHVzICE9IFNFUlZFUl9ERUFEKSB7 CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQorICAgICAgICBidWNrZXRbaV0gPSBp ICUgbnVtX2J1Y2tldHM7CiAgICAgICAgIGlmIChtYWtlX2NoaWxkKGFwX3NlcnZlcl9jb25mLCBp KSA8IDApIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04MjIsMTMgKzc3MCwx NSBAQAogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgcGVyZm9ybV9pZGxlX3NlcnZlcl9tYWludGVu YW5jZShhcHJfcG9vbF90ICpwKQorc3RhdGljIHZvaWQgcGVyZm9ybV9pZGxlX3NlcnZlcl9tYWlu dGVuYW5jZShhcHJfcG9vbF90ICpwLCBpbnQgY2hpbGRfYnVja2V0KQogewogICAgIGludCBpOwog ICAgIGludCBpZGxlX2NvdW50OwogICAgIHdvcmtlcl9zY29yZSAqd3M7CiAgICAgaW50IGZyZWVf bGVuZ3RoOwotICAgIGludCBmcmVlX3Nsb3RzW01BWF9TUEFXTl9SQVRFXTsKKyAgICBpbnQgY2hp bGRfbWF4X3NwYXduX3JhdGU7CisgICAgY2hpbGRfbWF4X3NwYXduX3JhdGUgPSBNQVhfU1BBV05f UkFURS9udW1fYnVja2V0czsKKyAgICBpbnQgZnJlZV9zbG90c1tjaGlsZF9tYXhfc3Bhd25fcmF0 ZV07CiAgICAgaW50IGxhc3Rfbm9uX2RlYWQ7CiAgICAgaW50IHRvdGFsX25vbl9kZWFkOwogCkBA IC04NDIsMTMgKzc5MiwxMyBAQAogICAgIGZvciAoaSA9IDA7IGkgPCBhcF9kYWVtb25zX2xpbWl0 OyArK2kpIHsKICAgICAgICAgaW50IHN0YXR1czsKIAotICAgICAgICBpZiAoaSA+PSByZXRhaW5l ZC0+bWF4X2RhZW1vbnNfbGltaXQgJiYgZnJlZV9sZW5ndGggPT0gcmV0YWluZWQtPmlkbGVfc3Bh d25fcmF0ZSkKKyAgICAgICAgaWYgKGkgPj0gcmV0YWluZWQtPm1heF9kYWVtb25zX2xpbWl0ICYm IGZyZWVfbGVuZ3RoID09IHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGVbY2hpbGRfYnVja2V0XSkK ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB3cyA9ICZhcF9zY29yZWJvYXJkX2ltYWdlLT5z ZXJ2ZXJzW2ldWzBdOwogICAgICAgICBzdGF0dXMgPSB3cy0+c3RhdHVzOwogICAgICAgICBpZiAo c3RhdHVzID09IFNFUlZFUl9ERUFEKSB7CiAgICAgICAgICAgICAvKiB0cnkgdG8ga2VlcCBjaGls ZHJlbiBudW1iZXJzIGFzIGxvdyBhcyBwb3NzaWJsZSAqLwotICAgICAgICAgICAgaWYgKGZyZWVf bGVuZ3RoIDwgcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZSkgeworICAgICAgICAgICAgaWYgKGZy ZWVfbGVuZ3RoIDwgcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZVtjaGlsZF9idWNrZXRdKSB7CiAg ICAgICAgICAgICAgICAgZnJlZV9zbG90c1tmcmVlX2xlbmd0aF0gPSBpOwogICAgICAgICAgICAg ICAgICsrZnJlZV9sZW5ndGg7CiAgICAgICAgICAgICB9CkBAIC04NjAsNyArODEwLDcgQEAKICAg ICAgICAgICAgICAqIFNvIHdlIGhvcGVmdWxseSB3b24ndCBuZWVkIHRvIGZvcmsgbW9yZSBpZiB3 ZSBjb3VudCBpdC4KICAgICAgICAgICAgICAqIFRoaXMgZGVwZW5kcyBvbiB0aGUgb3JkZXJpbmcg b2YgU0VSVkVSX1JFQURZIGFuZCBTRVJWRVJfU1RBUlRJTkcuCiAgICAgICAgICAgICAgKi8KLSAg ICAgICAgICAgIGlmIChzdGF0dXMgPD0gU0VSVkVSX1JFQURZKSB7CisgICAgICAgICAgICBpZiAo KHN0YXR1cyA8PSBTRVJWRVJfUkVBRFkpICYmIChidWNrZXRbaV0gPT0gY2hpbGRfYnVja2V0KSkg ewogICAgICAgICAgICAgICAgICsrIGlkbGVfY291bnQ7CiAgICAgICAgICAgICB9CiAKQEAgLTg2 OSwxNSArODE5LDE1IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0YWluZWQtPm1heF9kYWVt b25zX2xpbWl0ID0gbGFzdF9ub25fZGVhZCArIDE7Ci0gICAgaWYgKGlkbGVfY291bnQgPiBhcF9k YWVtb25zX21heF9mcmVlKSB7CisgICAgaWYgKGlkbGVfY291bnQgPiBhcF9kYWVtb25zX21heF9m cmVlL251bV9idWNrZXRzKSB7CiAgICAgICAgIC8qIGtpbGwgb2ZmIG9uZSBjaGlsZC4uLiB3ZSB1 c2UgdGhlIHBvZCBiZWNhdXNlIHRoYXQnbGwgY2F1c2UgaXQgdG8KICAgICAgICAgICogc2h1dCBk b3duIGdyYWNlZnVsbHksIGluIGNhc2UgaXQgaGFwcGVuZWQgdG8gcGljayB1cCBhIHJlcXVlc3QK ICAgICAgICAgICogd2hpbGUgd2Ugd2VyZSBjb3VudGluZwogICAgICAgICAgKi8KLSAgICAgICAg YXBfbXBtX3BvZF9zaWduYWwocG9kKTsKLSAgICAgICAgcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0 ZSA9IDE7CisgICAgICAgIGFwX21wbV9wb2Rfc2lnbmFsKHBvZFtjaGlsZF9idWNrZXRdKTsKKyAg ICAgICAgcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZVtjaGlsZF9idWNrZXRdID0gMTsKICAgICB9 Ci0gICAgZWxzZSBpZiAoaWRsZV9jb3VudCA8IGFwX2RhZW1vbnNfbWluX2ZyZWUpIHsKKyAgICBl bHNlIGlmIChpZGxlX2NvdW50IDwgYXBfZGFlbW9uc19taW5fZnJlZS9udW1fYnVja2V0cykgewog ICAgICAgICAvKiB0ZXJtaW5hdGUgdGhlIGZyZWUgbGlzdCAqLwogICAgICAgICBpZiAoZnJlZV9s ZW5ndGggPT0gMCkgewogICAgICAgICAgICAgLyogb25seSByZXBvcnQgdGhpcyBjb25kaXRpb24g b25jZSAqLwpAQCAtODg3LDE4ICs4MzcsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiIHJhaXNpbmcgdGhlIE1heFJlcXVlc3RXb3JrZXJzIHNldHRpbmciKTsKICAgICAgICAgICAg ICAgICByZXRhaW5lZC0+bWF4Y2xpZW50c19yZXBvcnRlZCA9IDE7CiAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlID0gMTsKKyAgICAgICAgICAgIHJl dGFpbmVkLT5pZGxlX3NwYXduX3JhdGVbY2hpbGRfYnVja2V0XSA9IDE7CiAgICAgICAgIH0KICAg ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAocmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZSA+ PSA4KSB7CisgICAgICAgICAgICBpZiAocmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZVtjaGlsZF9i dWNrZXRdID49IDgpIHsKICAgICAgICAgICAgICAgICBhcF9sb2dfZXJyb3IoQVBMT0dfTUFSSywg QVBMT0dfSU5GTywgMCwgYXBfc2VydmVyX2NvbmYsIEFQTE9HTk8oMDAxNjIpCiAgICAgICAgICAg ICAgICAgICAgICJzZXJ2ZXIgc2VlbXMgYnVzeSwgKHlvdSBtYXkgbmVlZCAiCiAgICAgICAgICAg ICAgICAgICAgICJ0byBpbmNyZWFzZSBTdGFydFNlcnZlcnMsIG9yIE1pbi9NYXhTcGFyZVNlcnZl cnMpLCAiCiAgICAgICAgICAgICAgICAgICAgICJzcGF3bmluZyAlZCBjaGlsZHJlbiwgdGhlcmUg YXJlICVkIGlkbGUsIGFuZCAiCi0gICAgICAgICAgICAgICAgICAgICIlZCB0b3RhbCBjaGlsZHJl biIsIHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGUsCisgICAgICAgICAgICAgICAgICAgICIlZCB0 b3RhbCBjaGlsZHJlbiIsIHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGVbY2hpbGRfYnVja2V0XSwK ICAgICAgICAgICAgICAgICAgICAgaWRsZV9jb3VudCwgdG90YWxfbm9uX2RlYWQpOwogICAgICAg ICAgICAgfQogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZyZWVfbGVuZ3RoOyArK2kpIHsK KyAgICAgICAgICAgICAgICBidWNrZXRbZnJlZV9zbG90c1tpXV0gPSBjaGlsZF9idWNrZXQ7CiAg ICAgICAgICAgICAgICAgbWFrZV9jaGlsZChhcF9zZXJ2ZXJfY29uZiwgZnJlZV9zbG90c1tpXSk7 CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiB0aGUgbmV4dCB0aW1lIGFyb3VuZCB3ZSB3 YW50IHRvIHNwYXduIHR3aWNlIGFzIG1hbnkgaWYgdGhpcwpAQCAtOTA3LDEzICs4NTgsMTMgQEAK ICAgICAgICAgICAgIGlmIChyZXRhaW5lZC0+aG9sZF9vZmZfb25fZXhwb25lbnRpYWxfc3Bhd25p bmcpIHsKICAgICAgICAgICAgICAgICAtLXJldGFpbmVkLT5ob2xkX29mZl9vbl9leHBvbmVudGlh bF9zcGF3bmluZzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHJldGFpbmVk LT5pZGxlX3NwYXduX3JhdGUgPCBNQVhfU1BBV05fUkFURSkgewotICAgICAgICAgICAgICAgIHJl dGFpbmVkLT5pZGxlX3NwYXduX3JhdGUgKj0gMjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJldGFp bmVkLT5pZGxlX3NwYXduX3JhdGVbY2hpbGRfYnVja2V0XSA8IE1BWF9TUEFXTl9SQVRFL251bV9i dWNrZXRzKSB7CisgICAgICAgICAgICAgICAgcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZVtjaGls ZF9idWNrZXRdICo9IDI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxz ZSB7Ci0gICAgICAgIHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGUgPSAxOworICAgICAgICByZXRh aW5lZC0+aWRsZV9zcGF3bl9yYXRlW2NoaWxkX2J1Y2tldF0gPSAxOwogICAgIH0KIH0KIApAQCAt OTI2LDE2ICs4NzcsMjEgQEAKICAgICBpbnQgaW5kZXg7CiAgICAgaW50IHJlbWFpbmluZ19jaGls ZHJlbl90b19zdGFydDsKICAgICBhcHJfc3RhdHVzX3QgcnY7CisgICAgaW50IGk7CiAKICAgICBh cF9sb2dfcGlkKHBjb25mLCBhcF9waWRfZm5hbWUpOwogCi0gICAgLyogSW5pdGlhbGl6ZSBjcm9z cy1wcm9jZXNzIGFjY2VwdCBsb2NrICovCi0gICAgcnYgPSBhcF9wcm9jX211dGV4X2NyZWF0ZSgm YWNjZXB0X211dGV4LCBOVUxMLCBBUF9BQ0NFUFRfTVVURVhfVFlQRSwgTlVMTCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHMsIF9wY29uZiwgMCk7Ci0gICAgaWYgKHJ2ICE9IEFQUl9T VUNDRVNTKSB7Ci0gICAgICAgIG1wbV9zdGF0ZSA9IEFQX01QTVFfU1RPUFBJTkc7Ci0gICAgICAg IHJldHVybiBET05FOwotICAgIH0KKyAgICBidWNrZXQgPSBhcHJfcGFsbG9jKF9wY29uZiwgc2l6 ZW9mKGludCkgKiAgYXBfZGFlbW9uc19saW1pdCk7CisgICAgLyogSW5pdGlhbGl6ZSBjcm9zcy1w cm9jZXNzIGFjY2VwdCBsb2NrIGZvciBlYWNoIGJ1Y2tldCovCisgICAgYWNjZXB0X211dGV4ID0g YXByX3BhbGxvYyhfcGNvbmYsIHNpemVvZihhcHJfcHJvY19tdXRleF90ICopICogbnVtX2J1Y2tl dHMpOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgIHJ2 ID0gYXBfcHJvY19tdXRleF9jcmVhdGUoJmFjY2VwdF9tdXRleFtpXSwgTlVMTCwgQVBfQUNDRVBU X01VVEVYX1RZUEUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcywg X3Bjb25mLCAwKTsKKyAgICAgICAgaWYgKHJ2ICE9IEFQUl9TVUNDRVNTKSB7CisgICAgICAgICAg ICBtcG1fc3RhdGUgPSBBUF9NUE1RX1NUT1BQSU5HOworICAgICAgICAgICAgcmV0dXJuIERPTkU7 CisgICAgICAgIH0KKyAgICAgfQogCiAgICAgaWYgKCFyZXRhaW5lZC0+aXNfZ3JhY2VmdWwpIHsK ICAgICAgICAgaWYgKGFwX3J1bl9wcmVfbXBtKHMtPnByb2Nlc3MtPnBvb2wsIFNCX1NIQVJFRCkg IT0gT0spIHsKQEAgLTk1MywxMiArOTA5LDEzIEBACiAKICAgICBpZiAob25lX3Byb2Nlc3MpIHsK ICAgICAgICAgQVBfTU9OQ09OVFJPTCgxKTsKKyAgICAgICAgYnVja2V0WzBdID0gMDsKICAgICAg ICAgbWFrZV9jaGlsZChhcF9zZXJ2ZXJfY29uZiwgMCk7CiAgICAgICAgIC8qIE5PVFJFQUNIRUQg Ki8KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgaWYgKGFwX2RhZW1vbnNfbWF4X2ZyZWUgPCBhcF9k YWVtb25zX21pbl9mcmVlICsgMSkgIC8qIERvbid0IHRocmFzaC4uLiAqLwotICAgICAgICBhcF9k YWVtb25zX21heF9mcmVlID0gYXBfZGFlbW9uc19taW5fZnJlZSArIDE7CisgICAgaWYgKGFwX2Rh ZW1vbnNfbWF4X2ZyZWUgPCBhcF9kYWVtb25zX21pbl9mcmVlICsgbnVtX2J1Y2tldHMpICAvKiBE b24ndCB0aHJhc2guLi4gKi8KKyAgICAgICAgYXBfZGFlbW9uc19tYXhfZnJlZSA9IGFwX2RhZW1v bnNfbWluX2ZyZWUgKyBudW1fYnVja2V0czsKIAogICAgIC8qIElmIHdlJ3JlIGRvaW5nIGEgZ3Jh Y2VmdWxfcmVzdGFydCB0aGVuIHdlJ3JlIGdvaW5nIHRvIHNlZSBhIGxvdAogICAgICAqIG9mIGNo aWxkcmVuIGV4aXRpbmcgaW1tZWRpYXRlbHkgd2hlbiB3ZSBnZXQgaW50byB0aGUgbWFpbiBsb29w CkBAIC05OTEsNyArOTQ4LDcgQEAKICAgICBhcF9sb2dfY29tbWFuZF9saW5lKHBsb2csIHMpOwog ICAgIGFwX2xvZ19lcnJvcihBUExPR19NQVJLLCBBUExPR19ERUJVRywgMCwgYXBfc2VydmVyX2Nv bmYsIEFQTE9HTk8oMDAxNjUpCiAgICAgICAgICAgICAgICAgIkFjY2VwdCBtdXRleDogJXMgKGRl ZmF1bHQ6ICVzKSIsCi0gICAgICAgICAgICAgICAgYXByX3Byb2NfbXV0ZXhfbmFtZShhY2NlcHRf bXV0ZXgpLAorICAgICAgICAgICAgICAgIGFwcl9wcm9jX211dGV4X25hbWUoYWNjZXB0X211dGV4 WzBdKSwKICAgICAgICAgICAgICAgICBhcHJfcHJvY19tdXRleF9kZWZuYW1lKCkpOwogCiAgICAg bXBtX3N0YXRlID0gQVBfTVBNUV9SVU5OSU5HOwpAQCAtMTA0MSw3ICs5OTgsNyBAQAogICAgICAg ICAgICAgICAgICAgICAvKiBjaGlsZCBkZXRlY3RlZCBhIHJlc291cmNlIHNob3J0YWdlIChFW05N XUZJTEUsIEVOT0JVRlMsIGV0YykKICAgICAgICAgICAgICAgICAgICAgICogY3V0IHRoZSBmb3Jr IHJhdGUgdG8gdGhlIG1pbmltdW0KICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg ICAgICAgICAgIHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGUgPSAxOworICAgICAgICAgICAgICAg ICAgICByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlW2J1Y2tldFtjaGlsZF9zbG90XV0gPSAxOwog ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZW1haW5pbmdfY2hp bGRyZW5fdG9fc3RhcnQKICAgICAgICAgICAgICAgICAgICAgJiYgY2hpbGRfc2xvdCA8IGFwX2Rh ZW1vbnNfbGltaXQpIHsKQEAgLTEwODYsOCArMTA0Myw5IEBACiAgICAgICAgICAgICAgKi8KICAg ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgcGVyZm9ybV9pZGxlX3Nl cnZlcl9tYWludGVuYW5jZShwY29uZik7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYnVj a2V0czsgaSsrKSB7CisgICAgICAgICAgICBwZXJmb3JtX2lkbGVfc2VydmVyX21haW50ZW5hbmNl KHBjb25mLCBpKTsKKyAgICAgICAgfQogICAgIH0KICAgICB9IC8qIG9uZV9wcm9jZXNzICovCiAK QEAgLTExMjIsNyArMTA4MCw5IEBACiAgICAgICAgIGFwX2Nsb3NlX2xpc3RlbmVycygpOwogCiAg ICAgICAgIC8qIGtpbGwgb2ZmIHRoZSBpZGxlIG9uZXMgKi8KLSAgICAgICAgYXBfbXBtX3BvZF9r aWxscGcocG9kLCByZXRhaW5lZC0+bWF4X2RhZW1vbnNfbGltaXQpOworICAgICAgICBmb3IgKGkg PSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICAgICAgYXBfbXBtX3BvZF9raWxs cGcocG9kW2ldLCByZXRhaW5lZC0+bWF4X2RhZW1vbnNfbGltaXQpOworICAgICAgICB9CiAKICAg ICAgICAgLyogU2VuZCBTSUdVU1IxIHRvIHRoZSBhY3RpdmUgY2hpbGRyZW4gKi8KICAgICAgICAg YWN0aXZlX2NoaWxkcmVuID0gMDsKQEAgLTExOTYsNyArMTE1Niw5IEBACiAgICAgICAgICAgICAg ICAgICAgICJHcmFjZWZ1bCByZXN0YXJ0IHJlcXVlc3RlZCwgZG9pbmcgcmVzdGFydCIpOwogCiAg ICAgICAgIC8qIGtpbGwgb2ZmIHRoZSBpZGxlIG9uZXMgKi8KLSAgICAgICAgYXBfbXBtX3BvZF9r aWxscGcocG9kLCByZXRhaW5lZC0+bWF4X2RhZW1vbnNfbGltaXQpOworICAgICAgICBmb3IgKGkg PSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICAgICAgYXBfbXBtX3BvZF9raWxs cGcocG9kW2ldLCByZXRhaW5lZC0+bWF4X2RhZW1vbnNfbGltaXQpOworICAgICAgICB9CiAKICAg ICAgICAgLyogVGhpcyBpcyBtb3N0bHkgZm9yIGRlYnVnZ2luZy4uLiBzbyB0aGF0IHdlIGtub3cg d2hhdCBpcyBzdGlsbAogICAgICAgICAgKiBncmFjZWZ1bGx5IGRlYWxpbmcgd2l0aCBleGlzdGlu ZyByZXF1ZXN0LiAgVGhpcyB3aWxsIGJyZWFrCkBAIC0xMjM5LDYgKzEyMDEsOCBAQAogICAgIGlu dCBzdGFydHVwID0gMDsKICAgICBpbnQgbGV2ZWxfZmxhZ3MgPSAwOwogICAgIGFwcl9zdGF0dXNf dCBydjsKKyAgICBpbnQgaTsKKyAgICBhcF9saXN0ZW5fcmVjICpscjsKIAogICAgIHBjb25mID0g cDsKIApAQCAtMTI1NCwxMyArMTIxOCwyNiBAQAogICAgICAgICAgICAgICAgICAgICAgIm5vIGxp c3RlbmluZyBzb2NrZXRzIGF2YWlsYWJsZSwgc2h1dHRpbmcgZG93biIpOwogICAgICAgICByZXR1 cm4gRE9ORTsKICAgICB9CisgICAgbnVtX2J1Y2tldHMgPSBudW1fbGlzdGVuc29ja3M7CisgICAg aWYgKG51bV9idWNrZXRzID4gTUFYX1NQQVdOX1JBVEUpIHsKKyAgICAgICAgbnVtX2J1Y2tldHMg PSBNQVhfU1BBV05fUkFURTsKKyAgICB9CisKKyAgICBtcG1fbGlzdGVuID0gYXByX3BhbGxvYyhw LCBzaXplb2YoYXBfbGlzdGVuX3JlYyopICogbnVtX2J1Y2tldHMpOworICAgIGZvciAobHIgPSBh cF9saXN0ZW5lcnMsIGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7IGxyID0gbHItPm5leHQsIGkrKykg eworICAgICAgICBtcG1fbGlzdGVuW2ldID0gbHI7CisgICAgfQorCisgICAgcG9kID0gYXByX3Bh bGxvYyhwY29uZiwgc2l6ZW9mKGFwX3BvZF90ICopICogbnVtX2J1Y2tldHMpOworICAgIGZvciAo aSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgIGlmICgocnYgPSBhcF9tcG1f cG9kX29wZW4ocGNvbmYsICZwb2RbaV0pKSkgeworICAgICAgICAgICAgYXBfbG9nX2Vycm9yKEFQ TE9HX01BUkssIEFQTE9HX0NSSVQgfCBsZXZlbF9mbGFncywgcnYsCisgICAgICAgICAgICAgICAg ICAgICAgICAgKHN0YXJ0dXAgPyBOVUxMIDogcyksCisgICAgICAgICAgICAgICAgICAgICAgICAg ImNvdWxkIG5vdCBvcGVuIHBpcGUtb2YtZGVhdGgiKTsKKyAgICAgICAgICAgIHJldHVybiBET05F OworICAgICAgICB9CisgICAgIH0KIAotICAgIGlmICgocnYgPSBhcF9tcG1fcG9kX29wZW4ocGNv bmYsICZwb2QpKSkgewotICAgICAgICBhcF9sb2dfZXJyb3IoQVBMT0dfTUFSSywgQVBMT0dfQ1JJ VCB8IGxldmVsX2ZsYWdzLCBydiwKLSAgICAgICAgICAgICAgICAgICAgIChzdGFydHVwID8gTlVM TCA6IHMpLAotICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBvcGVuIHBpcGUtb2YtZGVh dGgiKTsKLSAgICAgICAgcmV0dXJuIERPTkU7Ci0gICAgfQogICAgIHJldHVybiBPSzsKIH0KIApA QCAtMTI2OSw2ICsxMjQ2LDcgQEAKICAgICBpbnQgbm9fZGV0YWNoLCBkZWJ1ZywgZm9yZWdyb3Vu ZDsKICAgICBhcHJfc3RhdHVzX3QgcnY7CiAgICAgY29uc3QgY2hhciAqdXNlcmRhdGFfa2V5ID0g Im1wbV9wcmVmb3JrX21vZHVsZSI7CisgICAgaW50IGk7CiAKICAgICBtcG1fc3RhdGUgPSBBUF9N UE1RX1NUQVJUSU5HOwogCkBAIC0xMjkyLDcgKzEyNzAsNiBAQAogICAgIGlmICghcmV0YWluZWQp IHsKICAgICAgICAgcmV0YWluZWQgPSBhcF9yZXRhaW5lZF9kYXRhX2NyZWF0ZSh1c2VyZGF0YV9r ZXksIHNpemVvZigqcmV0YWluZWQpKTsKICAgICAgICAgcmV0YWluZWQtPm1heF9kYWVtb25zX2xp bWl0ID0gLTE7Ci0gICAgICAgIHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGUgPSAxOwogICAgIH0K ICAgICArK3JldGFpbmVkLT5tb2R1bGVfbG9hZHM7CiAgICAgaWYgKHJldGFpbmVkLT5tb2R1bGVf bG9hZHMgPT0gMikgewpAQCAtMTMwNiw2ICsxMjgzLDEwIEBACiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJhcHJfcHJvY19kZXRhY2ggZmFpbGVkIik7CiAgICAgICAgICAgICAgICAgcmV0 dXJuIEhUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgICAgICAgICAgfQorICAgICAgICAg ICAgcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZSA9IGFwcl9wYWxsb2MocCwgc2l6ZW9mKGludCkg KiBudW1fYnVja2V0cyk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpPCBudW1fYnVja2V0czsg aSsrKSB7CisgICAgICAgICAgICAgICAgcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZVtpXSA9IDE7 CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtcnUgaHR0cGQtdHJ1bmsv c2VydmVyL21wbS93b3JrZXIvd29ya2VyLmMgaHR0cGQtdHJ1bmsubmV3L3NlcnZlci9tcG0vd29y a2VyL3dvcmtlci5jCi0tLSBodHRwZC10cnVuay9zZXJ2ZXIvbXBtL3dvcmtlci93b3JrZXIuYwky MDE0LTA1LTMxIDIzOjEwOjE1LjI1NjM2Nzg4MSAtMDQwMAorKysgaHR0cGQtdHJ1bmsubmV3L3Nl cnZlci9tcG0vd29ya2VyL3dvcmtlci5jCTIwMTQtMDYtMDIgMDA6MjA6MTkuNjc5ODI5NDUzIC0w NDAwCkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgKiBkb3VibGVkIHVwIHRvIE1BWF9TUEFXTl9S QVRFLCBhbmQgcmVzZXQgb25seSB3aGVuIGEgY3ljbGUgZ29lcyBieQogICAgICAqIHdpdGhvdXQg dGhlIG5lZWQgdG8gc3Bhd24uCiAgICAgICovCi0gICAgaW50IGlkbGVfc3Bhd25fcmF0ZTsKKyAg ICBpbnQgKmlkbGVfc3Bhd25fcmF0ZTsKICNpZm5kZWYgTUFYX1NQQVdOX1JBVEUKICNkZWZpbmUg TUFYX1NQQVdOX1JBVEUgICAgICAgICgzMikKICNlbmRpZgpAQCAtMTg4LDcgKzE4OCwxMSBAQAog CiAjZGVmaW5lIElEX0ZST01fQ0hJTERfVEhSRUFEKGMsIHQpICAgICgoYyAqIHRocmVhZF9saW1p dCkgKyB0KQogCi1zdGF0aWMgYXBfcG9kX3QgKnBvZDsKK3N0YXRpYyBhcF9wb2RfdCAqKnBvZDsK K3N0YXRpYyBhcF9wb2RfdCAqY2hpbGRfcG9kOworc3RhdGljIGFwcl9wcm9jX211dGV4X3QgKmNo aWxkX211dGV4OworYXBfbGlzdGVuX3JlYyAqY2hpbGRfbGlzdGVuOworaW50ICpidWNrZXQ7ICAg IC8qIGJ1Y2tldCBhcnJheSBmb3IgdGhlIGh0dHBkIGNoaWxkIHByb2Nlc3NlcyAqLwogCiAvKiBU aGUgd29ya2VyIE1QTSByZXNwZWN0cyBhIGNvdXBsZSBvZiBydW50aW1lIGZsYWdzIHRoYXQgY2Fu IGFpZAogICogaW4gZGVidWdnaW5nLiBTZXR0aW5nIHRoZSAtRE5PX0RFVEFDSCBmbGFnIHdpbGwg cHJldmVudCB0aGUgcm9vdCBwcm9jZXNzCkBAIC0yMTgsMTAgKzIyMiwxMCBAQAogc3RhdGljIGFw cl9vc190aHJlYWRfdCAqbGlzdGVuZXJfb3NfdGhyZWFkOwogCiAvKiBMb2NrcyBmb3IgYWNjZXB0 IHNlcmlhbGl6YXRpb24gKi8KLXN0YXRpYyBhcHJfcHJvY19tdXRleF90ICphY2NlcHRfbXV0ZXg7 CitzdGF0aWMgYXByX3Byb2NfbXV0ZXhfdCAqKmFjY2VwdF9tdXRleDsKIAogI2lmZGVmIFNJTkdM RV9MSVNURU5fVU5TRVJJQUxJWkVEX0FDQ0VQVAotI2RlZmluZSBTQUZFX0FDQ0VQVChzdG10KSAo YXBfbGlzdGVuZXJzLT5uZXh0ID8gKHN0bXQpIDogQVBSX1NVQ0NFU1MpCisjZGVmaW5lIFNBRkVf QUNDRVBUKHN0bXQpIChjaGlsZF9saXN0ZW4tPm5leHQgPyAoc3RtdCkgOiBBUFJfU1VDQ0VTUykK ICNlbHNlCiAjZGVmaW5lIFNBRkVfQUNDRVBUKHN0bXQpIChzdG10KQogI2VuZGlmCkBAIC02OTIs NyArNjk2LDcgQEAKIAogICAgIGZyZWUodGkpOwogCi0gICAgcnYgPSBhcHJfcG9sbHNldF9jcmVh dGUoJnBvbGxzZXQsIG51bV9saXN0ZW5zb2NrcywgdHBvb2wsIDApOworICAgIHJ2ID0gYXByX3Bv bGxzZXRfY3JlYXRlKCZwb2xsc2V0LCAxLCB0cG9vbCwgMCk7CiAgICAgaWYgKHJ2ICE9IEFQUl9T VUNDRVNTKSB7CiAgICAgICAgIGFwX2xvZ19lcnJvcihBUExPR19NQVJLLCBBUExPR19FTUVSRywg cnYsIGFwX3NlcnZlcl9jb25mLAogICAgICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGNyZWF0 ZSBwb2xsc2V0IGluIHRocmVhZDsiCkBAIC03MDEsMjYgKzcwNSwyNSBAQAogICAgICAgICBjbGVh bl9jaGlsZF9leGl0KEFQRVhJVF9DSElMRFNJQ0spOwogICAgIH0KIAotICAgIGZvciAobHIgPSBh cF9saXN0ZW5lcnM7IGxyICE9IE5VTEw7IGxyID0gbHItPm5leHQpIHsKLSAgICAgICAgYXByX3Bv bGxmZF90IHBmZCA9IHsgMCB9OworICAgIGxyID0gY2hpbGRfbGlzdGVuOyAKKyAgICBhcHJfcG9s bGZkX3QgcGZkID0geyAwIH07CiAKLSAgICAgICAgcGZkLmRlc2NfdHlwZSA9IEFQUl9QT0xMX1NP Q0tFVDsKLSAgICAgICAgcGZkLmRlc2MucyA9IGxyLT5zZDsKLSAgICAgICAgcGZkLnJlcWV2ZW50 cyA9IEFQUl9QT0xMSU47Ci0gICAgICAgIHBmZC5jbGllbnRfZGF0YSA9IGxyOworICAgIHBmZC5k ZXNjX3R5cGUgPSBBUFJfUE9MTF9TT0NLRVQ7CisgICAgcGZkLmRlc2MucyA9IGxyLT5zZDsKKyAg ICBwZmQucmVxZXZlbnRzID0gQVBSX1BPTExJTjsKKyAgICBwZmQuY2xpZW50X2RhdGEgPSBscjsK IAotICAgICAgICBydiA9IGFwcl9wb2xsc2V0X2FkZChwb2xsc2V0LCAmcGZkKTsKLSAgICAgICAg aWYgKHJ2ICE9IEFQUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBhcF9sb2dfZXJyb3IoQVBMT0df TUFSSywgQVBMT0dfRU1FUkcsIHJ2LCBhcF9zZXJ2ZXJfY29uZiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAiQ291bGRuJ3QgY3JlYXRlIGFkZCBsaXN0ZW5lciB0byBwb2xsc2V0OyIKLSAgICAg ICAgICAgICAgICAgICAgICAgICAiIGNoZWNrIHN5c3RlbSBvciB1c2VyIGxpbWl0cyIpOwotICAg ICAgICAgICAgLyogbGV0IHRoZSBwYXJlbnQgZGVjaWRlIGhvdyBiYWQgdGhpcyByZWFsbHkgaXMg Ki8KLSAgICAgICAgICAgIGNsZWFuX2NoaWxkX2V4aXQoQVBFWElUX0NISUxEU0lDSyk7Ci0gICAg ICAgIH0KLQotICAgICAgICBsci0+YWNjZXB0X2Z1bmMgPSBhcF91bml4ZF9hY2NlcHQ7CisgICAg cnYgPSBhcHJfcG9sbHNldF9hZGQocG9sbHNldCwgJnBmZCk7CisgICAgaWYgKHJ2ICE9IEFQUl9T VUNDRVNTKSB7CisgICAgICAgIGFwX2xvZ19lcnJvcihBUExPR19NQVJLLCBBUExPR19FTUVSRywg cnYsIGFwX3NlcnZlcl9jb25mLAorICAgICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGNyZWF0 ZSBhZGQgbGlzdGVuZXIgdG8gcG9sbHNldDsiCisgICAgICAgICAgICAgICAgICAgICAiIGNoZWNr IHN5c3RlbSBvciB1c2VyIGxpbWl0cyIpOworICAgICAgICAvKiBsZXQgdGhlIHBhcmVudCBkZWNp ZGUgaG93IGJhZCB0aGlzIHJlYWxseSBpcyAqLworICAgICAgICBjbGVhbl9jaGlsZF9leGl0KEFQ RVhJVF9DSElMRFNJQ0spOwogICAgIH0KIAorICAgIGxyLT5hY2NlcHRfZnVuYyA9IGFwX3VuaXhk X2FjY2VwdDsKKwogICAgIC8qIFVuYmxvY2sgdGhlIHNpZ25hbCB1c2VkIHRvIHdha2UgdGhpcyB0 aHJlYWQgdXAsIGFuZCBzZXQgYSBoYW5kbGVyIGZvcgogICAgICAqIGl0LgogICAgICAqLwpAQCAt NzU4LDcgKzc2MSw3IEBACiAgICAgICAgIC8qIFdlJ3ZlIGFscmVhZHkgZGVjcmVtZW50ZWQgdGhl IGlkbGUgd29ya2VyIGNvdW50IGluc2lkZQogICAgICAgICAgKiBhcF9xdWV1ZV9pbmZvX3dhaXRf Zm9yX2lkbGVyLiAqLwogCi0gICAgICAgIGlmICgocnYgPSBTQUZFX0FDQ0VQVChhcHJfcHJvY19t dXRleF9sb2NrKGFjY2VwdF9tdXRleCkpKQorICAgICAgICBpZiAoKHJ2ID0gU0FGRV9BQ0NFUFQo YXByX3Byb2NfbXV0ZXhfbG9jayhjaGlsZF9tdXRleCkpKQogICAgICAgICAgICAgIT0gQVBSX1NV Q0NFU1MpIHsKIAogICAgICAgICAgICAgaWYgKCFsaXN0ZW5lcl9tYXlfZXhpdCkgewpAQCAtNzY3 LDU3ICs3NzAsNiBAQAogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAvKiBz a2lwIHRoZSBsb2NrIHJlbGVhc2UgKi8KICAgICAgICAgfQogCi0gICAgICAgIGlmICghYXBfbGlz dGVuZXJzLT5uZXh0KSB7Ci0gICAgICAgICAgICAvKiBPbmx5IG9uZSBsaXN0ZW5lciwgc28gc2tp cCB0aGUgcG9sbCAqLwotICAgICAgICAgICAgbHIgPSBhcF9saXN0ZW5lcnM7Ci0gICAgICAgIH0K LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB3aGlsZSAoIWxpc3RlbmVyX21heV9leGl0KSB7 Ci0gICAgICAgICAgICAgICAgYXByX2ludDMyX3QgbnVtZGVzYzsKLSAgICAgICAgICAgICAgICBj b25zdCBhcHJfcG9sbGZkX3QgKnBkZXNjOwotCi0gICAgICAgICAgICAgICAgcnYgPSBhcHJfcG9s bHNldF9wb2xsKHBvbGxzZXQsIC0xLCAmbnVtZGVzYywgJnBkZXNjKTsKLSAgICAgICAgICAgICAg ICBpZiAocnYgIT0gQVBSX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFQUl9T VEFUVVNfSVNfRUlOVFIocnYpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8qIGFwcl9wb2xs c2V0X3BvbGwoKSB3aWxsIG9ubHkgcmV0dXJuIGVycm9ycyBpbiBjYXRhc3Ryb3BoaWMKLSAgICAg ICAgICAgICAgICAgICAgICogY2lyY3Vtc3RhbmNlcy4gTGV0J3MgdHJ5IGV4aXRpbmcgZ3JhY2Vm dWxseSwgZm9yIG5vdy4gKi8KLSAgICAgICAgICAgICAgICAgICAgYXBfbG9nX2Vycm9yKEFQTE9H X01BUkssIEFQTE9HX0VSUiwgcnYsIGFwX3NlcnZlcl9jb25mLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgImFwcl9wb2xsc2V0X3BvbGw6IChsaXN0ZW4pIik7Ci0gICAgICAgICAg ICAgICAgICAgIHNpZ25hbF90aHJlYWRzKFNUX0dSQUNFRlVMKTsKLSAgICAgICAgICAgICAgICB9 Ci0KLSAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJfbWF5X2V4aXQpIGJyZWFrOwotCi0gICAg ICAgICAgICAgICAgLyogV2UgY2FuIGFsd2F5cyB1c2UgcGRlc2NbMF0sIGJ1dCBzb2NrZXRzIGF0 IHBvc2l0aW9uIE4KLSAgICAgICAgICAgICAgICAgKiBjb3VsZCBlbmQgdXAgY29tcGxldGVseSBz dGFydmVkIG9mIGF0dGVudGlvbiBpbiBhIHZlcnkKLSAgICAgICAgICAgICAgICAgKiBidXN5IHNl cnZlci4gVGhlcmVmb3JlLCB3ZSByb3VuZC1yb2JpbiBhY3Jvc3MgdGhlCi0gICAgICAgICAgICAg ICAgICogcmV0dXJuZWQgc2V0IG9mIGRlc2NyaXB0b3JzLiBXaGlsZSBpdCBpcyBwb3NzaWJsZSB0 aGF0Ci0gICAgICAgICAgICAgICAgICogdGhlIHJldHVybmVkIHNldCBvZiBkZXNjcmlwdG9ycyBt aWdodCBmbGlwIGFyb3VuZCBhbmQKLSAgICAgICAgICAgICAgICAgKiBjb250aW51ZSB0byBzdGFy dmUgc29tZSBzb2NrZXRzLCB3ZSBoYXBwZW4gdG8ga25vdyB0aGUKLSAgICAgICAgICAgICAgICAg KiBpbnRlcm5hbCBwb2xsc2V0IGltcGxlbWVudGF0aW9uIHJldGFpbnMgb3JkZXJpbmcKLSAgICAg ICAgICAgICAgICAgKiBzdGFiaWxpdHkgb2YgdGhlIHNvY2tldHMuIFRodXMsIHRoZSByb3VuZC1y b2JpbiBzaG91bGQKLSAgICAgICAgICAgICAgICAgKiBlbnN1cmUgdGhhdCBhIHNvY2tldCB3aWxs IGV2ZW50dWFsbHkgYmUgc2VydmljZWQuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg ICAgICAgaWYgKGxhc3RfcG9sbF9pZHggPj0gbnVtZGVzYykKLSAgICAgICAgICAgICAgICAgICAg bGFzdF9wb2xsX2lkeCA9IDA7Ci0KLSAgICAgICAgICAgICAgICAvKiBHcmFiIGEgbGlzdGVuZXIg cmVjb3JkIGZyb20gdGhlIGNsaWVudF9kYXRhIG9mIHRoZSBwb2xsCi0gICAgICAgICAgICAgICAg ICogZGVzY3JpcHRvciwgYW5kIGFkdmFuY2Ugb3VyIHNhdmVkIGluZGV4IHRvIHJvdW5kLXJvYmlu Ci0gICAgICAgICAgICAgICAgICogdGhlIG5leHQgZmV0Y2guCi0gICAgICAgICAgICAgICAgICoK LSAgICAgICAgICAgICAgICAgKiAjIyMgaG1tLi4uIHRoaXMgZGVzY3JpcHRvciBtaWdodCBoYXZl IFBPTExFUlIgcmF0aGVyCi0gICAgICAgICAgICAgICAgICogIyMjIHRoYW4gUE9MTElOCi0gICAg ICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgbHIgPSBwZGVzY1tsYXN0X3BvbGxfaWR4 KytdLmNsaWVudF9kYXRhOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICB9 IC8qIHdoaWxlICovCi0KLSAgICAgICAgfSAvKiBpZi9lbHNlICovCi0KICAgICAgICAgaWYgKCFs aXN0ZW5lcl9tYXlfZXhpdCkgewogICAgICAgICAgICAgaWYgKHB0cmFucyA9PSBOVUxMKSB7CiAg ICAgICAgICAgICAgICAgLyogd2UgY2FuJ3QgdXNlIGEgcmVjeWNsZWQgdHJhbnNhY3Rpb24gcG9v bCB0aGlzIHRpbWUuCkBAIC04MzksNyArNzkxLDcgQEAKICAgICAgICAgICAgICAgICByZXNvdXJj ZV9zaG9ydGFnZSA9IDE7CiAgICAgICAgICAgICAgICAgc2lnbmFsX3RocmVhZHMoU1RfR1JBQ0VG VUwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChydiA9IFNBRkVfQUNDRVBUKGFw cl9wcm9jX211dGV4X3VubG9jayhhY2NlcHRfbXV0ZXgpKSkKKyAgICAgICAgICAgIGlmICgocnYg PSBTQUZFX0FDQ0VQVChhcHJfcHJvY19tdXRleF91bmxvY2soY2hpbGRfbXV0ZXgpKSkKICAgICAg ICAgICAgICAgICAhPSBBUFJfU1VDQ0VTUykgewogCiAgICAgICAgICAgICAgICAgaWYgKGxpc3Rl bmVyX21heV9leGl0KSB7CkBAIC04NjMsNyArODE1LDcgQEAKICAgICAgICAgICAgIH0KICAgICAg ICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmICgocnYgPSBTQUZFX0FDQ0VQVChh cHJfcHJvY19tdXRleF91bmxvY2soYWNjZXB0X211dGV4KSkpCisgICAgICAgICAgICBpZiAoKHJ2 ID0gU0FGRV9BQ0NFUFQoYXByX3Byb2NfbXV0ZXhfdW5sb2NrKGNoaWxkX211dGV4KSkpCiAgICAg ICAgICAgICAgICAgIT0gQVBSX1NVQ0NFU1MpIHsKICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwg PSBBUExPR19FTUVSRzsKIApAQCAtMTIxNyw2ICsxMTY5LDggQEAKICAgICB0aHJlYWRfc3RhcnRl ciAqdHM7CiAgICAgYXByX3RocmVhZGF0dHJfdCAqdGhyZWFkX2F0dHI7CiAgICAgYXByX3RocmVh ZF90ICpzdGFydF90aHJlYWRfaWQ7CisgICAgaW50IGk7CisgICAgYXBfbGlzdGVuX3JlYyAqbHI7 CiAKICAgICBtcG1fc3RhdGUgPSBBUF9NUE1RX1NUQVJUSU5HOyAvKiBmb3IgYmVuZWZpdCBvZiBh bnkgaG9va3MgdGhhdCBydW4gYXMgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqIGNoaWxkIGluaXRpYWxpemVzCkBAIC0xMjI1LDExICsxMTc5LDE4IEBACiAgICAgYXBf ZmF0YWxfc2lnbmFsX2NoaWxkX3NldHVwKGFwX3NlcnZlcl9jb25mKTsKICAgICBhcHJfcG9vbF9j cmVhdGUoJnBjaGlsZCwgcGNvbmYpOwogCisgICAgLyogY2xvc2UgdW51c2VkIGxpc3RlbmVycyBh bmQgcG9kcyAqLworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKSB7CisgICAg ICAgIGlmIChpICE9IGJ1Y2tldFtjaGlsZF9udW1fYXJnXSkgeworICAgICAgICAgICAgYXBfbXBt X3BvZHhfY2xvc2UocG9kW2ldKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qc3R1ZmYgdG8g ZG8gYmVmb3JlIHdlIHN3aXRjaCBpZCdzLCBzbyB3ZSBoYXZlIHBlcm1pc3Npb25zLiovCiAgICAg YXBfcmVvcGVuX3Njb3JlYm9hcmQocGNoaWxkLCBOVUxMLCAwKTsKIAotICAgIHJ2ID0gU0FGRV9B Q0NFUFQoYXByX3Byb2NfbXV0ZXhfY2hpbGRfaW5pdCgmYWNjZXB0X211dGV4LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcHJvY19tdXRleF9sb2Nr ZmlsZShhY2NlcHRfbXV0ZXgpLAorICAgIHJ2ID0gU0FGRV9BQ0NFUFQoYXByX3Byb2NfbXV0ZXhf Y2hpbGRfaW5pdCgmY2hpbGRfbXV0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFwcl9wcm9jX211dGV4X2xvY2tmaWxlKGNoaWxkX211dGV4KSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNoaWxkKSk7CiAg ICAgaWYgKHJ2ICE9IEFQUl9TVUNDRVNTKSB7CiAgICAgICAgIGFwX2xvZ19lcnJvcihBUExPR19N QVJLLCBBUExPR19FTUVSRywgcnYsIGFwX3NlcnZlcl9jb25mLCBBUExPR05PKDAwMjgwKQpAQCAt MTMzOCw3ICsxMjk5LDcgQEAKICAgICAgICAgYXByX3NpZ25hbChTSUdURVJNLCBkdW1teV9zaWdu YWxfaGFuZGxlcik7CiAgICAgICAgIC8qIFdhdGNoIGZvciBhbnkgbWVzc2FnZXMgZnJvbSB0aGUg cGFyZW50IG92ZXIgdGhlIFBPRCAqLwogICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAg cnYgPSBhcF9tcG1fcG9keF9jaGVjayhwb2QpOworICAgICAgICAgICAgcnYgPSBhcF9tcG1fcG9k eF9jaGVjayhjaGlsZF9wb2QpOwogICAgICAgICAgICAgaWYgKHJ2ID09IEFQX01QTV9QT0RYX05P UkVTVEFSVCkgewogICAgICAgICAgICAgICAgIC8qIHNlZSBpZiB0ZXJtaW5hdGlvbiB3YXMgdHJp Z2dlcmVkIHdoaWxlIHdlIHNsZXB0ICovCiAgICAgICAgICAgICAgICAgc3dpdGNoKHRlcm1pbmF0 ZV9tb2RlKSB7CkBAIC0xMzkxLDYgKzEzNTIsMTAgQEAKICAgICAgICAgLyogTk9UUkVBQ0hFRCAq LwogICAgIH0KIAorICAgIGNoaWxkX2xpc3RlbiA9IG1wbV9saXN0ZW5bYnVja2V0W3Nsb3RdXTsK KyAgICBjaGlsZF9tdXRleCA9IGFjY2VwdF9tdXRleFtidWNrZXRbc2xvdF1dOworICAgIGNoaWxk X3BvZCA9IHBvZFtidWNrZXRbc2xvdF1dOworCiAgICAgaWYgKChwaWQgPSBmb3JrKCkpID09IC0x KSB7CiAgICAgICAgIGFwX2xvZ19lcnJvcihBUExPR19NQVJLLCBBUExPR19FUlIsIGVycm5vLCBz LCBBUExPR05PKDAwMjgzKQogICAgICAgICAgICAgICAgICAgICAgImZvcms6IFVuYWJsZSB0byBm b3JrIG5ldyBwcm9jZXNzIik7CkBAIC0xNDQ5LDYgKzE0MTQsNyBAQAogICAgICAgICBpZiAoYXBf c2NvcmVib2FyZF9pbWFnZS0+cGFyZW50W2ldLnBpZCAhPSAwKSB7CiAgICAgICAgICAgICBjb250 aW51ZTsKICAgICAgICAgfQorICAgICAgICBidWNrZXRbaV0gPSBpICUgbnVtX2J1Y2tldHM7CiAg ICAgICAgIGlmIChtYWtlX2NoaWxkKGFwX3NlcnZlcl9jb25mLCBpKSA8IDApIHsKICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNDU2LDcgKzE0MjIsNyBAQAogICAgIH0KIH0KIAot c3RhdGljIHZvaWQgcGVyZm9ybV9pZGxlX3NlcnZlcl9tYWludGVuYW5jZSh2b2lkKQorc3RhdGlj IHZvaWQgcGVyZm9ybV9pZGxlX3NlcnZlcl9tYWludGVuYW5jZShpbnQgY2hpbGRfYnVja2V0KQog ewogICAgIGludCBpLCBqOwogICAgIGludCBpZGxlX3RocmVhZF9jb3VudDsKQEAgLTE0NjQsNyAr MTQzMCw5IEBACiAgICAgcHJvY2Vzc19zY29yZSAqcHM7CiAgICAgaW50IGZyZWVfbGVuZ3RoOwog ICAgIGludCB0b3RhbGx5X2ZyZWVfbGVuZ3RoID0gMDsKLSAgICBpbnQgZnJlZV9zbG90c1tNQVhf U1BBV05fUkFURV07CisgICAgaW50IGNoaWxkX21heF9zcGF3bl9yYXRlOworICAgIGNoaWxkX21h eF9zcGF3bl9yYXRlID0gTUFYX1NQQVdOX1JBVEUvbnVtX2J1Y2tldHM7CisgICAgaW50IGZyZWVf c2xvdHNbY2hpbGRfbWF4X3NwYXduX3JhdGVdOwogICAgIGludCBsYXN0X25vbl9kZWFkOwogICAg IGludCB0b3RhbF9ub25fZGVhZDsKICAgICBpbnQgYWN0aXZlX3RocmVhZF9jb3VudCA9IDA7CkBA IC0xNDg1LDcgKzE0NTMsNyBAQAogICAgICAgICBpbnQgYWxsX2RlYWRfdGhyZWFkcyA9IDE7CiAg ICAgICAgIGludCBjaGlsZF90aHJlYWRzX2FjdGl2ZSA9IDA7CiAKLSAgICAgICAgaWYgKGkgPj0g cmV0YWluZWQtPm1heF9kYWVtb25zX2xpbWl0ICYmIHRvdGFsbHlfZnJlZV9sZW5ndGggPT0gcmV0 YWluZWQtPmlkbGVfc3Bhd25fcmF0ZSkKKyAgICAgICAgaWYgKGkgPj0gcmV0YWluZWQtPm1heF9k YWVtb25zX2xpbWl0ICYmIHRvdGFsbHlfZnJlZV9sZW5ndGggPT0gcmV0YWluZWQtPmlkbGVfc3Bh d25fcmF0ZVtjaGlsZF9idWNrZXRdKQogICAgICAgICAgICAgLyogc2hvcnQgY3V0IGlmIGFsbCBh Y3RpdmUgcHJvY2Vzc2VzIGhhdmUgYmVlbiBleGFtaW5lZCBhbmQKICAgICAgICAgICAgICAqIGVu b3VnaCBlbXB0eSBzY29yZWJvYXJkIHNsb3RzIGhhdmUgYmVlbiBmb3VuZAogICAgICAgICAgICAg ICovCkBAIC0xNTEzLDcgKzE0ODEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsb29wIGlmIG5vIHBpZD8gIG5vdCBtdWNoIGVsc2UgbWF0dGVycyAqLwogICAgICAgICAg ICAgICAgIGlmIChzdGF0dXMgPD0gU0VSVkVSX1JFQURZICYmCiAgICAgICAgICAgICAgICAgICAg ICAgICAhcHMtPnF1aWVzY2luZyAmJgotICAgICAgICAgICAgICAgICAgICAgICAgcHMtPmdlbmVy YXRpb24gPT0gcmV0YWluZWQtPm15X2dlbmVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHBzLT5nZW5lcmF0aW9uID09IHJldGFpbmVkLT5teV9nZW5lcmF0aW9uICYmCisgICAgICAg ICAgICAgICAgICAgICAgICBidWNrZXRbaV0gPT0gY2hpbGRfYnVja2V0KSB7CiAgICAgICAgICAg ICAgICAgICAgICsraWRsZV90aHJlYWRfY291bnQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgIGlmIChzdGF0dXMgPj0gU0VSVkVSX1JFQURZICYmIHN0YXR1cyA8IFNFUlZFUl9H UkFDRUZVTCkgewpAQCAtMTUyMiw4ICsxNDkxLDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAg fQogICAgICAgICBhY3RpdmVfdGhyZWFkX2NvdW50ICs9IGNoaWxkX3RocmVhZHNfYWN0aXZlOwot ICAgICAgICBpZiAoYW55X2RlYWRfdGhyZWFkcyAmJiB0b3RhbGx5X2ZyZWVfbGVuZ3RoIDwgcmV0 YWluZWQtPmlkbGVfc3Bhd25fcmF0ZQotICAgICAgICAgICAgICAgICYmIGZyZWVfbGVuZ3RoIDwg TUFYX1NQQVdOX1JBVEUKKyAgICAgICAgaWYgKGFueV9kZWFkX3RocmVhZHMgJiYgdG90YWxseV9m cmVlX2xlbmd0aCA8IHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGVbY2hpbGRfYnVja2V0XQorICAg ICAgICAgICAgICAgICYmIGZyZWVfbGVuZ3RoIDwgTUFYX1NQQVdOX1JBVEUvbnVtX2J1Y2tldHMK ICAgICAgICAgICAgICAgICAmJiAoIXBzLT5waWQgICAgICAgICAgICAgICAvKiBubyBwcm9jZXNz IGluIHRoZSBzbG90ICovCiAgICAgICAgICAgICAgICAgICAgIHx8IHBzLT5xdWllc2NpbmcpKSB7 ICAgLyogb3IgYXQgbGVhc3Qgb25lIGlzIGdvaW5nIGF3YXkgKi8KICAgICAgICAgICAgIGlmIChh bGxfZGVhZF90aHJlYWRzKSB7CkBAIC0xNTc5LDEyICsxNTQ4LDEyIEBACiAKICAgICByZXRhaW5l ZC0+bWF4X2RhZW1vbnNfbGltaXQgPSBsYXN0X25vbl9kZWFkICsgMTsKIAotICAgIGlmIChpZGxl X3RocmVhZF9jb3VudCA+IG1heF9zcGFyZV90aHJlYWRzKSB7CisgICAgaWYgKGlkbGVfdGhyZWFk X2NvdW50ID4gbWF4X3NwYXJlX3RocmVhZHMvbnVtX2J1Y2tldHMpIHsKICAgICAgICAgLyogS2ls bCBvZmYgb25lIGNoaWxkICovCi0gICAgICAgIGFwX21wbV9wb2R4X3NpZ25hbChwb2QsIEFQX01Q TV9QT0RYX0dSQUNFRlVMKTsKLSAgICAgICAgcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZSA9IDE7 CisgICAgICAgIGFwX21wbV9wb2R4X3NpZ25hbChwb2RbY2hpbGRfYnVja2V0XSwgQVBfTVBNX1BP RFhfR1JBQ0VGVUwpOworICAgICAgICByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlW2NoaWxkX2J1 Y2tldF0gPSAxOwogICAgIH0KLSAgICBlbHNlIGlmIChpZGxlX3RocmVhZF9jb3VudCA8IG1pbl9z cGFyZV90aHJlYWRzKSB7CisgICAgZWxzZSBpZiAoaWRsZV90aHJlYWRfY291bnQgPCBtaW5fc3Bh cmVfdGhyZWFkcy9udW1fYnVja2V0cykgewogICAgICAgICAvKiB0ZXJtaW5hdGUgdGhlIGZyZWUg bGlzdCAqLwogICAgICAgICBpZiAoZnJlZV9sZW5ndGggPT0gMCkgeyAvKiBzY29yZWJvYXJkIGlz IGZ1bGwsIGNhbid0IGZvcmsgKi8KIApAQCAtMTYxNSwxMyArMTU4NCwxMyBAQAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhcF9zZXJ2ZXJfY29uZiwgQVBMT0dOTygwMDI4OCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgInNjb3JlYm9hcmQgaXMgZnVsbCwgbm90IGF0IE1heFJl cXVlc3RXb3JrZXJzIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXRhaW5lZC0+aWRs ZV9zcGF3bl9yYXRlID0gMTsKKyAgICAgICAgICAgIHJldGFpbmVkLT5pZGxlX3NwYXduX3JhdGVb Y2hpbGRfYnVja2V0XSA9IDE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg ICBpZiAoZnJlZV9sZW5ndGggPiByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlKSB7Ci0gICAgICAg ICAgICAgICAgZnJlZV9sZW5ndGggPSByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlOworICAgICAg ICAgICAgaWYgKGZyZWVfbGVuZ3RoID4gcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZVtjaGlsZF9i dWNrZXRdKSB7CisgICAgICAgICAgICAgICAgZnJlZV9sZW5ndGggPSByZXRhaW5lZC0+aWRsZV9z cGF3bl9yYXRlW2NoaWxkX2J1Y2tldF07CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo cmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZSA+PSA4KSB7CisgICAgICAgICAgICBpZiAocmV0YWlu ZWQtPmlkbGVfc3Bhd25fcmF0ZVtjaGlsZF9idWNrZXRdID49IDgpIHsKICAgICAgICAgICAgICAg ICBhcF9sb2dfZXJyb3IoQVBMT0dfTUFSSywgQVBMT0dfSU5GTywgMCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXBfc2VydmVyX2NvbmYsIEFQTE9HTk8oMDAyODkpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJzZXJ2ZXIgc2VlbXMgYnVzeSwgKHlvdSBtYXkgbmVlZCAiCkBA IC0xNjMyLDYgKzE2MDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGxlX3Ro cmVhZF9jb3VudCwgdG90YWxfbm9uX2RlYWQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg Zm9yIChpID0gMDsgaSA8IGZyZWVfbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBidWNr ZXRbZnJlZV9zbG90c1tpXV0gPSBjaGlsZF9idWNrZXQ7CiAgICAgICAgICAgICAgICAgbWFrZV9j aGlsZChhcF9zZXJ2ZXJfY29uZiwgZnJlZV9zbG90c1tpXSk7CiAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAvKiB0aGUgbmV4dCB0aW1lIGFyb3VuZCB3ZSB3YW50IHRvIHNwYXduIHR3aWNlIGFz IG1hbnkgaWYgdGhpcwpAQCAtMTY0MCwxMyArMTYxMCwxMyBAQAogICAgICAgICAgICAgaWYgKHJl dGFpbmVkLT5ob2xkX29mZl9vbl9leHBvbmVudGlhbF9zcGF3bmluZykgewogICAgICAgICAgICAg ICAgIC0tcmV0YWluZWQtPmhvbGRfb2ZmX29uX2V4cG9uZW50aWFsX3NwYXduaW5nOwogICAgICAg ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAocmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZSA8 IE1BWF9TUEFXTl9SQVRFKSB7Ci0gICAgICAgICAgICAgICAgcmV0YWluZWQtPmlkbGVfc3Bhd25f cmF0ZSAqPSAyOworICAgICAgICAgICAgZWxzZSBpZiAocmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0 ZVtjaGlsZF9idWNrZXRdIDwgTUFYX1NQQVdOX1JBVEUvbnVtX2J1Y2tldHMpIHsKKyAgICAgICAg ICAgICAgICByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlW2NoaWxkX2J1Y2tldF0gKj0gMjsKICAg ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgIHJldGFpbmVk LT5pZGxlX3NwYXduX3JhdGUgPSAxOworICAgICAgcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZVtj aGlsZF9idWNrZXRdID0gMTsKICAgICB9CiB9CiAKQEAgLTE3MDIsNyArMTY3Miw3IEBACiAgICAg ICAgICAgICAgICAgYXBfc2NvcmVib2FyZF9pbWFnZS0+cGFyZW50W2NoaWxkX3Nsb3RdLnF1aWVz Y2luZyA9IDA7CiAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NlZF9zdGF0dXMgPT0gQVBFWElU X0NISUxEU0lDSykgewogICAgICAgICAgICAgICAgICAgICAvKiByZXNvdXJjZSBzaG9ydGFnZSwg bWluaW1pemUgdGhlIGZvcmsgcmF0ZSAqLwotICAgICAgICAgICAgICAgICAgICByZXRhaW5lZC0+ aWRsZV9zcGF3bl9yYXRlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgcmV0YWluZWQtPmlkbGVf c3Bhd25fcmF0ZVtidWNrZXRbY2hpbGRfc2xvdF1dID0gMTsKICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgZWxzZSBpZiAocmVtYWluaW5nX2NoaWxkcmVuX3RvX3N0YXJ0CiAgICAg ICAgICAgICAgICAgICAgICYmIGNoaWxkX3Nsb3QgPCBhcF9kYWVtb25zX2xpbWl0KSB7CkBAIC0x NzE5LDcgKzE2ODksOSBAQAogICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzZWRfc3RhdHVzID09 IEFQRVhJVF9DSElMRFNJQ0sKICAgICAgICAgICAgICAgICAgICAgJiYgb2xkX2dlbiA9PSByZXRh aW5lZC0+bXlfZ2VuZXJhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAvKiByZXNvdXJjZSBz aG9ydGFnZSwgbWluaW1pemUgdGhlIGZvcmsgcmF0ZSAqLwotICAgICAgICAgICAgICAgICAgICBy ZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl dGFpbmVkLT5pZGxlX3NwYXduX3JhdGVbaV0gPSAxOworICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgfQogI2lmIEFQUl9IQVNfT1RIRVJfQ0hJTEQKICAgICAgICAgICAgIH0K QEAgLTE3NTgsNyArMTczMCw5IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog Ci0gICAgICAgIHBlcmZvcm1faWRsZV9zZXJ2ZXJfbWFpbnRlbmFuY2UoKTsKKyAgICAgICAgZm9y IChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgICAgIHBlcmZvcm1faWRs ZV9zZXJ2ZXJfbWFpbnRlbmFuY2UoaSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTE3NjYs MTUgKzE3NDAsMjEgQEAKIHsKICAgICBpbnQgcmVtYWluaW5nX2NoaWxkcmVuX3RvX3N0YXJ0Owog ICAgIGFwcl9zdGF0dXNfdCBydjsKKyAgICBpbnQgaTsKKyAgICBhcF9saXN0ZW5fcmVjICpscjsK IAogICAgIGFwX2xvZ19waWQocGNvbmYsIGFwX3BpZF9mbmFtZSk7CiAKKyAgICBidWNrZXQgPSBh cHJfcGFsbG9jKF9wY29uZiwgc2l6ZW9mKGludCkgKiAgYXBfZGFlbW9uc19saW1pdCk7CiAgICAg LyogSW5pdGlhbGl6ZSBjcm9zcy1wcm9jZXNzIGFjY2VwdCBsb2NrICovCi0gICAgcnYgPSBhcF9w cm9jX211dGV4X2NyZWF0ZSgmYWNjZXB0X211dGV4LCBOVUxMLCBBUF9BQ0NFUFRfTVVURVhfVFlQ RSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMsIF9wY29uZiwgMCk7Ci0g ICAgaWYgKHJ2ICE9IEFQUl9TVUNDRVNTKSB7Ci0gICAgICAgIG1wbV9zdGF0ZSA9IEFQX01QTVFf U1RPUFBJTkc7Ci0gICAgICAgIHJldHVybiBET05FOworICAgIGFjY2VwdF9tdXRleCA9IGFwcl9w YWxsb2MoX3Bjb25mLCBzaXplb2YoYXByX3Byb2NfbXV0ZXhfdCAqKSAqIG51bV9idWNrZXRzKTsK KyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICBydiA9IGFw X3Byb2NfbXV0ZXhfY3JlYXRlKCZhY2NlcHRfbXV0ZXhbaV0sIE5VTEwsIEFQX0FDQ0VQVF9NVVRF WF9UWVBFLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMsIF9wY29u ZiwgMCk7CisgICAgICAgIGlmIChydiAhPSBBUFJfU1VDQ0VTUykgeworICAgICAgICAgICAgbXBt X3N0YXRlID0gQVBfTVBNUV9TVE9QUElORzsKKyAgICAgICAgICAgIHJldHVybiBET05FOworICAg ICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFyZXRhaW5lZC0+aXNfZ3JhY2VmdWwpIHsKQEAgLTE3 OTEsOCArMTc3MSw4IEBACiAgICAgcmVzdGFydF9wZW5kaW5nID0gc2h1dGRvd25fcGVuZGluZyA9 IDA7CiAgICAgc2V0X3NpZ25hbHMoKTsKICAgICAvKiBEb24ndCB0aHJhc2guLi4gKi8KLSAgICBp ZiAobWF4X3NwYXJlX3RocmVhZHMgPCBtaW5fc3BhcmVfdGhyZWFkcyArIHRocmVhZHNfcGVyX2No aWxkKQotICAgICAgICBtYXhfc3BhcmVfdGhyZWFkcyA9IG1pbl9zcGFyZV90aHJlYWRzICsgdGhy ZWFkc19wZXJfY2hpbGQ7CisgICAgaWYgKG1heF9zcGFyZV90aHJlYWRzIDwgbWluX3NwYXJlX3Ro cmVhZHMgKyB0aHJlYWRzX3Blcl9jaGlsZCAqIG51bV9idWNrZXRzKQorICAgICAgICBtYXhfc3Bh cmVfdGhyZWFkcyA9IG1pbl9zcGFyZV90aHJlYWRzICsgdGhyZWFkc19wZXJfY2hpbGQgKiBudW1f YnVja2V0czsKIAogICAgIC8qIElmIHdlJ3JlIGRvaW5nIGEgZ3JhY2VmdWxfcmVzdGFydCB0aGVu IHdlJ3JlIGdvaW5nIHRvIHNlZSBhIGxvdAogICAgICAqIG9mIGNoaWxkcmVuIGV4aXRpbmcgaW1t ZWRpYXRlbHkgd2hlbiB3ZSBnZXQgaW50byB0aGUgbWFpbiBsb29wCkBAIC0xODI1LDcgKzE4MDUs NyBAQAogICAgIGFwX2xvZ19jb21tYW5kX2xpbmUocGxvZywgcyk7CiAgICAgYXBfbG9nX2Vycm9y KEFQTE9HX01BUkssIEFQTE9HX0RFQlVHLCAwLCBhcF9zZXJ2ZXJfY29uZiwgQVBMT0dOTygwMDI5 NCkKICAgICAgICAgICAgICAgICAiQWNjZXB0IG11dGV4OiAlcyAoZGVmYXVsdDogJXMpIiwKLSAg ICAgICAgICAgICAgICBhcHJfcHJvY19tdXRleF9uYW1lKGFjY2VwdF9tdXRleCksCisgICAgICAg ICAgICAgICAgYXByX3Byb2NfbXV0ZXhfbmFtZShhY2NlcHRfbXV0ZXhbMF0pLAogICAgICAgICAg ICAgICAgIGFwcl9wcm9jX211dGV4X2RlZm5hbWUoKSk7CiAgICAgbXBtX3N0YXRlID0gQVBfTVBN UV9SVU5OSU5HOwogCkBAIC0xODM2LDcgKzE4MTYsOSBAQAogICAgICAgICAvKiBUaW1lIHRvIHNo dXQgZG93bjoKICAgICAgICAgICogS2lsbCBjaGlsZCBwcm9jZXNzZXMsIHRlbGwgdGhlbSB0byBj YWxsIGNoaWxkX2V4aXQsIGV0Yy4uLgogICAgICAgICAgKi8KLSAgICAgICAgYXBfbXBtX3BvZHhf a2lsbHBnKHBvZCwgYXBfZGFlbW9uc19saW1pdCwgQVBfTVBNX1BPRFhfUkVTVEFSVCk7CisgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgICAgICBhcF9t cG1fcG9keF9raWxscGcocG9kW2ldLCBhcF9kYWVtb25zX2xpbWl0LCBBUF9NUE1fUE9EWF9SRVNU QVJUKTsKKyAgICAgICAgfQogICAgICAgICBhcF9yZWNsYWltX2NoaWxkX3Byb2Nlc3NlcygxLCAv KiBTdGFydCB3aXRoIFNJR1RFUk0gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd29ya2VyX25vdGVfY2hpbGRfa2lsbGVkKTsKIApAQCAtMTg1Nyw3ICsxODM5LDkgQEAKIAog ICAgICAgICAvKiBDbG9zZSBvdXIgbGlzdGVuZXJzLCBhbmQgdGhlbiBhc2sgb3VyIGNoaWxkcmVu IHRvIGRvIHNhbWUgKi8KICAgICAgICAgYXBfY2xvc2VfbGlzdGVuZXJzKCk7Ci0gICAgICAgIGFw X21wbV9wb2R4X2tpbGxwZyhwb2QsIGFwX2RhZW1vbnNfbGltaXQsIEFQX01QTV9QT0RYX0dSQUNF RlVMKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyspIHsKKyAgICAg ICAgICAgIGFwX21wbV9wb2R4X2tpbGxwZyhwb2RbaV0sIGFwX2RhZW1vbnNfbGltaXQsIEFQX01Q TV9QT0RYX0dSQUNFRlVMKTsKKyAgICAgICAgfQogICAgICAgICBhcF9yZWxpZXZlX2NoaWxkX3By b2Nlc3Nlcyh3b3JrZXJfbm90ZV9jaGlsZF9raWxsZWQpOwogCiAgICAgICAgIGlmICghY2hpbGRf ZmF0YWwpIHsKQEAgLTE4OTcsNyArMTg4MSw5IEBACiAgICAgICAgICAqIHdheSwgdHJ5IGFuZCBt YWtlIHN1cmUgdGhhdCBhbGwgb2Ygb3VyIHByb2Nlc3NlcyBhcmUKICAgICAgICAgICogcmVhbGx5 IGRlYWQuCiAgICAgICAgICAqLwotICAgICAgICBhcF9tcG1fcG9keF9raWxscGcocG9kLCBhcF9k YWVtb25zX2xpbWl0LCBBUF9NUE1fUE9EWF9SRVNUQVJUKTsKKyAgICAgICAgZm9yIChpID0gMDsg aSA8IG51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgICAgIGFwX21wbV9wb2R4X2tpbGxwZyhw b2RbaV0sIGFwX2RhZW1vbnNfbGltaXQsIEFQX01QTV9QT0RYX1JFU1RBUlQpOworICAgICAgICB9 CiAgICAgICAgIGFwX3JlY2xhaW1fY2hpbGRfcHJvY2Vzc2VzKDEsIHdvcmtlcl9ub3RlX2NoaWxk X2tpbGxlZCk7CiAKICAgICAgICAgcmV0dXJuIERPTkU7CkBAIC0xOTIyLDggKzE5MDgsOSBAQAog ICAgICAgICBhcF9sb2dfZXJyb3IoQVBMT0dfTUFSSywgQVBMT0dfTk9USUNFLCAwLCBhcF9zZXJ2 ZXJfY29uZiwgQVBMT0dOTygwMDI5NykKICAgICAgICAgICAgICAgICAgICAgIEFQX1NJR19HUkFD RUZVTF9TVFJJTkcgIiByZWNlaXZlZC4gIERvaW5nIGdyYWNlZnVsIHJlc3RhcnQiKTsKICAgICAg ICAgLyogd2FrZSB1cCB0aGUgY2hpbGRyZW4uLi50aW1lIHRvIGRpZS4gIEJ1dCB3ZSdsbCBoYXZl IG1vcmUgc29vbiAqLwotICAgICAgICBhcF9tcG1fcG9keF9raWxscGcocG9kLCBhcF9kYWVtb25z X2xpbWl0LCBBUF9NUE1fUE9EWF9HUkFDRUZVTCk7Ci0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IG51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgICAgIGFwX21wbV9wb2R4X2tpbGxwZyhwb2Rb aV0sIGFwX2RhZW1vbnNfbGltaXQsIEFQX01QTV9QT0RYX0dSQUNFRlVMKTsKKyAgICAgICAgfQog CiAgICAgICAgIC8qIFRoaXMgaXMgbW9zdGx5IGZvciBkZWJ1Z2dpbmcuLi4gc28gdGhhdCB3ZSBr bm93IHdoYXQgaXMgc3RpbGwKICAgICAgICAgICogZ3JhY2VmdWxseSBkZWFsaW5nIHdpdGggZXhp c3RpbmcgcmVxdWVzdC4KQEAgLTE5MzUsNyArMTkyMiw5IEBACiAgICAgICAgICAqIGFuZCBhIFNJ R0hVUCwgd2UgbWF5IGFzIHdlbGwgdXNlIHRoZSBzYW1lIHNpZ25hbCwgYmVjYXVzZSBzb21lIHVz ZXIKICAgICAgICAgICogcHRocmVhZHMgYXJlIHN0ZWFsaW5nIHNpZ25hbHMgZnJvbSB1cyBsZWZ0 IGFuZCByaWdodC4KICAgICAgICAgICovCi0gICAgICAgIGFwX21wbV9wb2R4X2tpbGxwZyhwb2Qs IGFwX2RhZW1vbnNfbGltaXQsIEFQX01QTV9QT0RYX1JFU1RBUlQpOworICAgICAgICBmb3IgKGkg PSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICAgICAgYXBfbXBtX3BvZHhfa2ls bHBnKHBvZFtpXSwgYXBfZGFlbW9uc19saW1pdCwgQVBfTVBNX1BPRFhfUkVTVEFSVCk7CisgICAg ICAgIH0KIAogICAgICAgICBhcF9yZWNsYWltX2NoaWxkX3Byb2Nlc3NlcygxLCAvKiBTdGFydCB3 aXRoIFNJR1RFUk0gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vy X25vdGVfY2hpbGRfa2lsbGVkKTsKQEAgLTE5NTQsNiArMTk0Myw4IEBACiAgICAgaW50IHN0YXJ0 dXAgPSAwOwogICAgIGludCBsZXZlbF9mbGFncyA9IDA7CiAgICAgYXByX3N0YXR1c190IHJ2Owor ICAgIGludCBpOworICAgIGFwX2xpc3Rlbl9yZWMgKmxyOwogCiAgICAgcGNvbmYgPSBwOwogCkBA IC0xOTY5LDEzICsxOTYwLDI2IEBACiAgICAgICAgICAgICAgICAgICAgICAibm8gbGlzdGVuaW5n IHNvY2tldHMgYXZhaWxhYmxlLCBzaHV0dGluZyBkb3duIik7CiAgICAgICAgIHJldHVybiBET05F OwogICAgIH0KKyAgICBudW1fYnVja2V0cyA9IG51bV9saXN0ZW5zb2NrczsKKyAgICBpZiAobnVt X2J1Y2tldHMgPiBNQVhfU1BBV05fUkFURSkgeworICAgICAgICBudW1fYnVja2V0cyA9IE1BWF9T UEFXTl9SQVRFOworICAgIH0KKworICAgIG1wbV9saXN0ZW4gPSBhcHJfcGFsbG9jKHAsIHNpemVv ZihhcF9saXN0ZW5fcmVjKikgKiBudW1fYnVja2V0cyk7CisgICAgZm9yIChsciA9IGFwX2xpc3Rl bmVycywgaSA9IDA7IGkgPCBudW1fYnVja2V0czsgbHIgPSBsci0+bmV4dCwgaSsrKSB7CisgICAg ICAgIG1wbV9saXN0ZW5baV0gPSBscjsKKyAgICB9CisKKyAgICBwb2QgPSBhcHJfcGFsbG9jKHBj b25mLCBzaXplb2YoYXBfcG9kX3QgKikgKiBudW1fYnVja2V0cyk7CiAKICAgICBpZiAoIW9uZV9w cm9jZXNzKSB7Ci0gICAgICAgIGlmICgocnYgPSBhcF9tcG1fcG9keF9vcGVuKHBjb25mLCAmcG9k KSkpIHsKLSAgICAgICAgICAgIGFwX2xvZ19lcnJvcihBUExPR19NQVJLLCBBUExPR19DUklUIHwg bGV2ZWxfZmxhZ3MsIHJ2LAotICAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydHVwID8gTlVM TCA6IHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3Qgb3BlbiBwaXBlLW9m LWRlYXRoIik7Ci0gICAgICAgICAgICByZXR1cm4gRE9ORTsKKyAgICAgICAgZm9yIChpID0gMDsg aSA8IG51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgICAgIGlmICgocnYgPSBhcF9tcG1fcG9k eF9vcGVuKHBjb25mLCAmcG9kW2ldKSkpIHsKKyAgICAgICAgICAgICAgICBhcF9sb2dfZXJyb3Io QVBMT0dfTUFSSywgQVBMT0dfQ1JJVCB8IGxldmVsX2ZsYWdzLCBydiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHN0YXJ0dXAgPyBOVUxMIDogcyksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJjb3VsZCBub3Qgb3BlbiBwaXBlLW9mLWRlYXRoIik7CisgICAgICAgICAgICAg ICAgcmV0dXJuIERPTkU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0 dXJuIE9LOwpAQCAtMTk4Nyw2ICsxOTkxLDcgQEAKICAgICBpbnQgbm9fZGV0YWNoLCBkZWJ1Zywg Zm9yZWdyb3VuZDsKICAgICBhcHJfc3RhdHVzX3QgcnY7CiAgICAgY29uc3QgY2hhciAqdXNlcmRh dGFfa2V5ID0gIm1wbV93b3JrZXJfbW9kdWxlIjsKKyAgICBpbnQgaTsKIAogICAgIG1wbV9zdGF0 ZSA9IEFQX01QTVFfU1RBUlRJTkc7CiAKQEAgLTIwMDksNyArMjAxNCw2IEBACiAgICAgaWYgKCFy ZXRhaW5lZCkgewogICAgICAgICByZXRhaW5lZCA9IGFwX3JldGFpbmVkX2RhdGFfY3JlYXRlKHVz ZXJkYXRhX2tleSwgc2l6ZW9mKCpyZXRhaW5lZCkpOwogICAgICAgICByZXRhaW5lZC0+bWF4X2Rh ZW1vbnNfbGltaXQgPSAtMTsKLSAgICAgICAgcmV0YWluZWQtPmlkbGVfc3Bhd25fcmF0ZSA9IDE7 CiAgICAgfQogICAgICsrcmV0YWluZWQtPm1vZHVsZV9sb2FkczsKICAgICBpZiAocmV0YWluZWQt Pm1vZHVsZV9sb2FkcyA9PSAyKSB7CkBAIC0yMDIzLDYgKzIwMjcsMTAgQEAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImFwcl9wcm9jX2RldGFjaCBmYWlsZWQiKTsKICAgICAgICAgICAg ICAgICByZXR1cm4gSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiAgICAgICAgICAgICB9Cisg ICAgICAgICAgICByZXRhaW5lZC0+aWRsZV9zcGF3bl9yYXRlID0gYXByX3BhbGxvYyhwY29uZiwg c2l6ZW9mKGludCkgKiBudW1fYnVja2V0cyk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpPCBu dW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgICAgICAgICAgcmV0YWluZWQtPmlkbGVfc3Bhd25f cmF0ZVtpXSA9IDE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtcnUg aHR0cGQtdHJ1bmsvc2VydmVyL21wbV91bml4LmMgaHR0cGQtdHJ1bmsubmV3L3NlcnZlci9tcG1f dW5peC5jCi0tLSBodHRwZC10cnVuay9zZXJ2ZXIvbXBtX3VuaXguYwkyMDE0LTA1LTMxIDIzOjEw OjE0Ljk1OTM2Nzg5MyAtMDQwMAorKysgaHR0cGQtdHJ1bmsubmV3L3NlcnZlci9tcG1fdW5peC5j CTIwMTQtMDYtMDIgMDA6MjI6MjEuMTgzODI0NzAxIC0wNDAwCkBAIC02MTUsNiArNjE1LDcgQEAK ICAgICBhcHJfcG9vbF90ICpwOwogICAgIGFwcl9zaXplX3QgbGVuOwogICAgIGFwX2xpc3Rlbl9y ZWMgKmxwOworICAgIGludCBpOwogCiAgICAgLyogY3JlYXRlIGEgdGVtcG9yYXJ5IHBvb2wgZm9y IHRoZSBzb2NrZXQuICBwY29uZiBzdGF5cyBhcm91bmQgdG9vIGxvbmcgKi8KICAgICBydiA9IGFw cl9wb29sX2NyZWF0ZSgmcCwgcG9kLT5wKTsKQEAgLTYyNiw4NyArNjI3LDg5IEBACiAgICAgICog cGxhaW4tSFRUUCwgbm90IFNTTDsgdXNpbmcgYW4gU1NMIHBvcnQgd291bGQgZWl0aGVyIGJlCiAg ICAgICogZXhwZW5zaXZlIHRvIGRvIGNvcnJlY3RseSAocGVyZm9ybWluZyBhIGNvbXBsZXRlIFNT TCBoYW5kc2hha2UpCiAgICAgICogb3IgY2F1c2UgbG9nIHNwYW0gYnkgZG9pbmcgaW5jb3JyZWN0 bHkgKHNpbXBseSBzZW5kaW5nIEVPRikuICovCi0gICAgbHAgPSBhcF9saXN0ZW5lcnM7Ci0gICAg d2hpbGUgKGxwICYmIGxwLT5wcm90b2NvbCAmJiBzdHJjYXNlY21wKGxwLT5wcm90b2NvbCwgImh0 dHAiKSAhPSAwKSB7Ci0gICAgICAgIGxwID0gbHAtPm5leHQ7Ci0gICAgfQotICAgIGlmICghbHAp IHsKLSAgICAgICAgbHAgPSBhcF9saXN0ZW5lcnM7Ci0gICAgfQotCi0gICAgcnYgPSBhcHJfc29j a2V0X2NyZWF0ZSgmc29jaywgbHAtPmJpbmRfYWRkci0+ZmFtaWx5LCBTT0NLX1NUUkVBTSwgMCwg cCk7Ci0gICAgaWYgKHJ2ICE9IEFQUl9TVUNDRVNTKSB7Ci0gICAgICAgIGFwX2xvZ19lcnJvcihB UExPR19NQVJLLCBBUExPR19XQVJOSU5HLCBydiwgYXBfc2VydmVyX2NvbmYsIEFQTE9HTk8oMDAw NTQpCi0gICAgICAgICAgICAgICAgICAgICAiZ2V0IHNvY2tldCB0byBjb25uZWN0IHRvIGxpc3Rl bmVyIik7Ci0gICAgICAgIGFwcl9wb29sX2Rlc3Ryb3kocCk7Ci0gICAgICAgIHJldHVybiBydjsK LSAgICB9Ci0KLSAgICAvKiBvbiBzb21lIHBsYXRmb3JtcyAoZS5nLiwgRnJlZUJTRCksIHRoZSBr ZXJuZWwgd29uJ3QgYWNjZXB0IG1hbnkKLSAgICAgKiBxdWV1ZWQgY29ubmVjdGlvbnMgYmVmb3Jl IGl0IHN0YXJ0cyBibG9ja2luZyBsb2NhbCBjb25uZWN0cy4uLgotICAgICAqIHdlIG5lZWQgdG8g a2VlcCBmcm9tIGJsb2NraW5nIHRvbyBsb25nIGFuZCBpbnN0ZWFkIHJldHVybiBhbiBlcnJvciwK LSAgICAgKiBiZWNhdXNlIHRoZSBNUE0gd29uJ3Qgd2FudCB0byBob2xkIHVwIGEgZ3JhY2VmdWwg cmVzdGFydCBmb3IgYQotICAgICAqIGxvbmcgdGltZQotICAgICAqLwotICAgIHJ2ID0gYXByX3Nv Y2tldF90aW1lb3V0X3NldChzb2NrLCBhcHJfdGltZV9mcm9tX3NlYygzKSk7Ci0gICAgaWYgKHJ2 ICE9IEFQUl9TVUNDRVNTKSB7Ci0gICAgICAgIGFwX2xvZ19lcnJvcihBUExPR19NQVJLLCBBUExP R19XQVJOSU5HLCBydiwgYXBfc2VydmVyX2NvbmYsIEFQTE9HTk8oMDAwNTUpCi0gICAgICAgICAg ICAgICAgICAgICAic2V0IHRpbWVvdXQgb24gc29ja2V0IHRvIGNvbm5lY3QgdG8gbGlzdGVuZXIi KTsKLSAgICAgICAgYXByX3NvY2tldF9jbG9zZShzb2NrKTsKLSAgICAgICAgYXByX3Bvb2xfZGVz dHJveShwKTsKLSAgICAgICAgcmV0dXJuIHJ2OwotICAgIH0KLQotICAgIHJ2ID0gYXByX3NvY2tl dF9jb25uZWN0KHNvY2ssIGxwLT5iaW5kX2FkZHIpOwotICAgIGlmIChydiAhPSBBUFJfU1VDQ0VT UykgewotICAgICAgICBpbnQgbG9nX2xldmVsID0gQVBMT0dfV0FSTklORzsKKyAgICBmb3IgKGkg PSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICBscCA9IG1wbV9saXN0ZW5baV07 CisgICAgICAgIHdoaWxlIChscCAmJiBscC0+cHJvdG9jb2wgJiYgc3RyY2FzZWNtcChscC0+cHJv dG9jb2wsICJodHRwIikgIT0gMCkgeworICAgICAgICAgICAgbHAgPSBscC0+bmV4dDsKKyAgICAg ICAgfQorICAgICAgICBpZiAoIWxwKSB7CisgICAgICAgICAgICBscCA9IG1wbV9saXN0ZW5baV07 CisgICAgICAgIH0KKworICAgICAgICBydiA9IGFwcl9zb2NrZXRfY3JlYXRlKCZzb2NrLCBscC0+ YmluZF9hZGRyLT5mYW1pbHksIFNPQ0tfU1RSRUFNLCAwLCBwKTsKKyAgICAgICAgaWYgKHJ2ICE9 IEFQUl9TVUNDRVNTKSB7CisgICAgICAgICAgICBhcF9sb2dfZXJyb3IoQVBMT0dfTUFSSywgQVBM T0dfV0FSTklORywgcnYsIGFwX3NlcnZlcl9jb25mLCBBUExPR05PKDAwMDU0KQorICAgICAgICAg ICAgICAgICAgICAgICAgICJnZXQgc29ja2V0IHRvIGNvbm5lY3QgdG8gbGlzdGVuZXIiKTsKKyAg ICAgICAgICAgIGFwcl9wb29sX2Rlc3Ryb3kocCk7CisgICAgICAgICAgICByZXR1cm4gcnY7Cisg ICAgICAgIH0KKworICAgICAgICAvKiBvbiBzb21lIHBsYXRmb3JtcyAoZS5nLiwgRnJlZUJTRCks IHRoZSBrZXJuZWwgd29uJ3QgYWNjZXB0IG1hbnkKKyAgICAgICAgICogcXVldWVkIGNvbm5lY3Rp b25zIGJlZm9yZSBpdCBzdGFydHMgYmxvY2tpbmcgbG9jYWwgY29ubmVjdHMuLi4KKyAgICAgICAg ICogd2UgbmVlZCB0byBrZWVwIGZyb20gYmxvY2tpbmcgdG9vIGxvbmcgYW5kIGluc3RlYWQgcmV0 dXJuIGFuIGVycm9yLAorICAgICAgICAgKiBiZWNhdXNlIHRoZSBNUE0gd29uJ3Qgd2FudCB0byBo b2xkIHVwIGEgZ3JhY2VmdWwgcmVzdGFydCBmb3IgYQorICAgICAgICAgKiBsb25nIHRpbWUKKyAg ICAgICAgICovCisgICAgICAgIHJ2ID0gYXByX3NvY2tldF90aW1lb3V0X3NldChzb2NrLCBhcHJf dGltZV9mcm9tX3NlYygzKSk7CisgICAgICAgIGlmIChydiAhPSBBUFJfU1VDQ0VTUykgeworICAg ICAgICAgICAgYXBfbG9nX2Vycm9yKEFQTE9HX01BUkssIEFQTE9HX1dBUk5JTkcsIHJ2LCBhcF9z ZXJ2ZXJfY29uZiwgQVBMT0dOTygwMDA1NSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2V0 IHRpbWVvdXQgb24gc29ja2V0IHRvIGNvbm5lY3QgdG8gbGlzdGVuZXIiKTsKKyAgICAgICAgICAg IGFwcl9zb2NrZXRfY2xvc2Uoc29jayk7CisgICAgICAgICAgICBhcHJfcG9vbF9kZXN0cm95KHAp OworICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgcnYgPSBhcHJf c29ja2V0X2Nvbm5lY3Qoc29jaywgbHAtPmJpbmRfYWRkcik7CisgICAgICAgIGlmIChydiAhPSBB UFJfU1VDQ0VTUykgeworICAgICAgICAgICAgaW50IGxvZ19sZXZlbCA9IEFQTE9HX1dBUk5JTkc7 CisKKyAgICAgICAgICAgIGlmIChBUFJfU1RBVFVTX0lTX1RJTUVVUChydikpIHsKKyAgICAgICAg ICAgICAgICAvKiBwcm9iYWJseSBzb21lIHNlcnZlciBwcm9jZXNzZXMgYmFpbGVkIG91dCBhbHJl YWR5IGFuZCB0aGVyZQorICAgICAgICAgICAgICAgICAqIGlzIG5vYm9keSBhcm91bmQgdG8gY2Fs bCBhY2NlcHQgYW5kIGNsZWFyIG91dCB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICogY29u bmVjdGlvbiBxdWV1ZTsgdXN1YWxseSB0aGlzIGlzIG5vdCB3b3J0aCBsb2dnaW5nCisgICAgICAg ICAgICAgICAgICovCisgICAgICAgICAgICAgICAgbG9nX2xldmVsID0gQVBMT0dfREVCVUc7Cisg ICAgICAgICAgICB9CiAKLSAgICAgICAgaWYgKEFQUl9TVEFUVVNfSVNfVElNRVVQKHJ2KSkgewot ICAgICAgICAgICAgLyogcHJvYmFibHkgc29tZSBzZXJ2ZXIgcHJvY2Vzc2VzIGJhaWxlZCBvdXQg YWxyZWFkeSBhbmQgdGhlcmUKLSAgICAgICAgICAgICAqIGlzIG5vYm9keSBhcm91bmQgdG8gY2Fs bCBhY2NlcHQgYW5kIGNsZWFyIG91dCB0aGUga2VybmVsCi0gICAgICAgICAgICAgKiBjb25uZWN0 aW9uIHF1ZXVlOyB1c3VhbGx5IHRoaXMgaXMgbm90IHdvcnRoIGxvZ2dpbmcKLSAgICAgICAgICAg ICAqLwotICAgICAgICAgICAgbG9nX2xldmVsID0gQVBMT0dfREVCVUc7CisgICAgICAgICAgICBh cF9sb2dfZXJyb3IoQVBMT0dfTUFSSywgbG9nX2xldmVsLCBydiwgYXBfc2VydmVyX2NvbmYsIEFQ TE9HTk8oMDAwNTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3QgdG8gbGlzdGVu ZXIgb24gJXBJIiwgbHAtPmJpbmRfYWRkcik7CisgICAgICAgICAgICBhcHJfcG9vbF9kZXN0cm95 KHApOworICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxw LT5wcm90b2NvbCAmJiBzdHJjYXNlY21wKGxwLT5wcm90b2NvbCwgImh0dHBzIikgPT0gMCkgewor ICAgICAgICAgICAgLyogU2VuZCBhIFRMUyAxLjAgY2xvc2Vfbm90aWZ5IGFsZXJ0LiAgVGhpcyBp cyBwZXJoYXBzIHRoZQorICAgICAgICAgICAgICogImxlYXN0IHdyb25nIiB3YXkgdG8gb3BlbiBh bmQgY2xlYW5seSB0ZXJtaW5hdGUgYW4gU1NMCisgICAgICAgICAgICAgKiBjb25uZWN0aW9uLiAg SXQgc2hvdWxkICJ3b3JrIiB3aXRob3V0IG5vaXN5IGVycm9yIGxvZ3MgaWYKKyAgICAgICAgICAg ICAqIHRoZSBzZXJ2ZXIgYWN0dWFsbHkgZXhwZWN0cyBTU0x2My9UTFN2MS4gIFdpdGgKKyAgICAg ICAgICAgICAqIFNTTHYyM19zZXJ2ZXJfbWV0aG9kKCkgT3BlblNTTCdzIFNTTF9hY2NlcHQoKSBm YWlscworICAgICAgICAgICAgICogdW5ncmFjZWZ1bGx5IG9uIHJlY2VpcHQgb2YgdGhpcyBtZXNz YWdlLCBzaW5jZSBpdCByZXF1aXJlcworICAgICAgICAgICAgICogYW4gMTEtYnl0ZSBDbGllbnRI ZWxsbyBtZXNzYWdlIGFuZCB0aGlzIGlzIHRvbyBzaG9ydC4gKi8KKyAgICAgICAgICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHRsczEwX2Nsb3NlX25vdGlmeVs3XSA9IHsKKyAgICAgICAg ICAgICAgICAnXHgxNScsICAgICAgICAgLyogVExTUGxhaW5UZXh0LnR5cGUgPSBBbGVydCAoMjEp ICovCisgICAgICAgICAgICAgICAgJ1x4MDMnLCAnXHgwMScsIC8qIFRMU1BsYWluVGV4dC52ZXJz aW9uID0gezMsIDF9ICovCisgICAgICAgICAgICAgICAgJ1x4MDAnLCAnXHgwMicsIC8qIFRMU1Bs YWluVGV4dC5sZW5ndGggPSAyICovCisgICAgICAgICAgICAgICAgJ1x4MDEnLCAgICAgICAgIC8q IEFsZXJ0LmxldmVsID0gd2FybmluZyAoMSkgKi8KKyAgICAgICAgICAgICAgICAnXHgwMCcgICAg ICAgICAgLyogQWxlcnQuZGVzY3JpcHRpb24gPSBjbG9zZV9ub3RpZnkgKDApICovCisgICAgICAg ICAgICB9OworICAgICAgICAgICAgZGF0YSA9IChjb25zdCBjaGFyICopdGxzMTBfY2xvc2Vfbm90 aWZ5OworICAgICAgICAgICAgbGVuID0gc2l6ZW9mKHRsczEwX2Nsb3NlX25vdGlmeSk7CisgICAg ICAgIH0KKyAgICAgICAgZWxzZSAvKiAuLi4gWFhYIG90aGVyIHJlcXVlc3QgdHlwZXMgaGVyZT8g Ki8geworICAgICAgICAgICAgLyogQ3JlYXRlIGFuIEhUVFAgcmVxdWVzdCBzdHJpbmcuICBXZSBp bmNsdWRlIGEgVXNlci1BZ2VudCBzbworICAgICAgICAgICAgICogdGhhdCBhZG1pbnN0cmF0b3Jz IGNhbiB0cmFjayBkb3duIHRoZSBjYXVzZSBvZiB0aGUKKyAgICAgICAgICAgICAqIG9kZC1sb29r aW5nIHJlcXVlc3RzIGluIHRoZWlyIGxvZ3MuICBBIGNvbXBsZXRlIHJlcXVlc3QgaXMKKyAgICAg ICAgICAgICAqIHVzZWQgc2luY2Uga2VybmVsLWxldmVsIGZpbHRlcmluZyBtYXkgcmVxdWlyZSB0 aGF0IG11Y2gKKyAgICAgICAgICAgICAqIGRhdGEgYmVmb3JlIHJldHVybmluZyBmcm9tIGFjY2Vw dCgpLiAqLworICAgICAgICAgICAgZGF0YSA9IGFwcl9wc3RyY2F0KHAsICJPUFRJT05TICogSFRU UC8xLjBcclxuVXNlci1BZ2VudDogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh cF9nZXRfc2VydmVyX2Rlc2NyaXB0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIiAoaW50ZXJuYWwgZHVtbXkgY29ubmVjdGlvbilcclxuXHJcbiIsIE5VTEwpOworICAgICAg ICAgICAgbGVuID0gc3RybGVuKGRhdGEpOwogICAgICAgICB9CiAKLSAgICAgICAgYXBfbG9nX2Vy cm9yKEFQTE9HX01BUkssIGxvZ19sZXZlbCwgcnYsIGFwX3NlcnZlcl9jb25mLCBBUExPR05PKDAw MDU2KQotICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3QgdG8gbGlzdGVuZXIgb24gJXBJIiwg bHAtPmJpbmRfYWRkcik7Ci0gICAgICAgIGFwcl9wb29sX2Rlc3Ryb3kocCk7Ci0gICAgICAgIHJl dHVybiBydjsKLSAgICB9Ci0KLSAgICBpZiAobHAtPnByb3RvY29sICYmIHN0cmNhc2VjbXAobHAt PnByb3RvY29sLCAiaHR0cHMiKSA9PSAwKSB7Ci0gICAgICAgIC8qIFNlbmQgYSBUTFMgMS4wIGNs b3NlX25vdGlmeSBhbGVydC4gIFRoaXMgaXMgcGVyaGFwcyB0aGUKLSAgICAgICAgICogImxlYXN0 IHdyb25nIiB3YXkgdG8gb3BlbiBhbmQgY2xlYW5seSB0ZXJtaW5hdGUgYW4gU1NMCi0gICAgICAg ICAqIGNvbm5lY3Rpb24uICBJdCBzaG91bGQgIndvcmsiIHdpdGhvdXQgbm9pc3kgZXJyb3IgbG9n cyBpZgotICAgICAgICAgKiB0aGUgc2VydmVyIGFjdHVhbGx5IGV4cGVjdHMgU1NMdjMvVExTdjEu ICBXaXRoCi0gICAgICAgICAqIFNTTHYyM19zZXJ2ZXJfbWV0aG9kKCkgT3BlblNTTCdzIFNTTF9h Y2NlcHQoKSBmYWlscwotICAgICAgICAgKiB1bmdyYWNlZnVsbHkgb24gcmVjZWlwdCBvZiB0aGlz IG1lc3NhZ2UsIHNpbmNlIGl0IHJlcXVpcmVzCi0gICAgICAgICAqIGFuIDExLWJ5dGUgQ2xpZW50 SGVsbG8gbWVzc2FnZSBhbmQgdGhpcyBpcyB0b28gc2hvcnQuICovCi0gICAgICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHRsczEwX2Nsb3NlX25vdGlmeVs3XSA9IHsKLSAgICAgICAgICAg ICdceDE1JywgICAgICAgICAvKiBUTFNQbGFpblRleHQudHlwZSA9IEFsZXJ0ICgyMSkgKi8KLSAg ICAgICAgICAgICdceDAzJywgJ1x4MDEnLCAvKiBUTFNQbGFpblRleHQudmVyc2lvbiA9IHszLCAx fSAqLwotICAgICAgICAgICAgJ1x4MDAnLCAnXHgwMicsIC8qIFRMU1BsYWluVGV4dC5sZW5ndGgg PSAyICovCi0gICAgICAgICAgICAnXHgwMScsICAgICAgICAgLyogQWxlcnQubGV2ZWwgPSB3YXJu aW5nICgxKSAqLwotICAgICAgICAgICAgJ1x4MDAnICAgICAgICAgIC8qIEFsZXJ0LmRlc2NyaXB0 aW9uID0gY2xvc2Vfbm90aWZ5ICgwKSAqLwotICAgICAgICB9OwotICAgICAgICBkYXRhID0gKGNv bnN0IGNoYXIgKil0bHMxMF9jbG9zZV9ub3RpZnk7Ci0gICAgICAgIGxlbiA9IHNpemVvZih0bHMx MF9jbG9zZV9ub3RpZnkpOwotICAgIH0KLSAgICBlbHNlIC8qIC4uLiBYWFggb3RoZXIgcmVxdWVz dCB0eXBlcyBoZXJlPyAqLyB7Ci0gICAgICAgIC8qIENyZWF0ZSBhbiBIVFRQIHJlcXVlc3Qgc3Ry aW5nLiAgV2UgaW5jbHVkZSBhIFVzZXItQWdlbnQgc28KLSAgICAgICAgICogdGhhdCBhZG1pbnN0 cmF0b3JzIGNhbiB0cmFjayBkb3duIHRoZSBjYXVzZSBvZiB0aGUKLSAgICAgICAgICogb2RkLWxv b2tpbmcgcmVxdWVzdHMgaW4gdGhlaXIgbG9ncy4gIEEgY29tcGxldGUgcmVxdWVzdCBpcwotICAg ICAgICAgKiB1c2VkIHNpbmNlIGtlcm5lbC1sZXZlbCBmaWx0ZXJpbmcgbWF5IHJlcXVpcmUgdGhh dCBtdWNoCi0gICAgICAgICAqIGRhdGEgYmVmb3JlIHJldHVybmluZyBmcm9tIGFjY2VwdCgpLiAq LwotICAgICAgICBkYXRhID0gYXByX3BzdHJjYXQocCwgIk9QVElPTlMgKiBIVFRQLzEuMFxyXG5V c2VyLUFnZW50OiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBfZ2V0X3NlcnZlcl9k ZXNjcmlwdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAoaW50ZXJuYWwgZHVt bXkgY29ubmVjdGlvbilcclxuXHJcbiIsIE5VTEwpOwotICAgICAgICBsZW4gPSBzdHJsZW4oZGF0 YSk7CisgICAgICAgIGFwcl9zb2NrZXRfc2VuZChzb2NrLCBkYXRhLCAmbGVuKTsKKyAgICAgICAg YXByX3NvY2tldF9jbG9zZShzb2NrKTsKICAgICB9Ci0KLSAgICBhcHJfc29ja2V0X3NlbmQoc29j aywgZGF0YSwgJmxlbik7Ci0gICAgYXByX3NvY2tldF9jbG9zZShzb2NrKTsKICAgICBhcHJfcG9v bF9kZXN0cm95KHApOwogCiAgICAgcmV0dXJuIHJ2Owo= --_003_9ACD5B67AAC5594CB6268234CF29CF9AA3762528ORSMSX113amrcor_--