From owner-freebsd-wireless@FreeBSD.ORG Mon Sep 2 11:06:55 2013 Return-Path: Delivered-To: freebsd-wireless@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id E4E37170 for ; Mon, 2 Sep 2013 11:06:54 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id C4F8323C0 for ; Mon, 2 Sep 2013 11:06:54 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.7/8.14.7) with ESMTP id r82B6sK3016220 for ; Mon, 2 Sep 2013 11:06:54 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.7/8.14.7/Submit) id r82B6sBW016218 for freebsd-wireless@FreeBSD.org; Mon, 2 Sep 2013 11:06:54 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 2 Sep 2013 11:06:54 GMT Message-Id: <201309021106.r82B6sBW016218@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: gnats set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: freebsd-wireless@FreeBSD.org Subject: Current problem reports assigned to freebsd-wireless@FreeBSD.org X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Sep 2013 11:06:55 -0000 Note: to view an individual PR, use: http://www.freebsd.org/cgi/query-pr.cgi?pr=(number). The following is a listing of current problems submitted by FreeBSD users. These represent problem reports covering all versions including experimental development code and obsolete releases. S Tracker Resp. Description -------------------------------------------------------------------------------- o kern/181694 wireless [iwn] [patch] Initialize hardware in iwn(4) resume cod o kern/181161 wireless [wl] config a old compaq wl-110 wireless card make ker o kern/181132 wireless [iwn] stream calculation is wrong for the Intel 4965 o kern/181100 wireless [bwi] Turning up bwi0 crashes / deadlocks the kernel o kern/180816 wireless [iwl] Intel Centrino Wireless-N 2200 not supported o kern/179847 wireless [ath] [patch] Update regdomain in ath drivers includin o kern/179709 wireless [ath] Atheros 5212 does not work: stuck beacon; resett o kern/179547 wireless [ath] Add AR9485 custom board fixes (CUS198) o kern/179482 wireless [ath] [patch] Fix AR9462 external LNA configuration o kern/179269 wireless [ath] [AR9285] RX antenna diversity is not functioning o kern/179232 wireless [ath] panic in ath o kern/178986 wireless [ath] Change mac address of ath(4) is not reflected wh o kern/178492 wireless [ath] ath0 (AR9287) panic o kern/178491 wireless [ath] ath0 (AR9287) stuck beacon o kern/178477 wireless [ath] missed beacon / soft reset in STA mode results i o kern/178470 wireless [panic][ath] bss vap can and does change o kern/178411 wireless [ral] [panic] FreeBSD kernel crash in rt2860 o kern/178379 wireless [net80211] [ath] WPA rekey on the STA side fails when o kern/178378 wireless [net80211] crypto state isn't reset during a reassocia o kern/178263 wireless [ath] review the use of ic_freq / ic_ieee / ic_flags / o kern/177847 wireless [ath] With TPC enabled, TX power values aren't clamped o kern/177846 wireless [ath] [net80211] net80211 TX power limit isn't correct o conf/177688 wireless WiFi regodmains information is inconsistent between "e o kern/177530 wireless [ath] ath driver isn't 32 bit int clean o kern/177465 wireless [iwn] 20%-100% packet loss with iwn driver o kern/177451 wireless [ieee80211] page fault in ieee80211_tx_mgt_timeout o kern/176238 wireless [ath] [patch] Correct buffer size calculation and simp o kern/176201 wireless [net80211] [patch] 11n station includes unrelated ht p o kern/176104 wireless [iwn] iwn0: iwn_intr: fatal firmware error o kern/175722 wireless [ath]lot of bad seriesx hwrate in kernel messages o kern/175446 wireless [ath] high volumes of PHY errors lead to BB/MAC hangs o kern/175227 wireless [ath] beacon timers aren't necessarily reprogrammed af o kern/175183 wireless [iwn] iwn(4) becomes unresponsive during initial confi o kern/175053 wireless [iwn] iwn firmware error on 9-stable with Ultimate-N 6 o kern/174891 wireless [ieee80211] struct ieee80211_node is freed during acti o kern/174722 wireless [wlan] can't use channel 12 and 13 (14) with my wifi i o kern/174661 wireless [wlan] lost alias on wlan interface o kern/174283 wireless [net80211] panics in ieee80211_ff_age() and ieee80211_ o kern/174276 wireless [ath] if_ath memory modified after free o kern/174273 wireless [net80211] taking down a net80211 node with active fas o kern/173917 wireless [iwn] wpa-supplicant issues on iwn o kern/173898 wireless [iwn] [patch] iwn(4) DOES support 6235 chip. o kern/173883 wireless [ath] ath0: unable to attach - pci issue? o kern/173711 wireless [ath] powerd kills ath on the Asus EeePC 1005HA o kern/173342 wireless PS-Poll isn't working o kern/173336 wireless [ath] Atheros card improper device poweroff handling o o kern/172955 wireless [ath] 11n does not work in adhoc mode o kern/172706 wireless [wpi] wpi0 fails to load firmware when using country o kern/172672 wireless [ubt] Bluetooth device recognised but not working o kern/172661 wireless hostapd(8) securing wireless adapter in HostAP mode is o kern/172338 wireless [ath] [net80211] CCMP IV transmit counters are not cor o kern/171598 wireless [ath] TP-Link TL-WN951N W-LAN PCI Adapter 300 MBit stu o kern/171235 wireless [ath] ath loses connection, system freezes on netif re o kern/170889 wireless [ath] ath driver uses some uninitilized memory o kern/170620 wireless [ath] LOR and deadlock when multiple vaps are used o kern/170573 wireless [iwi] Intel 2200BG iwi NIC hangs with need multicast c o kern/170513 wireless [ath] ath logs: ath_tx_aggr_comp_aggr: AR5416 bug: o kern/170433 wireless [ath] TX hang after a stuck beacon message with active o kern/170411 wireless [ath] Uninitialized variables in if_ath.c o kern/170397 wireless [ath] [patch] Uninitialized variables in ah_eeprom_928 o kern/170302 wireless [ath] 802.11n frames are not being transmitted with mu o kern/170281 wireless [ath] 802.11n locks up on aggregation setup (ampdutx) o kern/170098 wireless [ath] [net80211] VAPs (Virtual access points) with Ath o kern/170066 wireless [ral] ral(4) rt61pci Linksys freezes the machine as so o kern/169432 wireless [ath] BAR TX hang when aggregation session is reset du p kern/169362 wireless [ath] AR5416: radar pulse PHY errors sometimes include o kern/169336 wireless [ath] ANI isn't triggering in a busy/noisy environment o kern/169199 wireless [ath] Cannot set up static ip addresses for wireless w o kern/169084 wireless [ath] suspend/resume doesn't cause a rescan; the assoc o kern/168530 wireless [ath] Broken WEP probably o kern/168393 wireless AR9285: suspend/resume sometimes fails o kern/168170 wireless [net80211] ieee80211_send_bar() doesn't complete corre o kern/167870 wireless [ath] adhoc wifi client does not join an existing IBSS o kern/167834 wireless [ath] kickpcu; 'handled 0 packets' o kern/167828 wireless [iwn] iwn(4) doesn't recover automatically after firmw o kern/167798 wireless ifconfig(8): problem with "ifconfig list scan" command o kern/167491 wireless [ath] TID != hardware queue TID in ath_tx_aggr_comp_ag o kern/167113 wireless [ath] AR5210: "stuck" TX seems to be occuring, without o kern/167080 wireless [ath] channel switch on another VAP break channel setu o kern/166684 wireless [ath] [net80211] mgmtrate/mcastrate isn't updated base p kern/166642 wireless [ieee80211] [patch] in 802.11n mode for FreeBSD AP, ha o kern/166641 wireless [ieee80211] [patch] mbuf/cluster leak in AP mode in 80 p kern/166357 wireless [ath] 802.11n TX stall when the first frame in the BAW o kern/166286 wireless [net80211] [ath] initial switch to HT40 isn't causing p kern/166190 wireless [ath] TX hangs and frames stuck in TX queue o kern/166086 wireless [Patch][ath] Reflect state of rfkill switch in a sysct o kern/165969 wireless [ath] Slower performance in adhoc mode vs Client/AP mo o kern/165966 wireless [ath] ath0: device timeout on SMP machines due to race o kern/165895 wireless [ath] overly busy cabq can tie up all tx buffers o kern/165870 wireless [bwn] bwn driver does not attach on HP Pavilion dv9420 o kern/165866 wireless [ath] TX hangs, requiring a "scan" to properly reset t o kern/165849 wireless [ath] [hang] network ath driver freeze o kern/165595 wireless [ipw] ipw(4): Can't load firmare for ipw2200bg o kern/165543 wireless [ath] ath0 endless scanning of channels without connec o kern/165517 wireless [net80211] bgscan isn't triggered when invalid beacons o kern/165475 wireless [ath] operational mode change doesn't poke the underly o kern/165382 wireless [kernel] taskqueue_unblock doesn't unblock currently q o kern/165306 wireless [ath] race conditions between scanning and beacon time o kern/165220 wireless [ath] "ath_rx_tasklet: sc_inreset_cnt > 0; skipping" m o kern/165214 wireless [ieee80211] Kernel panic in ieee80211_output.c:2505 o kern/165212 wireless [ath] No WiFi on Acer Aspire One 751h (Atheros AR5BHB6 o kern/165149 wireless [ath] [net80211] Ping with data length more than iv_fr o kern/165146 wireless [net80211] Net802.11 Fragment number is assigned 1 (sh o kern/165060 wireless [ath] vap->iv_bss race conditions causing crashes insi o kern/165021 wireless [ath] ath device timeout during scan/attach, if wlan_c o kern/164721 wireless [ath] ath device timeouts o kern/164382 wireless [ath] crash when down/deleting a vap - inside ieee8021 o kern/164365 wireless [iwi] iwi0: UP/DOWN in o bin/164102 wireless hostapd not configured for 802.11n o kern/163759 wireless [ath] ath(4) "stops working" in hostap mode o kern/163724 wireless [mwl] [patch] NULL check before dereference o kern/163719 wireless [ath] ath interface do not receive multicast o kern/163689 wireless [ath] TX timeouts when sending probe/mgmt frames durin o kern/163574 wireless [net80211] overly-frequent HT occupancy changes o kern/163573 wireless [ath] hostap mode TX buffer hang o kern/163559 wireless [ath] kernel panic AH_DEBUG o kern/163318 wireless [ath] ath(4) stops working p kern/163312 wireless [panic] [ath driver] kernel panic: page fault with ath o kern/163237 wireless [ath] AR5416 as HostAP. Delays among clients when a cl o kern/163082 wireless [ath] ar9285 diversity fixes o kern/162648 wireless [ath] AR9227 ADC DC calibration failure o kern/162647 wireless [ath] 11n TX aggregation session / TX hang o kern/161293 wireless [iwn] hang at startup when starting network o kern/161035 wireless [ieee80211] Incorrect number describing 11ng MCS rate o kern/160391 wireless [ieee80211] [patch] Panic in mesh mode o kern/160296 wireless [zyd] [panic] 802.11 usb device reboots system on 'ifc o misc/160176 wireless [mips] [panic] Kernel panic on AR7161 platform with AR o kern/157449 wireless [ath] MAC address conflict causes system to freeze o kern/157243 wireless [ath] investigate beacon TX (AP) / RX (STA) when under o kern/156904 wireless [ath] AR9285 antenna diversity algorithm is buggy and o kern/156884 wireless [ath] ath instablity o kern/156327 wireless [bwn] bwn driver causes 20%-50% packet loss o kern/156322 wireless [wpi] no ahdemo support for if_wpi o kern/156321 wireless [ath] ahdemo doesn't work with if_ath o kern/155498 wireless [ral] ral(4) needs to be resynced with OpenBSD's to ga o kern/155100 wireless [ath] ath driver on busy channel: "stuck beacon" p kern/154598 wireless [ath] Atheros 5424/2424 can't connect to WPA network o kern/154567 wireless [ath] ath(4) lot of bad series(0) o kern/154327 wireless [ath] AR5416 in station mode hangs when transmitting f o kern/154284 wireless [ath] Modern ath wifi cards (such as AR9285) have miss o kern/154153 wireless [ath] AR5213 + MIPS + WPA group key packet corruption o kern/153594 wireless [wlan] netif/devd race o kern/153448 wireless [ath] ath networking device loses association after a o kern/152750 wireless [ath] ath0 lot of bad series hwrate o kern/151198 wireless [ath] ath/5416 fails bgscan with "ath0: ath_chan_set: o kern/149786 wireless [bwn] bwn on Dell Inspiron 1150: connections stall o kern/149516 wireless [ath] ath(4) hostap with fake MAC/BSSID results in sta o kern/149373 wireless [realtek/atheros]: None of my network card working o kern/148322 wireless [ath] Triggering atheros wifi beacon misses in hostap o kern/148317 wireless [ath] FreeBSD 7.x hostap memory leak in net80211 or At o kern/148078 wireless [ath] wireless networking stops functioning o kern/146426 wireless [mwl] 802.11n rates not possible on mwl o kern/146425 wireless [mwl] mwl dropping all packets during and after high u o kern/145826 wireless [panic] [ath] Unable to configure adhoc mode on ath0/w o kern/144987 wireless [wpi] [panic] injecting packets with wlaninject using o kern/144755 wireless [wlan] netif/devd race o bin/144109 wireless hostapd(8) uses the MAC of the wireless interface, but o conf/143079 wireless hostapd(8) startup missing multi wlan functionality p kern/140567 wireless [ath] [patch] ath is not worked on my notebook PC o kern/140245 wireless [ath] [panic] Kernel panic during network activity on o kern/137592 wireless [ath] panic - 7-STABLE (Aug 7, 2009 UTC) crashes on ne o kern/136943 wireless [wpi] [lor] wpi0_com_lock / wpi0 o kern/136836 wireless [ath] atheros card stops functioning after about 12 ho o kern/132722 wireless [ath] Wifi ath0 associates fine with AP, but DHCP or I o bin/131549 wireless ifconfig(8) can't clear 'monitor' mode on the wireless o kern/126475 wireless [ath] [panic] ath pcmcia card inevitably panics under o kern/125721 wireless [ath] Terrible throughput/high ping latency with Ubiqu o kern/125617 wireless [ath] [panic] ath(4) related panic o kern/125501 wireless [ath] atheros cardbus driver hangs o kern/125332 wireless [ath] [panic] crash under any non-tiny networking unde o kern/124767 wireless [iwi] Wireless connection using iwi0 driver (Intel 220 o kern/124753 wireless [ieee80211] net80211 discards power-save queue packets o kern/121061 wireless [ath] [panic] panic while ejecting ath(4)-adapter duri o docs/120456 wireless ath(4) needs to specify requirement on wlan_scan_sta o kern/119513 wireless [ath] [irq] inserting dlink dwl-g630 wireless card res o kern/116747 wireless [ndis] FreeBSD 7.0-CURRENT crash with Dell TrueMobile f kern/105348 wireless [ath] ath device stopps TX 177 problems total. From owner-freebsd-wireless@FreeBSD.ORG Mon Sep 2 17:54:35 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id A1D0484F; Mon, 2 Sep 2013 17:54:35 +0000 (UTC) (envelope-from qinchenchong@gmail.com) Received: from mail-vc0-x235.google.com (mail-vc0-x235.google.com [IPv6:2607:f8b0:400c:c03::235]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 1BAE02663; Mon, 2 Sep 2013 17:54:35 +0000 (UTC) Received: by mail-vc0-f181.google.com with SMTP id hz10so3128065vcb.26 for ; Mon, 02 Sep 2013 10:54:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=LfNeDwlIFCmV021CbgvZ98QKtuH8pJW+5LgKV5/cTsM=; b=j/v/zMzKoPRZxigxYGFf/ywO7IAYSdeTGElCoCle0+WItxORApfivwlcamfnPHiZBR +OSloNS5vyyXM4CYQPx3+EszPUdvUYBM84D/WuMbjP+MrFomguvCEQjPf71SSOA8UHtS 5n+8mJxrP5rpl+/WOmI8pj1OSsu7EerTs23ZPpoqQ2dtFdqIUB0viqOMNnAge33pRNWy LI1AHNFJQZlNZNlDsOBU9npvRtaBmbRXrXsAuf9O6m4Z2ecbYwX34yi7n5/P9jvaw+QB MjOUikjckvpnebu1iU7oR0QRIkGSYW5Ff8ZtTtwIg4KYgJ719sVEqBsLNh+DWI/KJgEe YB1A== MIME-Version: 1.0 X-Received: by 10.220.1.203 with SMTP id 11mr18865254vcg.15.1378144474250; Mon, 02 Sep 2013 10:54:34 -0700 (PDT) Received: by 10.220.182.68 with HTTP; Mon, 2 Sep 2013 10:54:33 -0700 (PDT) In-Reply-To: References: Date: Tue, 3 Sep 2013 01:54:33 +0800 Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Chenchong Qin To: Adrian Chadd Content-Type: multipart/mixed; boundary=001a11c3d3f4d645aa04e56a43e1 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Sep 2013 17:54:35 -0000 --001a11c3d3f4d645aa04e56a43e1 Content-Type: text/plain; charset=ISO-8859-1 Hi! Attachment is my latest update. In this update, I teach ieee80211_amrr to return multiple rates and modify ath to let it use net80211_ratectl. I realized that 2 tasks must be done before I can test the modified ratectl api on my AR9227 device. that is: 1) get a ratectl algo ready to use. ieee80211_amrr is choosed here. I modified it to fit the updated net80211_ratectl. That includes making it return multiple rates and use a unified ieee80211_rc_info to do the __complete__. 2) modified ath driver to let it use ieee80211_ratectl. We know that ath uses it's own rate control code to do the rate decisions and rc flags setups. So ieee80211_ratectl need to take over process of rate lookup and other related stuffs. During my first attempt modifing ieee80211_amrr, I try to make it look similiar to ath_amrr. But, latter I found that perhaps we don't need to. As to amrr, once we get the first rix, we get the others. So we don't need to record lots of states like amn_tx_rate[0|1|2|3]. And, I found that, ath_amrr is quite confused. It seems that it return the ratecode as rix. rix should be the ratetable index, right? I've saw that the rix is used to index ratetable. The modifications to ath is really strait forward. I just push net80211_ratectl into ath and copy ieee80211_rc_series to bf->bf_state.bfs_rc after we get the rates. I also add a 48 bytes buf to mbuf (actually to m_hdr). That is where we store ratectl state ieee80211_rc_info for a frame. The struct mbuf is so elegant that I really don't want to add any thing to it. If you know some other places that is fit to store the ratectl state, please let me know. Thanks! I compiled my latest kernel and tried it. A kernel panic with message "not mcs" occured. Perhaps my modifications to ieee80211_amrr caused it. I'll check it. Thanks! Chenchong On Tue, Aug 27, 2013 at 5:02 PM, Adrian Chadd wrote: > Sweet! Let me know how it goes. > > > > -adrian > > > > On 25 August 2013 23:43, Chenchong Qin wrote: > >> Hi! >> >> I struggled to perform changes to all parts that affected by my update to >> ratectl api >> and got the customized kernel compiled... I'm now tring to play it on my >> AR9227 device. >> >> Thanks! >> >> Chenchong >> >> >> On Sun, Aug 25, 2013 at 10:39 PM, Adrian Chadd wrote: >> >>> Hi! >>> >>> Have you tried this out with any hardware just yet? >>> >>> >>> -adrian >>> >>> >>> >>> On 25 August 2013 07:30, Chenchong Qin wrote: >>> >>>> Hi! >>>> >>>> This is the latest update. >>>> >>>> * add a simple per vap ratectl statistic tracker and api to update it. >>>> * port irn_capabilities to irs_capabilities in struct ieee80211_rc_stat. >>>> perhaps the capabilities field needs to be within ieee80211_rc_stat as >>>> a per vap atrribute. corresponding updates performed. >>>> * add ieee80211_ratectl_none.h to record common ratectl state. >>>> >>>> Thanks! >>>> >>>> Chenchong >>>> >>>> >>>> On Thu, Aug 15, 2013 at 8:03 PM, Chenchong Qin wrote: >>>> >>>>> Hi! >>>>> >>>>> Here is my latest update. In this update: >>>>> >>>>> * add a new struct, ieee80211_ratectl_node. This is the common state >>>>> that all per node rc >>>>> state, i.e. ieee80211_[amrr|sample]_node, should contains it as the >>>>> first field. It's now used to store >>>>> the capabilities. see below. >>>>> * rename ir_capabilities to irn_capabilities and move it to >>>>> ieee80211_ratectl_node (it contained in >>>>> ieee80211_[amrr|sample]_node). ieee80211_ratectl is readonly, so >>>>> ir_capabilities can't be set. And, >>>>> the capabilities is not a part of rc algo. It seems that it should >>>>> be put in the per node rc state. Interface >>>>> of ieee80211_ratectl_node_init() and its callers are updated. >>>>> References to ir_capabilities are also adapted. >>>>> * add ieee80211_ratectl_[node_is11n|get_rateset] to the ratectl api. >>>>> rc algoes all need these functions. >>>>> * change the naming conversion of IEEE80211_RATECTL_FLAG_*. >>>>> * some errors fixed. >>>>> >>>>> >>>>> On Thu, Aug 15, 2013 at 12:58 AM, Adrian Chadd wrote: >>>>> >>>>>> Hi! >>>>>> >>>>>> So yes, we do need to have a generic way of returning that completion >>>>>> information to the rate control code. >>>>>> >>>>>> I'm all for you churning the rate control API to return a struct >>>>>> ieee80211_rc_info in the complete function and totally just kill arg1/arg2. >>>>>> That forces us to extend ieee80211_rc_info to be "right" for all the >>>>>> drivers. >>>>>> >>>>> >>>>> Do you mean drop arg1/arg2 and pass pointer of ieee80211_rc_info to >>>>> the complete function directly? Or return it >>>>> when complete function return? >>>>> >>>>> >>>>>> What wifi devices do you have there? It looks like we're almost at >>>>>> the point where we can start converting a few things to use the modified >>>>>> rate control API and modules - notably iwn (which won't use the multi-rate >>>>>> retry stuff to begin with - it works "differently"..) and ath (which will >>>>>> use the multi-rate retry stuff and the sample rate control module.) >>>>>> >>>>> >>>>> Yeah, I have an AR9227 device at hand. >>>>> >>>>> And, I also get a question here. The ieee80211_ratetable doesn't get a >>>>> rateCode field. So, how we get the >>>>> ratecode of the non_ht rate? >>>>> >>>>> Thanks! >>>>> >>>>> Chenchong >>>>> >>>>> >>>> >>> >> > --001a11c3d3f4d645aa04e56a43e1 Content-Type: application/octet-stream; name="20130902-net80211-ratectl.diff" Content-Disposition: attachment; filename="20130902-net80211-ratectl.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hl3zjudp0 SW5kZXg6IHN5cy9zeXMvbWJ1Zi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9zeXMvbWJ1Zi5oCShyZXZp c2lvbiAyNTQ4MjYpCisrKyBzeXMvc3lzL21idWYuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiAr OTUsNyBAQAogCWNhZGRyX3QJCSBtaF9kYXRhOwkvKiBsb2NhdGlvbiBvZiBkYXRhICovCiAJaW50 CQkgbWhfbGVuOwkvKiBhbW91bnQgb2YgZGF0YSBpbiB0aGlzIG1idWYgKi8KIAlpbnQJCSBtaF9m bGFnczsJLyogZmxhZ3M7IHNlZSBiZWxvdyAqLworCXVpbnQ4X3QJCSBtaF9jY2JbNDhdOwkvKiBj b21tb24gY29udHJvbCBibG9jayAqLwogCXNob3J0CQkgbWhfdHlwZTsJLyogdHlwZSBvZiBkYXRh IGluIHRoaXMgbWJ1ZiAqLwogCXVpbnQ4X3QgICAgICAgICAgcGFkW01fSERSX1BBRF07Lyogd29y ZCBhbGlnbiAgICAgICAgICAgICAgICAgICovCiB9OwpAQCAtMTczLDYgKzE3NCw3IEBACiAjZGVm aW5lCW1fdHlwZQkJbV9oZHIubWhfdHlwZQogI2RlZmluZQltX2ZsYWdzCQltX2hkci5taF9mbGFn cwogI2RlZmluZQltX25leHRwa3QJbV9oZHIubWhfbmV4dHBrdAorI2RlZmluZQltX2NjYgkJbV9o ZHIubWhfY2NiCiAjZGVmaW5lCW1fYWN0CQltX25leHRwa3QKICNkZWZpbmUJbV9wa3RoZHIJTV9k YXQuTUguTUhfcGt0aGRyCiAjZGVmaW5lCW1fZXh0CQlNX2RhdC5NSC5NSF9kYXQuTUhfZXh0Cklu ZGV4OiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuYwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL25l dDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA CiAvKi0KICAqIENvcHlyaWdodCAoYykgMjAxMCBSdWkgUGF1bG8gPHJwYXVsb0BGcmVlQlNELm9y Zz4KKyAqIENvcHlyaWdodCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxjY3FpbkBGcmVlQlNELm9y Zz4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00OSw2ICs1 MCw0MCBAQAogCiBNQUxMT0NfREVGSU5FKE1fODAyMTFfUkFURUNUTCwgIjgwMjExcmF0ZWN0bCIs ICI4MDIuMTEgcmF0ZSBjb250cm9sIik7CiAKK2VudW0geworCU1DU19IVDIwLAorCU1DU19IVDIw X1NHSSwKKwlNQ1NfSFQ0MCwKKwlNQ1NfSFQ0MF9TR0ksCit9OworCitpbnQgbWF4XzRtc19mcmFt ZWxlbls0XVszMl0gPSB7CisJW01DU19IVDIwXSA9IHsKKwkJMzIxMiwgIDY0MzIsICA5NjQ4LCAg MTI4NjQsICAxOTMwMCwgIDI1NzM2LCAgMjg5NTIsICAzMjE3MiwKKwkJNjQyNCwgIDEyODUyLCAx OTI4MCwgMjU3MDgsICAzODU2OCwgIDUxNDI0LCAgNTc4NTIsICA2NDI4MCwKKwkJOTYyOCwgIDE5 MjYwLCAyODg5NiwgMzg1MjgsICA1Nzc5MiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwkJMTI4 MjgsIDI1NjU2LCAzODQ4OCwgNTEzMjAsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwK Kwl9LAorCVtNQ1NfSFQyMF9TR0ldID0geworCQkzNTcyLCAgNzE0NCwgIDEwNzIwLCAgMTQyOTYs ICAyMTQ0NCwgIDI4NTk2LCAgMzIxNzIsICAzNTc0NCwKKwkJNzE0MCwgIDE0Mjg0LCAyMTQyOCwg IDI4NTY4LCAgNDI4NTYsICA1NzE0NCwgIDY0Mjg4LCAgNjU1MzIsCisJCTEwNzAwLCAyMTQwOCwg MzIxMTIsICA0MjgxNiwgIDY0MjI4LCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLAorCQkxNDI1Niwg Mjg1MTYsIDQyNzgwLCAgNTcwNDAsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9 LAorCVtNQ1NfSFQ0MF0gPSB7CisJCTY2ODAsICAxMzM2MCwgIDIwMDQ0LCAgMjY3MjQsICA0MDA5 MiwgIDUzNDU2LCAgNjAxNDAsICA2NTUzMiwKKwkJMTMzNDgsIDI2NzAwLCAgNDAwNTIsICA1MzQw MCwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLAorCQkyMDAwNCwgNDAwMDgsICA2MDAx NiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsCisJCTI2NjQ0LCA1MzI5 MiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9LAor CVtNQ1NfSFQ0MF9TR0ldID0geworCQk3NDIwLCAgMTQ4NDQsICAyMjI3MiwgIDI5Njk2LCAgNDQ1 NDQsICA1OTM5NiwgIDY1NTMyLCAgNjU1MzIsCisJCTE0ODMyLCAyOTY2OCwgIDQ0NTA0LCAgNTkz NDAsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwkJMjIyMzIsIDQ0NDY0LCAgNjU1 MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLAorCQkyOTYxNiwgNTky MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsCisJfQor fTsKKwogdm9pZAogaWVlZTgwMjExX3JhdGVjdGxfcmVnaXN0ZXIoaW50IHR5cGUsIGNvbnN0IHN0 cnVjdCBpZWVlODAyMTFfcmF0ZWN0bCAqcmF0ZWN0bCkKIHsKQEAgLTY2LDExICsxMDEsMTEgQEAK IH0KIAogdm9pZAotaWVlZTgwMjExX3JhdGVjdGxfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2 YXApCitpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgdWlu dDMyX3QgY2FwYWJpbGl0aWVzKQogewogCWlmICh2YXAtPml2X3JhdGUgPT0gcmF0ZWN0bHNbSUVF RTgwMjExX1JBVEVDVExfTk9ORV0pCiAJCWllZWU4MDIxMV9yYXRlY3RsX3NldCh2YXAsIElFRUU4 MDIxMV9SQVRFQ1RMX0FNUlIpOwotCXZhcC0+aXZfcmF0ZS0+aXJfaW5pdCh2YXApOworCXZhcC0+ aXZfcmF0ZS0+aXJfaW5pdCh2YXAsIGNhcGFiaWxpdGllcyk7CiB9CiAKIHZvaWQKQEAgLTkwLDMg KzEyNSwxMDYgQEAKIAl9CiAJdmFwLT5pdl9yYXRlID0gcmF0ZWN0bHNbdHlwZV07CiB9CisKK3Zv aWQKK2llZWU4MDIxMV9yYXRlY3RsX2NvbXBsZXRlX3JjZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9u b2RlICpuaSwKKwkJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvKQoreworCXN0cnVj dCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CisJc3RydWN0IGllZWU4MDIxMV9yY19z ZXJpZXMgKnJjID0gcmNfaW5mby0+aXJpX3JjOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0 ZV90YWJsZSAqIHJ0ID0gTlVMTDsKKwl1aW50OF90IHJhdGU7CisJaW50IGk7CisKKwlydCA9IGll ZWU4MDIxMV9nZXRfcmF0ZXRhYmxlKG5pLT5uaV9pYy0+aWNfY3VyY2hhbik7CisKKwkvKiBNYWtl IHN1cmUgdGhhdCByYXRlIGNvbnRyb2wgY29kZSBkb2Vzbid0IG1lc3MgaXQgdXAuCisJICogSWYg ZW5hYmxlIHJ0cy9jdHMgYW5kIGlzIHByZS04MDIuMTFuLCBibGFuayB0cmllcyAxLCAyLCAzIAor CSAqLworCisJaWYgKCEgSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01SUlBST1QodmFwKSkKKwl7 CisJCWZvciAoaSA9IDE7IGkgPCBJRUVFODAyMTFfUkFURUNUTF9OVU07IGkrKykKKwkJeworCQkJ aWYgKHJjWzBdLmZsYWdzICYgSUVFRTgwMjExX1JBVEVDVExfRkxBR19SVFNDVFMpCisJCQkJcmNb aV0udHJpZXMgPSAwOworCQkJcmNbaV0uZmxhZ3MgJj0gfklFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdf UlRTQ1RTOyAKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfUkFURUNUTF9O VU07IGkrKykgeworCQkKKwkJaWYgKHJjW2ldLnRyaWVzID09IDApCisJCQljb250aW51ZTsKKwor CQlyYXRlID0gcnQtPmluZm9bcmNbaV0ucml4XS5kb3QxMVJhdGU7CisKKwkJLyogT25seSBlbmFi bGUgZHVhbC1zdHJlYW0sIHNob3J0Z2ksIDIwNDAgaWYgSFQgaXMgc2V0ICovCisKKwkJaWYgKElT X0hUX1JBVEUocmF0ZSkpIHsKKwkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZM QUdfSFQ7CisKKwkJCWlmIChpZWVlODAyMTFfcmF0ZWN0bF9oYXNjYXBfY3c0MChuaSkpCisJCQkJ cmNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfRkxBR19DVzQwOworCisJCQlpZiAoaWVl ZTgwMjExX3JhdGVjdGxfaGFzY2FwX3Nob3J0Z2kobmkpKQorCQkJCXJjW2ldLmZsYWdzIHw9IElF RUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU0dJOworCQkJLyoKKwkJCSAqIElmIHdlIGhhdmUgU1RCQyBU WCBlbmFibGVkIGFuZCB0aGUgcmVjZWl2ZXIKKwkJCSAqIGNhbiByZWNlaXZlIChhdCBsZWFzdCkg MSBzdHJlYW0gU1RCQywgQU5EIGl0J3MKKwkJCSAqIE1DUyAwLTcsIEFORCB3ZSBoYXZlIGF0IGxl YXN0IHR3byBjaGFpbnMgZW5hYmxlZCwKKwkJCSAqIGVuYWJsZSBTVEJDLgorCQkJICovCisJCQlp ZiAoaWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX3N0YmMobmkpICYmCisJCQkJKHJhdGUgJiBJRUVF ODAyMTFfUkFURV9WQUwpIDwgOCAmJgorCQkJCUhUX1JDXzJfU1RSRUFNUyhyYXRlKSA9PSAxKQor CQkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU1RCQzsKKwkJCQorCQkJ LyoKKwkJCSAqIER1YWwgLyBUcmlwbGUgc3RyZWFtIHJhdGU/CisJCQkgKi8KKwkJCWlmIChIVF9S Q18yX1NUUkVBTVMocmF0ZSkgPT0gMikKKwkJCQlyY1tpXS5mbGFncyB8PSBJRUVFODAyMTFfUkFU RUNUTF9GTEFHX0RTOworCQkJZWxzZSBpZiAoSFRfUkNfMl9TVFJFQU1TKHJhdGUpID09IDMpCisJ CQkJcmNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfRkxBR19UUzsKKworCQkJLyoKKwkJ CSAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSA0bXMgZnJhbWUgbGVuZ3RoIGJhc2VkCisJCQkgKiBv biB0aGUgTUNTIHJhdGUsIFNHSSBhbmQgY2hhbm5lbCB3aWR0aCBmbGFncy4KKwkJCSAqLworCQkJ aWYgKEhUX1JDXzJfTUNTKHJhdGUpIDwgMzIpIHsKKwkJCQlpbnQgajsKKwkJCQlpZiAocmNbaV0u ZmxhZ3MgJiBJRUVFODAyMTFfUkFURUNUTF9GTEFHX0NXNDApIHsKKwkJCQkJaWYgKHJjW2ldLmZs YWdzICYgSUVFRTgwMjExX1JBVEVDVExfRkxBR19TR0kpCisJCQkJCQlqID0gTUNTX0hUNDBfU0dJ OworCQkJCQllbHNlCisJCQkJCQlqID0gTUNTX0hUNDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYg KHJjW2ldLmZsYWdzICYgSUVFRTgwMjExX1JBVEVDVExfRkxBR19TR0kpCisJCQkJCQlqID0gTUNT X0hUMjBfU0dJOworCQkJCQllbHNlCisJCQkJCQlqID0gTUNTX0hUMjA7CisJCQkJfQorCQkJCXJj W2ldLm1heDRtc2ZyYW1lbGVuID0KKwkJCQkgICAgbWF4XzRtc19mcmFtZWxlbltqXVtIVF9SQ18y X01DUyhyYXRlKV07CisJCQl9CisJCX0gZWxzZSB7CisJCQlyY1tpXS5tYXg0bXNmcmFtZWxlbiA9 IDA7CisKKwkJCS8qCisJCQkgKiBPbmx5IGVuYWJsZSBzaG9ydCBwcmVhbWJsZSBmb3IgbGVnYWN5 IHJhdGVzCisJCQkgKi8KKwkJCWlmIChyY19pbmZvLT5pcmlfZmxhZ3MgJiBJRUVFODAyMTFfUkFU RUNUTF9JTkZPX1NQKQorCQkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdf U1A7CisJCX0KKworCQkvKgorCQkgKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gVFggcG93ZXIgY2Fw IGZvciB0aGUgY3VycmVudAorCQkgKiBub2RlLiAKKwkJICogUmF0ZSBjb250cm9sIGFsZ28gY2Fu J3QgY29udHJvbCBUWCBwb3dlciBieSBub3cuCisJCSAqLworCQlyY1tpXS50eF9wb3dlcl9jYXAg PSBpZWVlODAyMTFfZ2V0X25vZGVfdHhwb3dlcihuaSk7CisJCQorCX0KK30KKwpJbmRleDogc3lz L25ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldDgwMjEx L2llZWU4MDIxMV9yYXRlY3RsLmgJKHJldmlzaW9uIDI1NDgyNikKKysrIHN5cy9uZXQ4MDIxMS9p ZWVlODAyMTFfcmF0ZWN0bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyotCiAg KiBDb3B5cmlnaHQgKGMpIDIwMTAgUnVpIFBhdWxvIDxycGF1bG9ARnJlZUJTRC5vcmc+CisgKiBD b3B5cmlnaHQgKGMpIDIwMTMgQ2hlbmNob25nIFFpbiA8Y2NxaW5ARnJlZUJTRC5vcmc+CiAgKiBB bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjQsNiArMjUsOCBAQAog ICoKICAqICRGcmVlQlNEJAogICovCisjaWZuZGVmIF9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNU TF9IXworI2RlZmluZSBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVDVExfSF8KIAogZW51bSBpZWVl ODAyMTFfcmF0ZWFsZ3MgewogCUlFRUU4MDIxMV9SQVRFQ1RMX0FNUlIJCT0gMCwKQEAgLTM3LDE4 ICs0MCwxMDAgQEAKICNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUwkxCiAjZGVm aW5lCUlFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxVUkUJMAogCisjZGVmaW5lCUlFRUU4MDIxMV9S QVRFQ1RMX1RSVUUJCTEKKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfRkFMU0UJCTAKKworI2Rl ZmluZQlJRUVFODAyMTFfUkFURUNUTF9OVU0JCTQKKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExf VFhNQVhUUlkJMTEKKworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9GTEFHX0RTCQkweDAxCS8q IGR1YWwtc3RyZWFtIHJhdGUgKi8KKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfRkxBR19DVzQw CQkweDAyCS8qIHVzZSBIVDQwICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU0dJ CQkweDA0CS8qIHVzZSBzaG9ydC1HSSAqLworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9GTEFH X0hUCQkweDA4CS8qIHVzZSBIVCAqLworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9GTEFHX1JU U0NUUwkweDEwCS8qIGVuYWJsZSBSVFMvQ1RTIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUJSUVFRTgw MjExX1JBVEVDVExfRkxBR19TVEJDCQkweDIwCS8qIGVuYWJsZSBTVEJDICovCisjZGVmaW5lCUlF RUU4MDIxMV9SQVRFQ1RMX0ZMQUdfVFMJCTB4NDAJLyogdHJpcGxlLXN0cmVhbSByYXRlICovCisj ZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU1AJCTB4ODAJLyogc2hvcnQgcHJlYW1ibGUg Ki8KKworLyogSGFyZHdhcmUgQ0FQcyBvZmZlcmVkIHRvIHJhdGUgY29udHJvbCBhbGdvICovCisj ZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NUlIJCQkweDAxCS8qIHN1cHBvcnQgTVJSICov CisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NUlJQUk9UCQkweDAyCS8qIHN1cHBvcnQg TVJSICsgcHJvdGVjdCAqLworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9DQVBfTVVMVFhDSEFJ TgkweDA0CS8qIGhhcyBtb3JlIHRoYW4gMSB0eGNoYWluICovCisKKyNkZWZpbmUgSVNfVkFQX0hU KHZhcCkJKCh2YXApLT5pdl9odGNhcHMgJiBJRUVFODAyMTFfSFRDX0hUKQorI2RlZmluZSBJU19I VF9SQVRFKF9yYXRlKSAgICgoX3JhdGUpICYgMHg4MCkKKyNkZWZpbmUgSFRfUkNfMl9NQ1MoX3Jj KSAgICAoKF9yYykgJiAweDdmKQorI2RlZmluZSBIVF9SQ18yX1NUUkVBTVMoX3JjKSAgICAoKCgo X3JjKSAmIDB4NzgpID4+IDMpICsgMSkKKworZXh0ZXJuIGludCBtYXhfNG1zX2ZyYW1lbGVuWzRd WzMyXTsKKworc3RydWN0IGllZWU4MDIxMV9yY19zZXJpZXMgeworCXVpbnQ4X3Qgcml4OwkJLyog cmF0ZXRhYmxlIGluZGV4LCBub3QgcmF0ZSBjb2RlICovCisJdWludDhfdCByYXRlY29kZTsJLyog aGFyZHdhcmUgcmF0ZSBjb2RlICovCisJdWludDhfdCB0cmllczsKKwl1aW50OF90IHR4X3Bvd2Vy X2NhcDsKKwl1aW50MTZfdCBmbGFnczsKKwl1aW50MTZfdCBtYXg0bXNmcmFtZWxlbjsKK307CisK K3N0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyB7CisJc3RydWN0IGllZWU4MDIxMV9yY19zZXJpZXMg aXJpX3JjW0lFRUU4MDIxMV9SQVRFQ1RMX05VTV07CisJdWludDMyX3QgaXJpX2ZyYW1lbGVuOwor CXVpbnQxNl90IGlyaV9mbGFnczsJCS8qIGZvciBub3csIGp1c3QgcmVjb3JkcyBzaG9ydCBwcmVh bWJsZSAqLworCisJLyogVFggaW5mbyAqLworCXVpbnQ4X3QgaXJpX3R4Y250OwkJLyogVFggY291 bnQgKi8KKwl1aW50OF90IGlyaV9va2NudDsJCS8qIFRYIG9rIHdpdGggb3Igd2l0aG91dCByZXRy eSAqLworCXVpbnQ4X3QgaXJpX2ZhaWxjbnQ7CS8qIFRYIHJldHJ5LWZhaWwgY291bnQgKi8KKwl1 aW50OF90IGlyaV9yZXRyeWNudDsJLyogVFggcmV0cnkgY291bnQgKi8KKwl1aW50OF90IGlyaV9z aG9ydHJldHJ5OworCXVpbnQ4X3QgaXJpX2xvbmdyZXRyeTsKKwl1aW50OF90IGlyaV9maW5hbHRz aTsKKwl1aW50OF90IGlyaV90eHJhdGU7CQkvKiBodyB0eCByYXRlICovCit9OworCisvKiBpZWVl ODAyMTFfcmNfaW5mbyBmbGFncyAqLworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9JTkZPX1NQ CQkweDAxCS8qIHNob3J0IHByZWFtYmxlICovCisKKyNkZWZpbmUgSUVFRTgwMjExX1JBVEVDVExf SU5GTyhfbSkgKChzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKikoX20pLT5tX2NjYikKKworLyoK KyAqIG5ldDgwMjExIHJhdGVjdGwgc3RhdGlzdGljcy4gCisgKiBwZXIgdmFwIHJhdGVjdGwgc2Vl dGluZyBtdXN0IHN0YXJ0IHdpdGggdGhpcyBjb21tb24gc3RhdGUuCisgKi8KK3N0cnVjdCBpZWVl ODAyMTFfcmNfc3RhdCB7CisJdWludDMyX3QgaXJzX2NhcGFiaWxpdGllczsJCS8qIGhhcmR3YXJl IGNhcGFiaWxpdGllcyBvZmZlcmVkIHRvIHJjICovCisKKwkvKiByYXRlY3RsIHN0YXRpc3RpY3Mg Ki8KKwl1aW50MzJfdCBpcnNfdHhjbnQ7CisJdWludDMyX3QgaXJzX2ZhaWxjbnQ7CisJdWludDMy X3QgaXJzX3JldHJ5Y250OworCXVpbnQzMl90IGlyc19zaG9ydHJldHJ5OworCXVpbnQzMl90IGly c19sb25ncmV0cnk7Cit9OworCisjZGVmaW5lIElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQoX3ZhcCkg XAorCSgoc3RydWN0IGllZWU4MDIxMV9yY19zdGF0ICopKChfdmFwKS0+aXZfcnMpKQorCisjZGVm aW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0hBU0NBUF9NUlIoX3ZhcCkgXAorCShJRUVFODAyMTFfUkFU RUNUTF9TVEFUKF92YXApLT5pcnNfY2FwYWJpbGl0aWVzICYgSUVFRTgwMjExX1JBVEVDVExfQ0FQ X01SUikKKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01SUlBST1QoX3ZhcCkgXAor CShJRUVFODAyMTFfUkFURUNUTF9TVEFUKF92YXApLT5pcnNfY2FwYWJpbGl0aWVzICYgSUVFRTgw MjExX1JBVEVDVExfQ0FQX01SUlBST1QpCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0hBU0NB UF9NVUxUWENIQUlOKF92YXApIFwKKwkoSUVFRTgwMjExX1JBVEVDVExfU1RBVChfdmFwKS0+aXJz X2NhcGFiaWxpdGllcyAmIElFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NVUxUWENIQUlOKQorCiBzdHJ1 Y3QgaWVlZTgwMjExX3JhdGVjdGwgewogCWNvbnN0IGNoYXIgKmlyX25hbWU7CiAJaW50CSgqaXJf YXR0YWNoKShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICopOwogCXZvaWQJKCppcl9kZXRhY2gp KGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKik7Ci0Jdm9pZAkoKmlyX2luaXQpKHN0cnVjdCBp ZWVlODAyMTF2YXAgKik7CisJdm9pZAkoKmlyX2luaXQpKHN0cnVjdCBpZWVlODAyMTF2YXAgKiwg dWludDMyX3QpOwogCXZvaWQJKCppcl9kZWluaXQpKHN0cnVjdCBpZWVlODAyMTF2YXAgKik7CiAJ dm9pZAkoKmlyX25vZGVfaW5pdCkoc3RydWN0IGllZWU4MDIxMV9ub2RlICopOwogCXZvaWQJKCpp cl9ub2RlX2RlaW5pdCkoc3RydWN0IGllZWU4MDIxMV9ub2RlICopOwogCWludAkoKmlyX3JhdGUp KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCB2b2lkICosIHVpbnQzMl90KTsKKwl2b2lkCSgqaXJf cmF0ZXMpKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8g Kik7CiAJdm9pZAkoKmlyX3R4X2NvbXBsZXRlKShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICos Ci0JICAgIAkJCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICosIGludCwKLQkgICAgCQkJ ICB2b2lkICosIHZvaWQgKik7CisJICAgIAkJCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2Rl ICosIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqKTsKIAl2b2lkCSgqaXJfdHhfdXBkYXRlKShj b25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICosCiAJICAgIAkJCWNvbnN0IHN0cnVjdCBpZWVlODAy MTFfbm9kZSAqLAogCSAgICAJCQl2b2lkICosIHZvaWQgKiwgdm9pZCAqKTsKQEAgLTU3LDggKzE0 MiwxMCBAQAogCiB2b2lkCWllZWU4MDIxMV9yYXRlY3RsX3JlZ2lzdGVyKGludCwgY29uc3Qgc3Ry dWN0IGllZWU4MDIxMV9yYXRlY3RsICopOwogdm9pZAlpZWVlODAyMTFfcmF0ZWN0bF91bnJlZ2lz dGVyKGludCk7Ci12b2lkCWllZWU4MDIxMV9yYXRlY3RsX2luaXQoc3RydWN0IGllZWU4MDIxMXZh cCAqKTsKK3ZvaWQJaWVlZTgwMjExX3JhdGVjdGxfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICos IHVpbnQzMl90KTsKIHZvaWQJaWVlZTgwMjExX3JhdGVjdGxfc2V0KHN0cnVjdCBpZWVlODAyMTF2 YXAgKiwgaW50KTsKK3ZvaWQJaWVlZTgwMjExX3JhdGVjdGxfY29tcGxldGVfcmNmbGFncyhzdHJ1 Y3QgaWVlZTgwMjExX25vZGUgKiwgCisJCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8qKTsK IAogTUFMTE9DX0RFQ0xBUkUoTV84MDIxMV9SQVRFQ1RMKTsKIApAQCAtOTMsMTAgKzE4MCwxOSBA QAogfQogCiBzdGF0aWMgdm9pZCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVjdGxfcmF0ZXMoc3Ry dWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZv KQoreworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CisKKwl2 YXAtPml2X3JhdGUtPmlyX3JhdGVzKG5pLCByY19pbmZvKTsKKwlpZWVlODAyMTFfcmF0ZWN0bF9j b21wbGV0ZV9yY2ZsYWdzKG5pLCByY19pbmZvKTsKK30KKworc3RhdGljIHZvaWQgX19pbmxpbmUK IGllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAg KnZhcCwKLSAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBpbnQgc3RhdHVzLCB2 b2lkICphcmcxLCB2b2lkICphcmcyKQorICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAq bmksIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbykKIHsKLQl2YXAtPml2X3JhdGUt PmlyX3R4X2NvbXBsZXRlKHZhcCwgbmksIHN0YXR1cywgYXJnMSwgYXJnMik7CisJdmFwLT5pdl9y YXRlLT5pcl90eF9jb21wbGV0ZSh2YXAsIG5pLCByY19pbmZvKTsKIH0KIAogc3RhdGljIHZvaWQg X19pbmxpbmUKQEAgLTExNSwzICsyMTEsODkgQEAKIAkJcmV0dXJuOwogCXZhcC0+aXZfcmF0ZS0+ aXJfc2V0aW50ZXJ2YWwodmFwLCBtc2Vjcyk7CiB9CisKK3N0YXRpYyBpbnQgX19pbmxpbmUKK2ll ZWU4MDIxMV9yYXRlY3RsX2hhc2NhcF9jdzQwKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAq bmkpCit7CisJcmV0dXJuIG5pLT5uaV9jaHcgPT0gNDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbmxp bmUKK2llZWU4MDIxMV9yYXRlY3RsX2hhc2NhcF9zaG9ydGdpKGNvbnN0IHN0cnVjdCBpZWVlODAy MTFfbm9kZSAqbmkpCit7CisJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSBuaS0+bmlfaWM7CisK KwlpZiAobmktPm5pX2NodyA9PSA0MCAmJgorCQlpYy0+aWNfaHRjYXBzICYgSUVFRTgwMjExX0hU Q0FQX1NIT1JUR0k0MCAmJgorCQluaS0+bmlfaHRjYXAgJiBJRUVFODAyMTFfSFRDQVBfU0hPUlRH STQwKQorCQlyZXR1cm4gSUVFRTgwMjExX1JBVEVDVExfVFJVRTsKKworCWlmIChuaS0+bmlfY2h3 ID09IDIwICYmCisJCWljLT5pY19odGNhcHMgJiBJRUVFODAyMTFfSFRDQVBfU0hPUlRHSTIwICYm CisJCW5pLT5uaV9odGNhcCAmIElFRUU4MDIxMV9IVENBUF9TSE9SVEdJMjApCisJCXJldHVybiBJ RUVFODAyMTFfUkFURUNUTF9UUlVFOworCisJcmV0dXJuIElFRUU4MDIxMV9SQVRFQ1RMX0ZBTFNF OworfQorCitzdGF0aWMgaW50IF9faW5saW5lCitpZWVlODAyMTFfcmF0ZWN0bF9oYXNjYXBfc3Ri Yyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworCXN0cnVjdCBpZWVlODAyMTFj b20gKmljID0gbmktPm5pX2ljOworCisJaWYgKGljLT5pY19odGNhcHMgJiBJRUVFODAyMTFfSFRD QVBfVFhTVEJDICYmCisJCW5pLT5uaV9odGNhcCAmIElFRUU4MDIxMV9IVENBUF9SWFNUQkNfMVNU UkVBTSAmJgorCQlJRUVFODAyMTFfUkFURUNUTF9IQVNDQVBfTVVMVFhDSEFJTihuaS0+bmlfdmFw KSkKKwkJcmV0dXJuIElFRUU4MDIxMV9SQVRFQ1RMX1RSVUU7CisJCisJcmV0dXJuIElFRUU4MDIx MV9SQVRFQ1RMX0ZBTFNFOworfQorCitzdGF0aWMgaW50IF9faW5saW5lCitpZWVlODAyMTFfcmF0 ZWN0bF9ub2RlX2lzMTFuKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCit7CisJaWYg KG5pLT5uaV9jaGFuID09IE5VTEwpCisJCXJldHVybiAoMCk7CisJaWYgKG5pLT5uaV9jaGFuID09 IElFRUU4MDIxMV9DSEFOX0FOWUMpCisJCXJldHVybiAoMCk7CisJcmV0dXJuIChJRUVFODAyMTFf SVNfQ0hBTl9IVChuaS0+bmlfY2hhbikpOworfQorCitfX2lubGluZSBzdGF0aWMgY29uc3Qgc3Ry dWN0IGllZWU4MDIxMV9yYXRlc2V0ICoKK2llZWU4MDIxMV9yYXRlY3RsX2dldF9yYXRlc2V0KGNv bnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCit7CisJcmV0dXJuIGllZWU4MDIxMV9yYXRl Y3RsX25vZGVfaXMxMW4obmkpID8gCisJCQkJKHN0cnVjdCBpZWVlODAyMTFfcmF0ZXNldCAqKSAm bmktPm5pX2h0cmF0ZXMgOgorCQkJCSZuaS0+bmlfcmF0ZXM7Cit9CisKK3N0YXRpYyB2b2lkIF9f aW5saW5lCitpZWVlODAyMTFfcmF0ZWN0bF91cGRhdGVfc3RhdChjb25zdCBzdHJ1Y3QgaWVlZTgw MjExdmFwICp2YXAsCisJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbykK K3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgKiBpcnMgPSBJRUVFODAyMTFfUkFURUNUTF9T VEFUKHZhcCk7CisJaXJzLT5pcnNfdHhjbnQgKz0gcmNfaW5mby0+aXJpX3R4Y250OworCWlycy0+ aXJzX2ZhaWxjbnQgKz0gcmNfaW5mby0+aXJpX2ZhaWxjbnQ7CisJaXJzLT5pcnNfcmV0cnljbnQg Kz0gcmNfaW5mby0+aXJpX3JldHJ5Y250OworCWlycy0+aXJzX3Nob3J0cmV0cnkgKz0gcmNfaW5m by0+aXJpX3Nob3J0cmV0cnk7CisJaXJzLT5pcnNfbG9uZ3JldHJ5ICs9IHJjX2luZm8tPmlyaV9s b25ncmV0cnk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5saW5lCitpZWVlODAyMTFfcmF0ZWN0bF9y Y19pbmZvX3NldChzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8sCisJCXVpbnQ4X3Qg dHhjbnQsIHVpbnQ4X3QgZmFpbGNudCwgdWludDMyX3QgZnJhbWVsZW4sCisJCXVpbnQ4X3Qgc2hv cnRyZXRyeSwgdWludDhfdCBsb25ncmV0cnksCisJCXVpbnQ4X3QgZmluYWx0c2ksIHVpbnQ4X3Qg dHhyYXRlKQoreworCXJjX2luZm8tPmlyaV90eGNudCA9IHR4Y250OworCXJjX2luZm8tPmlyaV9m YWlsY250ID0gZmFpbGNudDsKKwlyY19pbmZvLT5pcmlfb2tjbnQgPSB0eGNudCAtIGZhaWxjbnQ7 CisJcmNfaW5mby0+aXJpX2ZyYW1lbGVuID0gZnJhbWVsZW47CisJcmNfaW5mby0+aXJpX3Nob3J0 cmV0cnkgPSBzaG9ydHJldHJ5OworCXJjX2luZm8tPmlyaV9sb25ncmV0cnkgPSBsb25ncmV0cnk7 CisJcmNfaW5mby0+aXJpX3JldHJ5Y250ID0gc2hvcnRyZXRyeSArIGxvbmdyZXRyeTsKKwlyY19p bmZvLT5pcmlfZmluYWx0c2kgPSBmaW5hbHRzaTsKKwlyY19pbmZvLT5pcmlfdHhyYXRlID0gdHhy YXRlOworfQorCisjZW5kaWYKSW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bF9u b25lLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsX25vbmUu YwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsX25v bmUuYwkod29ya2luZyBjb3B5KQpAQCAtNDQsMTAgKzQ0LDI2IEBACiAKICNpbmNsdWRlIDxuZXQ4 MDIxMS9pZWVlODAyMTFfdmFyLmg+CiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVj dGwuaD4KKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bF9ub25lLmg+CiAKIHN0 YXRpYyB2b2lkCi1ub25lX2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwKQorbm9uZV9pbml0 KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgdWludDMyX3QgY2FwYWJpbGl0aWVzKQogeworCXN0 cnVjdCBpZWVlODAyMTFfbm9kZSAqbm9uZTsKKworCUtBU1NFUlQodmFwLT5pdl9ycyA9PSBOVUxM LCAoIiVzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIsIF9fZnVuY19fKSk7CisKKwlub25lID0gdmFw LT5pdl9ycyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ub25lKSwKKwkgICAgTV84 MDIxMV9SQVRFQ1RMLCBNX05PV0FJVHxNX1pFUk8pOworCWlmIChub25lID09IE5VTEwpIHsKKwkJ aWZfcHJpbnRmKHZhcC0+aXZfaWZwLCAiY291bGRuJ3QgYWxsb2MgcmF0ZWN0bCBzdHJ1Y3R1cmVc biIpOworCQlyZXR1cm47CisJfQorCisJc3RydWN0IGllZWU4MDIxMV9yY19zdGF0ICogaXJzID0g SUVFRTgwMjExX1JBVEVDVExfU1RBVCh2YXApOworCWlycy0+aXJzX2NhcGFiaWxpdGllcyA9IGNh cGFiaWxpdGllczsKKworCS8qIC4uLiAqLwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTksNiArNzUs MjUgQEAKIHN0YXRpYyB2b2lkCiBub25lX25vZGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25vZGUg Km5pKQogeworCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CisJc3RydWN0 IGllZWU4MDIxMV9ub25lICpub25lID0gdmFwLT5pdl9yczsKKwlzdHJ1Y3QgaWVlZTgwMjExX25v bmVfbm9kZSAqbm9uOworCisJaWYgKG5pLT5uaV9yY3RscyA9PSBOVUxMKSB7CisJCW5pLT5uaV9y Y3RscyA9IG5vbiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ub25lX25vZGUpLAor CQkgICAgTV84MDIxMV9SQVRFQ1RMLCBNX05PV0FJVHxNX1pFUk8pOworCQlpZiAobm9uID09IE5V TEwpIHsKKwkJCWlmX3ByaW50Zih2YXAtPml2X2lmcCwgImNvdWxkbid0IGFsbG9jIHBlci1ub2Rl IHJhdGVjdGwgIgorCQkJICAgICJzdHJ1Y3R1cmVcbiIpOworCQkJcmV0dXJuOworCQl9CisJfSBl bHNlCisJCW5vbiA9IG5pLT5uaV9yY3RsczsKKworCW5vbi0+bm9uX25vbmUgPSBub25lOworCisJ LyogLi4uICovCisJCiAJbmktPm5pX3R4cmF0ZSA9IG5pLT5uaV9yYXRlcy5yc19yYXRlc1swXSAm IElFRUU4MDIxMV9SQVRFX1ZBTDsKIH0KIApAQCAtNzgsOCArMTEzLDcgQEAKIAogc3RhdGljIHZv aWQKIG5vbmVfdHhfY29tcGxldGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLAotICAg IGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIGludCBvaywKLSAgICB2b2lkICphcmcx LCB2b2lkICphcmcyIF9fdW51c2VkKQorICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAq bmksIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbykKIHsKIH0KIApJbmRleDogc3lz L25ldDgwMjExL2llZWU4MDIxMV9yc3NhZGFwdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIx MS9pZWVlODAyMTFfcnNzYWRhcHQuYwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL25ldDgwMjEx L2llZWU4MDIxMV9yc3NhZGFwdC5jCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBACiAJ CQkJICAgIHBhcm0jI19kZW5vbSkKIAogc3RhdGljIHZvaWQJcnNzYWRhcHRfc2V0aW50ZXJ2YWwo Y29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLCBpbnQpOwotc3RhdGljIHZvaWQJcnNzYWRhcHRf aW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICopOworc3RhdGljIHZvaWQJcnNzYWRhcHRfaW5pdChz dHJ1Y3QgaWVlZTgwMjExdmFwICosIHVpbnQzMl90KTsKIHN0YXRpYyB2b2lkCXJzc2FkYXB0X2Rl aW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICopOwogc3RhdGljIHZvaWQJcnNzYWRhcHRfdXBkYXRl c3RhdHMoc3RydWN0IGllZWU4MDIxMV9yc3NhZGFwdF9ub2RlICopOwogc3RhdGljIHZvaWQJcnNz YWRhcHRfbm9kZV9pbml0KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqKTsKQEAgLTEyMSw3ICsxMjEs NyBAQAogfQogCiBzdGF0aWMgdm9pZAotcnNzYWRhcHRfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFw ICp2YXApCityc3NhZGFwdF9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgdWludDMyX3Qg Y2FwYWJpbGl0aWVzKQogewogCXN0cnVjdCBpZWVlODAyMTFfcnNzYWRhcHQgKnJzOwogCkBAIC0x MzQsNiArMTM0LDEwIEBACiAJCWlmX3ByaW50Zih2YXAtPml2X2lmcCwgImNvdWxkbid0IGFsbG9j IHJhdGVjdGwgc3RydWN0dXJlXG4iKTsKIAkJcmV0dXJuOwogCX0KKworCXN0cnVjdCBpZWVlODAy MTFfcmNfc3RhdCAqIGlycyA9IElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQodmFwKTsKKwlpcnMtPmly c19jYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXM7CisKIAlycy0+dmFwID0gdmFwOwogCXJzc2Fk YXB0X3NldGludGVydmFsKHZhcCwgNTAwIC8qIG1zZWNzICovKTsKIAlyc3NhZGFwdF9zeXNjdGxh dHRhY2godmFwLCB2YXAtPml2X3N5c2N0bCwgdmFwLT5pdl9vaWQpOwpJbmRleDogc3lzL25ldDgw MjExL2llZWU4MDIxMV9yc3NhZGFwdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIxMS9pZWVl ODAyMTFfcnNzYWRhcHQuaAkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL25ldDgwMjExL2llZWU4 MDIxMV9yc3NhZGFwdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaWZuZGVm IF9ORVQ4MDIxMV9JRUVFODAyMTFfUlNTQURBUFRfSF8KICNkZWZpbmUgX05FVDgwMjExX0lFRUU4 MDIxMV9SU1NBREFQVF9IXwogCisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwu aD4KKwogLyogRGF0YS1yYXRlIGFkYXB0YXRpb24gbG9vc2VseSBiYXNlZCBvbiAiTGluayBBZGFw dGF0aW9uIFN0cmF0ZWd5CiAgKiBmb3IgSUVFRSA4MDIuMTEgV0xBTiB2aWEgUmVjZWl2ZWQgU2ln bmFsIFN0cmVuZ3RoIE1lYXN1cmVtZW50IgogICogYnkgSmF2aWVyIGRlbCBQcmFkbyBQYXZvbiBh bmQgU3VuZ2h5dW4gQ2hvaS4KQEAgLTQzLDYgKzQ1LDcgQEAKICNkZWZpbmUJSUVFRTgwMjExX1JT U0FEQVBUX0JLVFBPV0VSCTMJLyogMioqX0JLVFBPV0VSICovCiAKIHN0cnVjdCBpZWVlODAyMTFf cnNzYWRhcHQgeworCXN0cnVjdCBpZWVlODAyMTFfcmNfc3RhdCByc3NhZGFwdF9zdGF0OwogCWNv bnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcDsKIAlpbnQJaW50ZXJ2YWw7CQkJLyogdXBkYXRl IGludGVydmFsICh0aWNrcykgKi8KIH07CkluZGV4OiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX2Ft cnIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX2FtcnIuYwkocmV2aXNp b24gMjU0ODI2KQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9hbXJyLmMJKHdvcmtpbmcgY29w eSkKQEAgLTQ3LDggKzQ3LDggQEAKIAogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV92YXIu aD4KICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfaHQuaD4KKyNpbmNsdWRlIDxuZXQ4MDIx MS9pZWVlODAyMTFfcmF0ZWN0bC5oPgogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9hbXJy Lmg+Ci0jaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KIAogI2RlZmluZSBp c19zdWNjZXNzKGFtbikJXAogCSgoYW1uKS0+YW1uX3JldHJ5Y250IDwgKGFtbiktPmFtbl90eGNu dCAvIDEwKQpAQCAtNTgsNyArNTgsNyBAQAogCSgoYW1uKS0+YW1uX3R4Y250ID4gMTApCiAKIHN0 YXRpYyB2b2lkCWFtcnJfc2V0aW50ZXJ2YWwoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLCBp bnQpOwotc3RhdGljIHZvaWQJYW1ycl9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKik7CitzdGF0 aWMgdm9pZAlhbXJyX2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqLCB1aW50MzJfdCk7CiBzdGF0 aWMgdm9pZAlhbXJyX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICopOwogc3RhdGljIHZvaWQJ YW1ycl9ub2RlX2luaXQoc3RydWN0IGllZWU4MDIxMV9ub2RlICopOwogc3RhdGljIHZvaWQJYW1y cl9ub2RlX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKik7CkBAIC02NSw5ICs2NSw5IEBA CiBzdGF0aWMgaW50CWFtcnJfdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfYW1yciAqLAogICAgIAkJ CXN0cnVjdCBpZWVlODAyMTFfYW1ycl9ub2RlICosIHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqKTsK IHN0YXRpYyBpbnQJYW1ycl9yYXRlKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCB2b2lkICosIHVp bnQzMl90KTsKK3N0YXRpYyB2b2lkCWFtcnJfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9ub2RlICos IHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqKTsKIHN0YXRpYyB2b2lkCWFtcnJfdHhfY29tcGxl dGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLAotICAgIAkJCWNvbnN0IHN0cnVjdCBpZWVl ODAyMTFfbm9kZSAqLCBpbnQsIAotCQkJdm9pZCAqLCB2b2lkICopOworICAgIAkJCWNvbnN0IHN0 cnVjdCBpZWVlODAyMTFfbm9kZSAqLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKik7CiBzdGF0 aWMgdm9pZAlhbXJyX3R4X3VwZGF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCiAJ CQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgdm9pZCAqLCB2b2lkICosIHZvaWQgKik7 CiBzdGF0aWMgdm9pZAlhbXJyX3N5c2N0bGF0dGFjaChzdHJ1Y3QgaWVlZTgwMjExdmFwICosCkBA IC04NSw2ICs4NSw3IEBACiAJLmlyX25vZGVfaW5pdAk9IGFtcnJfbm9kZV9pbml0LAogCS5pcl9u b2RlX2RlaW5pdAk9IGFtcnJfbm9kZV9kZWluaXQsCiAJLmlyX3JhdGUJPSBhbXJyX3JhdGUsCisJ LmlyX3JhdGVzCT0gYW1ycl9yYXRlcywKIAkuaXJfdHhfY29tcGxldGUJPSBhbXJyX3R4X2NvbXBs ZXRlLAogCS5pcl90eF91cGRhdGUJPSBhbXJyX3R4X3VwZGF0ZSwKIAkuaXJfc2V0aW50ZXJ2YWwJ PSBhbXJyX3NldGludGVydmFsLApAQCAtMTA1LDcgKzEwNiw3IEBACiB9CiAKIHN0YXRpYyB2b2lk Ci1hbXJyX2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwKQorYW1ycl9pbml0KHN0cnVjdCBp ZWVlODAyMTF2YXAgKnZhcCwgdWludDMyX3QgY2FwYWJpbGl0aWVzKQogewogCXN0cnVjdCBpZWVl ODAyMTFfYW1yciAqYW1ycjsKIApAQCAtMTE3LDYgKzExOCwxMCBAQAogCQlpZl9wcmludGYodmFw LT5pdl9pZnAsICJjb3VsZG4ndCBhbGxvYyByYXRlY3RsIHN0cnVjdHVyZVxuIik7CiAJCXJldHVy bjsKIAl9CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgKiBpcnMgPSBJRUVFODAyMTFfUkFU RUNUTF9TVEFUKHZhcCk7CisJaXJzLT5pcnNfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzOwor CiAJYW1yci0+YW1ycl9taW5fc3VjY2Vzc190aHJlc2hvbGQgPSBJRUVFODAyMTFfQU1SUl9NSU5f U1VDQ0VTU19USFJFU0hPTEQ7CiAJYW1yci0+YW1ycl9tYXhfc3VjY2Vzc190aHJlc2hvbGQgPSBJ RUVFODAyMTFfQU1SUl9NQVhfU1VDQ0VTU19USFJFU0hPTEQ7CiAJYW1ycl9zZXRpbnRlcnZhbCh2 YXAsIDUwMCAvKiBtcyAqLyk7CkBAIC0xMjksMTcgKzEzNCw2IEBACiAJZnJlZSh2YXAtPml2X3Jz LCBNXzgwMjExX1JBVEVDVEwpOwogfQogCi1zdGF0aWMgaW50Ci1hbXJyX25vZGVfaXNfMTFuKHN0 cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCi17Ci0KLQlpZiAobmktPm5pX2NoYW4gPT0gTlVMTCkK LQkJcmV0dXJuICgwKTsKLQlpZiAobmktPm5pX2NoYW4gPT0gSUVFRTgwMjExX0NIQU5fQU5ZQykK LQkJcmV0dXJuICgwKTsKLQlyZXR1cm4gKElFRUU4MDIxMV9JU19DSEFOX0hUKG5pLT5uaV9jaGFu KSk7Ci19Ci0KIHN0YXRpYyB2b2lkCiBhbXJyX25vZGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25v ZGUgKm5pKQogewpAQCAtMTU5LDYgKzE1Myw3IEBACiAJCX0KIAl9IGVsc2UKIAkJYW1uID0gbmkt Pm5pX3JjdGxzOworCiAJYW1uLT5hbW5fYW1yciA9IGFtcnI7CiAJYW1uLT5hbW5fc3VjY2VzcyA9 IDA7CiAJYW1uLT5hbW5fcmVjb3ZlcnkgPSAwOwpAQCAtMTY1LDIzICsxNjAsMTMgQEAKIAlhbW4t PmFtbl90eGNudCA9IGFtbi0+YW1uX3JldHJ5Y250ID0gMDsKIAlhbW4tPmFtbl9zdWNjZXNzX3Ro cmVzaG9sZCA9IGFtcnItPmFtcnJfbWluX3N1Y2Nlc3NfdGhyZXNob2xkOwogCi0JLyogMTFuIG9y IG5vdD8gUGljayB0aGUgcmlnaHQgcmF0ZXNldCAqLwotCWlmIChhbXJyX25vZGVfaXNfMTFuKG5p KSkgewotCQkvKiBYWFggZXcgKi8KLQkJSUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgw MjExX01TR19SQVRFQ1RMLCBuaSwKLQkJICAgICIlczogMTFuIG5vZGUiLCBfX2Z1bmNfXyk7Ci0J CXJzID0gKHN0cnVjdCBpZWVlODAyMTFfcmF0ZXNldCAqKSAmbmktPm5pX2h0cmF0ZXM7Ci0JfSBl bHNlIHsKLQkJSUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RM LCBuaSwKLQkJICAgICIlczogbm9uLTExbiBub2RlIiwgX19mdW5jX18pOwotCQlycyA9ICZuaS0+ bmlfcmF0ZXM7Ci0JfQorCXJzID0gaWVlZTgwMjExX3JhdGVjdGxfZ2V0X3JhdGVzZXQobmkpOwog CiAJLyogSW5pdGlhbCByYXRlIC0gbG93ZXN0ICovCiAJcmF0ZSA9IHJzLT5yc19yYXRlc1swXTsK IAogCS8qIFhYWCBjbGVhciB0aGUgYmFzaWMgcmF0ZSBmbGFnIGlmIGl0J3Mgbm90IDExbiAqLwot CWlmICghIGFtcnJfbm9kZV9pc18xMW4obmkpKQorCWlmICghIGllZWU4MDIxMV9yYXRlY3RsX25v ZGVfaXMxMW4obmkpKQogCQlyYXRlICY9IElFRUU4MDIxMV9SQVRFX1ZBTDsKIAogCS8qIHBpY2sg aW5pdGlhbCByYXRlIGZyb20gdGhlIHJhdGVzZXQgLSBIVCBvciBvdGhlcndpc2UgKi8KQEAgLTE4 OSw3ICsxNzQsNyBAQAogCSAgICBhbW4tPmFtbl9yaXgtLSkgewogCQkvKiBsZWdhY3kgLSBhbnl0 aGluZyA8IDM2bWJpdCwgc3RvcCBzZWFyY2hpbmcgKi8KIAkJLyogMTFuIC0gc3RvcCBhdCBNQ1M0 IC8gTUNTMTIgLyBNQ1MyOCAqLwotCQlpZiAoYW1ycl9ub2RlX2lzXzExbihuaSkgJiYKKwkJaWYg KGllZWU4MDIxMV9yYXRlY3RsX25vZGVfaXMxMW4obmkpICYmCiAJCSAgICAocnMtPnJzX3JhdGVz W2Ftbi0+YW1uX3JpeF0gJiAweDcpIDwgNCkKIAkJCWJyZWFrOwogCQllbHNlIGlmICgocnMtPnJz X3JhdGVzW2Ftbi0+YW1uX3JpeF0gJiBJRUVFODAyMTFfUkFURV9WQUwpIDw9IDcyKQpAQCAtMTk4 LDcgKzE4Myw3IEBACiAJfQogCiAJLyogaWYgdGhlIHJhdGUgaXMgYW4gMTFuIHJhdGUsIGVuc3Vy ZSB0aGUgTUNTIGJpdCBpcyBzZXQgKi8KLQlpZiAoYW1ycl9ub2RlX2lzXzExbihuaSkpCisJaWYg KGllZWU4MDIxMV9yYXRlY3RsX25vZGVfaXMxMW4obmkpKQogCQlyYXRlIHw9IElFRUU4MDIxMV9S QVRFX01DUzsKIAogCS8qIEFzc2lnbiBpbml0aWFsIHJhdGUgZnJvbSB0aGUgcmF0ZXNldCAqLwpA QCAtMjI2LDE0ICsyMTEsOSBAQAogCiAJS0FTU0VSVChpc19lbm91Z2goYW1uKSwgKCJ0eGNudCAl ZCIsIGFtbi0+YW1uX3R4Y250KSk7CiAKLQkvKiAxMW4gb3Igbm90PyBQaWNrIHRoZSByaWdodCBy YXRlc2V0ICovCi0JaWYgKGFtcnJfbm9kZV9pc18xMW4obmkpKSB7Ci0JCS8qIFhYWCBldyAqLwot CQlycyA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhdGVzZXQgKikgJm5pLT5uaV9odHJhdGVzOwotCX0g ZWxzZSB7Ci0JCXJzID0gJm5pLT5uaV9yYXRlczsKLQl9CisJcnMgPSBpZWVlODAyMTFfcmF0ZWN0 bF9nZXRfcmF0ZXNldChuaSk7CiAKKwogCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAsIElFRUU4 MDIxMV9NU0dfUkFURUNUTCwgbmksCiAJICAgICJBTVJSOiBjdXJyZW50IHJhdGUgJWQsIHR4Y250 PSVkLCByZXRyeWNudD0lZCIsCiAJICAgIHJzLT5yc19yYXRlc1tyaXhdICYgSUVFRTgwMjExX1JB VEVfVkFMLApAQCAtMzA0LDEzICsyODQsNyBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0 ZXNldCAqcnMgPSBOVUxMOwogCWludCByaXg7CiAKLQkvKiAxMW4gb3Igbm90PyBQaWNrIHRoZSBy aWdodCByYXRlc2V0ICovCi0JaWYgKGFtcnJfbm9kZV9pc18xMW4obmkpKSB7Ci0JCS8qIFhYWCBl dyAqLwotCQlycyA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhdGVzZXQgKikgJm5pLT5uaV9odHJhdGVz OwotCX0gZWxzZSB7Ci0JCXJzID0gJm5pLT5uaV9yYXRlczsKLQl9CisJcnMgPSBpZWVlODAyMTFf cmF0ZWN0bF9nZXRfcmF0ZXNldChuaSk7CiAKIAlpZiAoaXNfZW5vdWdoKGFtbikgJiYgKHRpY2tz IC0gYW1uLT5hbW5fdGlja3MpID4gYW1yci0+YW1ycl9pbnRlcnZhbCkgewogCQlyaXggPSBhbXJy X3VwZGF0ZShhbXJyLCBhbW4sIG5pKTsKQEAgLTMxOCw3ICsyOTIsNyBAQAogCQkJLyogdXBkYXRl IHB1YmxpYyByYXRlICovCiAJCQluaS0+bmlfdHhyYXRlID0gcnMtPnJzX3JhdGVzW3JpeF07CiAJ CQkvKiBYWFggc3RyaXAgYmFzaWMgcmF0ZSBmbGFnIGZyb20gdHhyYXRlLCBpZiBub24tMTFuICov Ci0JCQlpZiAoYW1ycl9ub2RlX2lzXzExbihuaSkpCisJCQlpZiAoaWVlZTgwMjExX3JhdGVjdGxf bm9kZV9pczExbihuaSkpCiAJCQkJbmktPm5pX3R4cmF0ZSB8PSBJRUVFODAyMTFfUkFURV9NQ1M7 CiAJCQllbHNlCiAJCQkJbmktPm5pX3R4cmF0ZSAmPSBJRUVFODAyMTFfUkFURV9WQUw7CkBAIC0z MzAsNiArMzA0LDY2IEBACiAJcmV0dXJuIHJpeDsKIH0KIAorc3RhdGljIHZvaWQKK2FtcnJfcmF0 ZXMoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpy Y19pbmZvKQoreworI2RlZmluZQlSQVRFKF9peCkJKHJzLT5yc19yYXRlc1soX2l4KV0gJiBJRUVF ODAyMTFfUkFURV9WQUwpCisjZGVmaW5lCU1DUyhfaXgpCShycy0+cnNfcmF0ZXNbKF9peCldIHwg SUVFRTgwMjExX1JBVEVfTUNTKQorCXN0cnVjdCBpZWVlODAyMTFfcmNfc2VyaWVzICpyYyA9IHJj X2luZm8tPmlyaV9yYzsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVzZXQgKnJzID0gTlVM TDsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0ID0gTlVMTDsKKwlpbnQg cml4LCBjb2RlOworCisJcnMgPSBpZWVlODAyMTFfcmF0ZWN0bF9nZXRfcmF0ZXNldChuaSk7CisJ cnQgPSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZShuaS0+bmlfaWMtPmljX2N1cmNoYW4pOworCisJ cml4ID0gYW1ycl9yYXRlKG5pLCBOVUxMLCAwKTsKKworCXJjWzBdLmZsYWdzID0gcmNbMV0uZmxh Z3MgPSByY1syXS5mbGFncyA9IHJjWzNdLmZsYWdzID0gMDsKKworCWlmIChycy0+cnNfbnJhdGVz ID4gMCkgeworCQljb2RlID0gaWVlZTgwMjExX3JhdGVjdGxfbm9kZV9pczExbihuaSk/IE1DUyhy aXgpIDogUkFURShyaXgpOworCQlyY1swXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W2NvZGVd OworCisJCWlmIChJRUVFODAyMTFfUkFURUNUTF9IQVNDQVBfTVJSKG5pLT5uaV92YXApKSB7CisJ CQlyY1swXS50cmllcyA9IDE7CisJCQlyY1sxXS50cmllcyA9IDE7CisJCQlyY1syXS50cmllcyA9 IDE7CisJCQlyY1szXS50cmllcyA9IDE7CisJCQlpZiAoLS1yaXggPj0gMCkgeworCQkJCWNvZGUg PSBpZWVlODAyMTFfcmF0ZWN0bF9ub2RlX2lzMTFuKG5pKT8gTUNTKHJpeCkgOiBSQVRFKHJpeCk7 CisJCQkJcmNbMV0ucml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFtjb2RlXTsKKwkJCX0gZWxzZSB7 CisJCQkJcmNbMV0ucml4ID0gMDsKKwkJCX0KKwkJCWlmICgtLXJpeCA+PSAwKSB7CisJCQkJY29k ZSA9IGllZWU4MDIxMV9yYXRlY3RsX25vZGVfaXMxMW4obmkpPyBNQ1Mocml4KSA6IFJBVEUocml4 KTsKKwkJCQlyY1syXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W2NvZGVdOworCQkJfSBlbHNl IHsKKwkJCQlyY1syXS5yaXggPSAwOworCQkJfQorCQkJaWYgKHJpeCA+IDApIHsKKwkJCQkvKiBO Qjogb25seSBkbyB0aGlzIGlmIHdlIGRpZG4ndCBhbHJlYWR5IGRvIGl0IGFib3ZlICovCisJCQkJ Y29kZSA9IGllZWU4MDIxMV9yYXRlY3RsX25vZGVfaXMxMW4obmkpPyBNQ1MoMCkgOiBSQVRFKDAp OworCQkJCXJjWzNdLnJpeCA9IHJ0LT5yYXRlQ29kZVRvSW5kZXhbY29kZV07CisJCQl9IGVsc2Ug eworCQkJCXJjWzNdLnJpeCA9IDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyY1swXS50cmllcyA9 IElFRUU4MDIxMV9SQVRFQ1RMX1RYTUFYVFJZOworCisJCQlyY1sxXS50cmllcyA9IDA7CisJCQly Y1syXS50cmllcyA9IDA7CisJCQlyY1szXS50cmllcyA9IDA7CisJCQlyY1sxXS5yaXggPSAwOwor CQkJcmNbMl0ucml4ID0gMDsKKwkJCXJjWzNdLnJpeCA9IDA7CisJCX0KKwl9CisjdW5kZWYgUkFU RQorI3VuZGVmIE1DUworfQorCiAvKgogICogVXBkYXRlIHN0YXRpc3RpY3Mgd2l0aCB0eCBjb21w bGV0ZSBzdGF0dXMuICBPayBpcyBub24temVybwogICogaWYgdGhlIHBhY2tldCBpcyBrbm93biB0 byBiZSBBQ0snZC4gIFJldHJpZXMgaGFzIHRoZSBudW1iZXIKQEAgLTMzNywxNiArMzcxLDE2IEBA CiAgKi8KIHN0YXRpYyB2b2lkCiBhbXJyX3R4X2NvbXBsZXRlKGNvbnN0IHN0cnVjdCBpZWVlODAy MTF2YXAgKnZhcCwKLSAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBpbnQgb2ss Ci0gICAgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMiBfX3VudXNlZCkKKyAgICBjb25zdCBzdHJ1Y3Qg aWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8pCiB7 CiAJc3RydWN0IGllZWU4MDIxMV9hbXJyX25vZGUgKmFtbiA9IG5pLT5uaV9yY3RsczsKLQlpbnQg cmV0cmllcyA9ICooaW50ICopYXJnMTsKIAotCWFtbi0+YW1uX3R4Y250Kys7Ci0JaWYgKG9rKQot CQlhbW4tPmFtbl9zdWNjZXNzKys7Ci0JYW1uLT5hbW5fcmV0cnljbnQgKz0gcmV0cmllczsKKwkv KiB1cGRhdGUgcGVyIHZhcCBzdGF0aXN0aWNzICovCisJaWVlZTgwMjExX3JhdGVjdGxfdXBkYXRl X3N0YXQodmFwLCByY19pbmZvKTsKKworCWFtbi0+YW1uX3R4Y250ICs9IHJjX2luZm8tPmlyaV90 eGNudDsKKwlhbW4tPmFtbl9zdWNjZXNzICs9IChyY19pbmZvLT5pcmlfdHhjbnQgLSByY19pbmZv LT5pcmlfZmFpbGNudCk7CisJYW1uLT5hbW5fcmV0cnljbnQgKz0gcmNfaW5mby0+aXJpX3JldHJ5 Y250OwogfQogCiAvKgpJbmRleDogc3lzL25ldDgwMjExL2llZWU4MDIxMV9hbXJyLmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9hbXJyLmgJKHJldmlzaW9uIDI1NDgyNikK KysrIHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfYW1yci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2 ICsyMCw3IEBACiAjaWZuZGVmIF9ORVQ4MDIxMV9JRUVFODAyMTFfQU1SUl9IXwogI2RlZmluZSBf TkVUODAyMTFfSUVFRTgwMjExX0FNUlJfSF8KIAorI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIx MV9yYXRlY3RsLmg+CiAvKi0KICAqIE5haXZlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBZGFwdGl2 ZSBNdWx0aSBSYXRlIFJldHJ5IGFsZ29yaXRobToKICAqCkBAIC0zNSw2ICszNiw3IEBACiBzdHJ1 Y3QgaWVlZTgwMjExdmFwOwogCiBzdHJ1Y3QgaWVlZTgwMjExX2FtcnIgeworCXN0cnVjdCBpZWVl ODAyMTFfcmNfc3RhdCBhbXJyX3N0YXQ7CiAJdV9pbnQJYW1ycl9taW5fc3VjY2Vzc190aHJlc2hv bGQ7CiAJdV9pbnQJYW1ycl9tYXhfc3VjY2Vzc190aHJlc2hvbGQ7CiAJaW50CWFtcnJfaW50ZXJ2 YWw7CQkvKiB1cGRhdGUgaW50ZXJ2YWwgKHRpY2tzKSAqLwpJbmRleDogc3lzL25ldDgwMjExL2ll ZWU4MDIxMV9yYXRlY3RsX25vbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0ODAyMTEvaWVlZTgw MjExX3JhdGVjdGxfbm9uZS5oCShyZXZpc2lvbiAwKQorKysgc3lzL25ldDgwMjExL2llZWU4MDIx MV9yYXRlY3RsX25vbmUuaAkocmV2aXNpb24gMjU2ODM3KQpAQCAtMCwwICsxLDM4IEBACisvKi0K KyAqIENvcHlyaWdodCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxjY3FpbkBGcmVlQlNELm9yZz4K KyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0 aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBo ZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xB SU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xV RElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5Z IFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBB TlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFU QSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJ R0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4K KyAqLworCisjaWZuZGVmIF9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9OT05FX0hfCisjZGVm aW5lIF9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9OT05FX0hfCisKKyNpbmNsdWRlIDxuZXQ4 MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgorCisvKgorICogUmF0ZSBjb250cm9sIHNldHRpbmdz LgorICovCisKK3N0cnVjdCBpZWVlODAyMTFfbm9uZSB7CisJc3RydWN0IGllZWU4MDIxMV9yY19z dGF0IG5vbmVfc3RhdDsKKwkvKiBvdGhlciBzdHVmZnMgKi8KK307CisKKy8qCisgKiBSYXRlIGNv bnRyb2wgc3RhdGUgZm9yIGEgZ2l2ZW4gbm9kZS4KKyAqLworc3RydWN0IGllZWU4MDIxMV9ub25l X25vZGUgeworCXN0cnVjdCBpZWVlODAyMTFfbm9uZSAqbm9uX25vbmU7Cit9OworCisjZW5kaWYg LyogX05FVDgwMjExX0lFRUU4MDIxMV9SQVRFQ1RMX05PTkVfSF8gKi8KSW5kZXg6IHN5cy9uZXQ4 MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldDgwMjExL2ll ZWU4MDIxMV9yY19zYW1wbGUuYwkocmV2aXNpb24gMCkKKysrIHN5cy9uZXQ4MDIxMS9pZWVlODAy MTFfcmNfc2FtcGxlLmMJKHJldmlzaW9uIDI1NjgzNykKQEAgLTAsMCArMSwxMTQxIEBACisvKiAk RnJlZUJTRDogaGVhZC9zeXMvZGV2L2F0aC9hdGhfcmF0ZS9zYW1wbGUvc2FtcGxlLmMgMjQ4NTcz IDIwMTMtMDItMjcgMDQ6MzM6MDZaIGFkcmlhbiAkKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMp IDIwMDUgSm9obiBCaWNrZXQKKyAqIENvcHlyaWdodCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxj Y3FpbkBGcmVlQlNELm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQg QU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisg KiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgIm9wdF93bGFuLmgi CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5j bHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxz eXMvc3lzY3RsLmg+CisKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfbWVk aWEuaD4KKworI2lmZGVmIElORVQKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8 bmV0aW5ldC9pZl9ldGhlci5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAy MTFfdmFyLmg+CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX2h0Lmg+CisjaW5jbHVkZSA8 bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAy MTFfcmNfc2FtcGxlLmg+CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JjX3NhbXBsZV90 eHNjaGVkLmg+CisKK3N0YXRpYyB2b2lkCXNhbXBsZV9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAg KiwgdWludDMyX3QpOworc3RhdGljIHZvaWQJc2FtcGxlX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjEx dmFwICopOworc3RhdGljIHZvaWQJc2FtcGxlX25vZGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25v ZGUgKik7CitzdGF0aWMgdm9pZAlzYW1wbGVfbm9kZV9kZWluaXQoc3RydWN0IGllZWU4MDIxMV9u b2RlICopOworc3RhdGljIGludAlzYW1wbGVfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwg dm9pZCAqLCB1aW50MzJfdCk7CitzdGF0aWMgdm9pZAlzYW1wbGVfdHhfY29tcGxldGUoY29uc3Qg c3RydWN0IGllZWU4MDIxMXZhcCAqLAorICAgIAkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9k ZSAqLCBpbnQsIAorCQkJdm9pZCAqLCB2b2lkICopOworc3RhdGljIHZvaWQJc2FtcGxlX3R4X3Vw ZGF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCisJCQljb25zdCBzdHJ1Y3QgaWVl ZTgwMjExX25vZGUgKiwgdm9pZCAqLCB2b2lkICosIHZvaWQgKik7CitzdGF0aWMgdm9pZAlzYW1w bGVfc2V0aW50ZXJ2YWwoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLCBpbnQpOworCisvKiBu dW1iZXIgb2YgcmVmZXJlbmNlcyBmcm9tIG5ldDgwMjExIGxheWVyICovCitzdGF0aWMJaW50IG5y ZWZzID0gMDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZWN0bCBzYW1wbGUg PSB7CisJLmlyX25hbWUJPSAic2FtcGxlIiwKKwkuaXJfYXR0YWNoCT0gTlVMTCwKKwkuaXJfZGV0 YWNoCT0gTlVMTCwKKwkuaXJfaW5pdAk9IHNhbXBsZV9pbml0LAorCS5pcl9kZWluaXQJPSBzYW1w bGVfZGVpbml0LAorCS5pcl9ub2RlX2luaXQJPSBzYW1wbGVfbm9kZV9pbml0LAorCS5pcl9ub2Rl X2RlaW5pdAk9IHNhbXBsZV9ub2RlX2RlaW5pdCwKKwkuaXJfcmF0ZQk9IHNhbXBsZV9yYXRlLAor CS5pcl9yYXRlcwk9IHNhbXBsZV9yYXRlcywKKwkuaXJfdHhfY29tcGxldGUJPSBzYW1wbGVfdHhf Y29tcGxldGUsCisJLmlyX3R4X3VwZGF0ZQk9IHNhbXBsZV90eF91cGRhdGUsCisJLmlyX3NldGlu dGVydmFsCT0gc2FtcGxlX3NldGludGVydmFsLAorfTsKK0lFRUU4MDIxMV9SQVRFQ1RMX01PRFVM RShzYW1wbGUsIDEpOworSUVFRTgwMjExX1JBVEVDVExfQUxHKHNhbXBsZSwgSUVFRTgwMjExX1JB VEVDVExfU0FNUExFLCBzYW1wbGUpOworCitzdGF0aWMgdm9pZAorc2FtcGxlX2luaXQoc3RydWN0 IGllZWU4MDIxMXZhcCAqdmFwLCB1aW50MzJfdCBjYXBhYmlsaXRpZXMpCit7CisJc3RydWN0IGll ZWU4MDIxMV9zYW1wbGUgKnNhbXBsZTsKKworCUtBU1NFUlQodmFwLT5pdl9ycyA9PSBOVUxMLCAo IiVzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIsIF9fZnVuY19fKSk7CisKKwlzYW1wbGUgPSB2YXAt Pml2X3JzID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSksCisJICAgIE1f ODAyMTFfUkFURUNUTCwgTV9OT1dBSVR8TV9aRVJPKTsKKwlpZiAoc2FtcGxlID09IE5VTEwpIHsK KwkJaWZfcHJpbnRmKHZhcC0+aXZfaWZwLCAiY291bGRuJ3QgYWxsb2MgcmF0ZWN0bCBzdHJ1Y3R1 cmVcbiIpOworCQlyZXR1cm47CisJfQorCisJc3RydWN0IGllZWU4MDIxMV9yY19zdGF0ICogaXJz ID0gSUVFRTgwMjExX1JBVEVDVExfU1RBVCh2YXApOworCWlycy0+aXJzX2NhcGFiaWxpdGllcyA9 IGNhcGFiaWxpdGllczsKKworCXNhbXBsZS0+c2FtcGxlX3Ntb290aGluZ19yYXRlID0gNzU7CQkv KiBld21hIHBlcmNlbnRhZ2UgKFswLi45OV0pICovCisJc2FtcGxlLT5zYW1wbGVfc21vb3RoaW5n X21pbnBhY2tldHMgPSAxMDAgLyAoMTAwIC0gc2FtcGxlLT5zYW1wbGVfc21vb3RoaW5nX3JhdGUp OworCXNhbXBsZS0+c2FtcGxlX3JhdGUgPSAxMDsJCQkvKiAldGltZSB0byB0cnkgZGlmZiB0eCBy YXRlcyAqLworCXNhbXBsZS0+c2FtcGxlX21heF9zdWNjZXNzaXZlX2ZhaWx1cmVzID0gMzsJLyog dGhyZXNob2xkIGZvciByYXRlIHNhbXBsaW5nKi8KKwlzYW1wbGUtPnNhbXBsZV9zdGFsZV9mYWls dXJlX3RpbWVvdXQgPSAxMCAqIGh6OwkvKiAxMCBzZWNvbmRzICovCisJc2FtcGxlLT5zYW1wbGVf bWluX3N3aXRjaCA9IGh6OwkJCS8qIDEgc2Vjb25kICovCisJc2FtcGxlX3NldGludGVydmFsKHZh cCwgNTAwIC8qIG1zICovKTsgCS8qIGFjdHVhbGx5IGRvIG5vdGhpbmcgKi8KKwlzYW1wbGVfc3lz Y3RsYXR0YWNoKHZhcCwgdmFwLT5pdl9zeXNjdGwsIHZhcC0+aXZfb2lkKTsKK30KKworc3RhdGlj IHZvaWQKK3NhbXBsZV9kZWluaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwKQoreworCWZyZWUo dmFwLT5pdl9ycywgTV84MDIxMV9SQVRFQ1RMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0 eHNjaGVkdWxlICptcnJfc2NoZWR1bGVzW0lFRUU4MDIxMV9NT0RFX01BWCsyXSA9IHsKKwlOVUxM LAkJLyogSUVFRTgwMjExX01PREVfQVVUTyAqLworCXNlcmllc18xMWEsCS8qIElFRUU4MDIxMV9N T0RFXzExQSAqLworCXNlcmllc18xMWcsCS8qIElFRUU4MDIxMV9NT0RFXzExQiAqLworCXNlcmll c18xMWcsCS8qIElFRUU4MDIxMV9NT0RFXzExRyAqLworCU5VTEwsCQkvKiBJRUVFODAyMTFfTU9E RV9GSCAqLworCXNlcmllc18xMWEsCS8qIElFRUU4MDIxMV9NT0RFX1RVUkJPX0EgKi8KKwlzZXJp ZXNfMTFnLAkvKiBJRUVFODAyMTFfTU9ERV9UVVJCT19HICovCisJc2VyaWVzXzExYSwJLyogSUVF RTgwMjExX01PREVfU1RVUkJPX0EgKi8KKwlzZXJpZXNfMTFuYSwJLyogSUVFRTgwMjExX01PREVf MTFOQSAqLworCXNlcmllc18xMW5nLAkvKiBJRUVFODAyMTFfTU9ERV8xMU5HICovCisJc2VyaWVz X2hhbGYsCS8qIElFRUU4MDIxMV9NT0RFX0hBTEYgKi8KKwlzZXJpZXNfcXVhcnRlciwJLyogSUVF RTgwMjExX01PREVfUVVBUlRFUiAqLworfTsKKworc3RhdGljIHZvaWQKK3NhbXBsZV9ub2RlX2lu aXQoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSkKK3sKKyNkZWZpbmUJUkFURShfaXgpCShuaS0+ bmlfcmF0ZXMucnNfcmF0ZXNbKF9peCldICYgSUVFRTgwMjExX1JBVEVfVkFMKQorI2RlZmluZQlE T1QxMVJBVEUoX2l4KQkocnQtPmluZm9bKF9peCldLmRvdDExUmF0ZSAmIElFRUU4MDIxMV9SQVRF X1ZBTCkKKyNkZWZpbmUJTUNTKF9peCkJKG5pLT5uaV9odHJhdGVzLnJzX3JhdGVzW19peF0gfCBJ RUVFODAyMTFfUkFURV9NQ1MpCisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gbmktPm5pX3Zh cDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSAqc2FtcGxlID0gdmFwLT5pdl9yczsKKwlzdHJ1 Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpZWVl ODAyMTFfcmF0ZV90YWJsZSAqcnQgPSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZSh2YXAtPml2X2lj LT5pY19jdXJjaGFuKTsKKwllbnVtIGllZWU4MDIxMV9waHltb2RlIGN1cm1vZGUgPSBpZWVlODAy MTFfY2hhbjJtb2RlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOworCWludCB4LCB5LCByaXg7CisK KwlpZiAobmktPm5pX3JjdGxzID09IE5VTEwpIHsKKwkJbmktPm5pX3JjdGxzID0gc2FuID0gbWFs bG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlKSwKKwkJICAgIE1fODAyMTFf UkFURUNUTCwgTV9OT1dBSVR8TV9aRVJPKTsKKwkJaWYgKHNhbiA9PSBOVUxMKSB7CisJCQlpZl9w cmludGYodmFwLT5pdl9pZnAsICJjb3VsZG4ndCBhbGxvYyBwZXItbm9kZSByYXRlY3RsICIKKwkJ CSAgICAic3RydWN0dXJlXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZQorCQlzYW4gPSBu aS0+bmlfcmN0bHM7CisJCisJc2FuLT5zYW5fc2FtcGxlID0gc2FtcGxlOworCisJS0FTU0VSVChy dCAhPSBOVUxMLCAoIm5vIHJhdGUgdGFibGUsIG1vZGUgJXUiLCBjdXJtb2RlKSk7CisKKwlzYW4t PnNjaGVkID0gbXJyX3NjaGVkdWxlc1tjdXJtb2RlXTsKKwlLQVNTRVJUKHNhbi0+c2NoZWQgIT0g TlVMTCwgKCJubyBtcnIgc2NoZWR1bGUgZm9yIG1vZGUgJXUiLCBjdXJtb2RlKSk7CisKKwlzYW4t PnN0YXRpY19yaXggPSAtMTsKKwlzYW1wbGVfdXBkYXRlX3N0YXRpY19yaXgobmkpOworCisJLyoK KwkgKiBDb25zdHJ1Y3QgYSBiaXRtYXNrIG9mIHVzYWJsZSByYXRlcy4gIFRoaXMgaGFzIGFsbAor CSAqIG5lZ290aWF0ZWQgcmF0ZXMgbWludXMgdGhvc2UgbWFya2VkIGJ5IHRoZSBoYWwgYXMKKwkg KiB0byBiZSBpZ25vcmVkIGZvciBkb2luZyByYXRlIGNvbnRyb2wuCisJICovCisJc2FuLT5yYXRl bWFzayA9IDA7CisKKwkvKiBNQ1MgcmF0ZXMgKi8KKwlpZiAobmktPm5pX2ZsYWdzICYgSUVFRTgw MjExX05PREVfSFQpIHsKKwkJZm9yICh4ID0gMDsgeCA8IG5pLT5uaV9odHJhdGVzLnJzX25yYXRl czsgeCsrKSB7CisJCQlyaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W01DUyh4KV07CisJCQlpZiAo cml4ID09IDB4ZmYpCisJCQkJY29udGludWU7CisJCQkvKiBza2lwIHJhdGVzIG1hcmtlZCBicm9r ZW4gYnkgaGFsICovCisJCQlpZiAoIXJ0LT5pbmZvW3JpeF0udmFsaWQpCisJCQkJY29udGludWU7 CisJCQlLQVNTRVJUKHJpeCA8IFNBTVBMRV9NQVhSQVRFUywKKwkJCSAgICAoIm1jcyAldSBoYXMg cml4ICVkIiwgTUNTKHgpLCByaXgpKTsKKwkJCXNhbi0+cmF0ZW1hc2sgfD0gKHVpbnQ2NF90KSAx PDxyaXg7CisJCX0KKwl9CisKKwkvKiBMZWdhY3kgcmF0ZXMgKi8KKwlmb3IgKHggPSAwOyB4IDwg bmktPm5pX3JhdGVzLnJzX25yYXRlczsgeCsrKSB7CisJCXJpeCA9IHJ0LT5yYXRlQ29kZVRvSW5k ZXhbUkFURSh4KV07CisJCWlmIChyaXggPT0gMHhmZikKKwkJCWNvbnRpbnVlOworCQkvKiBza2lw IHJhdGVzIG1hcmtlZCBicm9rZW4gYnkgaGFsICovCisJCWlmICghcnQtPmluZm9bcml4XS52YWxp ZCkKKwkJCWNvbnRpbnVlOworCQlLQVNTRVJUKHJpeCA8IFNBTVBMRV9NQVhSQVRFUywKKwkJICAg ICgicmF0ZSAldSBoYXMgcml4ICVkIiwgUkFURSh4KSwgcml4KSk7CisJCXNhbi0+cmF0ZW1hc2sg fD0gKHVpbnQ2NF90KSAxPDxyaXg7CisJfQorCisJZm9yICh5ID0gMDsgeSA8IE5VTV9QQUNLRVRf U0laRV9CSU5TOyB5KyspIHsKKwkJaW50IHNpemUgPSBiaW5fdG9fc2l6ZSh5KTsKKwkJdWludDY0 X3QgbWFzazsKKworCQlzYW4tPnBhY2tldHNfc2VudFt5XSA9IDA7CisJCXNhbi0+Y3VycmVudF9z YW1wbGVfcml4W3ldID0gLTE7CisJCXNhbi0+bGFzdF9zYW1wbGVfcml4W3ldID0gMDsKKwkJLyog WFhYIHN0YXJ0IHdpdGggZmlyc3QgdmFsaWQgcmF0ZSAqLworCQlzYW4tPmN1cnJlbnRfcml4W3ld ID0gZmZzKHNhbi0+cmF0ZW1hc2spLTE7CisJCQorCQkvKgorCQkgKiBJbml0aWFsaXplIHRoZSBz dGF0aXN0aWNzIGJ1Y2tldHM7IHRoZXNlIGFyZQorCQkgKiBpbmRleGVkIGJ5IHRoZSByYXRlIGNv ZGUgaW5kZXguCisJCSAqLworCQlmb3IgKHJpeCA9IDAsIG1hc2sgPSBzYW4tPnJhdGVtYXNrOyBt YXNrICE9IDA7IHJpeCsrLCBtYXNrID4+PSAxKSB7CisJCQlpZiAoKG1hc2sgJiAxKSA9PSAwKQkJ Lyogbm90IGEgdmFsaWQgcmF0ZSAqLworCQkJCWNvbnRpbnVlOworCQkJc2FuLT5zdGF0c1t5XVty aXhdLnN1Y2Nlc3NpdmVfZmFpbHVyZXMgPSAwOworCQkJc2FuLT5zdGF0c1t5XVtyaXhdLnRyaWVz ID0gMDsKKwkJCXNhbi0+c3RhdHNbeV1bcml4XS50b3RhbF9wYWNrZXRzID0gMDsKKwkJCXNhbi0+ c3RhdHNbeV1bcml4XS5wYWNrZXRzX2Fja2VkID0gMDsKKwkJCXNhbi0+c3RhdHNbeV1bcml4XS5s YXN0X3R4ID0gMDsKKwkJCXNhbi0+c3RhdHNbeV1bcml4XS5ld21hX3BjdCA9IDA7CisJCQkKKwkJ CXNhbi0+c3RhdHNbeV1bcml4XS5wZXJmZWN0X3R4X3RpbWUgPQorCQkJICAgIGNhbGNfdXNlY3Nf dW5pY2FzdF9wYWNrZXQodmFwLCBzaXplLCByaXgsIDAsIDAsCisJCQkgICAgKG5pLT5uaV9jaHcg PT0gNDApKTsKKwkJCXNhbi0+c3RhdHNbeV1bcml4XS5hdmVyYWdlX3R4X3RpbWUgPQorCQkJICAg IHNhbi0+c3RhdHNbeV1bcml4XS5wZXJmZWN0X3R4X3RpbWU7CisJCX0KKwl9CisKKwkvKiBzZXQg dGhlIHZpc2libGUgYml0LXJhdGUgKi8KKwlpZiAoc2FuLT5zdGF0aWNfcml4ICE9IC0xKQorCQlu aS0+bmlfdHhyYXRlID0gRE9UMTFSQVRFKHNhbi0+c3RhdGljX3JpeCk7CisJZWxzZQorCQluaS0+ bmlfdHhyYXRlID0gUkFURSgwKTsKKyN1bmRlZiBSQVRFCisjdW5kZWYgRE9UMTFSQVRFCisjdW5k ZWYgTUNTCit9CisKK3N0YXRpYyB2b2lkCitzYW1wbGVfbm9kZV9kZWluaXQoc3RydWN0IGllZWU4 MDIxMV9ub2RlICpuaSkKK3sKKwlmcmVlKG5pLT5uaV9yY3RscywgTV84MDIxMV9SQVRFQ1RMKTsK K30KKworc3RhdGljIGludAorZG90MTFyYXRlKGNvbnN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpy dCwgaW50IHJpeCkKK3sKKwlpZiAocml4IDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBydC0+ aW5mb1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9IVCA/CisJICAgIHJ0LT5pbmZvW3JpeF0uZG90 MTFSYXRlIDogKHJ0LT5pbmZvW3JpeF0uZG90MTFSYXRlICYgSUVFRTgwMjExX1JBVEVfVkFMKSAv IDI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2RvdDExcmF0ZV9sYWJlbChjb25zdCBpZWVl ODAyMTFfcmF0ZV90YWJsZSAqcnQsIGludCByaXgpCit7CisJaWYgKHJpeCA8IDApCisJCXJldHVy biAiIjsKKwlyZXR1cm4gcnQtPmluZm9bcml4XS5waHkgPT0gSUVFRTgwMjExX1RfSFQgPyAiTUNT IiA6ICJNYiAiOworfQorCisvKgorICogUmV0dXJuIHRoZSByaXggd2l0aCB0aGUgbG93ZXN0IGF2 ZXJhZ2VfdHhfdGltZSwKKyAqIG9yIC0xIGlmIGFsbCB0aGUgYXZlcmFnZV90eF90aW1lcyBhcmUg MC4KKyAqLworc3RhdGljIF9faW5saW5lIGludAorcGlja19iZXN0X3JhdGUoY29uc3Qgc3RydWN0 IGllZWU4MDIxMV9ub2RlICpuaSwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpy dCwKKyAgICBpbnQgc2l6ZV9iaW4sIGludCByZXF1aXJlX2Fja2VkX2JlZm9yZSkKK3sKKwlzdHJ1 Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBuaS0+bmlfcmN0bHM7CisgICAgaW50IGJl c3RfcmF0ZV9yaXgsIGJlc3RfcmF0ZV90dCwgYmVzdF9yYXRlX3BjdDsKKwl1aW50NjRfdCBtYXNr OworCWludCByaXgsIHR0LCBwY3Q7CisKKyAgICBiZXN0X3JhdGVfcml4ID0gMDsKKyAgICBiZXN0 X3JhdGVfdHQgPSAwOworCWJlc3RfcmF0ZV9wY3QgPSAwOworCisJZm9yIChtYXNrID0gc2FuLT5y YXRlbWFzaywgcml4ID0gMDsgbWFzayAhPSAwOyBtYXNrID4+PSAxLCByaXgrKykgeworCQlpZiAo KG1hc2sgJiAxKSA9PSAwKQkJLyogbm90IGEgc3VwcG9ydGVkIHJhdGUgKi8KKwkJCWNvbnRpbnVl OworCisJCS8qIERvbid0IHBpY2sgYSBub24tSFQgcmF0ZSBmb3IgYSBIVCBub2RlICovCisJCWlm ICgobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVfSFQpICYmCisJCSAgICAocnQtPmluZm9b cml4XS5waHkgIT0gSUVFRTgwMjExX1RfSFQpKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCXR0 ID0gc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4XS5hdmVyYWdlX3R4X3RpbWU7CisJCWlmICh0dCA8 PSAwIHx8CisJCSAgICAocmVxdWlyZV9hY2tlZF9iZWZvcmUgJiYKKwkJICAgICAhc2FuLT5zdGF0 c1tzaXplX2Jpbl1bcml4XS5wYWNrZXRzX2Fja2VkKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIENh bGN1bGF0ZSBwZXJjZW50YWdlIGlmIHBvc3NpYmxlICovCisJCWlmIChzYW4tPnN0YXRzW3NpemVf YmluXVtyaXhdLnRvdGFsX3BhY2tldHMgPiAwKSB7CisJCQlwY3QgPSBzYW4tPnN0YXRzW3NpemVf YmluXVtyaXhdLmV3bWFfcGN0OworCQl9IGVsc2UgeworCQkJLyogWFhYIGZvciBub3csIGFzc3Vt ZSA5NSUgb2sgKi8KKwkJCXBjdCA9IDk1OworCQl9CisKKwkJLyogZG9uJ3QgdXNlIGEgYml0LXJh dGUgdGhhdCBoYXMgYmVlbiBmYWlsaW5nICovCisJCWlmIChzYW4tPnN0YXRzW3NpemVfYmluXVty aXhdLnN1Y2Nlc3NpdmVfZmFpbHVyZXMgPiAzKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICog Rm9yIEhULCBEb24ndCB1c2UgYSBiaXQgcmF0ZSB0aGF0IGlzIG11Y2ggbW9yZQorCQkgKiBsb3Nz eSB0aGFuIHRoZSBiZXN0LgorCQkgKgorCQkgKiBYWFggdGhpcyBpc24ndCBvcHRpbWFsOyBpdCdz IGp1c3QgZGVzaWduZWQgdG8KKwkJICogZWxpbWluYXRlIHJhdGVzIHRoYXQgYXJlIGdvaW5nIHRv IGJlIG9idmlvdXNseQorCQkgKiB3b3JzZS4KKwkJICovCisJCWlmIChuaS0+bmlfZmxhZ3MgJiBJ RUVFODAyMTFfTk9ERV9IVCkgeworCQkJaWYgKGJlc3RfcmF0ZV9wY3QgPiAocGN0ICsgNTApKQor CQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogRm9yIG5vbi1NQ1MgcmF0ZXMsIHVzZSB0 aGUgY3VycmVudCBhdmVyYWdlIHR4dGltZSBmb3IKKwkJICogY29tcGFyaXNvbi4KKwkJICovCisJ CWlmICghIChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkpIHsKKwkJCWlmIChiZXN0 X3JhdGVfdHQgPT0gMCB8fCB0dCA8PSBiZXN0X3JhdGVfdHQpIHsKKwkJCQliZXN0X3JhdGVfdHQg PSB0dDsKKwkJCQliZXN0X3JhdGVfcml4ID0gcml4OworCQkJCWJlc3RfcmF0ZV9wY3QgPSBwY3Q7 CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBTaW5jZSAyIHN0cmVhbSByYXRlcyBoYXZlIHNsaWdo dGx5IGhpZ2hlciBUWCB0aW1lcywKKwkJICogYWxsb3cgYSBsaXR0bGUgYml0IG9mIGxlZXdheS4g VGhpcyBzaG91bGQgbGF0ZXIKKwkJICogYmUgYWJzdHJhY3RlZCBvdXQgYW5kIHByb3Blcmx5IGhh bmRsZWQuCisJCSAqLworCQlpZiAobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVfSFQpIHsK KwkJCWlmIChiZXN0X3JhdGVfdHQgPT0gMCB8fCAodHQgKiA4IDw9IGJlc3RfcmF0ZV90dCAqIDEw KSkgeworCQkJCWJlc3RfcmF0ZV90dCA9IHR0OworCQkJCWJlc3RfcmF0ZV9yaXggPSByaXg7CisJ CQkJYmVzdF9yYXRlX3BjdCA9IHBjdDsKKwkJCX0KKwkJfQorICAgICAgICB9CisgICAgICAgIHJl dHVybiAoYmVzdF9yYXRlX3R0ID8gYmVzdF9yYXRlX3JpeCA6IC0xKTsKK30KKworLyoKKyAqIFBp Y2sgYSBnb29kICJyYW5kb20iIGJpdC1yYXRlIHRvIHNhbXBsZSBvdGhlciB0aGFuIHRoZSBjdXJy ZW50IG9uZS4KKyAqLworc3RhdGljIF9faW5saW5lIGludAorcGlja19zYW1wbGVfcmF0ZShjb25z dCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBjb25zdCBpZWVlODAyMTFfcmF0ZV90YWJsZSAq cnQsIAorCWludCBzaXplX2JpbikKK3sKKyNkZWZpbmUJRE9UMTFSQVRFKGl4KQkocnQtPmluZm9b aXhdLmRvdDExUmF0ZSAmIElFRUU4MDIxMV9SQVRFX1ZBTCkKKyNkZWZpbmUJTUNTKGl4KQkJKHJ0 LT5pbmZvW2l4XS5kb3QxMVJhdGUgfCBJRUVFODAyMTFfUkFURV9NQ1MpCisJc3RydWN0IGllZWU4 MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOworCXN0cnVjdCBpZWVlODAyMTFf c2FtcGxlICpzYW1wbGUgPSBzYW4tPnNhbl9zYW1wbGU7CisJaW50IGN1cnJlbnRfcml4LCByaXg7 CisJdW5zaWduZWQgY3VycmVudF90dDsKKwl1aW50NjRfdCBtYXNrOworCQorCWN1cnJlbnRfcml4 ID0gc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl07CisJaWYgKGN1cnJlbnRfcml4IDwgMCkgewor CQkvKiBubyBzdWNjZXNzZXMgeWV0LCBzZW5kIGF0IHRoZSBsb3dlc3QgYml0LXJhdGUgKi8KKwkJ LyogWFhYIHNob3VsZCByZXR1cm4gTUNTMCBpZiBIVCAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlj dXJyZW50X3R0ID0gc2FuLT5zdGF0c1tzaXplX2Jpbl1bY3VycmVudF9yaXhdLmF2ZXJhZ2VfdHhf dGltZTsKKworCXJpeCA9IHNhbi0+bGFzdF9zYW1wbGVfcml4W3NpemVfYmluXSsxOwkvKiBuZXh0 IHNhbXBsZSByYXRlICovCisJbWFzayA9IHNhbi0+cmF0ZW1hc2sgJn4gKCh1aW50NjRfdCkgMTw8 Y3VycmVudF9yaXgpOy8qIGRvbid0IHNhbXBsZSBjdXJyZW50IHJhdGUgKi8KKwl3aGlsZSAobWFz ayAhPSAwKSB7CisJCWlmICgobWFzayAmICgodWludDY0X3QpIDE8PHJpeCkpID09IDApIHsJLyog bm90IGEgc3VwcG9ydGVkIHJhdGUgKi8KKwluZXh0cmF0ZToKKwkJCWlmICgrK3JpeCA+PSBydC0+ cmF0ZUNvdW50KQorCQkJCXJpeCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAq IFRoZSBmb2xsb3dpbmcgY29kZSBzdG9wcyB0cnlpbmcgdG8gc2FtcGxlCisJCSAqIG5vbi1NQ1Mg cmF0ZXMgd2hlbiBzcGVha2luZyB0byBhbiBNQ1Mgbm9kZS4KKwkJICogSG93ZXZlciwgYXQgbGVh c3QgZm9yIENDSyByYXRlcyBpbiAyLjRHSHogbW9kZSwKKwkJICogdGhlIG5vbi1NQ1MgcmF0ZXMg TUFZIGFjdHVhbGx5IHByb3ZpZGUgYmV0dGVyCisJCSAqIFBFUiBhdCB0aGUgdmVyeSBmYXIgZWRn ZSBvZiByZWNlcHRpb24uCisJCSAqCisJCSAqIEhvd2V2ZXIhIFVudGlsIGF0aF9yYXRlX2Zvcm1f YWdncigpIGdyb3dzCisJCSAqIHNvbWUgbG9naWMgdG8gbm90IGZvcm0gYWdncmVnYXRlcyBpZiB0 aGUKKwkJICogc2VsZWN0ZWQgcmF0ZSBpcyBub24tTUNTLCB0aGlzIHdvbid0IHdvcmsuCisJCSAq CisJCSAqIFNvIGRvbid0IGRpc2FibGUgdGhpcyBjb2RlIHVudGlsIHlvdSd2ZSB0YXVnaHQKKwkJ ICogYXRoX3JhdGVfZm9ybV9hZ2dyKCkgdG8gZHJvcCBvdXQgaWYgYW55IG9mCisJCSAqIHRoZSBz ZWxlY3RlZCByYXRlcyBhcmUgbm9uLU1DUy4KKwkJICovCisjaWYgMQorCQkvKiBpZiB0aGUgbm9k ZSBpcyBIVCBhbmQgdGhlIHJhdGUgaXNuJ3QgSFQsIGRvbid0IGJvdGhlciBzYW1wbGUgKi8KKwkJ aWYgKChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkgJiYKKwkJICAgIChydC0+aW5m b1tyaXhdLnBoeSAhPSBJRUVFODAyMTFfVF9IVCkpIHsKKwkJCW1hc2sgJj0gfigodWludDY0X3Qp IDE8PHJpeCk7CisJCQlnb3RvIG5leHRyYXRlOworCQl9CisjZW5kaWYKKworCQkvKiB0aGlzIGJp dC1yYXRlIGlzIGFsd2F5cyB3b3JzZSB0aGFuIHRoZSBjdXJyZW50IG9uZSAqLworCQlpZiAoc2Fu LT5zdGF0c1tzaXplX2Jpbl1bcml4XS5wZXJmZWN0X3R4X3RpbWUgPiBjdXJyZW50X3R0KSB7CisJ CQltYXNrICY9IH4oKHVpbnQ2NF90KSAxPDxyaXgpOworCQkJZ290byBuZXh0cmF0ZTsKKwkJfQor CisJCS8qIHJhcmVseSBzYW1wbGUgYml0LXJhdGVzIHRoYXQgZmFpbCBhIGxvdCAqLworCQlpZiAo c2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4XS5zdWNjZXNzaXZlX2ZhaWx1cmVzID4gc2FtcGxlLT5z YW1wbGVfbWF4X3N1Y2Nlc3NpdmVfZmFpbHVyZXMgJiYKKwkJICAgIHRpY2tzIC0gc2FuLT5zdGF0 c1tzaXplX2Jpbl1bcml4XS5sYXN0X3R4IDwgc2FtcGxlLT5zYW1wbGVfc3RhbGVfZmFpbHVyZV90 aW1lb3V0KSB7CisJCQltYXNrICY9IH4oKHVpbnQ2NF90KSAxPDxyaXgpOworCQkJZ290byBuZXh0 cmF0ZTsKKwkJfQorCisJCS8qCisJCSAqIEZvciBIVCwgb25seSBzYW1wbGUgYSBmZXcgcmF0ZXMg b24gZWl0aGVyIHNpZGUgb2YgdGhlCisJCSAqIGN1cnJlbnQgcml4OyB0aGVyZSdzIHF1aXRlIGxp a2VseSBhIGxvdCBvZiB0aGVtLgorCQkgKi8KKwkJaWYgKG5pLT5uaV9mbGFncyAmIElFRUU4MDIx MV9OT0RFX0hUKSB7CisJCQlpZiAocml4IDwgKGN1cnJlbnRfcml4IC0gMykgfHwKKwkJCSAgICBy aXggPiAoY3VycmVudF9yaXggKyAzKSkgeworCQkJCW1hc2sgJj0gfigodWludDY0X3QpIDE8PHJp eCk7CisJCQkJZ290byBuZXh0cmF0ZTsKKwkJCX0KKwkJfQorCisJCS8qIERvbid0IHNhbXBsZSBt b3JlIHRoYW4gMiByYXRlcyBoaWdoZXIgZm9yIHJhdGVzID4gMTFNIGZvciBub24tSFQgcmF0ZXMg Ki8KKwkJaWYgKCEgKG5pLT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSkgeworCQkJaWYg KERPVDExUkFURShyaXgpID4gMioxMSAmJiByaXggPiBjdXJyZW50X3JpeCArIDIpIHsKKwkJCQlt YXNrICY9IH4oKHVpbnQ2NF90KSAxPDxyaXgpOworCQkJCWdvdG8gbmV4dHJhdGU7CisJCQl9CisJ CX0KKworCQlzYW4tPmxhc3Rfc2FtcGxlX3JpeFtzaXplX2Jpbl0gPSByaXg7CisJCXJldHVybiBy aXg7CisJfQorCXJldHVybiBjdXJyZW50X3JpeDsKKyN1bmRlZiBET1QxMVJBVEUKKyN1bmRlZiBN Q1MKK30KKworc3RhdGljIGludAorc2FtcGxlX2dldF9zdGF0aWNfcml4KGNvbnN0IHN0cnVjdCBp ZWVlODAyMTFfbm9kZSAqbmkpCit7CisjZGVmaW5lCVJBVEUoX2l4KQkobmktPm5pX3JhdGVzLnJz X3JhdGVzWyhfaXgpXSAmIElFRUU4MDIxMV9SQVRFX1ZBTCkKKyNkZWZpbmUJTUNTKF9peCkJKG5p LT5uaV9odHJhdGVzLnJzX3JhdGVzW19peF0gfCBJRUVFODAyMTFfUkFURV9NQ1MpCisJc3RydWN0 IGllZWU4MDIxMXZhcCAqdmFwID0gbmktPm5pX3ZhcDsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjEx X3JhdGVfdGFibGUgKnJ0ID0gaWVlZTgwMjExX2dldF9yYXRldGFibGUodmFwLT5pdl9pYy0+aWNf Y3VyY2hhbik7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eHBhcmFtICp0cCA9IG5pLT5uaV90 eHBhcm1zOworCWludCBzcmF0ZTsKKworCS8qIENoZWNrIE1DUyByYXRlcyAqLworCWZvciAoc3Jh dGUgPSBuaS0+bmlfaHRyYXRlcy5yc19ucmF0ZXMgLSAxOyBzcmF0ZSA+PSAwOyBzcmF0ZS0tKSB7 CisJCWlmIChNQ1Moc3JhdGUpID09IHRwLT51Y2FzdHJhdGUpCisJCQlyZXR1cm4gcnQtPnJhdGVD b2RlVG9JbmRleFt0cC0+dWNhc3RyYXRlXTsKKwl9CisKKwkvKiBDaGVjayBsZWdhY3kgcmF0ZXMg Ki8KKwlmb3IgKHNyYXRlID0gbmktPm5pX3JhdGVzLnJzX25yYXRlcyAtIDE7IHNyYXRlID49IDA7 IHNyYXRlLS0pIHsKKwkJaWYgKFJBVEUoc3JhdGUpID09IHRwLT51Y2FzdHJhdGUpCisJCQlyZXR1 cm4gcnQtPnJhdGVDb2RlVG9JbmRleFt0cC0+dWNhc3RyYXRlXTsKKwl9CisJcmV0dXJuIC0xOwor I3VuZGVmCVJBVEUKKyN1bmRlZglNQ1MKK30KKworc3RhdGljIHZvaWQKK3NhbXBsZV91cGRhdGVf c3RhdGljX3JpeChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworCXN0cnVjdCBpZWVlODAy MTFfc2FtcGxlX25vZGUgKnNhbiA9IG5pLT5uaV9yY3RsczsKKwljb25zdCBzdHJ1Y3QgaWVlZTgw MjExX3R4cGFyYW0gKnRwID0gbmktPm5pX3R4cGFybXM7CisKKwlpZiAodHAgIT0gTlVMTCAmJiB0 cC0+dWNhc3RyYXRlICE9IElFRUU4MDIxMV9GSVhFRF9SQVRFX05PTkUpIHsKKwkJLyoKKwkJICog QSBmaXhlZCByYXRlIGlzIHRvIGJlIHVzZWQ7IHVjYXN0cmF0ZSBpcyB0aGUgSUVFRSBjb2RlCisJ CSAqIGZvciB0aGlzIHJhdGUgKHNhbnMgYmFzaWMgYml0KS4gIENoZWNrIHRoaXMgYWdhaW5zdCB0 aGUKKwkJICogbmVnb3RpYXRlZCByYXRlIHNldCBmb3IgdGhlIG5vZGUuICBOb3RlIHRoZSBmaXhl ZCByYXRlCisJCSAqIG1heSBub3QgYmUgYXZhaWxhYmxlIGZvciB2YXJpb3VzIHJlYXNvbnMgc28g d2Ugb25seQorCQkgKiBzZXR1cCB0aGUgc3RhdGljIHJhdGUgaW5kZXggaWYgdGhlIGxvb2t1cCBp cyBzdWNjZXNzZnVsLgorCQkgKi8KKwkJc2FuLT5zdGF0aWNfcml4ID0gc2FtcGxlX2dldF9zdGF0 aWNfcml4KG5pKTsKKwl9IGVsc2UgeworCQlzYW4tPnN0YXRpY19yaXggPSAtMTsKKwl9Cit9CisK Ky8qCisgKiBQaWNrIGEgbm9uLUhUIHJhdGUgdG8gYmVnaW4gdXNpbmcuCisgKi8KK3N0YXRpYyBp bnQKK3NhbXBsZV9waWNrX3NlZWRfcmF0ZV9sZWdhY3koY29uc3Qgc3RydWN0IGllZWU4MDIxMV9u b2RlICpuaSwgaW50IGZyYW1lTGVuKQoreworI2RlZmluZQlET1QxMVJBVEUoaXgpCShydC0+aW5m b1tpeF0uZG90MTFSYXRlICYgSUVFRTgwMjExX1JBVEVfVkFMKQorCXN0cnVjdCBpZWVlODAyMTF2 YXAgKnZhcCA9IG5pLT5uaV92YXA7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2Fu ID0gbmktPm5pX3JjdGxzOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZV90YWJsZSAqcnQg PSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZSh2YXAtPml2X2ljLT5pY19jdXJjaGFuKTsKKwkKKwlj b25zdCBpbnQgc2l6ZV9iaW4gPSBzaXplX3RvX2JpbihmcmFtZUxlbik7CisJaW50IHJpeCA9IC0x OworCisJLyogbm8gcGFja2V0IGhhcyBiZWVuIHNlbnQgc3VjY2Vzc2Z1bGx5IHlldCAqLworCWZv ciAocml4ID0gcnQtPnJhdGVDb3VudC0xOyByaXggPiAwOyByaXgtLSkgeworCQlpZiAoKHNhbi0+ cmF0ZW1hc2sgJiAoKHVpbnQ2NF90KSAxPDxyaXgpKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJ LyogU2tpcCBIVCByYXRlcyAqLworCQlpZiAocnQtPmluZm9bcml4XS5waHkgPT0gSUVFRTgwMjEx X1RfSFQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBQaWNrIHRoZSBoaWdoZXN0IHJhdGUg PD0gMzYgTWJwcworCQkgKiB0aGF0IGhhc24ndCBmYWlsZWQuCisJCSAqLworCQlpZiAoRE9UMTFS QVRFKHJpeCkgPD0gNzIgJiYKKwkJICAgIHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeF0uc3VjY2Vz c2l2ZV9mYWlsdXJlcyA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcml4Owor I3VuZGVmIERPVDExUkFURQorfQorCisvKgorICogUGljayBhIEhUIHJhdGUgdG8gYmVnaW4gdXNp bmcuCisgKgorICogRG9uJ3QgdXNlIGFueSBub24tSFQgcmF0ZXM7IG9ubHkgY29uc2lkZXIgSFQg cmF0ZXMuCisgKi8KK3N0YXRpYyBpbnQKK3NhbXBsZV9waWNrX3NlZWRfcmF0ZV9odChjb25zdCBz dHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBpbnQgZnJhbWVMZW4pCit7CisjZGVmaW5lCU1DUyhp eCkJCShydC0+aW5mb1tpeF0uZG90MTFSYXRlIHwgSUVFRTgwMjExX1JBVEVfTUNTKQorCXN0cnVj dCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CisJc3RydWN0IGllZWU4MDIxMV9zYW1w bGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0 ZV90YWJsZSAqcnQgPSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZSh2YXAtPml2X2ljLT5pY19jdXJj aGFuKTsKKwkKKwljb25zdCBpbnQgc2l6ZV9iaW4gPSBzaXplX3RvX2JpbihmcmFtZUxlbik7CisJ aW50IHJpeCA9IC0xLCBodF9yaXggPSAtMTsKKworCS8qIG5vIHBhY2tldCBoYXMgYmVlbiBzZW50 IHN1Y2Nlc3NmdWxseSB5ZXQgKi8KKwlmb3IgKHJpeCA9IHJ0LT5yYXRlQ291bnQtMTsgcml4ID4g MDsgcml4LS0pIHsKKwkJLyogU2tpcCByYXRlcyB3ZSBjYW4ndCB1c2UgKi8KKwkJaWYgKChzYW4t PnJhdGVtYXNrICYgKCh1aW50NjRfdCkgMTw8cml4KSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJ CS8qIEtlZXAgYSBjb3B5IG9mIHRoZSBsYXN0IHNlZW4gSFQgcmF0ZSBpbmRleCAqLworCQlpZiAo cnQtPmluZm9bcml4XS5waHkgPT0gSUVFRTgwMjExX1RfSFQpCisJCQlodF9yaXggPSByaXg7CisK KwkJLyogU2tpcCBub24tSFQgcmF0ZXMgKi8KKwkJaWYgKHJ0LT5pbmZvW3JpeF0ucGh5ICE9IElF RUU4MDIxMV9UX0hUKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogUGljayBhIG1lZGl1bS1z cGVlZCByYXRlIHJlZ2FyZGxlc3Mgb2Ygc3RyZWFtIGNvdW50CisJCSAqIHdoaWNoIGhhcyBub3Qg c2VlbiBhbnkgZmFpbHVyZXMuIEhpZ2hlciByYXRlcyBtYXkgZmFpbDsKKwkJICogd2UnbGwgdHJ5 IHRoZW0gbGF0ZXIuCisJCSAqLworCQlpZiAoKChNQ1Mocml4KSAmIDB4NykgPD0gNCkgJiYKKwkJ ICAgIHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeF0uc3VjY2Vzc2l2ZV9mYWlsdXJlcyA9PSAwKSB7 CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogSWYgYWxsIHRoZSBNQ1MgcmF0ZXMgaGF2 ZSBzdWNjZXNzaXZlIGZhaWx1cmVzLCByaXggc2hvdWxkIGJlCisJICogPiAwOyBvdGhlcndpc2Ug dXNlIHRoZSBsb3dlc3QgTUNTIHJpeCAoaG9wZWZ1bGx5IE1DUyAwLikKKwkgKi8KKwlyZXR1cm4g TUFYKHJpeCwgaHRfcml4KTsKKyN1bmRlZiBNQ1MKK30KKworc3RhdGljIGludAorc2FtcGxlX3Jh dGUoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgdm9pZCAqYXJnIF9fdW51c2VkLCB1aW50MzJf dCBpYXJnIF9fdW51c2VkKQoreworI2RlZmluZQlET1QxMVJBVEUoaXgpCShydC0+aW5mb1tpeF0u ZG90MTFSYXRlICYgSUVFRTgwMjExX1JBVEVfVkFMKQorI2RlZmluZQlNQ1MoaXgpCQkocnQtPmlu Zm9baXhdLmRvdDExUmF0ZSB8IElFRUU4MDIxMV9SQVRFX01DUykKKyNkZWZpbmUJUkFURShpeCkJ KERPVDExUkFURShpeCkgLyAyKQorCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92 YXA7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOwor CXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSBzYW4tPnNhbl9zYW1wbGU7CisJY29u c3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCA9IGllZWU4MDIxMV9nZXRfcmF0ZXRh YmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOworCQorCWludCByaXgsIG1yciwgYmVzdF9yaXgs IGNoYW5nZV9yYXRlczsKKwl1bnNpZ25lZCBhdmVyYWdlX3R4X3RpbWU7CisJCisJc2l6ZV90IGZy YW1lTGVuID0gKHNpemVfdClpYXJnOworCWNvbnN0IGludCBzaXplX2JpbiA9IHNpemVfdG9fYmlu KGZyYW1lTGVuKTsKKworCXNhbXBsZV91cGRhdGVfc3RhdGljX3JpeChuaSk7CisKKwlpZiAoc2Fu LT5zdGF0aWNfcml4ICE9IC0xKSB7CisJCXJpeCA9IHNhbi0+c3RhdGljX3JpeDsKKwkJZ290byBk b25lOworCX0KKworCWlmIChJRUVFODAyMTFfUkFURUNUTF9IQVNDQVBfTVJSKHZhcCkpCisJCW1y ciA9IDE7CisJaWYgKCEgSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01SUlBST1QodmFwKSkKKwkJ bXJyID0gMDsKKworCWJlc3Rfcml4ID0gcGlja19iZXN0X3JhdGUobmksIHJ0LCBzaXplX2Jpbiwg IW1ycik7CisJaWYgKGJlc3Rfcml4ID49IDApIHsKKwkJYXZlcmFnZV90eF90aW1lID0gc2FuLT5z dGF0c1tzaXplX2Jpbl1bYmVzdF9yaXhdLmF2ZXJhZ2VfdHhfdGltZTsKKwl9IGVsc2UgeworCQlh dmVyYWdlX3R4X3RpbWUgPSAwOworCX0KKworCS8qCisJICogTGltaXQgdGhlIHRpbWUgbWVhc3Vy aW5nIHRoZSBwZXJmb3JtYW5jZSBvZiBvdGhlciB0eAorCSAqIHJhdGVzIHRvIHNhbXBsZV9yYXRl JSBvZiB0aGUgdG90YWwgdHJhbnNtaXNzaW9uIHRpbWUuCisJICovCisJaWYgKHNhbi0+c2FtcGxl X3R0W3NpemVfYmluXSA8IGF2ZXJhZ2VfdHhfdGltZSAqIChzYW4tPnBhY2tldHNfc2luY2Vfc2Ft cGxlW3NpemVfYmluXSAqCisJCXNhbXBsZS0+c2FtcGxlX3JhdGUvMTAwKSkgeworCQlyaXggPSBw aWNrX3NhbXBsZV9yYXRlKG5pLCBydCwgc2l6ZV9iaW4pOworCQlJRUVFODAyMTFfTk9URSh2YXAs IElFRUU4MDIxMV9NU0dfUkFURUNUTCwKKwkJICAgICAmbmksICJhdHQgJWQgc2FtcGxlX3R0ICVk IHNpemUgJXUgc2FtcGxlIHJhdGUgJWQgJXMgY3VycmVudCByYXRlICVkICVzIiwKKwkJICAgICBh dmVyYWdlX3R4X3RpbWUsCisJCSAgICAgc2FuLT5zYW1wbGVfdHRbc2l6ZV9iaW5dLAorCQkgICAg IGJpbl90b19zaXplKHNpemVfYmluKSwKKwkJICAgICBkb3QxMXJhdGUocnQsIHJpeCksCisJCSAg ICAgZG90MTFyYXRlX2xhYmVsKHJ0LCByaXgpLAorCQkgICAgIGRvdDExcmF0ZShydCwgc2FuLT5j dXJyZW50X3JpeFtzaXplX2Jpbl0pLAorCQkgICAgIGRvdDExcmF0ZV9sYWJlbChydCwgc2FuLT5j dXJyZW50X3JpeFtzaXplX2Jpbl0pKTsKKwkJaWYgKHJpeCAhPSBzYW4tPmN1cnJlbnRfcml4W3Np emVfYmluXSkgeworCQkJc2FuLT5jdXJyZW50X3NhbXBsZV9yaXhbc2l6ZV9iaW5dID0gcml4Owor CQl9IGVsc2UgeworCQkJc2FuLT5jdXJyZW50X3NhbXBsZV9yaXhbc2l6ZV9iaW5dID0gLTE7CisJ CX0KKwkJc2FuLT5wYWNrZXRzX3NpbmNlX3NhbXBsZVtzaXplX2Jpbl0gPSAwOworCX0gZWxzZSB7 CisJCWNoYW5nZV9yYXRlcyA9IDA7CisJCWlmICghc2FuLT5wYWNrZXRzX3NlbnRbc2l6ZV9iaW5d IHx8IGJlc3Rfcml4ID09IC0xKSB7CisJCQkvKiBubyBwYWNrZXQgaGFzIGJlZW4gc2VudCBzdWNj ZXNzZnVsbHkgeWV0ICovCisJCQljaGFuZ2VfcmF0ZXMgPSAxOworCQkJaWYgKG5pLT5uaV9mbGFn cyAmIElFRUU4MDIxMV9OT0RFX0hUKQorCQkJCWJlc3Rfcml4ID0gc2FtcGxlX3BpY2tfc2VlZF9y YXRlX2h0KG5pLCBmcmFtZUxlbik7CisJCQllbHNlCisJCQkJYmVzdF9yaXggPSBzYW1wbGVfcGlj a19zZWVkX3JhdGVfbGVnYWN5KG5pLCBmcmFtZUxlbik7CisJCX0gZWxzZSBpZiAoc2FuLT5wYWNr ZXRzX3NlbnRbc2l6ZV9iaW5dIDwgMjApIHsKKwkJCS8qIGxldCB0aGUgYml0LXJhdGUgc3dpdGNo IHF1aWNrbHkgZHVyaW5nIHRoZSBmaXJzdCBmZXcgcGFja2V0cyAqLworCQkJSUVFRTgwMjExX05P VEUodmFwLAorCQkJICAgIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgJm5pLAorCQkJICAgICIlczog c3dpdGNoaW5nIHF1aWNrbHkuLiIsIF9fZnVuY19fKTsKKwkJCWNoYW5nZV9yYXRlcyA9IDE7CisJ CX0gZWxzZSBpZiAodGlja3MgLSBzYW1wbGUtPnNhbXBsZV9taW5fc3dpdGNoID4gc2FuLT50aWNr c19zaW5jZV9zd2l0Y2hbc2l6ZV9iaW5dKSB7CisJCQkvKiBtaW5fc3dpdGNoIHNlY29uZHMgaGF2 ZSBnb25lIGJ5ICovCisJCQlJRUVFODAyMTFfTk9URSh2YXAsCisJCQkgICAgSUVFRTgwMjExX01T R19SQVRFQ1RMLCAmbmksCisJCQkgICAgIiVzOiBtaW5fc3dpdGNoICVkID4gdGlja3Nfc2luY2Vf c3dpdGNoICVkLi4iLAorCQkJICAgIF9fZnVuY19fLCB0aWNrcyAtIHNhbXBsZS0+c2FtcGxlX21p bl9zd2l0Y2gsIHNhbi0+dGlja3Nfc2luY2Vfc3dpdGNoW3NpemVfYmluXSk7CisJCQljaGFuZ2Vf cmF0ZXMgPSAxOworCQl9IGVsc2UgaWYgKCghIChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9E RV9IVCkpICYmCisJCSAgICAoMiphdmVyYWdlX3R4X3RpbWUgPCBzYW4tPnN0YXRzW3NpemVfYmlu XVtzYW4tPmN1cnJlbnRfcml4W3NpemVfYmluXV0uYXZlcmFnZV90eF90aW1lKSkgeworCQkJLyog dGhlIGN1cnJlbnQgYml0LXJhdGUgaXMgdHdpY2UgYXMgc2xvdyBhcyB0aGUgYmVzdCBvbmUgKi8K KwkJCUlFRUU4MDIxMV9OT1RFKHZhcCwKKwkJCSAgICBJRUVFODAyMTFfTVNHX1JBVEVDVEwsICZu aSwKKwkJCSAgICAiJXM6IDJ4IGF0dCAoPSAlZCkgPCBjdXJfcml4IGF0dCAlZCIsCisJCQkgICAg X19mdW5jX18sCisJCQkgICAgMiAqIGF2ZXJhZ2VfdHhfdGltZSwgc2FuLT5zdGF0c1tzaXplX2Jp bl1bc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl1dLmF2ZXJhZ2VfdHhfdGltZSk7CisJCQljaGFu Z2VfcmF0ZXMgPSAxOworCQl9IGVsc2UgaWYgKChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9E RV9IVCkpIHsKKwkJCWludCBjdXJfcml4ID0gc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl07CisJ CQlpbnQgY3VyX2F0dCA9IHNhbi0+c3RhdHNbc2l6ZV9iaW5dW2N1cl9yaXhdLmF2ZXJhZ2VfdHhf dGltZTsKKwkJCS8qCisJCQkgKiBJZiB0aGUgbm9kZSBpcyBIVCwgdXBncmFkZSBpdCBpZiB0aGUg TUNTIHJhdGUgaXMKKwkJCSAqIGhpZ2hlciBhbmQgdGhlIGF2ZXJhZ2UgdHggdGltZSBpcyB3aXRo aW4gMjAlIG9mCisJCQkgKiB0aGUgY3VycmVudCByYXRlLiBJdCBjYW4gZmFpbCBhIGxpdHRsZS4K KwkJCSAqCisJCQkgKiBUaGlzIGlzIGxpa2VseSBub3Qgb3B0aW1hbCEKKwkJCSAqLworI2lmIDAK KwkJCXByaW50ZigiY3VyIHJpeC9hdHQgJXgvJWQsIGJlc3Qgcml4L2F0dCAleC8lZFxuIiwKKwkJ CSAgICBNQ1MoY3VyX3JpeCksIGN1cl9hdHQsIE1DUyhiZXN0X3JpeCksIGF2ZXJhZ2VfdHhfdGlt ZSk7CisjZW5kaWYKKwkJCWlmICgoTUNTKGJlc3Rfcml4KSA+IE1DUyhjdXJfcml4KSkgJiYKKwkJ CSAgICAoYXZlcmFnZV90eF90aW1lICogOCkgPD0gKGN1cl9hdHQgKiAxMCkpIHsKKwkJCQlJRUVF ODAyMTFfTk9URSh2YXAsCisJCQkJICAgIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgJm5pLAorCQkJ CSAgICAiJXM6IEhUOiBiZXN0X3JpeCAweCVkID4gY3VyX3JpeCAweCV4LCBhdmVyYWdlX3R4X3Rp bWUgJWQsIGN1cl9hdHQgJWQiLAorCQkJCSAgICBfX2Z1bmNfXywKKwkJCQkgICAgTUNTKGJlc3Rf cml4KSwgTUNTKGN1cl9yaXgpLCBhdmVyYWdlX3R4X3RpbWUsIGN1cl9hdHQpOworCQkJCWNoYW5n ZV9yYXRlcyA9IDE7CisJCQl9CisJCX0KKworCQlzYW4tPnBhY2tldHNfc2luY2Vfc2FtcGxlW3Np emVfYmluXSsrOworCQkKKwkJaWYgKGNoYW5nZV9yYXRlcykgeworCQkJaWYgKGJlc3Rfcml4ICE9 IHNhbi0+Y3VycmVudF9yaXhbc2l6ZV9iaW5dKSB7CisJCQkJSUVFRTgwMjExX05PVEUodmFwLAor CQkJCSAgICBJRUVFODAyMTFfTVNHX1JBVEVDVEwsCisJCQkJICAgICZuaSwKKyIlczogc2l6ZSAl ZCBzd2l0Y2ggcmF0ZSAlZCAoJWQvJWQpIC0+ICVkICglZC8lZCkgYWZ0ZXIgJWQgcGFja2V0cyBt cnIgJWQiLAorCQkJCSAgICBfX2Z1bmNfXywKKwkJCQkgICAgYmluX3RvX3NpemUoc2l6ZV9iaW4p LAorCQkJCSAgICBSQVRFKHNhbi0+Y3VycmVudF9yaXhbc2l6ZV9iaW5dKSwKKwkJCQkgICAgc2Fu LT5zdGF0c1tzaXplX2Jpbl1bc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl1dLmF2ZXJhZ2VfdHhf dGltZSwKKwkJCQkgICAgc2FuLT5zdGF0c1tzaXplX2Jpbl1bc2FuLT5jdXJyZW50X3JpeFtzaXpl X2Jpbl1dLnBlcmZlY3RfdHhfdGltZSwKKwkJCQkgICAgUkFURShiZXN0X3JpeCksCisJCQkJICAg IHNhbi0+c3RhdHNbc2l6ZV9iaW5dW2Jlc3Rfcml4XS5hdmVyYWdlX3R4X3RpbWUsCisJCQkJICAg IHNhbi0+c3RhdHNbc2l6ZV9iaW5dW2Jlc3Rfcml4XS5wZXJmZWN0X3R4X3RpbWUsCisJCQkJICAg IHNhbi0+cGFja2V0c19zaW5jZV9zd2l0Y2hbc2l6ZV9iaW5dLAorCQkJCSAgICBtcnIpOworCQkJ fQorCQkJc2FuLT5wYWNrZXRzX3NpbmNlX3N3aXRjaFtzaXplX2Jpbl0gPSAwOworCQkJc2FuLT5j dXJyZW50X3JpeFtzaXplX2Jpbl0gPSBiZXN0X3JpeDsKKwkJCXNhbi0+dGlja3Nfc2luY2Vfc3dp dGNoW3NpemVfYmluXSA9IHRpY2tzOworCQkJLyogCisJCQkgKiBTZXQgdGhlIHZpc2libGUgdHhy YXRlIGZvciB0aGlzIG5vZGUuCisJCQkgKi8KKwkJCW5pLT5uaV90eHJhdGUgPSBkb3QxMXJhdGUo cnQsIGJlc3Rfcml4KTsKKwkJfQorCQlyaXggPSBzYW4tPmN1cnJlbnRfcml4W3NpemVfYmluXTsK KwkJc2FuLT5wYWNrZXRzX3NpbmNlX3N3aXRjaFtzaXplX2Jpbl0rKzsKKwl9CisJLy8gKnRyeTAg PSBtcnIgPyBzYW4tPnNjaGVkW3JpeF0udDAgOiBBVEhfVFhNQVhUUlk7Citkb25lOgorCisJLyoK KwkgKiBUaGlzIGJ1ZyB0b3RhbGx5IHN1Y2tzIGFuZCBzaG91bGQgYmUgZml4ZWQuCisJICoKKwkg KiBGb3Igbm93IHRob3VnaCwgbGV0J3Mgbm90IHBhbmljLCBzbyB3ZSBjYW4gc3RhcnQgdG8gZmln dXJlCisJICogb3V0IGhvdyB0byBiZXR0ZXIgcmVwcm9kdWNlIGl0LgorCSAqLworCWlmIChyaXgg PCAwIHx8IHJpeCA+PSBydC0+cmF0ZUNvdW50KSB7CisJCXByaW50ZigiJXM6IEVSUk9SOiByaXgg JWQgb3V0IG9mIGJvdW5kcyAocmF0ZUNvdW50PSVkKVxuIiwKKwkJICAgIF9fZnVuY19fLAorCQkg ICAgcml4LAorCQkgICAgcnQtPnJhdGVDb3VudCk7CisJCSAgICByaXggPSAwOwkvKiBYWFgganVz dCBkZWZhdWx0IGZvciBub3cgKi8KKwl9CisJS0FTU0VSVChyaXggPj0gMCAmJiByaXggPCBydC0+ cmF0ZUNvdW50LCAoInJpeCBpcyAlZCIsIHJpeCkpOworCisJLy8gKnJpeDAgPSByaXg7CisJLy8g KnR4cmF0ZSA9IHJ0LT5pbmZvW3JpeF0ucmF0ZUNvZGUKKwkvLyAJfCAoc2hvcnRQcmVhbWJsZSA/ IHJ0LT5pbmZvW3JpeF0uc2hvcnRQcmVhbWJsZSA6IDApOworCXNhbi0+cGFja2V0c19zZW50W3Np emVfYmluXSsrOworCisJcmV0dXJuIHJpeDsKKyN1bmRlZiBET1QxMVJBVEUKKyN1bmRlZiBNQ1MK KyN1bmRlZiBSQVRFCit9CisKK3N0YXRpYyB2b2lkCitzYW1wbGVfcmF0ZXMoc3RydWN0IGllZWU4 MDIxMV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvKQoreworCXN0 cnVjdCBpZWVlODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9IG5pLT5uaV9yY3RsczsKKwl1aW50OF90 IHJpeDAgPSBzYW1wbGVfcmF0ZShuaSwgTlVMTCwgMCk7CisJY29uc3Qgc3RydWN0IHR4c2NoZWR1 bGUgKnNjaGVkID0gJnNhbi0+c2NoZWRbcml4MF07CisJc3RydWN0IGllZWU4MDIxMV9yY19zZXJp ZXMgKnJjID0gcmNfaW5mby0+aXJpX3JjOworCisJS0FTU0VSVChyaXgwID09IHNjaGVkLT5yMCwg KCJyaXgwICgleCkgIT0gc2NoZWQtPnIwICgleCkhXG4iLAorCSAgICByaXgwLCBzY2hlZC0+cjAp KTsKKwkvKiBYWFggKi8KKwlyY1swXS5mbGFncyA9IHJjWzFdLmZsYWdzID0gcmNbMl0uZmxhZ3Mg PSByY1szXS5mbGFncyA9IDA7CisKKwlyY1swXS5yaXggPSBzY2hlZC0+cjA7CisJcmNbMV0ucml4 ID0gc2NoZWQtPnIxOworCXJjWzJdLnJpeCA9IHNjaGVkLT5yMjsKKwlyY1szXS5yaXggPSBzY2hl ZC0+cjM7CisKKwlyY1swXS50cmllcyA9IHNjaGVkLT50MDsKKwlyY1sxXS50cmllcyA9IHNjaGVk LT50MTsKKwlyY1syXS50cmllcyA9IHNjaGVkLT50MjsKKwlyY1szXS50cmllcyA9IHNjaGVkLT50 MzsKK30KKworc3RhdGljIHZvaWQKK3VwZGF0ZV9zdGF0cyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjEx dmFwICp2YXAsCisgICAgCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKKwkJICBp bnQgZnJhbWVfc2l6ZSwKKwkJICBpbnQgcml4MCwgaW50IHRyaWVzMCwKKwkJICBpbnQgcml4MSwg aW50IHRyaWVzMSwKKwkJICBpbnQgcml4MiwgaW50IHRyaWVzMiwKKwkJICBpbnQgcml4MywgaW50 IHRyaWVzMywKKwkJICBpbnQgc2hvcnRfdHJpZXMsIGludCB0cmllcywKKwkJICBpbnQgbmZyYW1l cywgaW50IG5iYWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmkt Pm5pX3JjdGxzOworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSBzYW4tPnNhbl9z YW1wbGU7CisKKwljb25zdCBpbnQgc2l6ZV9iaW4gPSBzaXplX3RvX2JpbihmcmFtZV9zaXplKTsK Kwljb25zdCBpbnQgc2l6ZSA9IGJpbl90b19zaXplKHNpemVfYmluKTsKKworCWludCBpc19odDQw ID0gaWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX2N3NDAodmFwLCBuaSk7CisJaW50IHR0LCB0cmll c19zb19mYXI7CisJaW50IHBjdDsKKworCWlmICghSVNfUkFURV9ERUZJTkVEKHNhbiwgcml4MCkp CisJCXJldHVybjsKKwl0dCA9IGNhbGNfdXNlY3NfdW5pY2FzdF9wYWNrZXQodmFwLCBzaXplLCBy aXgwLCBzaG9ydF90cmllcywKKwkJTUlOKHRyaWVzMCwgdHJpZXMpIC0gMSwgaXNfaHQ0MCk7CisJ dHJpZXNfc29fZmFyID0gdHJpZXMwOworCisJaWYgKHRyaWVzMSAmJiB0cmllc19zb19mYXIgPCB0 cmllcykgeworCQlpZiAoIUlTX1JBVEVfREVGSU5FRChzYW4sIHJpeDEpKQorCQkJcmV0dXJuOwor CQl0dCArPSBjYWxjX3VzZWNzX3VuaWNhc3RfcGFja2V0KHZhcCwgc2l6ZSwgcml4MSwgc2hvcnRf dHJpZXMsCisJCQlNSU4odHJpZXMxICsgdHJpZXNfc29fZmFyLCB0cmllcykgLSB0cmllc19zb19m YXIgLSAxLCBpc19odDQwKTsKKwkJdHJpZXNfc29fZmFyICs9IHRyaWVzMTsKKwl9CisKKwlpZiAo dHJpZXMyICYmIHRyaWVzX3NvX2ZhciA8IHRyaWVzKSB7CisJCWlmICghSVNfUkFURV9ERUZJTkVE KHNhbiwgcml4MikpCisJCQlyZXR1cm47CisJCXR0ICs9IGNhbGNfdXNlY3NfdW5pY2FzdF9wYWNr ZXQodmFwLCBzaXplLCByaXgyLCBzaG9ydF90cmllcywKKwkJCU1JTih0cmllczIgKyB0cmllc19z b19mYXIsIHRyaWVzKSAtIHRyaWVzX3NvX2ZhciAtIDEsIGlzX2h0NDApOworCQl0cmllc19zb19m YXIgKz0gdHJpZXMyOworCX0KKworCWlmICh0cmllczMgJiYgdHJpZXNfc29fZmFyIDwgdHJpZXMp IHsKKwkJaWYgKCFJU19SQVRFX0RFRklORUQoc2FuLCByaXgzKSkKKwkJCXJldHVybjsKKwkJdHQg Kz0gY2FsY191c2Vjc191bmljYXN0X3BhY2tldCh2YXAsIHNpemUsIHJpeDMsIHNob3J0X3RyaWVz LAorCQkJTUlOKHRyaWVzMyArIHRyaWVzX3NvX2ZhciwgdHJpZXMpIC0gdHJpZXNfc29fZmFyIC0g MSwgaXNfaHQ0MCk7CisJfQorCisJaWYgKHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnRvdGFs X3BhY2tldHMgPCBzYW1wbGUtPnNhbnBsZV9zbW9vdGhpbmdfbWlucGFja2V0cykgeworCQkvKiBq dXN0IGF2ZXJhZ2UgdGhlIGZpcnN0IGZldyBwYWNrZXRzICovCisJCWludCBhdmdfdHggPSBzYW4t PnN0YXRzW3NpemVfYmluXVtyaXgwXS5hdmVyYWdlX3R4X3RpbWU7CisJCWludCBwYWNrZXRzID0g c2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0udG90YWxfcGFja2V0czsKKwkJc2FuLT5zdGF0c1tz aXplX2Jpbl1bcml4MF0uYXZlcmFnZV90eF90aW1lID0gKHR0KyhhdmdfdHgqcGFja2V0cykpLyhw YWNrZXRzK25mcmFtZXMpOworCX0gZWxzZSB7CisJCS8qIHVzZSBhIGV3bWEgKi8KKwkJc2FuLT5z dGF0c1tzaXplX2Jpbl1bcml4MF0uYXZlcmFnZV90eF90aW1lID0gCisJCQkoKHNhbi0+c3RhdHNb c2l6ZV9iaW5dW3JpeDBdLmF2ZXJhZ2VfdHhfdGltZSAqIHNhbXBsZS0+c2FucGxlX3Ntb290aGlu Z19yYXRlKSArIAorCQkJICh0dCAqICgxMDAgLSBzYW1wbGUtPnNhbnBsZV9zbW9vdGhpbmdfcmF0 ZSkpKSAvIDEwMDsKKwl9CisJCisJLyoKKwkgKiBYWFggRG9uJ3QgbWFyayB0aGUgaGlnaGVyIGJp dCByYXRlcyBhcyBhbHNvIGhhdmluZyBmYWlsZWQ7IGFzIHRoaXMKKwkgKiB1bmZvcnR1bmF0ZWx5 IHN0b3BzIHRob3NlIHJhdGVzIGZyb20gYmVpbmcgdGFzdGVkIHdoZW4gdHJ5aW5nIHRvCisJICog VFguIFRoaXMgaGFwcGVucyB3aXRoIDExbiBhZ2dyZWdhdGlvbi4KKwkgKi8KKwlpZiAobmZyYW1l cyA9PSBuYmFkKSB7CisJCXNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnN1Y2Nlc3NpdmVfZmFp bHVyZXMgKz0gbmJhZDsKKworCX0gZWxzZSB7CisJCXNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBd LnBhY2tldHNfYWNrZWQgKz0gKG5mcmFtZXMgLSBuYmFkKTsKKwkJc2FuLT5zdGF0c1tzaXplX2Jp bl1bcml4MF0uc3VjY2Vzc2l2ZV9mYWlsdXJlcyA9IDA7CisJfQorCXNhbi0+c3RhdHNbc2l6ZV9i aW5dW3JpeDBdLnRyaWVzICs9IHRyaWVzOworCXNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLmxh c3RfdHggPSB0aWNrczsKKwlzYW4tPnN0YXRzW3NpemVfYmluXVtyaXgwXS50b3RhbF9wYWNrZXRz ICs9IG5mcmFtZXM7CisKKwkvKiB1cGRhdGUgRVdNQSBmb3IgdGhpcyByaXggKi8KKworCS8qIENh bGN1bGF0ZSBwZXJjZW50YWdlIGJhc2VkIG9uIGN1cnJlbnQgcmF0ZSAqLworCWlmIChuZnJhbWVz ID09IDApCisJCW5mcmFtZXMgPSBuYmFkID0gMTsKKwlwY3QgPSAoKG5mcmFtZXMgLSBuYmFkKSAq IDEwMDApIC8gbmZyYW1lczsKKworCWlmIChzYW4tPnN0YXRzW3NpemVfYmluXVtyaXgwXS50b3Rh bF9wYWNrZXRzIDwKKwkgICAgc2FtcGxlLT5zYW5wbGVfc21vb3RoaW5nX21pbnBhY2tldHMpIHsK KwkJLyoganVzdCBhdmVyYWdlIHRoZSBmaXJzdCBmZXcgcGFja2V0cyAqLworCQlpbnQgYV9wY3Qg PSAoc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0ucGFja2V0c19hY2tlZCAqIDEwMDApIC8KKwkJ ICAgIChzYW4tPnN0YXRzW3NpemVfYmluXVtyaXgwXS50b3RhbF9wYWNrZXRzKTsKKwkJc2FuLT5z dGF0c1tzaXplX2Jpbl1bcml4MF0uZXdtYV9wY3QgPSBhX3BjdDsKKwl9IGVsc2UgeworCQkvKiB1 c2UgYSBld21hICovCisJCXNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLmV3bWFfcGN0ID0KKwkJ CSgoc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0uZXdtYV9wY3QgKiBzYW1wbGUtPnNhbnBsZV9z bW9vdGhpbmdfcmF0ZSkgKworCQkJIChwY3QgKiAoMTAwIC0gc2FtcGxlLT5zYW5wbGVfc21vb3Ro aW5nX3JhdGUpKSkgLyAxMDA7CisJfQorCisJaWYgKHJpeDAgPT0gc2FuLT5jdXJyZW50X3NhbXBs ZV9yaXhbc2l6ZV9iaW5dKSB7CisJCXNhbi0+c2FtcGxlX3R0W3NpemVfYmluXSA9IHR0OworCQlz YW4tPmN1cnJlbnRfc2FtcGxlX3JpeFtzaXplX2Jpbl0gPSAtMTsKKwl9Cit9CisKK3N0YXRpYyB2 b2lkCitzYW1wbGVfdHhfY29tcGxldGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLAor ICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIGludCBvaywKKyAgICB2b2lkICph cmcxLCB2b2lkICphcmcyKQoreworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9 IG5pLT5uaV9yY3RsczsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0ID0g aWVlZTgwMjExX2dldF9yYXRldGFibGUodmFwLT5pdl9pYy0+aWNfY3VyY2hhbik7CisKKwkvKiBY WFggbmVlZCB0byBjaGFuZ2UgYXJnMiB0byBwb2ludGVyIG9mIGllZWU4MDIxMV9yY19pbmZvICov CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gKHN0cnVjdCBpZWVlODAyMTFf cmNfaW5mbyopYXJnMjsKKworCWludCBmaW5hbF9yaXgsIHNob3J0X3RyaWVzLCBsb25nX3RyaWVz OworCWludCBuZnJhbWVzLCBuYmFkOworCWludCBmcmFtZV9zaXplLCBtcnI7CisKKwkvKiB1cGRh dGUgcGVyIHZhcCBzdGF0aXN0aWNzICovCisJaWVlZTgwMjExX3JhdGVjdGxfdXBkYXRlX3N0YXQo dmFwLCByY19pbmZvKTsKKworCWZpbmFsX3JpeCA9IHJ0LT5yYXRlQ29kZVRvSW5kZXhbcmNfaW5m by0+aXJpX3R4cmF0ZV07CisJc2hvcnRfdHJpZXMgPSByY19pbmZvLT5pcmlfc2hvcnRyZXRyeTsK KwkvKiBYWFggd2h5IHBsdXMgMSBoZXJlPyAqLworCWxvbmdfdHJpZXMgPSByY19pbmZvLT5pcmlf bG9uZ3JldHJ5ICsgMTsKKworCW5mcmFtZXMgPSByY19pbmZvLT5pcmlfdHhjbnQ7CisJbmJhZCA9 IHJjX2luZm8tPmlyaV9mYWlsY250OworCisJZnJhbWVfc2l6ZSA9IHJjX2luZm8tPmlyaV9mcmFt ZWxlbjsKKwltcnIgPSAwOworCisJaWYgKG5mcmFtZXMgPT0gMCkgeworCQlyZXR1cm47CisJfQor CisJaWYgKGZyYW1lX3NpemUgPT0gMCkJCSAgICAvKiBOQjogc2hvdWxkIG5vdCBoYXBwZW4gKi8K KwkJZnJhbWVfc2l6ZSA9IDE1MDA7CisKKwlpZiAoc2FuLT5yYXRlbWFzayA9PSAwKSB7CisJCXJl dHVybjsKKwl9CisJCisJaWYgKElFRUU4MDIxMV9SQVRFQ1RMX0hBU0NBUF9NUlIodmFwKSkKKwkJ bXJyID0gMTsKKwkvKiBYWFggY2hlY2sgSFQgcHJvdG1vZGUgdG9vICovCisJaWYgKG1yciAmJiAh SUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01SUlBST1QodmFwKSkKKwkJbXJyID0gMDsKKwkKKwlp ZiAoIW1yciB8fCByY19pbmZvLT5pcmlfZmluYWx0c2kgPT0gMCkgeworCQlpZiAoIUlTX1JBVEVf REVGSU5FRChzYW4sIGZpbmFsX3JpeCkpIHsKKwkJCXJldHVybjsKKwkJfQorCQkvKgorCQkgKiBP bmx5IG9uZSByYXRlIHdhcyB1c2VkOyBvcHRpbWl6ZSB3b3JrLgorCQkgKi8KKwkJdXBkYXRlX3N0 YXRzKHZhcCwgbmksIGZyYW1lX3NpemUsIAorCQkJICAgICBmaW5hbF9yaXgsIGxvbmdfdHJpZXMs CisJCQkgICAgIDAsIDAsCisJCQkgICAgIDAsIDAsCisJCQkgICAgIDAsIDAsCisJCQkgICAgIHNo b3J0X3RyaWVzLCBsb25nX3RyaWVzLAorCQkJICAgICBuZnJhbWVzLCBuYmFkKTsKKworCX0gZWxz ZSB7CisJCWludCBmaW5hbFRTSWR4ID0gcmNfaW5mby0+aXJpX2ZpbmFsdHNpOworCQlpbnQgaTsK KworCQkvKgorCQkgKiBOQjogc2VyaWVzID4gMCBhcmUgbm90IHBlbmFsaXplZCBmb3IgZmFpbHVy ZQorCQkgKiBiYXNlZCBvbiB0aGUgdHJ5IGNvdW50cyB1bmRlciB0aGUgYXNzdW1wdGlvbgorCQkg KiB0aGF0IGxvc3NlcyBhcmUgb2Z0ZW4gYnVyc3R5IGFuZCBzaW5jZSB3ZQorCQkgKiBzYW1wbGUg aGlnaGVyIHJhdGVzIDEgdHJ5IGF0IGEgdGltZSBkb2luZyBzbworCQkgKiBtYXkgdW5mYWlybHkg cGVuYWxpemUgdGhlbS4KKwkJICovCisJCWlmIChyY1swXS50cmllcykgeworCQkJdXBkYXRlX3N0 YXRzKHZhcCwgbmksIGZyYW1lX3NpemUsCisJCQkJICAgICByY1swXS5yaXgsIHJjWzBdLnRyaWVz LAorCQkJCSAgICAgcmNbMV0ucml4LCByY1sxXS50cmllcywKKwkJCQkgICAgIHJjWzJdLnJpeCwg cmNbMl0udHJpZXMsCisJCQkJICAgICByY1szXS5yaXgsIHJjWzNdLnRyaWVzLAorCQkJCSAgICAg c2hvcnRfdHJpZXMsIGxvbmdfdHJpZXMsCisJCQkJICAgICBuZnJhbWVzLCBuYmFkKTsKKwkJCWxv bmdfdHJpZXMgLT0gcmNbMF0udHJpZXM7CisJCX0KKwkJCisJCWlmIChyY1sxXS50cmllcyAmJiBm aW5hbFRTSWR4ID4gMCkgeworCQkJdXBkYXRlX3N0YXRzKHZhcCwgbmksIGZyYW1lX3NpemUsCisJ CQkJICAgICByY1sxXS5yaXgsIHJjWzFdLnRyaWVzLAorCQkJCSAgICAgcmNbMl0ucml4LCByY1sy XS50cmllcywKKwkJCQkgICAgIHJjWzNdLnJpeCwgcmNbM10udHJpZXMsCisJCQkJICAgICAwLCAw LAorCQkJCSAgICAgc2hvcnRfdHJpZXMsIGxvbmdfdHJpZXMsCisJCQkJICAgICBuZnJhbWVzLCBu YmFkKTsKKwkJCWxvbmdfdHJpZXMgLT0gcmNbMV0udHJpZXM7CisJCX0KKworCQlpZiAocmNbMl0u dHJpZXMgJiYgZmluYWxUU0lkeCA+IDEpIHsKKwkJCXVwZGF0ZV9zdGF0cyh2YXAsIG5pLCBmcmFt ZV9zaXplLAorCQkJCSAgICAgcmNbMl0ucml4LCByY1syXS50cmllcywKKwkJCQkgICAgIHJjWzNd LnJpeCwgcmNbM10udHJpZXMsCisJCQkJICAgICAwLCAwLAorCQkJCSAgICAgMCwgMCwKKwkJCQkg ICAgIHNob3J0X3RyaWVzLCBsb25nX3RyaWVzLAorCQkJCSAgICAgbmZyYW1lcywgbmJhZCk7CisJ CQlsb25nX3RyaWVzIC09IHJjWzJdLnRyaWVzOworCQl9CisKKwkJaWYgKHJjWzNdLnRyaWVzICYm IGZpbmFsVFNJZHggPiAyKSB7CisJCQl1cGRhdGVfc3RhdHModmFwLCBuaSwgZnJhbWVfc2l6ZSwK KwkJCQkgICAgIHJjWzNdLnJpeCwgcmNbM10udHJpZXMsCisJCQkJICAgICAwLCAwLAorCQkJCSAg ICAgMCwgMCwKKwkJCQkgICAgIDAsIDAsCisJCQkJICAgICBzaG9ydF90cmllcywgbG9uZ190cmll cywKKwkJCQkgICAgIG5mcmFtZXMsIG5iYWQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAor c2FtcGxlX3R4X3VwZGF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIGNvbnN0IHN0 cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksCisgICAgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMiwgdm9p ZCAqYXJnMykKK3sKKwkvKiBub3RoaW5nIGhlcmUuICovCit9CisKK3N0YXRpYyB2b2lkCitzYW1w bGVfc2V0aW50ZXJ2YWwoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCBpbnQgbXNlY3Mp Cit7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGUgKnNhbXBsZSA9IHZhcC0+aXZfcnM7CisJaW50 IHQ7CisKKwlpZiAobXNlY3MgPCAxMDApCisJCW1zZWNzID0gMTAwOworCXQgPSBtc2Vjc190b190 aWNrcyhtc2Vjcyk7CisJLyogaWVlZTgwMjExX3NhbXBsZSBkb2Vzbid0IGhhdmUgdGhlIHNhbXBs ZV9pbnRlcnZhbCBmaWVsZCBieSBub3cgKi8KKwkvLyBzYW1wbGUtPnNhbXBsZV9pbnRlcnZhbCA9 ICh0IDwgMSkgPyAxIDogdDsKK30KKworc3RhdGljIHZvaWQKK3NhbXBsZV9zdGF0cyh2b2lkICph cmcsIHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCit7CisJc3RydWN0IGllZWU4MDIxMXZhcCAq dmFwID0gbmktPm5pX3ZhcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBu aS0+bmlfcmN0bHM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCA9IGll ZWU4MDIxMV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOworCXVpbnQ2NF90 IG1hc2s7CisJaW50IHJpeCwgeTsKKworCXByaW50ZigiXG5bJXNdIHJlZmNudCAlZCBzdGF0aWNf cml4ICglZCAlcykgcmF0ZW1hc2sgMHglanhcbiIsCisJICAgIGV0aGVyX3NwcmludGYobmktPm5p X21hY2FkZHIpLCBpZWVlODAyMTFfbm9kZV9yZWZjbnQobmkpLAorCSAgICBkb3QxMXJhdGUocnQs IHNhbi0+c3RhdGljX3JpeCksCisJICAgIGRvdDExcmF0ZV9sYWJlbChydCwgc2FuLT5zdGF0aWNf cml4KSwKKwkgICAgKHVpbnRtYXhfdClzYW4tPnJhdGVtYXNrKTsKKwlmb3IgKHkgPSAwOyB5IDwg TlVNX1BBQ0tFVF9TSVpFX0JJTlM7IHkrKykgeworCQlwcmludGYoIlslNHVdIGN1ciByaXggJWQg KCVkICVzKSBzaW5jZSBzd2l0Y2g6IHBhY2tldHMgJWQgdGlja3MgJXVcbiIsCisJCSAgICBiaW5f dG9fc2l6ZSh5KSwgc2FuLT5jdXJyZW50X3JpeFt5XSwKKwkJICAgIGRvdDExcmF0ZShydCwgc2Fu LT5jdXJyZW50X3JpeFt5XSksCisJCSAgICBkb3QxMXJhdGVfbGFiZWwocnQsIHNhbi0+Y3VycmVu dF9yaXhbeV0pLAorCQkgICAgc2FuLT5wYWNrZXRzX3NpbmNlX3N3aXRjaFt5XSwgc2FuLT50aWNr c19zaW5jZV9zd2l0Y2hbeV0pOworCQlwcmludGYoIlslNHVdIGxhc3Qgc2FtcGxlICglZCAlcykg Y3VyIHNhbXBsZSAoJWQgJXMpIHBhY2tldHMgc2VudCAlZFxuIiwKKwkJICAgIGJpbl90b19zaXpl KHkpLAorCQkgICAgZG90MTFyYXRlKHJ0LCBzYW4tPmxhc3Rfc2FtcGxlX3JpeFt5XSksCisJCSAg ICBkb3QxMXJhdGVfbGFiZWwocnQsIHNhbi0+bGFzdF9zYW1wbGVfcml4W3ldKSwKKwkJICAgIGRv dDExcmF0ZShydCwgc2FuLT5jdXJyZW50X3NhbXBsZV9yaXhbeV0pLAorCQkgICAgZG90MTFyYXRl X2xhYmVsKHJ0LCBzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFt5XSksCisJCSAgICBzYW4tPnBhY2tl dHNfc2VudFt5XSk7CisJCXByaW50ZigiWyU0dV0gcGFja2V0cyBzaW5jZSBzYW1wbGUgJWQgc2Ft cGxlIHR0ICV1XG4iLAorCQkgICAgYmluX3RvX3NpemUoeSksIHNhbi0+cGFja2V0c19zaW5jZV9z YW1wbGVbeV0sCisJCSAgICBzYW4tPnNhbXBsZV90dFt5XSk7CisJfQorCWZvciAobWFzayA9IHNh bi0+cmF0ZW1hc2ssIHJpeCA9IDA7IG1hc2sgIT0gMDsgbWFzayA+Pj0gMSwgcml4KyspIHsKKwkJ aWYgKChtYXNrICYgMSkgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJZm9yICh5ID0gMDsgeSA8IE5V TV9QQUNLRVRfU0laRV9CSU5TOyB5KyspIHsKKwkJCWlmIChzYW4tPnN0YXRzW3ldW3JpeF0udG90 YWxfcGFja2V0cyA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJcHJpbnRmKCJbJTJ1ICVzOiU0dV0g JThqdTolLThqdSAoJTNkJSUpIChFV01BICUzZC4lMWQlJSkgVCAlOGp1IEYgJTRkIGF2ZyAlNXUg bGFzdCAldVxuIiwKKwkJCSAgICBkb3QxMXJhdGUocnQsIHJpeCksIGRvdDExcmF0ZV9sYWJlbChy dCwgcml4KSwKKwkJCSAgICBiaW5fdG9fc2l6ZSh5KSwKKwkJCSAgICAodWludG1heF90KSBzYW4t PnN0YXRzW3ldW3JpeF0udG90YWxfcGFja2V0cywKKwkJCSAgICAodWludG1heF90KSBzYW4tPnN0 YXRzW3ldW3JpeF0ucGFja2V0c19hY2tlZCwKKwkJCSAgICAoaW50KSAoKHNhbi0+c3RhdHNbeV1b cml4XS5wYWNrZXRzX2Fja2VkICogMTAwVUxMKSAvCisJCQkgICAgIHNhbi0+c3RhdHNbeV1bcml4 XS50b3RhbF9wYWNrZXRzKSwKKwkJCSAgICBzYW4tPnN0YXRzW3ldW3JpeF0uZXdtYV9wY3QgLyAx MCwKKwkJCSAgICBzYW4tPnN0YXRzW3ldW3JpeF0uZXdtYV9wY3QgJSAxMCwKKwkJCSAgICAodWlu dG1heF90KSBzYW4tPnN0YXRzW3ldW3JpeF0udHJpZXMsCisJCQkgICAgc2FuLT5zdGF0c1t5XVty aXhdLnN1Y2Nlc3NpdmVfZmFpbHVyZXMsCisJCQkgICAgc2FuLT5zdGF0c1t5XVtyaXhdLmF2ZXJh Z2VfdHhfdGltZSwKKwkJCSAgICB0aWNrcyAtIHNhbi0+c3RhdHNbeV1bcml4XS5sYXN0X3R4KTsK KwkJfQorCX0KK30KKworc3RhdGljIGludAorc2FtcGxlX3N5c2N0bF9zdGF0cyhTWVNDVExfSEFO RExFUl9BUkdTKQoreworCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IGFyZzE7CisJc3RydWN0 IGllZWU4MDIxMWNvbSAqaWMgPSB2YXAtPml2X2lmcC0+aWZfbDJjb207CisJaW50IGVycm9yLCB2 OworCisJdiA9IDA7CisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmdiwgMCwgcmVx KTsKKwlpZiAoZXJyb3IgfHwgIXJlcS0+bmV3cHRyKQorCQlyZXR1cm4gZXJyb3I7CisJaWVlZTgw MjExX2l0ZXJhdGVfbm9kZXMoJmljLT5pY19zdGEsIHNhbXBsZV9zdGF0cywgTlVMTCk7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NhbXBsZV9zeXNjdGxfc21vb3RoaW5nX3JhdGUoU1lT Q1RMX0hBTkRMRVJfQVJHUykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBhcmcxOwor CXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSB2YXAtPml2X3JzOworCWludCByYXRl LCBlcnJvcjsKKworCXJhdGUgPSBzYW1wbGUtPnNhbXBsZV9zbW9vdGhpbmdfcmF0ZTsKKwllcnJv ciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZyYXRlLCAwLCByZXEpOworCWlmIChlcnJvciB8 fCAhcmVxLT5uZXdwdHIpCisJCXJldHVybiBlcnJvcjsKKwlpZiAoISgwIDw9IHJhdGUgJiYgcmF0 ZSA8IDEwMCkpCisJCXJldHVybiBFSU5WQUw7CisJc2FtcGxlLT5zYW1wbGVfc21vb3RoaW5nX3Jh dGUgPSByYXRlOworCXNhbXBsZS0+c2FtcGxlX3Ntb290aGluZ19taW5wYWNrZXRzID0gMTAwIC8g KDEwMCAtIHJhdGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzYW1wbGVfc3lzY3Rs X3NhbXBsZV9yYXRlKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisJc3RydWN0IGllZWU4MDIxMXZh cCAqdmFwID0gYXJnMTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSAqc2FtcGxlID0gdmFwLT5p dl9yczsKKwlpbnQgcmF0ZSwgZXJyb3I7CisKKwlyYXRlID0gc2FtcGxlLT5zYW1wbGVfcmF0ZTsK KwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZyYXRlLCAwLCByZXEpOworCWlmIChl cnJvciB8fCAhcmVxLT5uZXdwdHIpCisJCXJldHVybiBlcnJvcjsKKwlpZiAoISgyIDw9IHJhdGUg JiYgcmF0ZSA8PSAxMDApKQorCQlyZXR1cm4gRUlOVkFMOworCXNhbXBsZS0+c2FtcGxlX3JhdGUg PSByYXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc2FtcGxlX3N5c2N0bGF0dGFj aChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCisgICAgc3RydWN0IHN5c2N0bF9jdHhfbGlzdCAq Y3R4LCBzdHJ1Y3Qgc3lzY3RsX29pZCAqdHJlZSkKK3sKKwlTWVNDVExfQUREX1BST0MoY3R4LCBT WVNDVExfQ0hJTERSRU4odHJlZSksIE9JRF9BVVRPLAorCSAgICAic2FtcGxlX3Ntb290aGluZ19y YXRlIiwgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXLCB2YXAsIDAsCisJICAgIHNhbXBsZV9zeXNj dGxfc21vb3RoaW5nX3JhdGUsICJJIiwKKwkgICAgInNhbXBsZTogc21vb3RoaW5nIHJhdGUgZm9y IGF2ZyB0eCB0aW1lICglJSkiKTsKKwlTWVNDVExfQUREX1BST0MoY3R4LCBTWVNDVExfQ0hJTERS RU4odHJlZSksIE9JRF9BVVRPLAorCSAgICAic2FtcGxlX3JhdGUiLCBDVExUWVBFX0lOVCB8IENU TEZMQUdfUlcsIHZhcCwgMCwKKwkgICAgc2FtcGxlX3N5c2N0bF9zYW1wbGVfcmF0ZSwgIkkiLAor CSAgICAic2FtcGxlOiBwZXJjZW50IGFpciB0aW1lIGRldm90ZWQgdG8gc2FtcGxpbmcgbmV3IHJh dGVzICglJSkiKTsKKwkvKiBYWFggbWF4X3N1Y2Nlc3NpdmVfZmFpbHVyZXMsIHN0YWxlX2ZhaWx1 cmVfdGltZW91dCwgbWluX3N3aXRjaCAqLworCVNZU0NUTF9BRERfUFJPQyhjdHgsIFNZU0NUTF9D SElMRFJFTih0cmVlKSwgT0lEX0FVVE8sCisJICAgICJzYW1wbGVfc3RhdHMiLCBDVExUWVBFX0lO VCB8IENUTEZMQUdfUlcsIHZhcCwgMCwKKwkgICAgc2FtcGxlX3N5c2N0bF9zdGF0cywgIkkiLCAi c2FtcGxlOiBwcmludCBzdGF0aXN0aWNzIik7Cit9CkluZGV4OiBzeXMvbmV0ODAyMTEvaWVlZTgw MjExX3JjX3NhbXBsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfcmNf c2FtcGxlLmgJKHJldmlzaW9uIDApCisrKyBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX3JjX3NhbXBs ZS5oCShyZXZpc2lvbiAyNTY4MzcpCkBAIC0wLDAgKzEsMjg3IEBACisvKiAkRnJlZUJTRDogaGVh ZC9zeXMvZGV2L2F0aC9hdGhfcmF0ZS9zYW1wbGUvc2FtcGxlLmggMjQwMzgyIDIwMTItMDgtMTUg MDc6MTA6MTBaIGFkcmlhbiAkKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSm9obiBC aWNrZXQKKyAqIENvcHlyaWdodCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxjY3FpbkBGcmVlQlNE Lm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91 dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHNpbWlsYXIgdG8gdGhl ICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdyAoIkRpc2NsYWltZXIiKSBhbmQgYW55Cisg KiAgICByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24gaW5jbHVkaW5nIGEg c3Vic3RhbnRpYWxseQorICogICAgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBm dXJ0aGVyIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9m IHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAg b2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29m dHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP TlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS UkFOVElFUyBPRiBOT05JTkZSSU5HRU1FTlQsIE1FUkNIQU5USUJJTElUWQorICogQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaWZuZGVm IF9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9TQU1QTEVfSF8KKyNkZWZpbmUgX05FVDgwMjEx X0lFRUU4MDIxMV9SQVRFQ1RMX1NBTVBMRV9IXworCisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgw MjExX3JhdGVjdGwuaD4KKworLyoKKyAqIGZvciBub3csIHdlIHRyYWNrIHBlcmZvcm1hbmNlIGZv ciB0aHJlZSBkaWZmZXJlbnQgcGFja2V0CisgKiBzaXplIGJ1Y2tldHMKKyAqLworI2RlZmluZSBO VU1fUEFDS0VUX1NJWkVfQklOUyAyCisjZGVmaW5lCVNBTVBMRV9NQVhSQVRFUwk2NAkJLyogTkI6 IGNvcnJlc3BvbmRzIHRvIGhhbCBpbmZvWzMyXSAqLworCisvKgorICogUmF0ZSBjb250cm9sIHNl dHRpbmdzLgorICovCitzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSB7CisJc3RydWN0IGllZWU4MDIx MV9yY19zdGF0IHNhbXBsZV9zdGF0OworCWludAlzYW1wbGVfc21vb3RoaW5nX3JhdGU7CQkJLyog ZXdtYSBwZXJjZW50YWdlIFswLi45OV0gKi8KKwlpbnQJc2FtcGxlX3Ntb290aGluZ19taW5wYWNr ZXRzOworCWludAlzYW1wbGVfcmF0ZTsJCQkvKiAldGltZSB0byB0cnkgZGlmZmVyZW50IHR4IHJh dGVzICovCisJaW50CXNhbXBsZV9tYXhfc3VjY2Vzc2l2ZV9mYWlsdXJlczsKKwlpbnQJc2FtcGxl X3N0YWxlX2ZhaWx1cmVfdGltZW91dDsJLyogaG93IGxvbmcgdG8gaG9ub3IgbWF4X3N1Y2Nlc3Np dmVfZmFpbHVyZXMgKi8KKwlpbnQJc2FtcGxlX21pbl9zd2l0Y2g7CQkvKiBtaW4gdGltZSBiZXR3 ZWVuIHJhdGUgY2hhbmdlcyAqLworCWludAlzYW1wbGVfbWluX2dvb2RfcGN0OwkvKiBtaW4gZ29v ZCBwZXJjZW50YWdlIGZvciBhIHJhdGUgdG8gYmUgY29uc2lkZXJlZCAqLworfTsKKworc3RydWN0 IHJhdGVfc3RhdHMgewkKKwl1bnNpZ25lZCBhdmVyYWdlX3R4X3RpbWU7CisJaW50IHN1Y2Nlc3Np dmVfZmFpbHVyZXM7CisJdWludDY0X3QgdHJpZXM7CisJdWludDY0X3QgdG90YWxfcGFja2V0czsJ LyogcGt0cyB0b3RhbCBzaW5jZSBhc3NvYyAqLworCXVpbnQ2NF90IHBhY2tldHNfYWNrZWQ7CS8q IHBrdHMgYWNrZWQgc2luY2UgYXNzb2MgKi8KKwlpbnQgZXdtYV9wY3Q7CS8qIEVXTUEgcGVyY2Vu dGFnZSAqLworCXVuc2lnbmVkIHBlcmZlY3RfdHhfdGltZTsgLyogdHJhbnNtaXQgdGltZSBmb3Ig MCByZXRyaWVzICovCisJaW50IGxhc3RfdHg7Cit9OworCitzdHJ1Y3QgdHhzY2hlZHVsZSB7CisJ dWludDhfdAl0MCwgcjA7CQkvKiBzZXJpZXMgMDogdHJpZXMsIHJhdGUgY29kZSAqLworCXVpbnQ4 X3QJdDEsIHIxOwkJLyogc2VyaWVzIDE6IHRyaWVzLCByYXRlIGNvZGUgKi8KKwl1aW50OF90CXQy LCByMjsJCS8qIHNlcmllcyAyOiB0cmllcywgcmF0ZSBjb2RlICovCisJdWludDhfdAl0MywgcjM7 CQkvKiBzZXJpZXMgMzogdHJpZXMsIHJhdGUgY29kZSAqLworfTsKKworLyoKKyAqIFJhdGUgY29u dHJvbCBzdGF0ZSBmb3IgYSBnaXZlbiBub2RlLgorICovCisvKiBYWFggY2hhbmdlIG5hbWluZyBj b252ZXJzaW9uPyAqLworc3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9kZSB7CisJc3RydWN0IGll ZWU4MDIxMV9zYW1wbGUgKnNhbl9zYW1wbGU7LyogYmFja3BvaW50ZXIgKi8KKwlpbnQgc3RhdGlj X3JpeDsJCQkvKiByYXRlIGluZGV4IG9mIGZpeGVkIHR4IHJhdGUgKi8KKwl1aW50NjRfdCByYXRl bWFzazsJCS8qIGJpdCBtYXNrIG9mIHZhbGlkIHJhdGUgaW5kaWNlcyAqLworCWNvbnN0IHN0cnVj dCB0eHNjaGVkdWxlICpzY2hlZDsJLyogdHggc2NoZWR1bGUgdGFibGUgKi8KKworCXN0cnVjdCBy YXRlX3N0YXRzIHN0YXRzW05VTV9QQUNLRVRfU0laRV9CSU5TXVtTQU1QTEVfTUFYUkFURVNdOwor CWludCBsYXN0X3NhbXBsZV9yaXhbTlVNX1BBQ0tFVF9TSVpFX0JJTlNdOworCisJaW50IGN1cnJl bnRfc2FtcGxlX3JpeFtOVU1fUEFDS0VUX1NJWkVfQklOU107ICAgICAgIAorCWludCBwYWNrZXRz X3NlbnRbTlVNX1BBQ0tFVF9TSVpFX0JJTlNdOworCisJaW50IGN1cnJlbnRfcml4W05VTV9QQUNL RVRfU0laRV9CSU5TXTsKKwlpbnQgcGFja2V0c19zaW5jZV9zd2l0Y2hbTlVNX1BBQ0tFVF9TSVpF X0JJTlNdOworCXVuc2lnbmVkIHRpY2tzX3NpbmNlX3N3aXRjaFtOVU1fUEFDS0VUX1NJWkVfQklO U107CisKKwlpbnQgcGFja2V0c19zaW5jZV9zYW1wbGVbTlVNX1BBQ0tFVF9TSVpFX0JJTlNdOwor CXVuc2lnbmVkIHNhbXBsZV90dFtOVU1fUEFDS0VUX1NJWkVfQklOU107Cit9OworCisjZGVmaW5l CUlTX1JBVEVfREVGSU5FRChzYW4sIHJpeCkJKCgoc2FuKS0+cmF0ZW1hc2sgJiAoMTw8KHJpeCkp KSAhPSAwKQorCisjaWZuZGVmIE1JTgorI2RlZmluZQlNSU4oYSxiKQkoKGEpIDwgKGIpID8gKGEp IDogKGIpKQorI2VuZGlmCisjaWZuZGVmIE1BWAorI2RlZmluZQlNQVgoYSxiKQkoKGEpID4gKGIp ID8gKGEpIDogKGIpKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBpbnQgcGFja2V0X3NpemVfYmlu c1tOVU1fUEFDS0VUX1NJWkVfQklOU10gID0geyAyNTAsIDE2MDAgfTsKKworc3RhdGljIGlubGlu ZSBpbnQKK2Jpbl90b19zaXplKGludCBpbmRleCkKK3sKKwlyZXR1cm4gcGFja2V0X3NpemVfYmlu c1tpbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzaXplX3RvX2JpbihpbnQgc2l6ZSkg Cit7CisjaWYgTlVNX1BBQ0tFVF9TSVpFX0JJTlMgPiAxCisJaWYgKHNpemUgPD0gcGFja2V0X3Np emVfYmluc1swXSkKKwkJcmV0dXJuIDA7CisjZW5kaWYKKyNpZiBOVU1fUEFDS0VUX1NJWkVfQklO UyA+IDIKKwlpZiAoc2l6ZSA8PSBwYWNrZXRfc2l6ZV9iaW5zWzFdKQorCQlyZXR1cm4gMTsKKyNl bmRpZgorI2lmIE5VTV9QQUNLRVRfU0laRV9CSU5TID4gMworCWlmIChzaXplIDw9IHBhY2tldF9z aXplX2JpbnNbMl0pCisJCXJldHVybiAyOworI2VuZGlmCisjaWYgTlVNX1BBQ0tFVF9TSVpFX0JJ TlMgPiA0CisjZXJyb3IgImFkZCBzdXBwb3J0IGZvciBtb3JlIHBhY2tldCBzaXplcyIKKyNlbmRp ZgorCXJldHVybiBOVU1fUEFDS0VUX1NJWkVfQklOUy0xOworfQorCitzdGF0aWMgdWludDMyX3Qg c2FtcGxlX3BrdF90eHRpbWUoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCwK Kwl1aW50MzJfdCBmcmFtZUxlbiwgdWludDE2X3QgcmF0ZWl4LCBpbnQgaXNodDQwLCBpbnQgaXNT aG9ydFByZWFtYmxlKQoreworCXVpbnQ4X3QgcmM7CisgICAgaW50IG51bVN0cmVhbXM7CisKKyAg ICByYyA9IHJ0LT5pbmZvW3JhdGVpeF0ucmF0ZUNvZGU7CisKKyAgICAvKiBMZWdhY3kgcmF0ZT8g UmV0dXJuIHRoZSBvbGQgd2F5ICovCisgICAgaWYgKCEgSVNfSFRfUkFURShyYykpCisgICAgCXJl dHVybiBpZWVlODAyMTFfY29tcHV0ZV9kdXJhdGlvbihydCwgZnJhbWVMZW4sIHJhdGVpeCwgaXNT aG9ydFByZWFtYmxlKTsKKworICAgIC8qIDExbiBmcmFtZSAtIGV4dHJhY3Qgb3V0IHRoZSBudW1i ZXIgb2Ygc3BhdGlhbCBzdHJlYW1zICovCisgICAgbnVtU3RyZWFtcyA9IEhUX1JDXzJfU1RSRUFN UyhyYyk7CisgICAgS0FTU0VSVChudW1TdHJlYW1zID4gMCAmJiBudW1TdHJlYW1zIDw9IDQsCisg ICAgICAgICgibnVtYmVyIG9mIHNwYXRpYWwgc3RyZWFtcyBuZWVkcyB0byBiZSAxLi4zOiBNQ1Mg cmF0ZSAweCV4ISIsCisgICAgICAgIHJhdGVpeCkpOworCisgICAgcmV0dXJuIGllZWU4MDIxMV9j b21wdXRlX2R1cmF0aW9uX2h0KGZyYW1lTGVuLCByYywgbnVtU3RyZWFtcywgaXNodDQwLCBpc1No b3J0UHJlYW1ibGUpOworfQorCisjZGVmaW5lIFdJRklfQ1dfTUlOIDMxCisjZGVmaW5lIFdJRklf Q1dfTUFYIDEwMjMKKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgdHJhbnNtaXQgZHVyYXRpb24gb2Yg YSBmcmFtZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGNhbGNfdXNlY3NfdW5pY2FzdF9wYWNrZXQo Y29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLAorCQkJCWludCBsZW5ndGgsCisJCQkJaW50 IHJpeCwgaW50IHNob3J0X3JldHJpZXMsCisJCQkJaW50IGxvbmdfcmV0cmllcywgaW50IGlzX2h0 NDApCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCA9IGllZWU4MDIx MV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOworCXN0cnVjdCBpZWVlODAy MTFjb20gKmljID0gdmFwLT5pdl9pYzsKKwlpbnQgY3VybW9kZSA9IGllZWU4MDIxMV9jaGFuMm1v ZGUodmFwLT5pdl9pYy0+aWNfY3VyY2hhbik7CisJCisJdW5zaWduZWQgdF9zbG90LCB0X2RpZnMs IHRfc2lmczsgCisJaW50IHJ0cywgY3RzOworCWludCB0dCwgeCwgY3csIGNpeDsKKworCWludCB0 dCA9IDA7CisJaW50IHggPSAwOworCWludCBjdyA9IFdJRklfQ1dfTUlOOworCisJS0FTU0VSVChy dCAhPSBOVUxMLCAoIm5vIHJhdGUgdGFibGUsIG1vZGUgJXUiLCBjdXJtb2RlKSk7CisKKwlpZiAo cml4ID49IHJ0LT5yYXRlQ291bnQpIHsKKwkJcHJpbnRmKCJib2d1cyByaXggJWQsIG1heCAldSwg bW9kZSAldVxuIiwKKwkJICAgICAgIHJpeCwgcnQtPnJhdGVDb3VudCwgY3VybW9kZSk7CisJCXJl dHVybiAwOworCX0KKwljaXggPSBydC0+aW5mb1tyaXhdLmNvbnRyb2xSYXRlOworCS8qIAorCSAq IFhYWCBnZXR0aW5nIG1hYy9waHkgbGV2ZWwgdGltaW5ncyBzaG91bGQgYmUgZml4ZWQgZm9yIHR1 cmJvCisJICogcmF0ZXMsIGFuZCB0aGVyZSBpcyBwcm9iYWJseSBhIHdheSB0byBnZXQgdGhpcyBm cm9tIHRoZQorCSAqIGhhbC4uLgorCSAqLworCXN3aXRjaCAocnQtPmluZm9bcml4XS5waHkpIHsK KwljYXNlIElFRUU4MDIxMV9UX09GRE06CisJCXRfc2xvdCA9IDk7CisJCXRfc2lmcyA9IDE2Owor CQl0X2RpZnMgPSAyODsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBJRUVFODAyMTFfVF9U VVJCTzoKKwkJdF9zbG90ID0gOTsKKwkJdF9zaWZzID0gODsKKwkJdF9kaWZzID0gMjg7CisJCWJy ZWFrOworCWNhc2UgSUVFRTgwMjExX1RfSFQ6CisJCXRfc2xvdCA9IDk7CisJCXRfc2lmcyA9IDg7 CisJCXRfZGlmcyA9IDI4OworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9UX0RTOgorCQkvKiBm YWxsIHRocm91Z2ggdG8gZGVmYXVsdCAqLworCWRlZmF1bHQ6CisJCS8qIHBnIDIwNSBpZWVlLjgw Mi4xMS5wZGYgKi8KKwkJdF9zbG90ID0gMjA7CisJCXRfZGlmcyA9IDUwOworCQl0X3NpZnMgPSAx MDsKKwl9CisKKwlydHMgPSBjdHMgPSAwOworCisJaWYgKChpYy0+aWNfZmxhZ3MgJiBJRUVFODAy MTFfRl9VU0VQUk9UKSAmJgorCSAgICBydC0+aW5mb1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9P RkRNKSB7CisJCWlmIChpYy0+aWNfcHJvdG1vZGUgPT0gSUVFRTgwMjExX1BST1RfUlRTQ1RTKQor CQkJcnRzID0gMTsKKwkJZWxzZSBpZiAoaWMtPmljX3Byb3Rtb2RlID09IElFRUU4MDIxMV9QUk9U X0NUU09OTFkpCisJCQljdHMgPSAxOworCisJCWludCBwcm90cml4OworICAgIAlpZiAoY3VybW9k ZSA9PSBJRUVFODAyMTFfTU9ERV8xMUcpCisgICAgCSAgICBwcm90cml4ID0gcnQtPnJhdGVDb2Rl VG9JbmRleFsyKjJdOworICAgIAllbHNlIAorICAgIAkgICAgcHJvdHJpeCA9IHJ0LT5yYXRlQ29k ZVRvSW5kZXhbMioxXTsKKyAgICAJaWYgKDB4ZmYgPT0gcHJvdHJpeCkKKyAgICAJCXByb3RyaXgg PSAwOworCisJCWNpeCA9IHJ0LT5pbmZvW3Byb3RyaXhdLmNvbnRyb2xSYXRlOworCX0KKworCWlm ICgwIC8qbGVuZ3RoID4gaWMtPmljX3J0c3RocmVzaG9sZCAqLykgeworCQlydHMgPSAxOworCX0K KworCWlmIChydHMgfHwgY3RzKSB7CisJCWludCBjdHNyYXRlOworCQlpbnQgY3RzZHVyYXRpb24g PSAwOworCisJCS8qIE5COiB0aGlzIGlzIGludGVudGlvbmFsbHkgbm90IGEgcnVudGltZSBjaGVj ayAqLworCQlLQVNTRVJUKGNpeCA8IHJ0LT5yYXRlQ291bnQsCisJCSAgICAoImJvZ3VzIGNpeCAl ZCwgbWF4ICV1LCBtb2RlICV1XG4iLCBjaXgsIHJ0LT5yYXRlQ291bnQsCisJCSAgICAgY3VybW9k ZSkpOworCisJCWN0c3JhdGUgPSBydC0+aW5mb1tjaXhdLnJhdGVDb2RlIHwgcnQtPmluZm9bY2l4 XS5zaG9ydFByZWFtYmxlOworCQlpZiAocnRzKQkJLyogU0lGUyArIENUUyAqLworCQkJY3RzZHVy YXRpb24gKz0gcnQtPmluZm9bY2l4XS5zcEFja0R1cmF0aW9uOworCisJCS8qIFhYWCBhc3N1bWVz IHNob3J0IHByZWFtYmxlICovCisJCWN0c2R1cmF0aW9uICs9IHNhbXBsZV9wa3RfdHh0aW1lKHJ0 LCBsZW5ndGgsIHJpeCwgaXNfaHQ0MCwgMCk7CisKKwkJaWYgKGN0cykJLyogU0lGUyArIEFDSyAq LworCQkJY3RzZHVyYXRpb24gKz0gcnQtPmluZm9bY2l4XS5zcEFja0R1cmF0aW9uOworCisJCXR0 ICs9IChzaG9ydF9yZXRyaWVzICsgMSkgKiBjdHNkdXJhdGlvbjsKKwl9CisJdHQgKz0gdF9kaWZz OworCisJLyogWFhYIGFzc3VtZXMgc2hvcnQgcHJlYW1ibGUgKi8KKwl0dCArPSAobG9uZ19yZXRy aWVzKzEpKnNhbXBsZV9wa3RfdHh0aW1lKHJ0LCBsZW5ndGgsIHJpeCwgaXNfaHQ0MCwgMCk7CisK Kwl0dCArPSAobG9uZ19yZXRyaWVzKzEpKih0X3NpZnMgKyBydC0+aW5mb1tyaXhdLnNwQWNrRHVy YXRpb24pOworCisJZm9yICh4ID0gMDsgeCA8PSBzaG9ydF9yZXRyaWVzICsgbG9uZ19yZXRyaWVz OyB4KyspIHsKKwkJY3cgPSBNSU4oV0lGSV9DV19NQVgsIChjdyArIDEpICogMik7CisJCXR0ICs9 ICh0X3Nsb3QgKiBjdy8yKTsKKwl9CisJcmV0dXJuIHR0OworfQorCisjZW5kaWYgLyogX05FVDgw MjExX0lFRUU4MDIxMV9SQVRFQ1RMX1NBTVBMRV9IXyAqLwpJbmRleDogc3lzL25ldDgwMjExL2ll ZWU4MDIxMV9yY19zYW1wbGVfdHhzY2hlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIxMS9p ZWVlODAyMTFfcmNfc2FtcGxlX3R4c2NoZWQuaAkocmV2aXNpb24gMCkKKysrIHN5cy9uZXQ4MDIx MS9pZWVlODAyMTFfcmNfc2FtcGxlX3R4c2NoZWQuaAkocmV2aXNpb24gMjU2ODM3KQpAQCAtMCww ICsxLDI0MSBAQAorLyogJEZyZWVCU0Q6IGhlYWQvc3lzL2Rldi9hdGgvYXRoX3JhdGUvc2FtcGxl L3R4X3NjaGVkdWxlcy5oIDI0MDM4NCAyMDEyLTA4LTE1IDA3OjUwOjQyWiBhZHJpYW4gJCovCisK Ky8qLQorICogQ29weXJpZ2h0IChjKSAyMDA1IEpvaG4gQmlja2V0CisgKiBDb3B5cmlnaHQgKGMp IDIwMTMgQ2hlbmNob25nIFFpbiA8Y2NxaW5ARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJl c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0g YSBkaXNjbGFpbWVyCisgKiAgICBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWlt ZXIgYmVsb3cgKCJEaXNjbGFpbWVyIikgYW5kIGFueQorICogICAgcmVkaXN0cmlidXRpb24gbXVz dCBiZSBjb25kaXRpb25lZCB1cG9uIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkKKyAqICAgIHNp bWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlciBiaW5hcnkgcmVkaXN0cmli dXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHly aWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5 IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRl ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAo IkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZv dW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMn JyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OSU5GUklOR0VN RU5ULCBNRVJDSEFOVElCSUxJVFkKKyAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQg SE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlks CisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgor ICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisjaWZuZGVmCV9ORVQ4MDIxMV9JRUVFODAyMTFf UkFURUNUTF9TQU1QTEVfVFhTQ0hFRFVMRVNfSF8KKyNkZWZpbmUJX05FVDgwMjExX0lFRUU4MDIx MV9SQVRFQ1RMX1NBTVBMRV9UWFNDSEVEVUxFU19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+ CisKKyNkZWZpbmUgQShfcikgXAorICAgICgoKF9yKSA9PSA2KSAgID8gMCA6ICgoKF9yKSA9PSA5 KSAgID8gMSA6ICgoKF9yKSA9PSAxMikgID8gMiA6IFwKKyAgICAoKChfcikgPT0gMTgpICA/IDMg OiAoKChfcikgPT0gMjQpICA/IDQgOiAoKChfcikgPT0gMzYpICA/IDUgOiBcCisgICAgKCgoX3Ip ID09IDQ4KSAgPyA2IDogKCgoX3IpID09IDU0KSAgPyA3IDogMCkpKSkpKSkpCitzdGF0aWMgY29u c3Qgc3RydWN0IHR4c2NoZWR1bGUgc2VyaWVzXzExYVtdID0geworCXsgMyxBKCA2KSwgMyxBKCAg NiksIDAsQSggIDYpLCAwLEEoIDYpIH0sCS8qICAgNk1iL3MgKi8KKwl7IDQsQSggOSksIDMsQSgg IDYpLCA0LEEoICA2KSwgMCxBKCA2KSB9LAkvKiAgIDlNYi9zICovCisJeyA0LEEoMTIpLCAzLEEo ICA2KSwgNCxBKCAgNiksIDAsQSggNikgfSwJLyogIDEyTWIvcyAqLworCXsgNCxBKDE4KSwgMyxB KCAxMiksIDQsQSggIDYpLCAyLEEoIDYpIH0sCS8qICAxOE1iL3MgKi8KKwl7IDQsQSgyNCksIDMs QSggMTgpLCA0LEEoIDEyKSwgMixBKCA2KSB9LAkvKiAgMjRNYi9zICovCisJeyA0LEEoMzYpLCAz LEEoIDI0KSwgNCxBKCAxOCksIDIsQSggNikgfSwJLyogIDM2TWIvcyAqLworCXsgNCxBKDQ4KSwg MyxBKCAzNiksIDQsQSggMjQpLCAyLEEoMTIpIH0sCS8qICA0OE1iL3MgKi8KKwl7IDQsQSg1NCks IDMsQSggNDgpLCA0LEEoIDM2KSwgMixBKDI0KSB9CS8qICA1NE1iL3MgKi8KK307CisKKyNkZWZp bmUgTkExKF9yKSBcCisJKCgoX3IpID09IDYuNSkgID8gOCA6ICgoKF9yKSA9PSAxMykgID8gIDkg OiAoKChfcikgPT0gMTkuNSk/IDEwIDogXAorCSgoKF9yKSA9PSAyNikgID8gMTEgOiAoKChfcikg PT0gMzkpICA/IDEyIDogKCgoX3IpID09IDUyKSAgPyAxMyA6IFwKKwkoKChfcikgPT0gNTguNSk/ IDE0IDogKCgoX3IpID09IDY1KSAgPyAxNSA6IDApKSkpKSkpKQorI2RlZmluZSBOQTIoX3IpIFwK KwkoKChfcikgPT0gMTMpID8gMTYgOiAoKChfcikgPT0gMjYpID8gMTcgOiAoKChfcikgPT0gMzkp ID8gMTggOiBcCisJKCgoX3IpID09IDUyKSA/IDE5IDogKCgoX3IpID09IDc4KSA/IDIwIDogKCgo X3IpID09IDEwNCk/IDIxIDogXAorCSgoKF9yKSA9PSAxMTcpPyAyMiA6ICgoKF9yKSA9PSAxMzAp PyAyMyA6IDApKSkpKSkpKQorI2RlZmluZSBOQTMoX3IpIFwKKwkoKChfcikgPT0gMTkuNSkgID8g MjQgOiAoKChfcikgPT0gMzkpID8gMjUgOiAoKChfcikgPT0gNTguNSkgID8gMjYgOiBcCisJKCgo X3IpID09IDc4KSAgPyAyNyA6ICgoKF9yKSA9PSAxMTcpID8gMjggOiAoKChfcikgPT0gMTU2KSA/ IDI5IDogXAorCSgoKF9yKSA9PSAxNzUuNSkgPyAzMCA6ICgoKF9yKSA9PSAxOTUpPyAzMSA6IDAp KSkpKSkpKQorc3RhdGljIGNvbnN0IHN0cnVjdCB0eHNjaGVkdWxlIHNlcmllc18xMW5hW10gPSB7 CisJeyAzLEEoIDYpLCAzLEEoICA2KSwgMCxBKCAgNiksIDAsQSggNikgfSwgICAgICAgLyogICA2 TWIvcyAqLworCXsgNCxBKCA5KSwgMyxBKCAgNiksIDQsQSggIDYpLCAwLEEoIDYpIH0sICAgICAg IC8qICAgOU1iL3MgKi8KKwl7IDQsQSgxMiksIDMsQSggIDYpLCA0LEEoICA2KSwgMCxBKCA2KSB9 LCAgICAgICAvKiAgMTJNYi9zICovCisJeyA0LEEoMTgpLCAzLEEoIDEyKSwgNCxBKCAgNiksIDIs QSggNikgfSwgICAgICAgLyogIDE4TWIvcyAqLworCXsgNCxBKDI0KSwgMyxBKCAxOCksIDQsQSgg MTIpLCAyLEEoIDYpIH0sICAgICAgIC8qICAyNE1iL3MgKi8KKwl7IDQsQSgzNiksIDMsQSggMjQp LCA0LEEoIDE4KSwgMixBKCA2KSB9LCAgICAgICAvKiAgMzZNYi9zICovCisJeyA0LEEoNDgpLCAz LEEoIDM2KSwgNCxBKCAyNCksIDIsQSgxMikgfSwgICAgICAgLyogIDQ4TWIvcyAqLworCXsgNCxB KDU0KSwgMyxBKCA0OCksIDQsQSggMzYpLCAyLEEoMjQpIH0sICAgICAgIC8qICA1NE1iL3MgKi8K KworCS8qIDEgc3RyZWFtIHJhdGVzICovCisKKwl7IDMsTkExKCA2LjUpLCAzLE5BMSggNi41KSwg MCxOQTEoIDYuNSksIDAsTkExKDYuNSkgfSwgIC8qIDYuNU1iL3MgKi8KKwl7IDQsTkExKCAgMTMp LCAzLE5BMSggNi41KSwgNCxOQTEoIDYuNSksIDAsTkExKDYuNSkgfSwgIC8qICAxM01iL3MgKi8K Kwl7IDQsTkExKDE5LjUpLCAzLE5BMSggNi41KSwgNCxOQTEoIDYuNSksIDAsTkExKDYuNSkgfSwg IC8qMTkuNU1iL3MgKi8KKwl7IDQsTkExKCAgMjYpLCAzLE5BMSgxOS41KSwgNCxOQTEoIDYuNSks IDIsTkExKDYuNSkgfSwgIC8qICAyNk1iL3MgKi8KKwl7IDQsTkExKCAgMzkpLCAzLE5BMSggIDI2 KSwgNCxOQTEoMTkuNSksIDIsTkExKDYuNSkgfSwgIC8qICAzOU1iL3MgKi8KKwl7IDQsTkExKCAg NTIpLCAzLE5BMSggIDM5KSwgNCxOQTEoICAyNiksIDIsTkExKDYuNSkgfSwgIC8qICA1Mk1iL3Mg Ki8KKwl7IDQsTkExKDU4LjUpLCAzLE5BMSggIDUyKSwgNCxOQTEoICAzOSksIDIsTkExKCAxMykg fSwgIC8qNTguNU1iL3MgKi8KKwl7IDQsTkExKCAgNjUpLCAzLE5BMSg1OC41KSwgNCxOQTEoICA1 MiksIDIsTkExKCAxMykgfSwgIC8qICA2NU1iL3MgKi8KKworCS8qIDIgc3RyZWFtIHJhdGVzICov CisKKwl7IDMsTkEyKCAgMTMpLCAzLE5BMiggIDEzKSwgMCxOQTIoICAxMyksIDAsTkEyKCAxMykg fSwgIC8qICAxM01iL3MgKi8KKwl7IDQsTkEyKCAgMjYpLCAzLE5BMiggIDEzKSwgNCxOQTIoICAx MyksIDAsTkEyKCAxMykgfSwgIC8qICAyNk1iL3MgKi8KKwl7IDQsTkEyKCAgMzkpLCAzLE5BMigg IDI2KSwgNCxOQTIoICAxMyksIDIsTkEyKCAxMykgfSwgIC8qICAzOU1iL3MgKi8KKwl7IDQsTkEy KCAgNTIpLCAzLE5BMiggIDM5KSwgNCxOQTIoICAyNiksIDIsTkEyKCAxMykgfSwgIC8qICA1Mk1i L3MgKi8KKwl7IDQsTkEyKCAgNzgpLCAzLE5BMiggIDUyKSwgNCxOQTIoICAzOSksIDIsTkEyKCAx MykgfSwgIC8qICA3OE1iL3MgKi8KKwl7IDQsTkEyKCAxMDQpLCAzLE5BMiggIDc4KSwgNCxOQTIo ICA1MiksIDIsTkEyKCAxMykgfSwgIC8qIDEwNE1iL3MgKi8KKwl7IDQsTkEyKCAxMTcpLCAzLE5B MiggMTA0KSwgNCxOQTIoICA3OCksIDIsTkEyKCAyNikgfSwgIC8qIDExN01iL3MgKi8KKwl7IDQs TkEyKCAxMzApLCAzLE5BMiggMTE3KSwgNCxOQTIoIDEwNCksIDIsTkEyKCAyNikgfSwgICAvKiAx MzBNYi9zICovCisKKwkvKiAzIHN0cmVhbSByYXRlcyAqLworCisJeyAzLE5BMygxOS41KSwgMyxO QTMoMTkuNSksIDAsTkEzKDE5LjUpLCAwLE5BMygxOS41KSB9LCAgLyogIDE5TWIvcyAqLworCXsg MyxOQTMoICAzOSksIDMsTkEzKDE5LjUpLCAwLE5BMygxOS41KSwgMCxOQTMoMTkuNSkgfSwgIC8q ICAzOU1iL3MgKi8KKwl7IDMsTkEzKDU4LjUpLCAzLE5BMyggIDM5KSwgMCxOQTMoMTkuNSksIDAs TkEzKDE5LjUpIH0sICAvKiAgNThNYi9zICovCisJeyAzLE5BMyggIDc4KSwgMyxOQTMoNTguNSks IDAsTkEzKCAgMzkpLCAwLE5BMygxOS41KSB9LCAgLyogIDc4TWIvcyAqLworCXsgMyxOQTMoIDEx NyksIDMsTkEzKCAgNzgpLCAwLE5BMyg1OC41KSwgMCxOQTMoMTkuNSkgfSwgIC8qIDExN01iL3Mg Ki8KKwl7IDMsTkEzKCAxNTYpLCAzLE5BMyggMTE3KSwgMCxOQTMoICA3OCksIDAsTkEzKDE5LjUp IH0sICAvKiAgMTU2TWIvcyAqLworCXsgMyxOQTMoMTc1LjUpLCAzLE5BMyggMTU2KSwgMCxOQTMo IDExNyksIDAsTkEzKCAgMzkpIH0sICAvKiAgMTc1TWIvcyAqLworCXsgMyxOQTMoIDE5NSksIDMs TkEzKCAxOTUpLCAwLE5BMyggMTU2KSwgMCxOQTMoNTguNSkgfSwgIC8qIDE5NU1iL3MgKi8KK307 CisjdW5kZWYgQQorI3VuZGVmIE5BMworI3VuZGVmIE5BMgorI3VuZGVmIE5BMQorCisjZGVmaW5l IEcoX3IpIFwKKyAgICAoKChfcikgPT0gMSkgICA/IDAgOiAoKChfcikgPT0gMikgICA/IDEgOiAo KChfcikgPT0gNS41KSA/IDIgOiBcCisgICAgKCgoX3IpID09IDExKSAgPyAzIDogKCgoX3IpID09 IDYpICAgPyA0IDogKCgoX3IpID09IDkpICAgPyA1IDogXAorICAgICgoKF9yKSA9PSAxMikgID8g NiA6ICgoKF9yKSA9PSAxOCkgID8gNyA6ICgoKF9yKSA9PSAyNCkgID8gOCA6IFwKKyAgICAoKChf cikgPT0gMzYpICA/IDkgOiAoKChfcikgPT0gNDgpICA/IDEwIDogKCgoX3IpID09IDU0KSAgPyAx MSA6IDApKSkpKSkpKSkpKSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHhzY2hlZHVsZSBzZXJpZXNf MTFnW10gPSB7CisJeyAzLEcoIDEpLCAzLEcoICAxKSwgMCxHKCAgMSksIDAsRyggMSkgfSwJLyog ICAxTWIvcyAqLworCXsgNCxHKCAyKSwgMyxHKCAgMSksIDQsRyggIDEpLCAwLEcoIDEpIH0sCS8q ICAgMk1iL3MgKi8KKwl7IDQsRyg1LjUpLDMsRyggIDIpLCA0LEcoICAxKSwgMixHKCAxKSB9LAkv KiA1LjVNYi9zICovCisJeyA0LEcoMTEpLCAzLEcoNS41KSwgNCxHKCAgMiksIDIsRyggMSkgfSwJ LyogIDExTWIvcyAqLworCXsgNCxHKCA2KSwgMyxHKDUuNSksIDQsRyggIDIpLCAyLEcoIDEpIH0s CS8qICAgNk1iL3MgKi8KKwl7IDQsRyggOSksIDMsRyggIDYpLCA0LEcoNS41KSwgMixHKCAxKSB9 LAkvKiAgIDlNYi9zICovCisJeyA0LEcoMTIpLCAzLEcoIDExKSwgNCxHKDUuNSksIDIsRyggMSkg fSwJLyogIDEyTWIvcyAqLworCXsgNCxHKDE4KSwgMyxHKCAxMiksIDQsRyggMTEpLCAyLEcoIDEp IH0sCS8qICAxOE1iL3MgKi8KKwl7IDQsRygyNCksIDMsRyggMTgpLCA0LEcoIDEyKSwgMixHKCAx KSB9LAkvKiAgMjRNYi9zICovCisJeyA0LEcoMzYpLCAzLEcoIDI0KSwgNCxHKCAxOCksIDIsRygg MSkgfSwJLyogIDM2TWIvcyAqLworCXsgNCxHKDQ4KSwgMyxHKCAzNiksIDQsRyggMjQpLCAyLEco IDEpIH0sCS8qICA0OE1iL3MgKi8KKwl7IDQsRyg1NCksIDMsRyggNDgpLCA0LEcoIDM2KSwgMixH KCAxKSB9CS8qICA1NE1iL3MgKi8KK307CisKKyNkZWZpbmUgTkcxKF9yKSBcCisJKCgoX3IpID09 IDYuNSkgPyAxMiA6ICgoKF9yKSA9PSAxMykgPyAxMyA6ICgoKF9yKSA9PSAxOS41KT8gMTQgOiBc CisJKCgoX3IpID09IDI2KSAgPyAxNSA6ICgoKF9yKSA9PSAzOSkgPyAxNiA6ICgoKF9yKSA9PSA1 MikgID8gMTcgOiBcCisJKCgoX3IpID09IDU4LjUpPyAxOCA6ICgoKF9yKSA9PSA2NSkgPyAxOSA6 IDApKSkpKSkpKQorI2RlZmluZSBORzIoX3IpIFwKKwkoKChfcikgPT0gMTMpICA/IDIwIDogKCgo X3IpID09IDI2KSA/IDIxIDogKCgoX3IpID09IDM5KSAgPyAyMiA6IFwKKwkoKChfcikgPT0gNTIp ICA/IDIzIDogKCgoX3IpID09IDc4KSA/IDI0IDogKCgoX3IpID09IDEwNCkgPyAyNSA6IFwKKwko KChfcikgPT0gMTE3KSA/IDI2IDogKCgoX3IpID09IDEzMCk/IDI3IDogMCkpKSkpKSkpCisjZGVm aW5lIE5HMyhfcikgXAorCSgoKF9yKSA9PSAxOS41KSAgPyAyOCA6ICgoKF9yKSA9PSAzOSkgPyAy OSA6ICgoKF9yKSA9PSA1OC41KSAgPyAzMCA6IFwKKwkoKChfcikgPT0gNzgpICA/IDMxIDogKCgo X3IpID09IDExNykgPyAzMiA6ICgoKF9yKSA9PSAxNTYpID8gMzMgOiBcCisJKCgoX3IpID09IDE3 NS41KSA/IDM0IDogKCgoX3IpID09IDE5NSk/IDM1IDogMCkpKSkpKSkpCisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgdHhzY2hlZHVsZSBzZXJpZXNfMTFuZ1tdID0geworCXsgMyxHKCAxKSwgMyxHKCAg MSksIDAsRyggIDEpLCAwLEcoIDEpIH0sICAgICAgIC8qICAgMU1iL3MgKi8KKwl7IDQsRyggMiks IDMsRyggIDEpLCA0LEcoICAxKSwgMCxHKCAxKSB9LCAgICAgICAvKiAgIDJNYi9zICovCisJeyA0 LEcoNS41KSwzLEcoICAyKSwgNCxHKCAgMSksIDIsRyggMSkgfSwgICAgICAgLyogNS41TWIvcyAq LworCXsgNCxHKDExKSwgMyxHKDUuNSksIDQsRyggIDIpLCAyLEcoIDEpIH0sICAgICAgIC8qICAx MU1iL3MgKi8KKwl7IDQsRyggNiksIDMsRyg1LjUpLCA0LEcoICAyKSwgMixHKCAxKSB9LCAgICAg ICAvKiAgIDZNYi9zICovCisJeyA0LEcoIDkpLCAzLEcoICA2KSwgNCxHKDUuNSksIDIsRyggMSkg fSwgICAgICAgLyogICA5TWIvcyAqLworCXsgNCxHKDEyKSwgMyxHKCAxMSksIDQsRyg1LjUpLCAy LEcoIDEpIH0sICAgICAgIC8qICAxMk1iL3MgKi8KKwl7IDQsRygxOCksIDMsRyggMTIpLCA0LEco IDExKSwgMixHKCAxKSB9LCAgICAgICAvKiAgMThNYi9zICovCisJeyA0LEcoMjQpLCAzLEcoIDE4 KSwgNCxHKCAxMiksIDIsRyggMSkgfSwgICAgICAgLyogIDI0TWIvcyAqLworCXsgNCxHKDM2KSwg MyxHKCAyNCksIDQsRyggMTgpLCAyLEcoIDEpIH0sICAgICAgIC8qICAzNk1iL3MgKi8KKwl7IDQs Ryg0OCksIDMsRyggMzYpLCA0LEcoIDI0KSwgMixHKCAxKSB9LCAgICAgICAvKiAgNDhNYi9zICov CisJeyA0LEcoNTQpLCAzLEcoIDQ4KSwgNCxHKCAzNiksIDIsRyggMSkgfSwgICAgICAgLyogIDU0 TWIvcyAqLworCisJLyogMSBzdHJlYW0gcmF0ZXMgKi8KKworCXsgMyxORzEoIDYuNSksIDMsTkcx KCA2LjUpLCAwLE5HMSggNi41KSwgMCxORzEoNi41KSB9LCAgLyogNi41TWIvcyAqLworCXsgNCxO RzEoICAxMyksIDMsTkcxKCA2LjUpLCA0LE5HMSggNi41KSwgMCxORzEoNi41KSB9LCAgLyogIDEz TWIvcyAqLworCXsgNCxORzEoMTkuNSksIDMsTkcxKCA2LjUpLCA0LE5HMSggNi41KSwgMCxORzEo Ni41KSB9LCAgLyoxOS41TWIvcyAqLworCXsgNCxORzEoICAyNiksIDMsTkcxKDE5LjUpLCA0LE5H MSggNi41KSwgMixORzEoNi41KSB9LCAgLyogIDI2TWIvcyAqLworCXsgNCxORzEoICAzOSksIDMs TkcxKCAgMjYpLCA0LE5HMSgxOS41KSwgMixORzEoNi41KSB9LCAgLyogIDM5TWIvcyAqLworCXsg NCxORzEoICA1MiksIDMsTkcxKCAgMzkpLCA0LE5HMSggIDI2KSwgMixORzEoNi41KSB9LCAgLyog IDUyTWIvcyAqLworCXsgNCxORzEoNTguNSksIDMsTkcxKCAgNTIpLCA0LE5HMSggIDM5KSwgMixO RzEoIDEzKSB9LCAgLyo1OC41TWIvcyAqLworCXsgNCxORzEoICA2NSksIDMsTkcxKDU4LjUpLCA0 LE5HMSggIDUyKSwgMixORzEoIDEzKSB9LCAgLyogIDY1TWIvcyAqLworCisJLyogMiBzdHJlYW0g cmF0ZXMgKi8KKworCXsgMyxORzIoICAxMyksIDMsTkcyKCAgMTMpLCAwLE5HMiggIDEzKSwgMCxO RzIoIDEzKSB9LCAgLyogIDEzTWIvcyAqLworCXsgNCxORzIoICAyNiksIDMsTkcyKCAgMTMpLCA0 LE5HMiggIDEzKSwgMCxORzIoIDEzKSB9LCAgLyogIDI2TWIvcyAqLworCXsgNCxORzIoICAzOSks IDMsTkcyKCAgMjYpLCA0LE5HMiggIDEzKSwgMixORzIoIDEzKSB9LCAgLyogIDM5TWIvcyAqLwor CXsgNCxORzIoICA1MiksIDMsTkcyKCAgMzkpLCA0LE5HMiggIDI2KSwgMixORzIoIDEzKSB9LCAg LyogIDUyTWIvcyAqLworCXsgNCxORzIoICA3OCksIDMsTkcyKCAgNTIpLCA0LE5HMiggIDM5KSwg MixORzIoIDEzKSB9LCAgLyogIDc4TWIvcyAqLworCXsgNCxORzIoIDEwNCksIDMsTkcyKCAgNzgp LCA0LE5HMiggIDUyKSwgMixORzIoIDEzKSB9LCAgLyogMTA0TWIvcyAqLworCXsgNCxORzIoIDEx NyksIDMsTkcyKCAxMDQpLCA0LE5HMiggIDc4KSwgMixORzIoIDI2KSB9LCAgLyogMTE3TWIvcyAq LworCXsgNCxORzIoIDEzMCksIDMsTkcyKCAxMTcpLCA0LE5HMiggMTA0KSwgMixORzIoIDI2KSB9 LCAgLyogMTMwTWIvcyAqLworCisJLyogMyBzdHJlYW0gcmF0ZXMgKi8KKworCXsgMyxORzMoMTku NSksIDMsTkczKDE5LjUpLCAwLE5HMygxOS41KSwgMCxORzMoMTkuNSkgfSwgIC8qICAxOU1iL3Mg Ki8KKwl7IDMsTkczKCAgMzkpLCAzLE5HMygxOS41KSwgMCxORzMoMTkuNSksIDAsTkczKDE5LjUp IH0sICAvKiAgMzlNYi9zICovCisJeyAzLE5HMyg1OC41KSwgMyxORzMoICAzOSksIDAsTkczKDE5 LjUpLCAwLE5HMygxOS41KSB9LCAgLyogIDU4TWIvcyAqLworCXsgMyxORzMoICA3OCksIDMsTkcz KDU4LjUpLCAwLE5HMyggIDM5KSwgMCxORzMoMTkuNSkgfSwgIC8qICA3OE1iL3MgKi8KKwl7IDMs TkczKCAxMTcpLCAzLE5HMyggIDc4KSwgMCxORzMoNTguNSksIDAsTkczKDE5LjUpIH0sICAvKiAx MTdNYi9zICovCisJeyAzLE5HMyggMTU2KSwgMyxORzMoIDExNyksIDAsTkczKCAgNzgpLCAwLE5H MygxOS41KSB9LCAgLyogIDE1Nk1iL3MgKi8KKwl7IDMsTkczKDE3NS41KSwgMyxORzMoIDE1Niks IDAsTkczKCAxMTcpLCAwLE5HMyggIDM5KSB9LCAgLyogIDE3NU1iL3MgKi8KKwl7IDMsTkczKCAx OTUpLCAzLE5HMyggMTk1KSwgMCxORzMoIDE1NiksIDAsTkczKDU4LjUpIH0sICAvKiAxOTVNYi9z ICovCisKK307CisjdW5kZWYgRworI3VuZGVmIE5HMworI3VuZGVmIE5HMgorI3VuZGVmIE5HMQor CisjZGVmaW5lIEgoX3IpIFwKKyAgICAoKChfcikgPT0gMykgICA/IDAgOiAoKChfcikgPT0gNC41 KSA/IDEgOiAoKChfcikgPT0gNikgID8gMiA6IFwKKyAgICAoKChfcikgPT0gOSkgICA/IDMgOiAo KChfcikgPT0gMTIpICA/IDQgOiAoKChfcikgPT0gMTgpID8gNSA6IFwKKyAgICAoKChfcikgPT0g MjQpICA/IDYgOiAoKChfcikgPT0gMjcpICA/IDcgOiAwKSkpKSkpKSkKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgdHhzY2hlZHVsZSBzZXJpZXNfaGFsZltdID0geworCXsgMyxIKCAzKSwgMyxIKCAgMyks IDAsSCggIDMpLCAwLEgoIDMpIH0sCS8qICAgM01iL3MgKi8KKwl7IDQsSCg0LjUpLDMsSCggIDMp LCA0LEgoICAzKSwgMCxIKCAzKSB9LAkvKiA0LjVNYi9zICovCisJeyA0LEgoIDYpLCAzLEgoICAz KSwgNCxIKCAgMyksIDAsSCggMykgfSwJLyogICA2TWIvcyAqLworCXsgNCxIKCA5KSwgMyxIKCAg NiksIDQsSCggIDMpLCAyLEgoIDMpIH0sCS8qICAgOU1iL3MgKi8KKwl7IDQsSCgxMiksIDMsSCgg IDkpLCA0LEgoICA2KSwgMixIKCAzKSB9LAkvKiAgMTJNYi9zICovCisJeyA0LEgoMTgpLCAzLEgo IDEyKSwgNCxIKCAgOSksIDIsSCggMykgfSwJLyogIDE4TWIvcyAqLworCXsgNCxIKDI0KSwgMyxI KCAxOCksIDQsSCggMTIpLCAyLEgoIDYpIH0sCS8qICAyNE1iL3MgKi8KKwl7IDQsSCgyNyksIDMs SCggMjQpLCA0LEgoIDE4KSwgMixIKDEyKSB9CS8qICAyN01iL3MgKi8KK307CisjdW5kZWYgSAor CisjaWZkZWYgUQorI3VuZGVmIFEKKyNlbmRpZgorI2RlZmluZSBRKF9yKSBcCisgICAgKCgoX3Ip ID09IDEuNSkgPyAwIDogKCgoX3IpID09Mi4yNSkgPyAxIDogKCgoX3IpID09IDMpICA/IDIgOiBc CisgICAgKCgoX3IpID09IDQuNSkgPyAzIDogKCgoX3IpID09ICA2KSAgPyA0IDogKCgoX3IpID09 IDkpICA/IDUgOiBcCisgICAgKCgoX3IpID09IDEyKSAgPyA2IDogKCgoX3IpID09IDEzLjUpPyA3 IDogMCkpKSkpKSkpCitzdGF0aWMgY29uc3Qgc3RydWN0IHR4c2NoZWR1bGUgc2VyaWVzX3F1YXJ0 ZXJbXSA9IHsKKwl7IDMsUSggMS41KSwzLFEoMS41KSwgMCxRKDEuNSksIDAsUSgxLjUpIH0sCS8q IDEuNU1iL3MgKi8KKwl7IDQsUSgyLjI1KSwzLFEoMS41KSwgNCxRKDEuNSksIDAsUSgxLjUpIH0s CS8qMi4yNU1iL3MgKi8KKwl7IDQsUSggICAzKSwzLFEoMS41KSwgNCxRKDEuNSksIDAsUSgxLjUp IH0sCS8qICAgM01iL3MgKi8KKwl7IDQsUSggNC41KSwzLFEoICAzKSwgNCxRKDEuNSksIDIsUSgx LjUpIH0sCS8qIDQuNU1iL3MgKi8KKwl7IDQsUSggICA2KSwzLFEoNC41KSwgNCxRKCAgMyksIDIs USgxLjUpIH0sCS8qICAgNk1iL3MgKi8KKwl7IDQsUSggICA5KSwzLFEoICA2KSwgNCxRKDQuNSks IDIsUSgxLjUpIH0sCS8qICAgOU1iL3MgKi8KKwl7IDQsUSggIDEyKSwzLFEoICA5KSwgNCxRKCAg NiksIDIsUSggIDMpIH0sCS8qICAxMk1iL3MgKi8KKwl7IDQsUSgxMy41KSwzLFEoIDEyKSwgNCxR KCAgOSksIDIsUSggIDYpIH0JLyoxMy41TWIvcyAqLworfTsKKyN1bmRlZiBRCisKKyNlbmRpZiAv KiBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVDVExfU0FNUExFX1RYU0NIRURVTEVTX0hfICovCklu ZGV4OiBzeXMvZGV2L2l3bi9pZl9pd24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L2l3bi9pZl9p d24uYwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL2Rldi9pd24vaWZfaXduLmMJKHdvcmtpbmcg Y29weSkKQEAgLTg3Niw3ICs4NzYsOCBAQAogCWl2cC0+aXZfbmV3c3RhdGUgPSB2YXAtPml2X25l d3N0YXRlOwogCXZhcC0+aXZfbmV3c3RhdGUgPSBpd25fbmV3c3RhdGU7CiAKLQlpZWVlODAyMTFf cmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgw MjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCS8qIENvbXBsZXRlIHNldHVwLiAqLwogCWllZWU4 MDIxMV92YXBfYXR0YWNoKHZhcCwgaXduX21lZGlhX2NoYW5nZSwgaWVlZTgwMjExX21lZGlhX3N0 YXR1cyk7CiAJaWMtPmljX29wbW9kZSA9IG9wbW9kZTsKQEAgLTI0OTksNyArMjUwMCw4IEBACiAJ dWludDY0X3QgYml0bWFwOwogCXVpbnQxNl90IHNzbjsKIAl1aW50OF90IHRpZDsKLQlpbnQgYWNr ZmFpbGNudCA9IDAsIGksIGxhc3RpZHgsIHFpZCwgKnJlcywgc2hpZnQ7CisJLyogaW50IGZhaWxj bnQgPSAwOyAqLworCWludCBpLCBsYXN0aWR4LCBxaWQsICpyZXMsIHNoaWZ0OwogCiAJYnVzX2Rt YW1hcF9zeW5jKHNjLT5yeHEuZGF0YV9kbWF0LCBkYXRhLT5tYXAsIEJVU19ETUFTWU5DX1BPU1RS RUFEKTsKIApAQCAtMjU2MywxMiArMjU2NSwxOCBAQAogCWZvciAoaSA9IDA7IGJpdG1hcDsgaSsr KSB7CiAJCWlmICgoYml0bWFwICYgMSkgPT0gMCkgewogCQkJaWZwLT5pZl9vZXJyb3JzKys7Cisj aWYgMAogCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmksCiAJ CQkgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfRkFJTFVSRSwgJmFja2ZhaWxjbnQsIE5VTEwpOwor I2VuZGlmCisJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCBO VUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8JCiAJCX0gZWxzZSB7CiAJCQlp ZnAtPmlmX29wYWNrZXRzKys7CisjaWYgMAogCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxl dGUobmktPm5pX3ZhcCwgbmksCiAJCQkgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUywg JmFja2ZhaWxjbnQsIE5VTEwpOworI2VuZGlmCisJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21w bGV0ZShuaS0+bmlfdmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNj ICovCiAJCX0KIAkJYml0bWFwID4+PSAxOwogCX0KQEAgLTI4MDcsMTIgKzI4MTUsMTggQEAKIAkg Ki8KIAlpZiAoc3RhdHVzICYgSVdOX1RYX0ZBSUwpIHsKIAkJaWZwLT5pZl9vZXJyb3JzKys7Cisj aWYgMAogCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLAogCQkgICAgSUVF RTgwMjExX1JBVEVDVExfVFhfRkFJTFVSRSwgJmFja2ZhaWxjbnQsIE5VTEwpOworI2VuZGlmCisJ CWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0IG1h a2UgaXQgY29tcGlsZWQuIHFjYyAqLwogCX0gZWxzZSB7CiAJCWlmcC0+aWZfb3BhY2tldHMrKzsK KyNpZiAwCiAJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksCiAJCSAgICBJ RUVFODAyMTFfUkFURUNUTF9UWF9TVUNDRVNTLCAmYWNrZmFpbGNudCwgTlVMTCk7CisjZW5kaWYK KwkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3Qg bWFrZSBpdCBjb21waWxlZC4gcWNjICovCiAJfQogCW1fZnJlZW0obSk7CiAJaWVlZTgwMjExX2Zy ZWVfbm9kZShuaSk7CkluZGV4OiBzeXMvZGV2L2J3aS9pZl9id2kuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz eXMvZGV2L2J3aS9pZl9id2kuYwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL2Rldi9id2kvaWZf YndpLmMJKHdvcmtpbmcgY29weSkKQEAgLTYxNyw3ICs2MTcsOCBAQAogI2lmIDAKIAl2YXAtPml2 X3VwZGF0ZV9iZWFjb24gPSBid2lfYmVhY29uX3VwZGF0ZTsKICNlbmRpZgotCWllZWU4MDIxMV9y YXRlY3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlpZWVlODAy MTFfcmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwogCWllZWU4 MDIxMV92YXBfYXR0YWNoKHZhcCwgYndpX21lZGlhX2NoYW5nZSwgaWVlZTgwMjExX21lZGlhX3N0 YXR1cyk7CkBAIC0zMzc3LDkgKzMzNzgsMTIgQEAKIAkJCSAqIHdlbGwgc28gdG8gYXZvaWQgb3Zl ci1hZ2dyZXNzaXZlIGRvd25zaGlmdGluZyB3ZQogCQkJICogdHJlYXQgYW55IG51bWJlciBvZiBy ZXRyaWVzIGFzICIxIi4KIAkJCSAqLworI2lmIDAKIAkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2Nv bXBsZXRlKHZhcCwgbmksCiAJCQkgICAgKGRhdGFfdHhjbnQgPiAxKSA/IElFRUU4MDIxMV9SQVRF Q1RMX1RYX1NVQ0NFU1MgOgogCQkJICAgICAgICBJRUVFODAyMTFfUkFURUNUTF9UWF9GQUlMVVJF LCAmYWNrZWQsIE5VTEwpOworI2VuZGlmCisJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0 ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KIAkJfQog CiAJCS8qCkluZGV4OiBzeXMvZGV2L2J3bi9pZl9id24uYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2 L2J3bi9pZl9id24uYwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL2Rldi9id24vaWZfYnduLmMJ KHdvcmtpbmcgY29weSkKQEAgLTI5NzAsNyArMjk3MCw4IEBACiAJLyogb3ZlcnJpZGUgbWF4IGFp ZCBzbyBzdGEncyBjYW5ub3QgYXNzb2Mgd2hlbiB3ZSdyZSBvdXQgb2Ygc3RhIGlkJ3MgKi8KIAl2 YXAtPml2X21heF9haWQgPSBCV05fU1RBSURfTUFYOwogCi0JaWVlZTgwMjExX3JhdGVjdGxfaW5p dCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWllZWU4MDIxMV9yYXRlY3Rs X2luaXQodmFwLCAwKTsKIAogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgwMjExX3ZhcF9h dHRhY2godmFwLCBpZWVlODAyMTFfbWVkaWFfY2hhbmdlLApAQCAtOTAyMCwxMSArOTAyMSwxNCBA QAogCQkJCWlmIChtZXRhLT5tdF9pc2xhc3QpIHsKIAkJCQkJbmkgPSBtZXRhLT5tdF9uaTsKIAkJ CQkJdmFwID0gbmktPm5pX3ZhcDsKKyNpZiAwCiAJCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2Nv bXBsZXRlKHZhcCwgbmksCiAJCQkJCSAgICBzdGF0dXMtPmFjayA/CiAJCQkJCSAgICAgIElFRUU4 MDIxMV9SQVRFQ1RMX1RYX1NVQ0NFU1MgOgogCQkJCQkgICAgICBJRUVFODAyMTFfUkFURUNUTF9U WF9GQUlMVVJFLAogCQkJCQkgICAgJnJldHJ5Y250LCAwKTsKKyNlbmRpZgorCQkJCQlpZWVlODAy MTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNv bXBpbGVkLiBxY2MgKi8KIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCXNsb3QgPSBid25fZG1hX25l eHRzbG90KGRyLCBzbG90KTsKQEAgLTkwNDEsMTEgKzkwNDUsMTQgQEAKIAkJCX0KIAkJCW5pID0g dHAtPnRwX25pOwogCQkJdmFwID0gbmktPm5pX3ZhcDsKKyNpZiAwCiAJCQlpZWVlODAyMTFfcmF0 ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLAogCQkJICAgIHN0YXR1cy0+YWNrID8KIAkJCSAgICAg IElFRUU4MDIxMV9SQVRFQ1RMX1RYX1NVQ0NFU1MgOgogCQkJICAgICAgSUVFRTgwMjExX1JBVEVD VExfVFhfRkFJTFVSRSwKIAkJCSAgICAmcmV0cnljbnQsIDApOworI2VuZGlmCisJCQlpZWVlODAy MTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNv bXBpbGVkLiBxY2MgKi8KIAkJfQogCQlid25fcGlvX2hhbmRsZV90eGVvZihtYWMsIHN0YXR1cyk7 CiAJfQpJbmRleDogc3lzL2Rldi91c2Ivd2xhbi9pZl91cmFsLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz L2Rldi91c2Ivd2xhbi9pZl91cmFsLmMJKHJldmlzaW9uIDI1NDgyNikKKysrIHN5cy9kZXYvdXNi L3dsYW4vaWZfdXJhbC5jCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsNyArNTk4LDggQEAKIAogCXVz Yl9jYWxsb3V0X2luaXRfbXR4KCZ1dnAtPnJhdGVjdGxfY2gsICZzYy0+c2NfbXR4LCAwKTsKIAlU QVNLX0lOSVQoJnV2cC0+cmF0ZWN0bF90YXNrLCAwLCB1cmFsX3JhdGVjdGxfdGFzaywgdXZwKTsK LQlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2Fw ICovCisJaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCWllZWU4MDIxMV9yYXRlY3Rs X3NldGludGVydmFsKHZhcCwgMTAwMCAvKiAxIHNlYyAqLyk7CiAKIAkvKiBjb21wbGV0ZSBzZXR1 cCAqLwpJbmRleDogc3lzL2Rldi91c2Ivd2xhbi9pZl9ydW0uYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv ZGV2L3VzYi93bGFuL2lmX3J1bS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBzeXMvZGV2L3VzYi93 bGFuL2lmX3J1bS5jCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNyArNjEzLDggQEAKIAogCXVzYl9j YWxsb3V0X2luaXRfbXR4KCZydnAtPnJhdGVjdGxfY2gsICZzYy0+c2NfbXR4LCAwKTsKIAlUQVNL X0lOSVQoJnJ2cC0+cmF0ZWN0bF90YXNrLCAwLCBydW1fcmF0ZWN0bF90YXNrLCBydnApOwotCWll ZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8K KwlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAJaWVlZTgwMjExX3JhdGVjdGxfc2V0 aW50ZXJ2YWwodmFwLCAxMDAwIC8qIDEgc2VjICovKTsKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwog CWllZWU4MDIxMV92YXBfYXR0YWNoKHZhcCwgaWVlZTgwMjExX21lZGlhX2NoYW5nZSwgaWVlZTgw MjExX21lZGlhX3N0YXR1cyk7CkluZGV4OiBzeXMvZGV2L3VzYi93bGFuL2lmX3J1bi5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHN5cy9kZXYvdXNiL3dsYW4vaWZfcnVuLmMJKHJldmlzaW9uIDI1NDgyNikKKysr IHN5cy9kZXYvdXNiL3dsYW4vaWZfcnVuLmMJKHdvcmtpbmcgY29weSkKQEAgLTgyMCw3ICs4MjAs OCBAQAogCXJ2cC0+bmV3c3RhdGUgPSB2YXAtPml2X25ld3N0YXRlOwogCXZhcC0+aXZfbmV3c3Rh dGUgPSBydW5fbmV3c3RhdGU7CiAKLQlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCk7CisJLyog WFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAsIDAp OwogCWllZWU4MDIxMV9yYXRlY3RsX3NldGludGVydmFsKHZhcCwgMTAwMCAvKiAxIHNlYyAqLyk7 CiAKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwpJbmRleDogc3lzL2Rldi91c2Ivd2xhbi9pZl96eWQu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L3VzYi93bGFuL2lmX3p5ZC5jCShyZXZpc2lvbiAyNTQ4 MjYpCisrKyBzeXMvZGV2L3VzYi93bGFuL2lmX3p5ZC5jCSh3b3JraW5nIGNvcHkpCkBAIC00OTYs NyArNDk2LDggQEAKIAl6dnAtPm5ld3N0YXRlID0gdmFwLT5pdl9uZXdzdGF0ZTsKIAl2YXAtPml2 X25ld3N0YXRlID0genlkX25ld3N0YXRlOwogCi0JaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAp OworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWllZWU4MDIxMV9yYXRlY3RsX2luaXQo dmFwLCAwKTsKIAlpZWVlODAyMTFfcmF0ZWN0bF9zZXRpbnRlcnZhbCh2YXAsIDEwMDAgLyogMSBz ZWMgKi8pOwogCiAJLyogY29tcGxldGUgc2V0dXAgKi8KQEAgLTY2Nyw5ICs2NjgsMTIgQEAKIAkJ CQlpbnQgcmV0cnljbnQgPQogCQkJCSAgICAoaW50KShsZTE2dG9oKHJldHJ5LT5jb3VudCkgJiAw eGZmKTsKIAkJCQkKKyNpZiAwCiAJCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFw LCBuaSwKIAkJCQkgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfRkFJTFVSRSwKIAkJCQkgICAgJnJl dHJ5Y250LCBOVUxMKTsKKyNlbmRpZgorCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRl KHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLwogCQkJCWll ZWU4MDIxMV9mcmVlX25vZGUobmkpOwogCQkJfQogCQkJaWYgKGxlMTZ0b2gocmV0cnktPmNvdW50 KSAmIDB4MTAwKQpJbmRleDogc3lzL2Rldi93cGkvaWZfd3BpLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz L2Rldi93cGkvaWZfd3BpLmMJKHJldmlzaW9uIDI1NDgyNikKKysrIHN5cy9kZXYvd3BpL2lmX3dw aS5jCSh3b3JraW5nIGNvcHkpCkBAIC03ODIsNyArNzgyLDggQEAKIAl3dnAtPm5ld3N0YXRlID0g dmFwLT5pdl9uZXdzdGF0ZTsKIAl2YXAtPml2X25ld3N0YXRlID0gd3BpX25ld3N0YXRlOwogCi0J aWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAq LworCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAkvKiBjb21wbGV0ZSBzZXR1cCAq LwogCWllZWU4MDIxMV92YXBfYXR0YWNoKHZhcCwgaWVlZTgwMjExX21lZGlhX2NoYW5nZSwgaWVl ZTgwMjExX21lZGlhX3N0YXR1cyk7CiAJaWMtPmljX29wbW9kZSA9IG9wbW9kZTsKQEAgLTE1OTYs OCArMTU5NywxMSBAQAogCQlEUFJJTlRGTihXUElfREVCVUdfVFgsICgiJWQgcmV0cmllc1xuIiwg c3RhdC0+bnRyaWVzKSk7CiAJCXJldHJ5Y250ID0gMTsKIAl9CisjaWYgMAogCWllZWU4MDIxMV9y YXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksIElFRUU4MDIxMV9SQVRFQ1RMX1RYX1NVQ0NFU1Ms CiAJICAgICZyZXRyeWNudCwgTlVMTCk7CisjZW5kaWYKKwlpZWVlODAyMTFfcmF0ZWN0bF90eF9j b21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8K IAogCS8qIFhYWCBvZXJyb3JzIHNob3VsZCBvbmx5IGNvdW50IGVycm9ycyAhbWF4dHJpZXMgKi8K IAlpZiAoKGxlMzJ0b2goc3RhdC0+c3RhdHVzKSAmIDB4ZmYpICE9IDEpCkluZGV4OiBzeXMvZGV2 L3JhbC9ydDI1NjAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L3JhbC9ydDI1NjAuYwkocmV2aXNp b24gMjU0ODI2KQorKysgc3lzL2Rldi9yYWwvcnQyNTYwLmMJKHdvcmtpbmcgY29weSkKQEAgLTQy Niw3ICs0MjYsOCBAQAogCXZhcC0+aXZfbmV3c3RhdGUgPSBydDI1NjBfbmV3c3RhdGU7CiAJdmFw LT5pdl91cGRhdGVfYmVhY29uID0gcnQyNTYwX2JlYWNvbl91cGRhdGU7CiAKLQlpZWVlODAyMTFf cmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgw MjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgw MjExX3ZhcF9hdHRhY2godmFwLCBpZWVlODAyMTFfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVk aWFfc3RhdHVzKTsKIAlpZiAoVEFJTFFfRklSU1QoJmljLT5pY192YXBzKSA9PSB2YXApCkBAIC05 NTUsOSArOTU2LDEzIEBACiAKIAkJCURQUklOVEZOKHNjLCAxMCwgIiVzXG4iLCAiZGF0YSBmcmFt ZSBzZW50IHN1Y2Nlc3NmdWxseSIpOwogCQkJaWYgKGRhdGEtPnJpeCAhPSBJRUVFODAyMTFfRklY RURfUkFURV9OT05FKQorCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmks IE5VTEwpOyAvKiBqdXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLworI2lmIDAKIAkJCQlpZWVl ODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLAogCQkJCSAgICBJRUVFODAyMTFfUkFU RUNUTF9UWF9TVUNDRVNTLAogCQkJCSAgICAmcmV0cnljbnQsIE5VTEwpOworI2VuZGlmCisKIAkJ CWlmcC0+aWZfb3BhY2tldHMrKzsKIAkJCWJyZWFrOwogCkBAIC05NjcsOSArOTcyLDEyIEBACiAJ CQlEUFJJTlRGTihzYywgOSwgImRhdGEgZnJhbWUgc2VudCBhZnRlciAldSByZXRyaWVzXG4iLAog CQkJICAgIHJldHJ5Y250KTsKIAkJCWlmIChkYXRhLT5yaXggIT0gSUVFRTgwMjExX0ZJWEVEX1JB VEVfTk9ORSkKKwkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxM KTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KKyNpZiAwCiAJCQkJaWVlZTgwMjEx X3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwKIAkJCQkgICAgSUVFRTgwMjExX1JBVEVDVExf VFhfU1VDQ0VTUywKIAkJCQkgICAgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRpZgogCQkJaWZwLT5p Zl9vcGFja2V0cysrOwogCQkJYnJlYWs7CiAKQEAgLTk3OSw5ICs5ODcsMTIgQEAKIAkJCURQUklO VEZOKHNjLCA5LCAiZGF0YSBmcmFtZSBmYWlsZWQgYWZ0ZXIgJWQgcmV0cmllc1xuIiwKIAkJCSAg ICByZXRyeWNudCk7CiAJCQlpZiAoZGF0YS0+cml4ICE9IElFRUU4MDIxMV9GSVhFRF9SQVRFX05P TkUpCisJCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8q IGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCisjaWYgMAogCQkJCWllZWU4MDIxMV9yYXRl Y3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksCiAJCQkJICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZB SUxVUkUsCiAJCQkJICAgICZyZXRyeWNudCwgTlVMTCk7CisjZW5kaWYKIAkJCWlmcC0+aWZfb2Vy cm9ycysrOwogCQkJYnJlYWs7CiAKSW5kZXg6IHN5cy9kZXYvcmFsL3J0MjY2MS5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHN5cy9kZXYvcmFsL3J0MjY2MS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBzeXMvZGV2 L3JhbC9ydDI2NjEuYwkod29ya2luZyBjb3B5KQpAQCAtNDIzLDcgKzQyMyw4IEBACiAJdmFwLT5p dl91cGRhdGVfYmVhY29uID0gcnQyNjYxX2JlYWNvbl91cGRhdGU7CiAjZW5kaWYKIAotCWllZWU4 MDIxMV9yYXRlY3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlp ZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAJLyogY29tcGxldGUgc2V0dXAgKi8KIAlp ZWVlODAyMTFfdmFwX2F0dGFjaCh2YXAsIGllZWU4MDIxMV9tZWRpYV9jaGFuZ2UsIGllZWU4MDIx MV9tZWRpYV9zdGF0dXMpOwogCWlmIChUQUlMUV9GSVJTVCgmaWMtPmljX3ZhcHMpID09IHZhcCkK QEAgLTkwNSw5ICs5MDYsMTIgQEAKIAkJCURQUklOVEZOKHNjLCAxMCwgImRhdGEgZnJhbWUgc2Vu dCBzdWNjZXNzZnVsbHkgYWZ0ZXIgIgogCQkJICAgICIlZCByZXRyaWVzXG4iLCByZXRyeWNudCk7 CiAJCQlpZiAoZGF0YS0+cml4ICE9IElFRUU4MDIxMV9GSVhFRF9SQVRFX05PTkUpCisJCQkJaWVl ZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBp dCBjb21waWxlZC4gcWNjICovCisjaWYgMAogCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBs ZXRlKHZhcCwgbmksCiAJCQkJICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX1NVQ0NFU1MsCiAJCQkJ ICAgICZyZXRyeWNudCwgTlVMTCk7CisjZW5kaWYKIAkJCWlmcC0+aWZfb3BhY2tldHMrKzsKIAkJ CWJyZWFrOwogCkBAIC05MTcsOSArOTIxLDEyIEBACiAJCQlEUFJJTlRGTihzYywgOSwgIiVzXG4i LAogCQkJICAgICJzZW5kaW5nIGRhdGEgZnJhbWUgZmFpbGVkICh0b28gbXVjaCByZXRyaWVzKSIp OwogCQkJaWYgKGRhdGEtPnJpeCAhPSBJRUVFODAyMTFfRklYRURfUkFURV9OT05FKQorCQkJCWll ZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0IG1ha2Ug aXQgY29tcGlsZWQuIHFjYyAqLworI2lmIDAKIAkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21w bGV0ZSh2YXAsIG5pLAogCQkJCSAgICBJRUVFODAyMTFfUkFURUNUTF9UWF9GQUlMVVJFLAogCQkJ CSAgICAmcmV0cnljbnQsIE5VTEwpOworI2VuZGlmCiAJCQlpZnAtPmlmX29lcnJvcnMrKzsKIAkJ CWJyZWFrOwogCkluZGV4OiBzeXMvZGV2L3JhbC9ydDI4NjAuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv ZGV2L3JhbC9ydDI4NjAuYwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL2Rldi9yYWwvcnQyODYw LmMJKHdvcmtpbmcgY29weSkKQEAgLTQ4NCw3ICs0ODQsOCBAQAogCS8qIEhXIHN1cHBvcnRzIHVw IHRvIDI1NSBTVEFzICgwLTI1NCkgaW4gSG9zdEFQIGFuZCBJQlNTIG1vZGVzICovCiAJdmFwLT5p dl9tYXhfYWlkID0gbWluKElFRUU4MDIxMV9BSURfTUFYLCBSVDI4NjBfV0NJRF9NQVgpOwogCi0J aWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAq LworCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAkvKiBjb21wbGV0ZSBzZXR1cCAq LwogCWllZWU4MDIxMV92YXBfYXR0YWNoKHZhcCwgaWVlZTgwMjExX21lZGlhX2NoYW5nZSwgaWVl ZTgwMjExX21lZGlhX3N0YXR1cyk7CiAJaWYgKFRBSUxRX0ZJUlNUKCZpYy0+aWNfdmFwcykgPT0g dmFwKQpAQCAtMTEyMSwxMSArMTEyMiwxNyBAQAogCQkJCXJldHJ5Y250ID0gMTsKIAkJCWVsc2UK IAkJCQlyZXRyeWNudCA9IDA7CisJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+ bmlfdmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCisjaWYg MAogCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmksCiAJCQkg ICAgSUVFRTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUywgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRp ZgogCQl9IGVsc2UgeworCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3Zh cCwgbmksIE5VTEwpOyAvKiBqdXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLworI2lmIDAKIAkJ CWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLAogCQkJICAgIElF RUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxVUkUsICZyZXRyeWNudCwgTlVMTCk7CisjZW5kaWYKIAkJ CWlmcC0+aWZfb2Vycm9ycysrOwogCQl9CiAJfQpJbmRleDogc3lzL2Rldi9hdGgvaWZfYXRoX3R4 LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9hdGgvaWZfYXRoX3R4LmMJKHJldmlzaW9uIDI1NDgy NikKKysrIHN5cy9kZXYvYXRoL2lmX2F0aF90eC5jCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3 Miw4IEBACiAKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfdmFyLmg+CiAjaW5jbHVkZSA8 bmV0ODAyMTEvaWVlZTgwMjExX3JlZ2RvbWFpbi5oPgorCisjaW5jbHVkZSA8bmV0ODAyMTEvaWVl ZTgwMjExX3JhdGVjdGwuaD4KICNpZmRlZiBJRUVFODAyMTFfU1VQUE9SVF9TVVBFUkcKICNpbmNs dWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfc3VwZXJnLmg+CiAjZW5kaWYKQEAgLTEzOTUsNyArMTM5 Nyw3IEBACiAKIAkvKiBHZXQgcmlkIG9mIGFueSBwcmV2aW91cyBzdGF0ZSAqLwogCWJ6ZXJvKGJm LT5iZl9zdGF0ZS5iZnNfcmMsIHNpemVvZihiZi0+YmZfc3RhdGUuYmZzX3JjKSk7Ci0KKyNpZiAw CiAJQVRIX05PREVfTE9DSyhBVEhfTk9ERShiZi0+YmZfbm9kZSkpOwogCWF0aF9yYXRlX2ZpbmRy YXRlKHNjLCBBVEhfTk9ERShiZi0+YmZfbm9kZSksIGJmLT5iZl9zdGF0ZS5iZnNfc2hwcmVhbSwK IAkgICAgYmYtPmJmX3N0YXRlLmJmc19wa3RsZW4sICZyaXgsICZ0cnkwLCAmcmF0ZSk7CkBAIC0x NDA5LDcgKzE0MTEsMjEgQEAKIAkJYXRoX3JhdGVfZ2V0eHR4cmF0ZXMoc2MsIEFUSF9OT0RFKGJm LT5iZl9ub2RlKSwgcml4LAogCQkgICAgYmYtPmJmX3N0YXRlLmJmc19yYyk7CiAJQVRIX05PREVf VU5MT0NLKEFUSF9OT0RFKGJmLT5iZl9ub2RlKSk7CisjZW5kaWYKKwkvKiBuZXQ4MDIxMSByYXRl Y3RsICovCisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gSUVFRTgwMjExX1JB VEVDVExfSU5GTyhiZi0+YmZfbSk7CisJc3RydWN0IGllZWU4MDIxMV9yY19zZXJpZXMgKnJjID0g cmNfaW5mby0+aXJpX3JjOworCXN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkgPSBiZi0+YmZfbm9k ZTsKKwliemVybyhyY19pbmZvLCBzaXplb2YocmNfaW5mbykpOworCWlmIChiZi0+YmZfc3RhdGUu YmZzX3NocHJlYW0pCisJCXJjX2luZm8tPmlyaV9mbGFncyB8PSBJRUVFODAyMTFfUkFURUNUTF9J TkZPX1NQOwogCisJaWVlZTgwMjExX3JhdGVjdGxfcmF0ZXMobmksIHJjX2luZm8pOworCisJcml4 ID0gcmNbMF0ucml4OworCXRyeTAgPSByY1swXS50cmllczsKKwlyYXRlID0gbmktPm5pX3R4cmF0 ZTsKKwogCXNjLT5zY190eHJpeCA9IHJpeDsJLyogZm9yIExFRCBibGlua2luZyAqLwogCXNjLT5z Y19sYXN0ZGF0YXJpeCA9IHJpeDsJLyogZm9yIGZhc3QgZnJhbWVzICovCiAJYmYtPmJmX3N0YXRl LmJmc190cnkwID0gdHJ5MDsKQEAgLTQxMDgsMTAgKzQxMjQsMTkgQEAKIAkgKiBkdXJpbmcgYSBo dyBxdWV1ZSBkcmFpbiBhbmQgdGhlIGZyYW1lIHdhbnRlZCBhbiBBQ0suCiAJICovCiAJaWYgKGZh aWwgPT0gMCAmJiAoKGJmLT5iZl9zdGF0ZS5iZnNfdHhmbGFncyAmIEhBTF9UWERFU0NfTk9BQ0sp ID09IDApKQorCXsKIAkJYXRoX3R4X3VwZGF0ZV9yYXRlY3RybChzYywgbmksIGJmLT5iZl9zdGF0 ZS5iZnNfcmMsCiAJCSAgICB0cywgYmYtPmJmX3N0YXRlLmJmc19wa3RsZW4sCiAJCSAgICAxLCAo dHMtPnRzX3N0YXR1cyA9PSAwKSA/IDAgOiAxKTsKIAorCQlzdHJ1Y3QgaWVlZTgwMjExX3JjX2lu Zm8gKnJjX2luZm8gPSBJRUVFODAyMTFfUkFURUNUTF9JTkZPKGJmLT5iZl9tKTsKKwkJaWVlZTgw MjExX3JhdGVjdGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCQkxLCAodHMtPnRzX3N0YXR1cyA9 PSAwID8gMCA6IDEpLCBiZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKKwkJCQl0cy0+dHNfc2hvcnRy ZXRyeSwgdHMtPnRzX2xvbmdyZXRyeSwKKwkJCQl0cy0+dHNfZmluYWx0c2ksIHRzLT50c19yYXRl KTsKKwkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmksIHJjX2lu Zm8pOworCX0KKwogCWF0aF90eF9kZWZhdWx0X2NvbXAoc2MsIGJmLCBmYWlsKTsKIH0KIApAQCAt NDQ5MCw2ICs0NTE1LDE0IEBACiAJICAgIGJmX2ZpcnN0LT5iZl9zdGF0ZS5iZnNfcGt0bGVuLAog CSAgICBiZl9maXJzdC0+YmZfc3RhdGUuYmZzX25mcmFtZXMsIGJmX2ZpcnN0LT5iZl9zdGF0ZS5i ZnNfbmZyYW1lcyk7CiAKKwlzdHJ1Y3QgYXRoX3R4X3N0YXR1cyB0cyA9IGJmX2ZpcnN0LT5iZl9z dGF0dXMuZHNfdHhzdGF0OworCXN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbyA9IElF RUU4MDIxMV9SQVRFQ1RMX0lORk8oYmZfZmlyc3QtPmJmX20pOworCWllZWU4MDIxMV9yYXRlY3Rs X3JjX2luZm9fc2V0KHJjX2luZm8sCisJCQliZl9maXJzdC0+YmZfc3RhdGUuYmZzX25mcmFtZXMs IGJmX2ZpcnN0LT5iZl9zdGF0ZS5iZnNfbmZyYW1lcywKKwkJCWJmX2ZpcnN0LT5iZl9zdGF0ZS5i ZnNfcGt0bGVuLAorCQkJdHMudHNfc2hvcnRyZXRyeSwgdHMudHNfbG9uZ3JldHJ5LAorCQkJdHMu dHNfZmluYWx0c2ksIHRzLnRzX3JhdGUpOworCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRl KG5pLT5uaV92YXAsIG5pLCByY19pbmZvKTsKIAlBVEhfVFhfTE9DSyhzYyk7CiAJdGFwID0gYXRo X3R4X2dldF90eF90aWQoYW4sIHRpZC0+dGlkKTsKIAlzYy0+c2Nfc3RhdHMuYXN0X3R4X2FnZ3Jf ZmFpbGFsbCsrOwpAQCAtNDg3Myw5ICs0OTA2LDE4IEBACiAJICogY29udHJvbCBjb2RlLgogCSAq LwogCWlmIChmYWlsID09IDApCisJewkKIAkJYXRoX3R4X3VwZGF0ZV9yYXRlY3RybChzYywgbmks IHJjLCAmdHMsIHBrdGxlbiwgbmZyYW1lcywKIAkJICAgIG5iYWQpOwogCisJCXN0cnVjdCBpZWVl ODAyMTFfcmNfaW5mbyAqcmNfaW5mbyA9IElFRUU4MDIxMV9SQVRFQ1RMX0lORk8oYmYtPmJmX20p OworCQlpZWVlODAyMTFfcmF0ZWN0bF9yY19pbmZvX3NldChyY19pbmZvLAorCQkJCW5mcmFtZXMs IG5iYWQsIHBrdGxlbiwKKwkJCQl0cy50c19zaG9ydHJldHJ5LCB0cy50c19sb25ncmV0cnksCisJ CQkJdHMudHNfZmluYWx0c2ksIHRzLnRzX3JhdGUpOworCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9j b21wbGV0ZShuaS0+bmlfdmFwLCBuaSwgcmNfaW5mbyk7CisJfQorCiAJLyoKIAkgKiBzZW5kIGJh ciBpZiB3ZSBkcm9wcGVkIGFueSBmcmFtZXMKIAkgKi8KQEAgLTQ5NjIsMTEgKzUwMDQsMTkgQEAK IAkgKiBEbyBpdCBvdXRzaWRlIG9mIHRoZSBUWFEgbG9jay4KIAkgKi8KIAlpZiAoZmFpbCA9PSAw ICYmICgoYmYtPmJmX3N0YXRlLmJmc190eGZsYWdzICYgSEFMX1RYREVTQ19OT0FDSykgPT0gMCkp CisJewkKIAkJYXRoX3R4X3VwZGF0ZV9yYXRlY3RybChzYywgbmksIGJmLT5iZl9zdGF0ZS5iZnNf cmMsCiAJCSAgICAmYmYtPmJmX3N0YXR1cy5kc190eHN0YXQsCiAJCSAgICBiZi0+YmZfc3RhdGUu YmZzX3BrdGxlbiwKIAkJICAgIDEsICh0cy50c19zdGF0dXMgPT0gMCkgPyAwIDogMSk7CiAKKwkJ c3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gSUVFRTgwMjExX1JBVEVDVExfSU5G TyhiZi0+YmZfbSk7CisJCWllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fc2V0KHJjX2luZm8sCisJ CQkJMSwgKHRzLnRzX3N0YXR1cyA9PSAwID8gMCA6IDEpLCBiZi0+YmZfc3RhdGUuYmZzX3BrdGxl biwKKwkJCQl0cy50c19zaG9ydHJldHJ5LCB0cy50c19sb25ncmV0cnksCisJCQkJdHMudHNfZmlu YWx0c2ksIHRzLnRzX3JhdGUpOworCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+ bmlfdmFwLCBuaSwgcmNfaW5mbyk7CisJfQogCS8qCiAJICogVGhpcyBpcyBjYWxsZWQgZWFybHkg c28gYXRpZC0+aHdxX2RlcHRoIGNhbiBiZSB0cmFja2VkLgogCSAqIFRoaXMgdW5mb3J0dW5hdGVs eSBtZWFucyB0aGF0IGl0J3MgcmVsZWFzZWQgYW5kIHJlZ3JhYmJlZApJbmRleDogc3lzL2Rldi9h dGgvaWZfYXRoX3R4X2h0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9hdGgvaWZfYXRoX3R4X2h0 LmMJKHJldmlzaW9uIDI1NDgyNikKKysrIHN5cy9kZXYvYXRoL2lmX2F0aF90eF9odC5jCSh3b3Jr aW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4IEBACiAKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAy MTFfdmFyLmg+CiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JlZ2RvbWFpbi5oPgorCisj aW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KICNpZmRlZiBJRUVFODAyMTFf U1VQUE9SVF9TVVBFUkcKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfc3VwZXJnLmg+CiAj ZW5kaWYKQEAgLTIyMSwxMyArMjIzLDM0IEBACiB2b2lkCiBhdGhfdHhfcmF0ZV9maWxsX3JjZmxh Z3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZikKIHsKLQlzdHJ1Y3Qg aWVlZTgwMjExX25vZGUgKm5pID0gYmYtPmJmX25vZGU7Ci0Jc3RydWN0IGllZWU4MDIxMWNvbSAq aWMgPSBuaS0+bmlfaWM7CisJLy8gc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSA9IGJmLT5iZl9u b2RlOworCS8vIHN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gbmktPm5pX2ljOwogCWNvbnN0IEhB TF9SQVRFX1RBQkxFICpydCA9IHNjLT5zY19jdXJyYXRlczsKLQlzdHJ1Y3QgYXRoX3JjX3Nlcmll cyAqcmMgPSBiZi0+YmZfc3RhdGUuYmZzX3JjOworCXN0cnVjdCBhdGhfcmNfc2VyaWVzICphdGhf cmMgPSBiZi0+YmZfc3RhdGUuYmZzX3JjOworCXN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNf aW5mbyA9IElFRUU4MDIxMV9SQVRFQ1RMX0lORk8oYmYtPmJmX20pOworCXN0cnVjdCBpZWVlODAy MTFfcmNfc2VyaWVzICpyYyA9IHJjX2luZm8tPmlyaV9yYzsKIAl1aW50OF90IHJhdGU7CiAJaW50 IGk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX1JBVEVDVExfTlVNOyBpKyspIHsKKwkJ aWYgKHJjW2ldLnRyaWVzID09IDApCisJCQljb250aW51ZTsKKworCQlyYXRlID0gcnQtPmluZm9b cmNbaV0ucml4XS5yYXRlQ29kZTsKKwkJaWYgKHJjW2ldLmZsYWdzICYgSUVFRTgwMjExX1JBVEVD VExfRkxBR19TUCkKKwkJCXJhdGUgfD0gcnQtPmluZm9bcmNbaV0ucml4XS5zaG9ydFByZWFtYmxl OworCisJCXJjW2ldLnJhdGVjb2RlID0gcmF0ZTsKKworCQlhdGhfcmNbaV0ucml4ID0gcmNbaV0u cml4OworCQlhdGhfcmNbaV0udHJpZXMgPSByY1tpXS50cmllczsKKwkJYXRoX3JjW2ldLmZsYWdz ID0gcmNbaV0uZmxhZ3M7CisJCWF0aF9yY1tpXS5yYXRlY29kZSA9IHJjW2ldLnJhdGVjb2RlOwor CQlhdGhfcmNbaV0udHhfcG93ZXJfY2FwID0gcmNbaV0udHhfcG93ZXJfY2FwOworCQlhdGhfcmNb aV0ubWF4NG1zZnJhbWVsZW4gPSByY1tpXS5tYXg0bXNmcmFtZWxlbjsKKwl9CisKKyNpZiAwCiAJ Zm9yIChpID0gMDsgaSA8IEFUSF9SQ19OVU07IGkrKykgewogCQlyY1tpXS5mbGFncyA9IDA7CiAJ CWlmIChyY1tpXS50cmllcyA9PSAwKQpAQCAtMzI1LDYgKzM0OCw3IEBACiAJCSAgICAiJXM6IGk9 JWQsIHJhdGU9MHgleCwgZmxhZ3M9MHgleCwgbWF4NG1zPSVkXG4iLAogCQkgICAgX19mdW5jX18s IGksIHJhdGUsIHJjW2ldLmZsYWdzLCByY1tpXS5tYXg0bXNmcmFtZWxlbik7CiAJfQorI2VuZGlm CiB9CiAKIC8qCkluZGV4OiBzeXMvZGV2L2F0aC9pZl9hdGguYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv ZGV2L2F0aC9pZl9hdGguYwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL2Rldi9hdGgvaWZfYXRo LmMJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAKIAogI2luY2x1ZGUgPG5ldDgwMjEx L2llZWU4MDIxMV92YXIuaD4KICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmVnZG9tYWlu Lmg+CisKKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgogI2lmZGVmIElF RUU4MDIxMV9TVVBQT1JUX1NVUEVSRwogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9zdXBl cmcuaD4KICNlbmRpZgpAQCAtMTM4MCw2ICsxMzgyLDE1IEBACiAJfQogCUFUSF9VTkxPQ0soc2Mp OwogCisJdWludDMyX3QgY2FwcyA9IDA7CisJaWYgKHNjLT5zY19tcnJldHJ5KQorCQljYXBzIHw9 IElFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NUlI7CisJaWYgKHNjLT5zY19tcnJwcm90KQorCQljYXBz IHw9IElFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NUlJQUk9UOworCWlmIChzYy0+c2NfdHhjaGFpbm1h c2sgPiAxKQorCQljYXBzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NVUxUWENIQUlOOworCisJ aWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAsIGNhcHMpOwogCS8qIGNvbXBsZXRlIHNldHVwICov CiAJaWVlZTgwMjExX3ZhcF9hdHRhY2godmFwLCBhdGhfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFf bWVkaWFfc3RhdHVzKTsKIAlyZXR1cm4gdmFwOwpAQCAtMTQxNCw2ICsxNDI1LDcgQEAKIAkJYXRo X3N0b3ByZWN2KHNjLCAxKTsJCS8qIHN0b3AgcmVjdiBzaWRlICovCiAJfQogCisJaWVlZTgwMjEx X3JhdGVjdGxfZGVpbml0KHZhcCk7CiAJaWVlZTgwMjExX3ZhcF9kZXRhY2godmFwKTsKIAogCS8q CkBAIC00MDcyLDYgKzQwODQsMTMgQEAKIAkJCSAgICAgYmYtPmJmX3N0YXRlLmJmc19yYywgdHMs CiAJCQkgICAgYmYtPmJmX3N0YXRlLmJmc19wa3RsZW4sIDEsCiAJCQkgICAgKHRzLT50c19zdGF0 dXMgPT0gMCA/IDAgOiAxKSk7CisKKwkJCXN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5m byA9IElFRUU4MDIxMV9SQVRFQ1RMX0lORk8oYmYtPmJmX20pOworCQkJaWVlZTgwMjExX3JhdGVj dGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCQkJMSwgKHRzLT50c19zdGF0dXMgPT0gMCA/IDAg OiAxKSwgYmYtPmJmX3N0YXRlLmJmc19wa3RsZW4sCisJCQkJCXRzLT50c19zaG9ydHJldHJ5LCB0 cy0+dHNfbG9uZ3JldHJ5LAorCQkJCQl0cy0+dHNfZmluYWx0c2ksIHRzLT50c19yYXRlKTsKKwkJ CWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCByY19pbmZvKTsK IAkJfQogCQlhdGhfdHhfZGVmYXVsdF9jb21wKHNjLCBiZiwgMCk7CiAJfSBlbHNlCg== --001a11c3d3f4d645aa04e56a43e1-- From owner-freebsd-wireless@FreeBSD.ORG Mon Sep 2 17:56:14 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 2A6088AE for ; Mon, 2 Sep 2013 17:56:14 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-pb0-x229.google.com (mail-pb0-x229.google.com [IPv6:2607:f8b0:400e:c01::229]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id EB1D92685 for ; Mon, 2 Sep 2013 17:56:13 +0000 (UTC) Received: by mail-pb0-f41.google.com with SMTP id rp2so5006554pbb.14 for ; Mon, 02 Sep 2013 10:56:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=BFWKhQY3EzJjAh1io/55Am6b5O3Q/+TVC+HoOo6EE8k=; b=h7O61O0Lh+tweN3JKAjki8U5FxI9ENvVo3ZQkmnEO7HvRC6GsVh4FACx1rHC8EmNkK uhehw+MVnVrbdrhnw0LS8BVrleT2RFf4s2DFiUX5WuDJsbicV4ILf3SGRGisMxMIXtPj RcfAADJIca0pAtKoU7cuuPn0qSgtwr6erHr21yOEVU/Kif9PAGSxDEfbW3hwRcacI3xJ 8NPrU2rSTGYVmt1tMmFud5FGoX5DvBVC4KokFQheAz+sjR0hOQr3664kabLOeTVbJ0/o VcesYgx+Iu5JVAQv/LmnB8ysoDvrACxomeRMVXVKpdk2djuzBSr9rSK2moBLqF8X6VZT 6O9g== MIME-Version: 1.0 X-Received: by 10.68.254.166 with SMTP id aj6mr3181746pbd.193.1378144573322; Mon, 02 Sep 2013 10:56:13 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.70.126.71 with HTTP; Mon, 2 Sep 2013 10:56:13 -0700 (PDT) In-Reply-To: References: Date: Mon, 2 Sep 2013 10:56:13 -0700 X-Google-Sender-Auth: CpSxqoa811K_IWSLC6movD97Z40 Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Adrian Chadd To: Chenchong Qin Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Sep 2013 17:56:14 -0000 Hi! You can declare an mbuf tag and use that. Look at M_TXCB in net80211 and how mbuf tags are added. I've long thought about adding a net80211 mbuf tag to represent -all- of the tx related state - TX callback, rate control, rate completion, aggregation state, retry count, etc. That way all the drivers can use it. -adrian From owner-freebsd-wireless@FreeBSD.ORG Tue Sep 3 01:29:07 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 37A6EE9C; Tue, 3 Sep 2013 01:29:07 +0000 (UTC) (envelope-from qinchenchong@gmail.com) Received: from mail-vc0-x22b.google.com (mail-vc0-x22b.google.com [IPv6:2607:f8b0:400c:c03::22b]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id CEC1729D6; Tue, 3 Sep 2013 01:29:06 +0000 (UTC) Received: by mail-vc0-f171.google.com with SMTP id ij15so3389222vcb.2 for ; Mon, 02 Sep 2013 18:29:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=J8ujkAoUkbOTxcw2symK/MX0vDj8HHDRmb37YQNGbCg=; b=yX8EcwH7IGwzpcfCvrBtEDe59XZfSwvfoCPBXQsBRxPOA6Ntqxvkd4yVdE3gGwIOlA ef1HEY9/TjPwFU4/gqomFja6aVMFGr5XN8PVXWBRYBc+eysCcdYNqvU+T4pYaYxLNewc dl5BXqPpA3TEfA/TBJoy69yVgUez3m/yscocJBgfZiHMSciL2fRyDeUCqsFZ3+g92y/B kRee+qH6aKfGT/HmlnrfU14xNKiL/CAokrSq0kfRVKTd09BVYl/acfYaD9hMpBSVzvdm CPhqeE8/V+k4Ly6tKpd9RMVUWEYFPaXYazfNFNTfvOZTop1W9Z5v7vAHF24iI1tVvhge 6kMQ== MIME-Version: 1.0 X-Received: by 10.52.180.229 with SMTP id dr5mr20945770vdc.20.1378171745925; Mon, 02 Sep 2013 18:29:05 -0700 (PDT) Received: by 10.220.182.68 with HTTP; Mon, 2 Sep 2013 18:29:05 -0700 (PDT) In-Reply-To: References: Date: Tue, 3 Sep 2013 09:29:05 +0800 Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Chenchong Qin To: Adrian Chadd Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Sep 2013 01:29:07 -0000 OK! Thanks! :-) Chenchong On Tue, Sep 3, 2013 at 1:56 AM, Adrian Chadd wrote: > Hi! > > You can declare an mbuf tag and use that. Look at M_TXCB in net80211 and > how mbuf tags are added. > > I've long thought about adding a net80211 mbuf tag to represent -all- of > the tx related state - TX callback, rate control, rate completion, > aggregation state, retry count, etc. That way all the drivers can use it. > > > > -adrian > > From owner-freebsd-wireless@FreeBSD.ORG Fri Sep 6 20:15:39 2013 Return-Path: Delivered-To: freebsd-wireless@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 21BD181A; Fri, 6 Sep 2013 20:15:39 +0000 (UTC) (envelope-from linimon@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id ECA7921A0; Fri, 6 Sep 2013 20:15:38 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.7/8.14.7) with ESMTP id r86KFcnq082835; Fri, 6 Sep 2013 20:15:38 GMT (envelope-from linimon@freefall.freebsd.org) Received: (from linimon@localhost) by freefall.freebsd.org (8.14.7/8.14.7/Submit) id r86KFcFH082834; Fri, 6 Sep 2013 20:15:38 GMT (envelope-from linimon) Date: Fri, 6 Sep 2013 20:15:38 GMT Message-Id: <201309062015.r86KFcFH082834@freefall.freebsd.org> To: linimon@FreeBSD.org, freebsd-bugs@FreeBSD.org, freebsd-wireless@FreeBSD.org From: linimon@FreeBSD.org Subject: Re: kern/181898: [iwn] [patch] Centrino Advanced-N 6235 with latest iwn(4) X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Sep 2013 20:15:39 -0000 Old Synopsis: Centrino Advanced-N 6235 with latest iwn(4) New Synopsis: [iwn] [patch] Centrino Advanced-N 6235 with latest iwn(4) Responsible-Changed-From-To: freebsd-bugs->freebsd-wireless Responsible-Changed-By: linimon Responsible-Changed-When: Fri Sep 6 20:15:19 UTC 2013 Responsible-Changed-Why: Over to maintainer(s). http://www.freebsd.org/cgi/query-pr.cgi?pr=181898